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

+
+
+
+ +
+
+
+
+
+
+
+
+ + +