# coding: utf-8 # Copyright (C) 2018 - Today: GRAP (http://www.grap.coop) # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from datetime import datetime from openerp import _, api, fields, models from openerp.exceptions import Warning as UserError class IrCronInactivityPeriod(models.Model): _name = 'ir.cron.inactivity.period' _SELECTION_TYPE = [ ('hour', 'Hour'), ] cron_id = fields.Many2one( comodel_name='ir.cron', ondelete='cascade', required=True) type = fields.Selection( string='Type', selection=_SELECTION_TYPE, required=True, default='hour') inactivity_hour_begin = fields.Float( string='Begin Hour', default=0) inactivity_hour_end = fields.Float( string='End Hour', default=1) @api.constrains('inactivity_hour_begin', 'inactivity_hour_end') def _check_activity_hour(self): for period in self: if period.inactivity_hour_begin >= period.inactivity_hour_end: raise UserError(_( "The End Hour should be greater than the Begin Hour")) @api.multi def _check_inactivity_period(self): res = [] for period in self: res.append(period._check_inactivity_period_one()) return res @api.multi def _check_inactivity_period_one(self): self.ensure_one() now = fields.Datetime.context_timestamp(self, datetime.now()) if self.type == 'hour': begin_inactivity = now.replace( hour=int(self.inactivity_hour_begin), minute=int((self.inactivity_hour_begin % 1) * 60), second=0) end_inactivity = now.replace( hour=int(self.inactivity_hour_end), minute=int((self.inactivity_hour_end % 1) * 60), second=0) return now >= begin_inactivity and now < end_inactivity else: raise UserError( _("Unimplemented Feature: Inactivity Period type '%s'") % ( self.type))