From 6f77dffeb31bf1d63585fdc860bdee022c3a52fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 30 Jan 2022 13:16:08 +0100 Subject: [PATCH] Do no copy lines when statement has origins issue11182 review366631002 --- statement.py | 20 ++++++++++++++++++++ tests/scenario_statement_origin.rst | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/statement.py b/statement.py index 699bdea9b9..a44bcc1285 100644 --- a/statement.py +++ b/statement.py @@ -651,6 +651,20 @@ class Statement(Workflow, ModelSQL, ModelView): def reconcile(cls, statements): pass + @classmethod + def copy(cls, statements, default=None): + default = default.copy() if default is not None else {} + new_statements = [] + for origins, sub_statements in groupby( + statements, key=lambda s: bool(s.origins)): + sub_statements = list(sub_statements) + sub_default = default.copy() + if origins: + sub_default.setdefault('lines') + new_statements.extend(super().copy( + statements, default=sub_default)) + return new_statements + def origin_mixin(_states, _depends): class Mixin: @@ -1125,6 +1139,12 @@ class Origin(origin_mixin(_states, _depends), ModelSQL, ModelView): group_by=table.id)) return [('id', 'in', query)] + @classmethod + def copy(cls, origins, default=None): + default = default.copy() if default is not None else {} + default.setdefault('lines') + return super().copy(origins, default=default) + del _states, _depends diff --git a/tests/scenario_statement_origin.rst b/tests/scenario_statement_origin.rst index 5376c82c69..259f180cf2 100644 --- a/tests/scenario_statement_origin.rst +++ b/tests/scenario_statement_origin.rst @@ -98,3 +98,7 @@ Test statement report:: >>> report = Report('account.statement') >>> _ = report.execute([statement], {}) + +Test copy statement:: + + >>> _ = statement.duplicate()