diff --git a/contract/__manifest__.py b/contract/__manifest__.py
index 2851e545..fdd9cdb8 100644
--- a/contract/__manifest__.py
+++ b/contract/__manifest__.py
@@ -35,6 +35,7 @@
'views/contract_template.xml',
'views/contract_template_line.xml',
'views/res_partner_view.xml',
+ 'views/res_config_settings.xml',
],
'installable': True,
}
diff --git a/contract/migrations/12.0.5.0.1/post-migration.py b/contract/migrations/12.0.5.0.1/post-migration.py
new file mode 100644
index 00000000..9e3ada14
--- /dev/null
+++ b/contract/migrations/12.0.5.0.1/post-migration.py
@@ -0,0 +1,7 @@
+def migrate(cr, version):
+ cr.execute(
+ """\
+ UPDATE res_company
+ SET create_new_line_at_contract_line_renew = true
+ """
+ )
diff --git a/contract/models/__init__.py b/contract/models/__init__.py
index b7382c2d..6d46b4b6 100644
--- a/contract/models/__init__.py
+++ b/contract/models/__init__.py
@@ -10,3 +10,5 @@ from . import account_invoice
from . import account_invoice_line
from . import res_partner
from . import contract_tag
+from . import res_company
+from . import res_config_settings
diff --git a/contract/models/contract_line.py b/contract/models/contract_line.py
index c9d475bd..fee07014 100644
--- a/contract/models/contract_line.py
+++ b/contract/models/contract_line.py
@@ -1164,17 +1164,27 @@ class ContractLine(models.Model):
)
return date_start, date_end
+ @api.multi
+ def _renew_create_line(self, date_start, date_end):
+ self.ensure_one()
+ is_auto_renew = self.is_auto_renew
+ self.stop(self.date_end, post_message=False)
+ new_line = self.plan_successor(
+ date_start, date_end, is_auto_renew, post_message=False
+ )
+ new_line._onchange_date_start()
+ return new_line
+
@api.multi
def renew(self):
res = self.env['contract.line']
for rec in self:
- is_auto_renew = rec.is_auto_renew
- rec.stop(rec.date_end, post_message=False)
+ company = rec.contract_id.company_id
date_start, date_end = rec._get_renewal_dates()
- new_line = rec.plan_successor(
- date_start, date_end, is_auto_renew, post_message=False
- )
- new_line._onchange_date_start()
+ if company.create_new_line_at_contract_line_renew:
+ new_line = rec._renew_create_line(date_start, date_end)
+ else:
+ raise NotImplementedError
res |= new_line
msg = _(
"""Contract line for {product}
diff --git a/contract/models/res_company.py b/contract/models/res_company.py
new file mode 100644
index 00000000..ce53ded8
--- /dev/null
+++ b/contract/models/res_company.py
@@ -0,0 +1,17 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class ResCompany(models.Model):
+
+ _inherit = 'res.company'
+
+ create_new_line_at_contract_line_renew = fields.Boolean(
+ string="Create New Line At Contract Line Renew",
+ help="If checked, a new line will be generated at contract line renew "
+ "and linked to the original one as successor. The default "
+ "behavior is to extend the end date of the contract by a new "
+ "subscription period",
+ )
diff --git a/contract/models/res_config_settings.py b/contract/models/res_config_settings.py
new file mode 100644
index 00000000..7ab0e91d
--- /dev/null
+++ b/contract/models/res_config_settings.py
@@ -0,0 +1,19 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+
+ _inherit = 'res.config.settings'
+
+ create_new_line_at_contract_line_renew = fields.Boolean(
+ related="company_id.create_new_line_at_contract_line_renew",
+ readonly=False,
+ string="Create New Line At Contract Line Renew",
+ help="If checked, a new line will be generated at contract line renew "
+ "and linked to the original one as successor. The default "
+ "behavior is to extend the end date of the contract by a new "
+ "subscription period",
+ )
diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py
index e406a45e..81d38a7a 100644
--- a/contract/tests/test_contract.py
+++ b/contract/tests/test_contract.py
@@ -109,6 +109,7 @@ class TestContractBase(common.SavepointCase):
cls.line_vals
)
cls.acct_line.product_id.is_auto_renew = True
+ cls.contract.company_id.create_new_line_at_contract_line_renew = True
class TestContract(TestContractBase):
diff --git a/contract/views/res_config_settings.xml b/contract/views/res_config_settings.xml
new file mode 100644
index 00000000..097aec3e
--- /dev/null
+++ b/contract/views/res_config_settings.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ res.config.settings
+
+
+
+ Contract
+
+
+
+
+
+
+