trytonpsk-hotel/operation.py

102 lines
3.0 KiB
Python

#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