Browse Source

Merge PR #444 into 12.0

Signed-off-by sbejaoui
pull/414/merge
OCA-git-bot 5 years ago
parent
commit
6a751263a9
  1. 1
      contract/__manifest__.py
  2. 7
      contract/migrations/12.0.5.0.1/post-migration.py
  3. 2
      contract/models/__init__.py
  4. 36
      contract/models/contract_line.py
  5. 17
      contract/models/res_company.py
  6. 19
      contract/models/res_config_settings.py
  7. 28
      contract/tests/test_contract.py
  8. 28
      contract/views/res_config_settings.xml

1
contract/__manifest__.py

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

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

2
contract/models/__init__.py

@ -10,3 +10,5 @@ from . import account_invoice
from . import account_invoice_line from . import account_invoice_line
from . import res_partner from . import res_partner
from . import contract_tag from . import contract_tag
from . import res_company
from . import res_config_settings

36
contract/models/contract_line.py

@ -1156,25 +1156,43 @@ class ContractLine(models.Model):
} }
@api.multi @api.multi
def _get_renewal_dates(self):
def _get_renewal_new_date_end(self):
self.ensure_one() self.ensure_one()
date_start = self.date_end + relativedelta(days=1) date_start = self.date_end + relativedelta(days=1)
date_end = self._get_first_date_end( date_end = self._get_first_date_end(
date_start, self.auto_renew_rule_type, self.auto_renew_interval date_start, self.auto_renew_rule_type, self.auto_renew_interval
) )
return date_start, date_end
return date_end
@api.multi
def _renew_create_line(self, date_end):
self.ensure_one()
date_start = self.date_end + relativedelta(days=1)
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_extend_line(self, date_end):
self.ensure_one()
self.date_end = date_end
return self
@api.multi @api.multi
def renew(self): def renew(self):
res = self.env['contract.line'] res = self.env['contract.line']
for rec in self: for rec in self:
is_auto_renew = rec.is_auto_renew
rec.stop(rec.date_end, post_message=False)
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()
company = rec.contract_id.company_id
date_end = rec._get_renewal_new_date_end()
date_start = rec.date_end + relativedelta(days=1)
if company.create_new_line_at_contract_line_renew:
new_line = rec._renew_create_line(date_end)
else:
new_line = rec._renew_extend_line(date_end)
res |= new_line res |= new_line
msg = _( msg = _(
"""Contract line for <strong>{product}</strong> """Contract line for <strong>{product}</strong>

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

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

28
contract/tests/test_contract.py

@ -109,6 +109,7 @@ class TestContractBase(common.SavepointCase):
cls.line_vals cls.line_vals
) )
cls.acct_line.product_id.is_auto_renew = True cls.acct_line.product_id.is_auto_renew = True
cls.contract.company_id.create_new_line_at_contract_line_renew = True
class TestContract(TestContractBase): class TestContract(TestContractBase):
@ -1668,7 +1669,7 @@ class TestContract(TestContractBase):
self.assertTrue(line_3.successor_contract_line_id) self.assertTrue(line_3.successor_contract_line_id)
self.assertFalse(line_4.successor_contract_line_id) self.assertFalse(line_4.successor_contract_line_id)
def test_renew(self):
def test_renew_create_new_line(self):
date_start = self.today - relativedelta(months=9) date_start = self.today - relativedelta(months=9)
date_end = ( date_end = (
date_start + relativedelta(months=12) - relativedelta(days=1) date_start + relativedelta(months=12) - relativedelta(days=1)
@ -1693,6 +1694,31 @@ class TestContract(TestContractBase):
new_line.date_end, date_end + relativedelta(months=12) new_line.date_end, date_end + relativedelta(months=12)
) )
def test_renew_extend_original_line(self):
self.contract.company_id.create_new_line_at_contract_line_renew = False
date_start = self.today - relativedelta(months=9)
date_end = (
date_start + relativedelta(months=12) - relativedelta(days=1)
)
self.acct_line.write(
{
'is_auto_renew': True,
'date_start': date_start,
'recurring_next_date': date_start,
'date_end': self.today,
}
)
self.acct_line._onchange_is_auto_renew()
self.assertEqual(self.acct_line.date_end, date_end)
self.acct_line.renew()
self.assertTrue(self.acct_line.is_auto_renew)
self.assertEqual(
self.acct_line.date_start, date_start
)
self.assertEqual(
self.acct_line.date_end, date_end + relativedelta(months=12)
)
def test_cron_recurring_create_invoice(self): def test_cron_recurring_create_invoice(self):
self.acct_line.date_start = '2018-01-01' self.acct_line.date_start = '2018-01-01'
self.acct_line.recurring_invoicing_type = 'post-paid' self.acct_line.recurring_invoicing_type = 'post-paid'

28
contract/views/res_config_settings.xml

@ -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>
Loading…
Cancel
Save