diff --git a/CHANGELOG b/CHANGELOG index 67544b2524..d616e4bce5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Require party on statement line if account requires one + Version 6.4.0 - 2022-05-02 * Bug fixes (see mercurial logs for details) * Use reference field for statement line relation diff --git a/statement.py b/statement.py index 9b24895b69..9ec41a7f1a 100644 --- a/statement.py +++ b/statement.py @@ -769,6 +769,8 @@ class Line(origin_mixin(_states), sequence_ordered(), ModelSQL, ModelView): ('statement', '=', Eval('statement', -1)), ('date', '=', Eval('date', None)), ]) + party_required = fields.Function( + fields.Boolean("Party Required"), 'on_change_with_party_required') @classmethod def __setup__(cls): @@ -779,6 +781,10 @@ class Line(origin_mixin(_states), sequence_ordered(), ModelSQL, ModelView): | Bool(Eval('origin', 0))), } cls.account.required = True + cls.party.states = { + 'required': (Eval('party_required', False) + & (Eval('statement_state') == 'draft')), + } t = cls.__table__() cls._sql_constraints += [ ('check_statement_line_amount', Check(t, t.amount != 0), @@ -815,6 +821,12 @@ class Line(origin_mixin(_states), sequence_ordered(), ModelSQL, ModelView): def invoice(self, value): self.related_to = value + @fields.depends('account') + def on_change_with_party_required(self, name=None): + if self.account: + return self.account.party_required + return False + @staticmethod def default_amount(): return Decimal(0)