[12.0][IMP] - add new option: create_new_line_at_contract_line_renew

Add a company config option to decide whether to create or to extend contract
line at renew action
This commit is contained in:
sbejaoui
2019-12-20 11:03:38 +01:00
committed by Francisco Ivan Anton Prieto
parent f2de4aafe9
commit becaad164f
8 changed files with 92 additions and 6 deletions

View File

@@ -34,6 +34,7 @@
'views/contract_template.xml',
'views/contract_template_line.xml',
'views/res_partner_view.xml',
'views/res_config_settings.xml',
],
'installable': True,
}

View File

@@ -0,0 +1,7 @@
def migrate(cr, version):
cr.execute(
"""\
UPDATE res_company
SET create_new_line_at_contract_line_renew = true
"""
)

View File

@@ -9,3 +9,6 @@ from . import contract_line
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

View File

@@ -1177,17 +1177,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 <strong>{product}</strong>

View File

@@ -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",
)

View File

@@ -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",
)

View File

@@ -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):

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="res_config_settings_form_view">
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='account']" position="inside">
<h2>Contract</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="create_new_line_at_contract_line_renew"/>
</div>
<div class="o_setting_right_pane">
<label for="create_new_line_at_contract_line_renew"/>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>