Cédric Krier pushed to branch branch/default at Tryton / Tryton
Commits: b43c4abc by Cédric Krier at 2023-05-17T14:46:52+02:00 Allow only normal account on analytic line Closes #4030 - - - - - 41ce903f by Cédric Krier at 2023-05-17T15:03:35+02:00 Always enforce company for account of analytic line - - - - - 4c88fc43 by Cédric Krier at 2023-05-17T15:19:37+02:00 Ensure analytic line domain is still valid after account modification Analytic account can not be changed from normal to any of the root, view or distribution. - - - - - 3 changed files: - modules/analytic_account/account.py - modules/analytic_account/line.py - modules/analytic_account/message.xml Changes: ===================================== modules/analytic_account/account.py ===================================== @@ -126,6 +126,7 @@ def validate_fields(cls, accounts, field_names): super().validate_fields(accounts, field_names) cls.check_distribution(accounts, field_names) + cls.check_move_domain(accounts, field_names) @classmethod def check_distribution(cls, accounts, field_names=None): @@ -139,6 +140,25 @@ gettext('analytic_account.msg_invalid_distribution', account=account.rec_name)) + @classmethod + def check_move_domain(cls, accounts, field_names): + pool = Pool() + Line = pool.get('account.move.line') + if field_names and 'type' not in field_names: + return + accounts = [ + a for a in accounts if a.type in {'root', 'view', 'distribution'}] + for sub_accounts in grouped_slice(accounts): + sub_accounts = list(sub_accounts) + lines = Line.search([ + ('account', 'in', [a.id for a in sub_accounts]), + ], order=[], limit=1) + if lines: + line, = lines + raise AccountValidationError(gettext( + 'analytic_account.msg_account_wrong_type_line', + account=line.account.rec_name)) + @fields.depends('company') def on_change_with_currency(self, name=None): return self.company.currency if self.company else None ===================================== modules/analytic_account/line.py ===================================== @@ -29,11 +29,8 @@ account = fields.Many2One( 'analytic_account.account', "Account", required=True, domain=[ - ('type', 'not in', ['view', 'distribution']), - ['OR', - ('company', '=', None), - ('company', '=', Eval('company', -1)), - ], + ('type', '=', 'normal'), + ('company', '=', Eval('company', -1)), ]) move_line = fields.Many2One('account.move.line', 'Account Move Line', ondelete='CASCADE', required=True) ===================================== modules/analytic_account/message.xml ===================================== @@ -6,6 +6,9 @@ <record model="ir.message" id="msg_invalid_distribution"> <field name="text">To save account "%(account)s" the sum of their distributions must be 100%%.</field> </record> + <record model="ir.message" id="msg_account_wrong_type_line"> + <field name="text">You cannot change the type of account "%(account)s" because it has move lines.</field> + </record> <record model="ir.message" id="msg_root_origin_unique"> <field name="text">Only one account is allowed by analytic root and origin.</field> </record> View it on Heptapod: https://foss.heptapod.net/tryton/tryton/-/compare/0a4e13728c0a9bb24536cb1033d95ca6749a2b9d...4c88fc43ec0a49f7d4fff4470ab80c751239fb23 -- View it on Heptapod: https://foss.heptapod.net/tryton/tryton/-/compare/0a4e13728c0a9bb24536cb1033d95ca6749a2b9d...4c88fc43ec0a49f7d4fff4470ab80c751239fb23 You're receiving this email because of your account on foss.heptapod.net.