add cron for contract expiration

This commit is contained in:
sinergia 2023-05-29 13:28:55 -05:00
parent bbd7f691e4
commit 65ac48edaa
3 changed files with 44 additions and 1 deletions

View File

@ -22,6 +22,7 @@ def register():
calibration.CalibrationSample,
configuration.Configuration,
diary.Diary,
contract.Cron,
contract.Contract,
contract.ContractMaintenanceServices,
contract.ContractEquipment,

View File

@ -13,9 +13,19 @@ from trytond.modules.currency.fields import Monetary
from trytond.modules.product import price_digits
import datetime
from datetime import timedelta
from datetime import timedelta, date
class Cron(metaclass=PoolMeta):
__name__ = 'ir.cron'
@classmethod
def __setup__(cls):
super().__setup__()
cls.method.selection.append(
('optical_equipment.contract|contract_expiration', 'Contract Expiration'),
)
class Contract(Workflow, ModelSQL, ModelView):
'Contracts'
__name__ = 'optical_equipment.contract'
@ -93,6 +103,7 @@ class Contract(Workflow, ModelSQL, ModelView):
cls._buttons.update({
'draft': {'invisible': Eval('state').in_(['draft','closed'])},
'running': {'invisible': Eval('state').in_(['cancelled', 'running'])},
'closed': {'invisible': True},
'cancelled': {'invisible': Eval('state').in_(['draft', 'cancelled'])}
})
@ -121,6 +132,18 @@ class Contract(Workflow, ModelSQL, ModelView):
else:
raise UserError(gettext('optical_equipment.msg_not_sequence_equipment'))
@classmethod
def contract_expiration(cls):
pool = Pool()
Contracts = pool.get('optical_equipment.contract')
contracts_to_expire = cls.search([('state', '=', 'running'),
('end_date', '<=', date.today())])
if contracts_to_expire != []:
for contract in contracts_to_expire:
cls.closed([contract])
@classmethod
@ModelView.button
@Workflow.transition('draft')
@ -131,6 +154,15 @@ class Contract(Workflow, ModelSQL, ModelView):
equipment.contract_history += (contract.id,)
equipment.save()
@classmethod
@ModelView.button
@Workflow.transition('closed')
def closed(cls, contracts):
contract = contracts[0]
for equipment in contract.equipments:
equipment.state = "uncontrated"
equipment.save()
@classmethod
@ModelView.button

View File

@ -70,6 +70,11 @@
<field name="string">Run</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="ir.model.button" id="contract_closed_button">
<field name="name">closed</field>
<field name="string">Closed</field>
<field name="model" search="[('model', '=', 'optical_equipment.contract')]"/>
</record>
<record model="ir.model.button" id="contract_cancelled_button">
<field name="name">cancelled</field>
<field name="string">Cancel</field>
@ -149,5 +154,10 @@
action="act_contract_form"
sequence="30"
id="menu_contract_form"/>
<record model="ir.cron" id="cron_fe_delivery">
<field name="method">optical_equipment.contract|contract_expiration</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">hours</field>
</record>
</data>
</tryton>