[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:
Andrea Grazioso (agr-odoo)
2024-04-24 11:16:06 +00:00
parent 607b390917
commit ab7643c15c
6 changed files with 113 additions and 50 deletions
@@ -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
+1
View File
@@ -2,3 +2,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import wizard
+1
View File
@@ -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")
+1
View File
@@ -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