diff --git a/contract/models/contract.py b/contract/models/contract.py index 06955ebb3..9e3073caf 100644 --- a/contract/models/contract.py +++ b/contract/models/contract.py @@ -465,7 +465,9 @@ class ContractContract(models.Model): def _recurring_create_invoice(self, date_ref=False): invoices_values = self._prepare_recurring_invoices_values(date_ref) - return self.env["account.move"].create(invoices_values) + moves = self.env["account.move"].create(invoices_values) + self._compute_recurring_next_date() + return moves @api.model def cron_recurring_create_invoice(self, date_ref=None): diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py index 8b6b566f1..0bb2952a6 100644 --- a/contract/tests/test_contract.py +++ b/contract/tests/test_contract.py @@ -123,6 +123,41 @@ class TestContractBase(common.SavepointCase): {"name": "terminate_reason"} ) + cls.contract3 = cls.env["contract.contract"].create( + { + "name": "Test Contract 3", + "partner_id": cls.partner.id, + "pricelist_id": cls.partner.property_product_pricelist.id, + "line_recurrence": False, + "contract_type": "sale", + "recurring_interval": 1, + "recurring_rule_type": "monthly", + "date_start": "2018-02-15", + "contract_line_ids": [ + ( + 0, + 0, + { + "product_id": False, + "name": "Services from #START# to #END#", + "quantity": 1, + "price_unit": 100, + }, + ), + ( + 0, + 0, + { + "product_id": False, + "name": "Line", + "quantity": 1, + "price_unit": 120, + }, + ), + ], + } + ) + class TestContract(TestContractBase): def _add_template_line(self, overrides=None): @@ -169,6 +204,10 @@ class TestContract(TestContractBase): self.assertAlmostEqual(self.inv_line.price_subtotal, 50.0) self.assertEqual(self.contract.user_id, self.invoice_monthly.user_id) + def test_contract_level_recurrence(self): + self.contract3.recurring_create_invoice() + self.contract3.flush() + def test_contract_daily(self): recurring_next_date = to_date("2018-02-23") last_date_invoiced = to_date("2018-02-22")