diff --git a/contract/models/contract.py b/contract/models/contract.py index 2993634fc..9dfc5689f 100644 --- a/contract/models/contract.py +++ b/contract/models/contract.py @@ -147,11 +147,16 @@ class ContractContract(models.Model): @api.model def _set_start_contract_modification(self): + subtype_id = self.env.ref('contract.mail_message_subtype_contract_modification') for record in self: if record.contract_line_ids: date_start = min(record.contract_line_ids.mapped('date_start')) else: date_start = record.create_date + record.message_subscribe( + partner_ids=[record.partner_id.id], + subtype_ids=[subtype_id.id] + ) record.write({ 'modification_ids': [ (0, 0, {'date': date_start, 'description': _('Contract start')}) @@ -165,20 +170,15 @@ class ContractContract(models.Model): lambda x: not x.sent ) if modification_ids_not_sent: - contract_modification_subtype = self.env.ref( - 'contract.mail_message_subtype_contract_modification' + record.message_post_with_template( + self.env.ref( + "contract.mail_template_contract_modification" + ).id, + notif_layout="contract.template_contract_modification", + subtype_id=self.env.ref( + 'contract.mail_message_subtype_contract_modification' + ).id ) - notified_partners = record.message_follower_ids.filtered( - lambda x: contract_modification_subtype in x.subtype_ids - ).mapped('partner_id') - if notified_partners: - record.message_post_with_template( - self.env.ref( - "contract.mail_template_contract_modification" - ).id, - partner_ids=[(4, x.id) for x in notified_partners], - notif_layout="contract.template_contract_modification", - ) modification_ids_not_sent.write({'sent': True}) @api.multi @@ -485,7 +485,9 @@ class ContractContract(models.Model): lambda x: invoice_create_subtype in x.subtype_ids ).mapped('partner_id') if partner_ids: - invoices.message_subscribe(partner_ids=partner_ids.ids) + ( + invoices & item._get_related_invoices() + ).message_subscribe(partner_ids=partner_ids.ids) @api.model def _finalize_and_create_invoices(self, invoices_values): diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py index c3648bbd1..3b31db294 100644 --- a/contract/tests/test_contract.py +++ b/contract/tests/test_contract.py @@ -135,11 +135,11 @@ class TestContract(TestContractBase): return self.env['contract.template.line'].create(vals) def test_add_modifications(self): + partner2 = self.partner.copy() + subtype = self.env.ref('contract.mail_message_subtype_contract_modification') self.contract.message_subscribe( - partner_ids=self.contract.partner_id.ids, - subtype_ids=self.env.ref( - 'contract.mail_message_subtype_contract_modification' - ).ids + partner_ids=partner2.ids, + subtype_ids=subtype.ids ) # Check initial modification auto-creation self.assertEqual(len(self.contract.modification_ids), 1) @@ -163,12 +163,16 @@ class TestContract(TestContractBase): ) ] }) - self.assertGreaterEqual(len(self.contract.message_partner_ids), 2) - mail_messages = self.env["mail.message"].search([ + partner_ids = self.contract.message_follower_ids.filtered( + lambda x: subtype in x.subtype_ids + ).mapped('partner_id') + self.assertGreaterEqual(len(partner_ids), 2) + total_mail_messages = self.env["mail.message"].search_count([ ("model", "=", "contract.contract"), ("res_id", "=", self.contract.id), + ("subtype_id", "=", subtype.id) ]) - self.assertGreaterEqual(len(mail_messages), 2) + self.assertGreaterEqual(total_mail_messages, 1) def test_check_discount(self): with self.assertRaises(ValidationError): @@ -256,7 +260,7 @@ class TestContract(TestContractBase): self.contract.recurring_create_invoice() invoice_daily = self.contract._get_related_invoices() self.assertTrue(invoice_daily) - self.assertEqual(len(invoice_daily.message_partner_ids.ids), 2) + self.assertEqual(len(invoice_daily.message_partner_ids.ids), 1) def test_contract_weekly_post_paid(self): recurring_next_date = to_date('2018-03-01')