From 4a61f527266cc4d1b6c6cbd2d8d4a81fceaaf61d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Marques?= Date: Mon, 5 Apr 2021 07:22:57 +0100 Subject: [PATCH] [IMP] account_asset_management: Add analytic tags and propagate Add tests for propagation of analytic data from asset to account.move.line TT28974 --- account_asset_management/models/account_asset.py | 4 ++++ .../models/account_asset_line.py | 4 ++++ .../models/account_asset_profile.py | 3 +++ account_asset_management/models/account_move.py | 2 ++ account_asset_management/readme/CONTRIBUTORS.rst | 1 + .../tests/account_asset_test_data.xml | 2 ++ .../tests/test_account_asset_management.py | 15 ++++++++++++++- account_asset_management/views/account_asset.xml | 1 + .../views/account_asset_profile.xml | 1 + .../wizard/account_asset_remove.py | 5 +++++ 10 files changed, 37 insertions(+), 1 deletion(-) diff --git a/account_asset_management/models/account_asset.py b/account_asset_management/models/account_asset.py index c98bba812..32ea1f96d 100644 --- a/account_asset_management/models/account_asset.py +++ b/account_asset_management/models/account_asset.py @@ -202,6 +202,9 @@ class AccountAsset(models.Model): account_analytic_id = fields.Many2one( comodel_name='account.analytic.account', string='Analytic account') + analytic_tag_ids = fields.Many2many( + comodel_name='account.analytic.tag', + string='Analytic tags') @api.model def _default_company_id(self): @@ -298,6 +301,7 @@ class AccountAsset(models.Model): 'method_progress_factor': profile.method_progress_factor, 'prorata': profile.prorata, 'account_analytic_id': profile.account_analytic_id, + 'analytic_tag_ids': profile.analytic_tag_ids, 'group_ids': profile.group_ids, }) diff --git a/account_asset_management/models/account_asset_line.py b/account_asset_management/models/account_asset_line.py index 1b111d210..815b4b391 100644 --- a/account_asset_management/models/account_asset_line.py +++ b/account_asset_management/models/account_asset_line.py @@ -189,9 +189,11 @@ class AccountAssetLine(models.Model): return move_data def _setup_move_line_data(self, depreciation_date, account, ml_type, move): + """Prepare data to be propagated to account.move.line""" asset = self.asset_id amount = self.amount analytic_id = False + analytic_tags = self.env["account.analytic.tag"] if ml_type == 'depreciation': debit = amount < 0 and -amount or 0.0 credit = amount > 0 and amount or 0.0 @@ -199,6 +201,7 @@ class AccountAssetLine(models.Model): debit = amount > 0 and amount or 0.0 credit = amount < 0 and -amount or 0.0 analytic_id = asset.account_analytic_id.id + analytic_tags = asset.analytic_tag_ids move_line_data = { 'name': asset.name, 'ref': self.name, @@ -209,6 +212,7 @@ class AccountAssetLine(models.Model): 'journal_id': asset.profile_id.journal_id.id, 'partner_id': asset.partner_id.id, 'analytic_account_id': analytic_id, + 'analytic_tag_ids': [(4, tag.id) for tag in analytic_tags], 'date': depreciation_date, 'asset_id': asset.id, } diff --git a/account_asset_management/models/account_asset_profile.py b/account_asset_management/models/account_asset_profile.py index 83f885a32..dcc069dc9 100644 --- a/account_asset_management/models/account_asset_profile.py +++ b/account_asset_management/models/account_asset_profile.py @@ -15,6 +15,9 @@ class AccountAssetProfile(models.Model): account_analytic_id = fields.Many2one( comodel_name='account.analytic.account', string='Analytic account') + analytic_tag_ids = fields.Many2many( + comodel_name='account.analytic.tag', + string='Analytic tags') account_asset_id = fields.Many2one( comodel_name='account.account', domain="[('company_id', '=', company_id), " diff --git a/account_asset_management/models/account_move.py b/account_asset_management/models/account_move.py index c6c4ccaba..93272043b 100644 --- a/account_asset_management/models/account_move.py +++ b/account_asset_management/models/account_move.py @@ -161,6 +161,8 @@ class AccountMoveLine(models.Model): def _get_asset_analytic_values(self, vals, asset_vals): asset_vals['account_analytic_id'] = vals.get( 'analytic_account_id', False) + asset_vals['analytic_tag_ids'] = vals.get( + 'analytic_tag_ids', False) @api.model def _play_onchange_profile_id(self, vals): diff --git a/account_asset_management/readme/CONTRIBUTORS.rst b/account_asset_management/readme/CONTRIBUTORS.rst index 69d08b786..2fbce6396 100644 --- a/account_asset_management/readme/CONTRIBUTORS.rst +++ b/account_asset_management/readme/CONTRIBUTORS.rst @@ -14,3 +14,4 @@ * `Tecnativa `_: * Víctor Martínez + * João Marques diff --git a/account_asset_management/tests/account_asset_test_data.xml b/account_asset_management/tests/account_asset_test_data.xml index 89e310ce8..fbdcec8fa 100644 --- a/account_asset_management/tests/account_asset_test_data.xml +++ b/account_asset_management/tests/account_asset_test_data.xml @@ -78,6 +78,8 @@ + + diff --git a/account_asset_management/tests/test_account_asset_management.py b/account_asset_management/tests/test_account_asset_management.py index 9419df223..f640b07be 100644 --- a/account_asset_management/tests/test_account_asset_management.py +++ b/account_asset_management/tests/test_account_asset_management.py @@ -186,7 +186,20 @@ class TestAssetManagement(SavepointCase): self.assertEqual(ict0.value_depreciated, 500) self.assertEqual(ict0.value_residual, 1000) vehicle0.validate() - vehicle0.depreciation_line_ids[1].create_move() + created_move_ids = vehicle0.depreciation_line_ids[1].create_move() + for move_id in created_move_ids: + move = self.env["account.move"].browse(move_id) + expense_line = move.line_ids.filtered( + lambda line: line.account_id == self.env.ref("account.a_expense") + ) + self.assertEqual( + expense_line.analytic_account_id, + self.env.ref("analytic.analytic_administratif"), + ) + self.assertEqual( + expense_line.analytic_tag_ids, + self.env.ref("analytic.tag_contract") + ) vehicle0.refresh() self.assertEqual(vehicle0.state, 'open') self.assertEqual(vehicle0.value_depreciated, 2000) diff --git a/account_asset_management/views/account_asset.xml b/account_asset_management/views/account_asset.xml index 8bc1b8605..c980dfe9b 100644 --- a/account_asset_management/views/account_asset.xml +++ b/account_asset_management/views/account_asset.xml @@ -56,6 +56,7 @@ + diff --git a/account_asset_management/views/account_asset_profile.xml b/account_asset_management/views/account_asset_profile.xml index 2f684a17d..2d701eed3 100644 --- a/account_asset_management/views/account_asset_profile.xml +++ b/account_asset_management/views/account_asset_profile.xml @@ -40,6 +40,7 @@ + diff --git a/account_asset_management/wizard/account_asset_remove.py b/account_asset_management/wizard/account_asset_remove.py index 498d2a1f0..df1bbe752 100644 --- a/account_asset_management/wizard/account_asset_remove.py +++ b/account_asset_management/wizard/account_asset_remove.py @@ -289,6 +289,7 @@ class AccountAssetRemove(models.TransientModel): 'name': asset.name, 'account_id': self.account_residual_value_id.id, 'analytic_account_id': asset.account_analytic_id.id, + 'analytic_tag_ids': [(4, tag.id) for tag in asset.analytic_tag_ids], 'debit': residual_value, 'credit': 0.0, 'partner_id': partner_id, @@ -302,6 +303,9 @@ class AccountAssetRemove(models.TransientModel): 'name': asset.name, 'account_id': self.account_sale_id.id, 'analytic_account_id': asset.account_analytic_id.id, + 'analytic_tag_ids': [ + (4, tag.id) for tag in asset.analytic_tag_ids + ], 'debit': sale_value, 'credit': 0.0, 'partner_id': partner_id, @@ -316,6 +320,7 @@ class AccountAssetRemove(models.TransientModel): 'name': asset.name, 'account_id': account_id, 'analytic_account_id': asset.account_analytic_id.id, + 'analytic_tag_ids': [(4, tag.id) for tag in asset.analytic_tag_ids], 'debit': balance < 0 and -balance or 0.0, 'credit': balance > 0 and balance or 0.0, 'partner_id': partner_id,