from odoo import models, fields, api, _ from odoo.exceptions import UserError class Subscribe(models.TransientModel): _name = 'beesdoo.shift.extension' _inherit = 'beesdoo.shift.action_mixin' def _get_default_extension_delay(self): return int(self.env['ir.config_parameter'].get_param('default_extension_delay', 28)) extension_start_date = fields.Date(string="Start date for the extension", default=fields.Date.today, readonly=True) auto = fields.Boolean("Auto Extension", default=False) extension_days = fields.Integer(default=_get_default_extension_delay) @api.multi def auto_ext(self): self = self._check(group='beesdoo_shift.group_shift_attendance') status_id = self.env['cooperative.status'].search([('cooperator_id', '=', self.cooperator_id.id)]) status_id.sudo().write({'extension_start_time': self.extension_start_date}) @api.multi def extension(self): self = self._check() #maybe a different group grace_delay = int(self.env['ir.config_parameter'].get_param('default_grace_delay', 10)) status_id = self.env['cooperative.status'].search([('cooperator_id', '=', self.cooperator_id.id)]) if not status_id.extension_start_time: raise UserError(_('You should not make a manual extension when the grace delay has not been triggered yet')) today_delay = (status_id.today - status_id.extension_start_time).days - grace_delay if today_delay < 0: raise UserError(_('You should not start a manual extension during the grace delay')) status_id.sudo().write({'time_extension': self.extension_days + today_delay})