mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
@@ -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
|
||||
)
|
||||
|
||||
@@ -43,6 +43,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.multi
|
||||
def write(self, vals):
|
||||
|
||||
@@ -49,6 +49,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.constrains('contract_id')
|
||||
def check_contact_is_not_terminated(self):
|
||||
@@ -97,6 +114,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):
|
||||
@@ -164,9 +189,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,
|
||||
|
||||
@@ -328,8 +328,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'
|
||||
|
||||
@@ -37,15 +37,30 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="is_auto_renew"/>
|
||||
<label for="termination_notice_interval" attrs="{'invisible': [('is_auto_renew', '=', False)],
|
||||
'required':[('is_contract', '=', True)]}"/>
|
||||
<div attrs="{'invisible': [('is_auto_renew', '=', False)],
|
||||
'required':[('is_auto_renew', '=', True)]}">
|
||||
<field name="termination_notice_interval"
|
||||
class="oe_inline" nolabel="1"/>
|
||||
<field name="termination_notice_rule_type"
|
||||
class="oe_inline" nolabel="1"/>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<group attrs="{'invisible':[('is_auto_renew', '=', False)]}">
|
||||
<label for="auto_renew_interval"/>
|
||||
<div>
|
||||
<field name="auto_renew_interval"
|
||||
class="oe_inline" nolabel="1"
|
||||
attrs="{'required':[('is_auto_renew', '=', True)]}"/>
|
||||
<field name="auto_renew_rule_type"
|
||||
class="oe_inline" nolabel="1"
|
||||
attrs="{'required':[('is_auto_renew', '=', True)]}"/>
|
||||
</div>
|
||||
</group>
|
||||
<group attrs="{'invisible':[('is_auto_renew', '=', False)]}">
|
||||
<label for="termination_notice_interval"/>
|
||||
<div>
|
||||
<field name="termination_notice_interval"
|
||||
class="oe_inline" nolabel="1"
|
||||
attrs="{'required':[('is_auto_renew', '=', True)]}"/>
|
||||
<field name="termination_notice_rule_type"
|
||||
class="oe_inline" nolabel="1"
|
||||
attrs="{'required':[('is_auto_renew', '=', True)]}"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
|
||||
@@ -68,6 +68,22 @@
|
||||
<group attrs="{'invisible': [('is_contract', '=', False)]}">
|
||||
<field name="date_end" attrs="{'required': [('is_contract', '=', True)]}"/>
|
||||
</group>
|
||||
<group
|
||||
attrs="{'invisible': [('is_contract', '=', False)]}">
|
||||
<field name="is_auto_renew"/>
|
||||
</group>
|
||||
<group
|
||||
attrs="{'invisible': [('is_auto_renew', '=', False)]}">
|
||||
<label for="auto_renew_interval"/>
|
||||
<div>
|
||||
<field name="auto_renew_interval"
|
||||
class="oe_inline" nolabel="1"
|
||||
attrs="{'required':[('is_auto_renew', '=', True)]}"/>
|
||||
<field name="auto_renew_rule_type"
|
||||
class="oe_inline" nolabel="1"
|
||||
attrs="{'required':[('is_auto_renew', '=', True)]}"/>
|
||||
</div>
|
||||
</group>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='order_line']/tree//field[@name='price_total']"
|
||||
position="after">
|
||||
|
||||
Reference in New Issue
Block a user