#This file is part of Presik. The COPYRIGHT file at the top level of # this repository contains the full copyright notices and license terms. from trytond.model import ModelView, ModelSQL, fields, Workflow from trytond.pyson import Eval, Bool STATES = {'readonly': Eval('state') != 'draft'} class Maintenance(Workflow, ModelSQL, ModelView): 'Hotel Maintenance' __name__ = 'hotel.maintenance' room = fields.Many2One('hotel.room', 'Room', required=True, states=STATES) start_date = fields.Date('Start Maintenance', states=STATES) end_date = fields.Date('End Maintenance', states={ 'required': Bool(Eval('start_date')), 'readonly': Eval('state') != 'draft' }) total_days = fields.Function(fields.Integer('Total Days'), 'get_days') issue = fields.Text('Issue', required=True) action = fields.Text('Action', states={ 'required': Eval('state') == 'finished', 'readonly': Eval('state') != 'confirmed' }) inspected_by = fields.Many2One('company.employee', 'Inspected By', required=True) state = fields.Selection([ ('draft', 'Draft'), ('confirmed', 'Confirmed'), ('finished', 'Finished'), ('cancelled', 'Canceled'), ], 'State', readonly=True, select=True) criticality = fields.Selection([ ('low', 'Low'), ('important', 'Important'), ('urgent', 'Urgent'), ], 'Criticality') @classmethod def __setup__(cls): super(Maintenance, cls).__setup__() cls._transitions |= set(( ('draft', 'confirmed'), ('draft', 'cancelled'), ('confirmed', 'draft'), ('cancelled', 'draft'), ('confirmed', 'cancelled'), ('confirmed', 'finished'), ('finished', 'confirmed'), )) cls._buttons.update({ 'confirm': { 'invisible': Eval('state') != 'draft', }, 'finish': { 'invisible': Eval('state') != 'confirmed', }, 'draft': { 'invisible': Eval('state') != 'confirmed', }, 'cancel': { 'invisible': Eval('state') != 'finished', } }) @staticmethod def default_state(): return 'draft' @classmethod @ModelView.button @Workflow.transition('draft') def draft(cls, records): pass @classmethod @ModelView.button @Workflow.transition('cancelled') def cancel(cls, records): pass @classmethod @ModelView.button @Workflow.transition('confirmed') def confirm(cls, records): pass @classmethod @ModelView.button @Workflow.transition('finished') def finish(cls, records): pass @fields.depends('start_date', 'end_date') def on_change_start_date(self): if not self.start_date: self.end_date = None def get_days(self, name): if self.end_date and self.start_date: return (self.end_date - self.start_date).days