From d1e5f6bb69b4144e896555db155be025a65dc984 Mon Sep 17 00:00:00 2001 From: sbejaoui Date: Mon, 17 Feb 2020 18:08:22 +0100 Subject: [PATCH] [12.0][ADD] - add auto_renew_interval, auto_renew_rule_type fields to sale order line --- product_contract/models/contract_line.py | 4 +-- product_contract/models/product_template.py | 16 ++++++++++ product_contract/models/sale_order_line.py | 31 +++++++++++++++++-- product_contract/tests/test_sale_order.py | 4 +-- product_contract/views/product_template.xml | 33 +++++++++++++++------ product_contract/views/sale_order.xml | 16 ++++++++++ 6 files changed, 88 insertions(+), 16 deletions(-) diff --git a/product_contract/models/contract_line.py b/product_contract/models/contract_line.py index 96978a895..1ab326ef8 100644 --- a/product_contract/models/contract_line.py +++ b/product_contract/models/contract_line.py @@ -46,8 +46,8 @@ class ContractLine(models.Model): ) rec.recurring_interval = 1 rec.is_auto_renew = rec.product_id.is_auto_renew - rec.auto_renew_interval = rec.product_id.default_qty - rec.auto_renew_rule_type = rec._get_auto_renew_rule_type() + rec.auto_renew_interval = rec.product_id.auto_renew_interval + rec.auto_renew_rule_type = rec.product_id.auto_renew_rule_type rec.termination_notice_interval = ( rec.product_id.termination_notice_interval ) diff --git a/product_contract/models/product_template.py b/product_contract/models/product_template.py index 1ca3f75e4..2eb2eca56 100644 --- a/product_contract/models/product_template.py +++ b/product_contract/models/product_template.py @@ -41,6 +41,22 @@ class ProductTemplate(models.Model): default='monthly', string='Termination Notice type', ) + auto_renew_interval = fields.Integer( + default=1, + string='Renew Every', + help="Renew every (Days/Week/Month/Year)", + ) + auto_renew_rule_type = fields.Selection( + [ + ('daily', 'Day(s)'), + ('weekly', 'Week(s)'), + ('monthly', 'Month(s)'), + ('yearly', 'Year(s)'), + ], + default='yearly', + string='Renewal type', + help="Specify Interval for automatic renewal.", + ) @api.onchange('is_contract') def _change_is_contract(self): diff --git a/product_contract/models/sale_order_line.py b/product_contract/models/sale_order_line.py index 4f29da01c..dc21fa9ad 100644 --- a/product_contract/models/sale_order_line.py +++ b/product_contract/models/sale_order_line.py @@ -50,6 +50,23 @@ class SaleOrderLine(models.Model): required=False, copy=False, ) + is_auto_renew = fields.Boolean(string="Auto Renew", default=False) + auto_renew_interval = fields.Integer( + default=1, + string='Renew Every', + help="Renew every (Days/Week/Month/Year)", + ) + auto_renew_rule_type = fields.Selection( + [ + ('daily', 'Day(s)'), + ('weekly', 'Week(s)'), + ('monthly', 'Month(s)'), + ('yearly', 'Year(s)'), + ], + default='yearly', + string='Renewal type', + help="Specify Interval for automatic renewal.", + ) @api.multi def _get_auto_renew_rule_type(self): @@ -79,6 +96,14 @@ class SaleOrderLine(models.Model): ) - relativedelta(days=1) ) + rec.is_auto_renew = rec.product_id.is_auto_renew + if rec.is_auto_renew: + rec.auto_renew_interval = ( + rec.product_id.auto_renew_interval + ) + rec.auto_renew_rule_type = ( + rec.product_id.auto_renew_rule_type + ) @api.onchange('date_start', 'product_uom_qty', 'recurring_rule_type') def onchange_date_start(self): @@ -146,9 +171,9 @@ class SaleOrderLine(models.Model): 'recurring_interval': 1, 'recurring_invoicing_type': self.recurring_invoicing_type, 'recurring_rule_type': self.recurring_rule_type, - 'is_auto_renew': self.product_id.is_auto_renew, - 'auto_renew_interval': self.product_uom_qty, - 'auto_renew_rule_type': self._get_auto_renew_rule_type(), + 'is_auto_renew': self.is_auto_renew, + 'auto_renew_interval': self.auto_renew_interval, + 'auto_renew_rule_type': self.auto_renew_rule_type, 'termination_notice_interval': termination_notice_interval, 'termination_notice_rule_type': termination_notice_rule_type, 'contract_id': contract.id, diff --git a/product_contract/tests/test_sale_order.py b/product_contract/tests/test_sale_order.py index 307cf9084..a71d95b81 100644 --- a/product_contract/tests/test_sale_order.py +++ b/product_contract/tests/test_sale_order.py @@ -313,8 +313,8 @@ class TestSaleOrder(TransactionCase): ) self.assertEqual(self.contract_line.recurring_interval, 1) self.assertEqual(self.contract_line.is_auto_renew, True) - self.assertEqual(self.contract_line.auto_renew_interval, 12) - self.assertEqual(self.contract_line.auto_renew_rule_type, 'monthly') + self.assertEqual(self.contract_line.auto_renew_interval, 1) + self.assertEqual(self.contract_line.auto_renew_rule_type, 'yearly') self.assertEqual(self.contract_line.termination_notice_interval, 6) self.assertEqual( self.contract_line.termination_notice_rule_type, 'weekly' diff --git a/product_contract/views/product_template.xml b/product_contract/views/product_template.xml index 057ec95bc..59ad6e7eb 100644 --- a/product_contract/views/product_template.xml +++ b/product_contract/views/product_template.xml @@ -38,15 +38,30 @@ - + + + + + diff --git a/product_contract/views/sale_order.xml b/product_contract/views/sale_order.xml index 0805121fd..24ab4d1c7 100644 --- a/product_contract/views/sale_order.xml +++ b/product_contract/views/sale_order.xml @@ -67,6 +67,22 @@ + + + + +