[FIX] account, account_fleet: missing vehicle in adjust entry
Create a Vendor Bill Add on the invoice line a vehicle Confirm In "Journal Items" tab hit 'Cut-Off' Fill the necessary info and create journal items Issue: Created journal items will not have the vehicle id opw-3802919 closes odoo/odoo#163054 X-original-commit: 68c21eca068b1762392466101b0b4c220bce7ab5 Signed-off-by: Habib Ayob (ayh) <ayh@odoo.com> Signed-off-by: Andrea Grazioso (agr) <agr@odoo.com>
This commit is contained in:
@@ -248,6 +248,59 @@ class AutomaticEntryWizard(models.TransientModel):
|
||||
'line_ids': [(0, 0, line) for line in line_vals],
|
||||
}]
|
||||
|
||||
def _get_move_line_dict_vals_change_period(self, aml, date):
|
||||
# account.move.line data
|
||||
accrual_account = self.revenue_accrual_account if self.account_type == 'income' else self.expense_accrual_account
|
||||
reported_debit = aml.company_id.currency_id.round((self.percentage / 100) * aml.debit)
|
||||
reported_credit = aml.company_id.currency_id.round((self.percentage / 100) * aml.credit)
|
||||
reported_amount_currency = aml.currency_id.round((self.percentage / 100) * aml.amount_currency)
|
||||
|
||||
if date == 'new_date':
|
||||
return [
|
||||
(0, 0, {
|
||||
'name': aml.name or '',
|
||||
'debit': reported_debit,
|
||||
'credit': reported_credit,
|
||||
'amount_currency': reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': aml.account_id.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': self._format_strings(_('{percent}% recognized on {new_date}'), aml.move_id),
|
||||
'debit': reported_credit,
|
||||
'credit': reported_debit,
|
||||
'amount_currency': -reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': accrual_account.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
]
|
||||
return [
|
||||
(0, 0, {
|
||||
'name': aml.name or '',
|
||||
'debit': reported_credit,
|
||||
'credit': reported_debit,
|
||||
'amount_currency': -reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': aml.account_id.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': self._format_strings(_('{percent}% recognized on {new_date}'), aml.move_id),
|
||||
'debit': reported_debit,
|
||||
'credit': reported_credit,
|
||||
'amount_currency': reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': accrual_account.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
]
|
||||
|
||||
def _get_move_dict_vals_change_period(self):
|
||||
reference_move = self.env['account.move'].new({'journal_id': self.journal_id.id, 'move_type': 'entry'})
|
||||
|
||||
@@ -256,7 +309,6 @@ class AutomaticEntryWizard(models.TransientModel):
|
||||
return reference_move._get_accounting_date(aml.date, aml.move_id._affect_tax_report())
|
||||
|
||||
# set the change_period account on the selected journal items
|
||||
accrual_account = self.revenue_accrual_account if self.account_type == 'income' else self.expense_accrual_account
|
||||
|
||||
move_data = {'new_date': {
|
||||
'currency_id': self.journal_id.currency_id.id or self.journal_id.company_id.currency_id.id,
|
||||
@@ -281,55 +333,8 @@ class AutomaticEntryWizard(models.TransientModel):
|
||||
|
||||
# compute the account.move.lines and the total amount per move
|
||||
for aml in self.move_line_ids:
|
||||
# account.move.line data
|
||||
reported_debit = aml.company_id.currency_id.round((self.percentage / 100) * aml.debit)
|
||||
reported_credit = aml.company_id.currency_id.round((self.percentage / 100) * aml.credit)
|
||||
reported_amount_currency = aml.currency_id.round((self.percentage / 100) * aml.amount_currency)
|
||||
|
||||
move_data['new_date']['line_ids'] += [
|
||||
(0, 0, {
|
||||
'name': aml.name or '',
|
||||
'debit': reported_debit,
|
||||
'credit': reported_credit,
|
||||
'amount_currency': reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': aml.account_id.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': self._format_strings(_('{percent}% recognized on {new_date}'), aml.move_id),
|
||||
'debit': reported_credit,
|
||||
'credit': reported_debit,
|
||||
'amount_currency': -reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': accrual_account.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
]
|
||||
move_data[get_lock_safe_date(aml)]['line_ids'] += [
|
||||
(0, 0, {
|
||||
'name': aml.name or '',
|
||||
'debit': reported_credit,
|
||||
'credit': reported_debit,
|
||||
'amount_currency': -reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': aml.account_id.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
(0, 0, {
|
||||
'name': self._format_strings(_('{percent}% to recognize on {new_date}'), aml.move_id),
|
||||
'debit': reported_debit,
|
||||
'credit': reported_credit,
|
||||
'amount_currency': reported_amount_currency,
|
||||
'currency_id': aml.currency_id.id,
|
||||
'account_id': accrual_account.id,
|
||||
'partner_id': aml.partner_id.id,
|
||||
'analytic_distribution': aml.analytic_distribution,
|
||||
}),
|
||||
]
|
||||
for date in ('new_date', get_lock_safe_date(aml)):
|
||||
move_data[date]['line_ids'] += self._get_move_line_dict_vals_change_period(aml, date)
|
||||
|
||||
move_vals = [m for m in move_data.values()]
|
||||
return move_vals
|
||||
|
||||
@@ -2,3 +2,4 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
from . import wizard
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
from . import test_account_fleet
|
||||
@@ -0,0 +1,43 @@
|
||||
from freezegun import freeze_time
|
||||
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
||||
from odoo.tests import tagged
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccountFleet(AccountTestInvoicingCommon):
|
||||
|
||||
@freeze_time('2021-09-15')
|
||||
def test_transfer_wizard_vehicle_info_propagation(self):
|
||||
brand = self.env["fleet.vehicle.model.brand"].create({
|
||||
"name": "Audi",
|
||||
})
|
||||
model = self.env["fleet.vehicle.model"].create({
|
||||
"brand_id": brand.id,
|
||||
"name": "A3",
|
||||
})
|
||||
car_1 = self.env["fleet.vehicle"].create({
|
||||
"model_id": model.id,
|
||||
"plan_to_change_car": False
|
||||
})
|
||||
|
||||
bill = self.init_invoice('in_invoice', products=self.product_a, invoice_date='2021-09-01', post=False)
|
||||
bill.invoice_line_ids.write({'vehicle_id': car_1.id})
|
||||
bill.action_post()
|
||||
|
||||
context = {'active_model': 'account.move.line', 'active_ids': bill.invoice_line_ids.ids}
|
||||
expense_account = self.company_data['default_account_expense']
|
||||
wizard = self.env['account.automatic.entry.wizard'].with_context(context).create({
|
||||
'action': 'change_period',
|
||||
'date': '2021-09-10',
|
||||
'percentage': 60,
|
||||
'journal_id': self.company_data['default_journal_misc'].id,
|
||||
'expense_accrual_account': expense_account.id,
|
||||
'revenue_accrual_account': self.env['account.account'].create({
|
||||
'name': 'Accrual Revenue Account',
|
||||
'code': '765432',
|
||||
'account_type': 'expense',
|
||||
'reconcile': True,
|
||||
}).id,
|
||||
})
|
||||
result_action = wizard.do_action()
|
||||
transfer_moves = self.env['account.move'].search(result_action['domain'])
|
||||
self.assertEqual(transfer_moves.line_ids.filtered(lambda l: l.account_id == expense_account).vehicle_id, car_1, "Vehicle info is missing")
|
||||
@@ -0,0 +1 @@
|
||||
from . import account_automatic_entry_wizard
|
||||
@@ -0,0 +1,12 @@
|
||||
from odoo import models
|
||||
|
||||
class AutomaticEntryWizard(models.TransientModel):
|
||||
_inherit = 'account.automatic.entry.wizard'
|
||||
|
||||
def _get_move_line_dict_vals_change_period(self, aml, date):
|
||||
res = super()._get_move_line_dict_vals_change_period(aml, date)
|
||||
if aml.vehicle_id:
|
||||
for move_line_data in res:
|
||||
if move_line_data[2]['account_id'] == aml.account_id.id:
|
||||
move_line_data[2]['vehicle_id'] = aml.vehicle_id.id
|
||||
return res
|
||||
Reference in New Issue
Block a user