diff --git a/agreement_legal/models/agreement.py b/agreement_legal/models/agreement.py index 39b90b66..2abaf51f 100644 --- a/agreement_legal/models/agreement.py +++ b/agreement_legal/models/agreement.py @@ -520,8 +520,23 @@ def copy(self, default=None): default = dict(default or {}) if not default.get("code", False): default.setdefault("code", _("New")) + # Prevent automatic clause copy through sections to avoid duplication. + default.setdefault("sections_ids", []) res = super().copy(default) - res.sections_ids.mapped("clauses_ids").write({"agreement_id": res.id}) + section_map = {} + for section in self.sections_ids: + new_section = section.copy( + { + "agreement_id": res.id, + "clauses_ids": False, + } + ) + section_map[section.id] = new_section.id + for clause in self.clauses_ids: + values = {"agreement_id": res.id} + if clause.section_id: + values["section_id"] = section_map.get(clause.section_id.id) + clause.copy(values) return res def _exclude_readonly_field(self): diff --git a/agreement_legal/tests/test_create_agreement_wizard.py b/agreement_legal/tests/test_create_agreement_wizard.py index 57724654..6bcf7df2 100644 --- a/agreement_legal/tests/test_create_agreement_wizard.py +++ b/agreement_legal/tests/test_create_agreement_wizard.py @@ -69,6 +69,7 @@ def test_create_agreement(self): self.assertEqual(agreement.is_template, False) self.assertEqual(agreement.recital_ids.name, template.recital_ids.name) self.assertEqual(agreement.sections_ids.name, template.sections_ids.name) + self.assertEqual(len(agreement.clauses_ids), len(template.clauses_ids)) self.assertEqual(agreement.clauses_ids.name, template.clauses_ids.name) self.assertEqual(agreement.clauses_ids.section_id, agreement.sections_ids) self.assertEqual(agreement.appendix_ids.name, template.appendix_ids.name)