summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwan <wan@odoo.com>2020-01-10 14:41:24 +0000
committerwan <wan@odoo.com>2020-03-05 08:48:20 +0000
commit03d385af8d37ba9f43fab3f665549ca5d4776533 (patch)
treeb89662c44b8406a5504ea14f81c6521b6585fccd
parentae8115e6c8870e87ae8de99e47486dd77fdb6f6c (diff)
[IMP] account: accrual never change account on the fly
Before this commit, the account on the original line was replaced by the accrual account. This could be problematic for hashed journals. Instead of having 2 different behaviors for hashed/non hashed journals, we decided to always create 2 journal entries, which is also more academic: * We don't replace something on an entry that has been posted * We don't end up with taxes on the accrual account * Accountants are used to do it this way closes odoo/odoo#42787 Signed-off-by: Cedric Snauwaert (csn) <csn@openerp.com>
-rw-r--r--addons/account/tests/test_account_move_in_invoice.py14
-rw-r--r--addons/account/tests/test_account_move_out_invoice.py14
-rw-r--r--addons/account/wizard/account_accrual_accounting.py42
-rw-r--r--addons/l10n_generic_coa/data/account.account.template.csv4
4 files changed, 33 insertions, 41 deletions
diff --git a/addons/account/tests/test_account_move_in_invoice.py b/addons/account/tests/test_account_move_in_invoice.py
index 612fbab8243..42aed3dac6e 100644
--- a/addons/account/tests/test_account_move_in_invoice.py
+++ b/addons/account/tests/test_account_move_in_invoice.py
@@ -1669,12 +1669,11 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
'reconcile': True,
}).id,
})
- wizard.amend_entries()
+ wizard_res = wizard.amend_entries()
self.assertInvoiceValues(move, [
{
**self.product_line_vals_1,
- 'account_id': wizard.expense_accrual_account.id,
'currency_id': self.currency_data['currency'].id,
'amount_currency': 800.0,
'debit': 400.0,
@@ -1682,7 +1681,6 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
},
{
**self.product_line_vals_2,
- 'account_id': wizard.expense_accrual_account.id,
'currency_id': self.currency_data['currency'].id,
'amount_currency': 160.0,
'debit': 80.0,
@@ -1716,12 +1714,12 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2017-01-01'),
})
- accrual_lines = move.invoice_line_ids.mapped('matched_credit_ids.credit_move_id.move_id.line_ids').sorted('date')
+ accrual_lines = self.env['account.move'].browse(wizard_res['domain'][0][2]).line_ids.sorted('date')
self.assertRecordValues(accrual_lines, [
- {'amount_currency': 320.0, 'debit': 160.0, 'credit': 0.0, 'account_id': self.product_line_vals_1['account_id'], 'reconciled': False},
- {'amount_currency': -320.0, 'debit': 0.0, 'credit': 160.0, 'account_id': wizard.expense_accrual_account.id, 'reconciled': True},
- {'amount_currency': 64.0, 'debit': 32.0, 'credit': 0.0, 'account_id': self.product_line_vals_2['account_id'], 'reconciled': False},
- {'amount_currency': -64.0, 'debit': 0.0, 'credit': 32.0, 'account_id': wizard.expense_accrual_account.id, 'reconciled': True},
+ {'amount_currency': -480.0, 'debit': 0.0, 'credit': 240.0, 'account_id': self.product_line_vals_1['account_id'], 'reconciled': False},
+ {'amount_currency': 480.0, 'debit': 240.0, 'credit': 0.0, 'account_id': wizard.expense_accrual_account.id, 'reconciled': True},
+ {'amount_currency': -96.0, 'debit': 0.0, 'credit': 48.0, 'account_id': self.product_line_vals_2['account_id'], 'reconciled': False},
+ {'amount_currency': 96.0, 'debit': 48.0, 'credit': 0.0, 'account_id': wizard.expense_accrual_account.id, 'reconciled': True},
{'amount_currency': 480.0, 'debit': 240.0, 'credit': 0.0, 'account_id': self.product_line_vals_1['account_id'], 'reconciled': False},
{'amount_currency': -480.0, 'debit': 0.0, 'credit': 240.0, 'account_id': wizard.expense_accrual_account.id, 'reconciled': True},
{'amount_currency': 96.0, 'debit': 48.0, 'credit': 0.0, 'account_id': self.product_line_vals_2['account_id'], 'reconciled': False},
diff --git a/addons/account/tests/test_account_move_out_invoice.py b/addons/account/tests/test_account_move_out_invoice.py
index f497438fef1..2b860d6f12f 100644
--- a/addons/account/tests/test_account_move_out_invoice.py
+++ b/addons/account/tests/test_account_move_out_invoice.py
@@ -2346,12 +2346,11 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'reconcile': True,
}).id,
})
- wizard.amend_entries()
+ wizard_res = wizard.amend_entries()
self.assertInvoiceValues(move, [
{
**self.product_line_vals_1,
- 'account_id': wizard.revenue_accrual_account.id,
'currency_id': self.currency_data['currency'].id,
'amount_currency': -1000.0,
'debit': 0.0,
@@ -2359,7 +2358,6 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
},
{
**self.product_line_vals_2,
- 'account_id': wizard.revenue_accrual_account.id,
'currency_id': self.currency_data['currency'].id,
'amount_currency': -200.0,
'debit': 0.0,
@@ -2395,12 +2393,12 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'invoice_payment_ref': 'INV/2017/01/0001',
})
- accrual_lines = move.invoice_line_ids.mapped('matched_debit_ids.debit_move_id.move_id.line_ids').sorted('date')
+ accrual_lines = self.env['account.move'].browse(wizard_res['domain'][0][2]).line_ids.sorted('date')
self.assertRecordValues(accrual_lines, [
- {'amount_currency': -400.0, 'debit': 0.0, 'credit': 200.0, 'account_id': self.product_line_vals_1['account_id'], 'reconciled': False},
- {'amount_currency': 400.0, 'debit': 200.0, 'credit': 0.0, 'account_id': wizard.revenue_accrual_account.id, 'reconciled': True},
- {'amount_currency': -80.0, 'debit': 0.0, 'credit': 40.0, 'account_id': self.product_line_vals_2['account_id'], 'reconciled': False},
- {'amount_currency': 80.0, 'debit': 40.0, 'credit': 0.0, 'account_id': wizard.revenue_accrual_account.id, 'reconciled': True},
+ {'amount_currency': 600.0, 'debit': 300.0, 'credit': 0.0, 'account_id': self.product_line_vals_1['account_id'], 'reconciled': False},
+ {'amount_currency': -600.0, 'debit': 0.0, 'credit': 300.0, 'account_id': wizard.revenue_accrual_account.id, 'reconciled': True},
+ {'amount_currency': 120.0, 'debit': 60.0, 'credit': 0.0, 'account_id': self.product_line_vals_2['account_id'], 'reconciled': False},
+ {'amount_currency': -120.0, 'debit': 0.0, 'credit': 60.0, 'account_id': wizard.revenue_accrual_account.id, 'reconciled': True},
{'amount_currency': -600.0, 'debit': 0.0, 'credit': 300.0, 'account_id': self.product_line_vals_1['account_id'], 'reconciled': False},
{'amount_currency': 600.0, 'debit': 300.0, 'credit': 0.0, 'account_id': wizard.revenue_accrual_account.id, 'reconciled': True},
{'amount_currency': -120.0, 'debit': 0.0, 'credit': 60.0, 'account_id': self.product_line_vals_2['account_id'], 'reconciled': False},
diff --git a/addons/account/wizard/account_accrual_accounting.py b/addons/account/wizard/account_accrual_accounting.py
index 98058bbd035..cc6dd3c98ba 100644
--- a/addons/account/wizard/account_accrual_accounting.py
+++ b/addons/account/wizard/account_accrual_accounting.py
@@ -114,18 +114,18 @@ class AccrualAccountingWizard(models.TransientModel):
move_data[aml.move_id]['move_vals']['original_date']['line_ids'] += [
(0, 0, {
'name': aml.name,
- 'debit': aml.debit - reported_debit,
- 'credit': aml.credit - reported_credit,
- 'amount_currency': aml.amount_currency - reported_amount_currency,
+ '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,
}),
(0, 0, {
'name': _('Accrual Adjusting Entry'),
- 'debit': aml.credit - reported_credit,
- 'credit': aml.debit - reported_debit,
- 'amount_currency': reported_amount_currency - aml.amount_currency,
+ '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,
@@ -174,7 +174,7 @@ class AccrualAccountingWizard(models.TransientModel):
}
move_vals = [m for o in move_data.values() for m in o['move_vals'].values()]
- log_messages = [m for o in move_data.values() for m in o['log_messages'].values()]
+ log_messages = [o['log_messages'] for o in move_data.values()]
record.data = json.dumps({
'move_vals': move_vals,
@@ -212,29 +212,25 @@ class AccrualAccountingWizard(models.TransientModel):
data = json.loads(self.data)
move_vals, log_messages = (data['move_vals'], data['log_messages'])
- # Update the account of selected journal items.
- self.active_move_line_ids.write({'account_id': accrual_account.id})
-
created_moves = self.env['account.move'].create(move_vals)
created_moves.post()
# Reconcile.
index = 0
for move in self.active_move_line_ids.mapped('move_id'):
- if self.percentage < 100:
- accrual_moves = created_moves[index:index + 2]
- index += 2
- else:
- accrual_moves = created_moves[index:index + 1]
- index += 1
-
- to_reconcile = self.active_move_line_ids.filtered(lambda line: line.move_id == move)
- to_reconcile += accrual_moves.mapped('line_ids').filtered(lambda line: line.account_id == accrual_account and not line.reconciled)
- to_reconcile.reconcile()
+ accrual_moves = created_moves[index:index + 2]
- # Log messages.
- for created_move, log_message in zip(created_moves, log_messages):
- created_move.message_post(body=log_message)
+ to_reconcile = accrual_moves.mapped('line_ids').filtered(lambda line: line.account_id == accrual_account)
+ to_reconcile.reconcile()
+ move.message_post(body=log_messages[index//2]['origin'] % {
+ 'first_id': accrual_moves[0].id,
+ 'first_name': accrual_moves[0].name,
+ 'second_id': accrual_moves[1].id,
+ 'second_name': accrual_moves[1].name,
+ })
+ accrual_moves[0].message_post(body=log_messages[index//2]['new_date'])
+ accrual_moves[1].message_post(body=log_messages[index//2]['original_date'])
+ index += 2
# open the generated entries
action = {
diff --git a/addons/l10n_generic_coa/data/account.account.template.csv b/addons/l10n_generic_coa/data/account.account.template.csv
index 82f70556f4a..9030e5bbea6 100644
--- a/addons/l10n_generic_coa/data/account.account.template.csv
+++ b/addons/l10n_generic_coa/data/account.account.template.csv
@@ -4,7 +4,7 @@
"stock_in","Stock Interim (Received)","1102","account.data_account_type_current_assets","l10n_generic_coa.configurable_chart_template","","True"
"stock_out","Stock Interim (Delivered)","1103","account.data_account_type_current_assets","l10n_generic_coa.configurable_chart_template","","True"
"receivable","Account Receivable","1210","account.data_account_type_receivable","l10n_generic_coa.configurable_chart_template","","True"
-"to_receive_rec","Products to receive","12101","account.data_account_type_current_assets","l10n_generic_coa.configurable_chart_template","","True"
+"to_receive_rec","Products to receive","1211","account.data_account_type_current_assets","l10n_generic_coa.configurable_chart_template","","True"
"tax_paid","Tax Paid","1310","account.data_account_type_current_assets","l10n_generic_coa.configurable_chart_template","","False"
"tax_receivable","Tax Receivable","1320","account.data_account_type_current_assets","l10n_generic_coa.configurable_chart_template","","False"
"prepayments","Prepayments","1410","account.data_account_type_prepayments","l10n_generic_coa.configurable_chart_template","","False"
@@ -12,7 +12,7 @@
"non_current_assets","Non-current assets","1910","account.data_account_type_non_current_assets","l10n_generic_coa.configurable_chart_template","","False"
"current_liabilities","Current Liabilities","2010","account.data_account_type_current_liabilities","l10n_generic_coa.configurable_chart_template","","False"
"payable","Account Payable","2110","account.data_account_type_payable","l10n_generic_coa.configurable_chart_template","","True"
-"to_receive_pay","Bills to receive","21101","account.data_account_type_current_liabilities","l10n_generic_coa.configurable_chart_template","","True"
+"to_receive_pay","Bills to receive","2111","account.data_account_type_current_liabilities","l10n_generic_coa.configurable_chart_template","","True"
"tax_received","Tax Received","2510","account.data_account_type_current_liabilities","l10n_generic_coa.configurable_chart_template","","False"
"tax_payable","Tax Payable","2520","account.data_account_type_current_liabilities","l10n_generic_coa.configurable_chart_template","","False"
"non_current_liabilities","Non-current Liabilities","2910","account.data_account_type_non_current_liabilities","l10n_generic_coa.configurable_chart_template","","False"