Refactory housekeeping
This commit is contained in:
parent
f51ca098f6
commit
2e6cd726be
15
__init__.py
15
__init__.py
|
@ -6,7 +6,6 @@ from . import configuration
|
|||
from . import room
|
||||
from . import booking
|
||||
from . import folio
|
||||
from . import housekeeping
|
||||
from . import company
|
||||
from . import city
|
||||
from . import party
|
||||
|
@ -44,8 +43,8 @@ def register():
|
|||
booking.BookingStatementLine,
|
||||
booking.StatementPaymentForm,
|
||||
statement.StatementLine,
|
||||
housekeeping.Housekeeping,
|
||||
housekeeping.HousekeepingCleaningType,
|
||||
# housekeeping.Housekeeping,
|
||||
# housekeeping.HousekeepingCleaningType,
|
||||
party.Party,
|
||||
channel.SaleChannel,
|
||||
channel.ChannelTax,
|
||||
|
@ -69,14 +68,14 @@ def register():
|
|||
service.ServiceLine,
|
||||
service.ServiceKind,
|
||||
service.CreateDailyServicesStart,
|
||||
housekeeping.HotelHousekeepingTask,
|
||||
housekeeping.HotelTask,
|
||||
housekeeping.HousekeepingServiceStart,
|
||||
room.CleanningDays,
|
||||
room.CleaningType,
|
||||
dash.DashApp,
|
||||
dash.AppHotelPlanner,
|
||||
invoice.InvoiceLine,
|
||||
invoice.Invoice,
|
||||
room.HotelTask,
|
||||
room.HousekeepingStart,
|
||||
# folio.TransferfolioStart,
|
||||
# folio.TransferChargeStart,
|
||||
# folio.CheckOutfolioFailed,
|
||||
|
@ -96,7 +95,7 @@ def register():
|
|||
sale.InvoiceIncomeDailyReport,
|
||||
sale.InvoiceSimplifiedReport,
|
||||
service.ServiceReport,
|
||||
housekeeping.HousekeepingServiceReport,
|
||||
room.HousekeepingReport,
|
||||
module='hotel', type_='report')
|
||||
Pool.register(
|
||||
booking.SelectRooms,
|
||||
|
@ -111,7 +110,7 @@ def register():
|
|||
folio.StatisticsByMonth,
|
||||
folio.ReverseCheckout,
|
||||
service.CreateDailyServices,
|
||||
housekeeping.HousekeepingService,
|
||||
room.Housekeeping,
|
||||
sale.InvoiceIncomeDaily,
|
||||
party.CreateGuest,
|
||||
# folio.ChangeRoom,
|
||||
|
|
BIN
booking.fodt
BIN
booking.fodt
Binary file not shown.
|
@ -49,7 +49,7 @@ class Booking(Workflow, ModelSQL, ModelView):
|
|||
party = fields.Many2One('party.party', 'Customer', required=False,
|
||||
select=True, help="Person or company owner of the booking.",
|
||||
states={
|
||||
'required': Eval('state') == 'check_in',
|
||||
# 'required': Eval('state') == 'check_in',
|
||||
'readonly': Not(In(Eval('state'), ['offer', 'confirmed'])),
|
||||
})
|
||||
contact = fields.Char('Contact', states=STATES_CHECKIN,
|
||||
|
@ -420,6 +420,9 @@ class Booking(Workflow, ModelSQL, ModelView):
|
|||
return
|
||||
|
||||
payment_mode = bk.channel.payment_mode
|
||||
if not payment_mode:
|
||||
raise UserError(gettext('hotel.msg_missing_payment_mode'))
|
||||
|
||||
party = bk.channel.agent.party
|
||||
account_id = Voucher.get_account('receipt', payment_mode)
|
||||
|
||||
|
|
|
@ -38,8 +38,6 @@ class Configuration(ModelSQL, ModelView):
|
|||
'configuration', 'product', 'Default Charges')
|
||||
check_in_time = fields.Time('Check In Time', required=True)
|
||||
check_out_time = fields.Time('Check Out Time', required=True)
|
||||
default_accommodation = fields.Many2One('product.product',
|
||||
'Default Accommodation')
|
||||
taxes_exception_rule = fields.Many2One('account.tax.rule', 'Taxes Exception Rule')
|
||||
default_channel_seller = fields.Many2One('hotel.channel', 'Default Channel')
|
||||
company = fields.Many2One('company.company', 'Company', required=True,
|
||||
|
@ -54,11 +52,11 @@ class Configuration(ModelSQL, ModelView):
|
|||
], 'Full Clean Time')
|
||||
full_clean_lapse = fields.Integer('Full Clean Lapse', help='In Days')
|
||||
age_children_policy = fields.Integer('Age Children Policy', help='In Days')
|
||||
cleaning_check_out = fields.Many2One('hotel.housekeeping.cleaning_type',
|
||||
cleaning_check_out = fields.Many2One('hotel.room.cleaning_type',
|
||||
'Cleaning Check Out')
|
||||
cleaning_check_in = fields.Many2One('hotel.housekeeping.cleaning_type',
|
||||
cleaning_check_in = fields.Many2One('hotel.room.cleaning_type',
|
||||
'Cleaning Check In')
|
||||
cleaning_occupied = fields.Many2One('hotel.housekeeping.cleaning_type',
|
||||
cleaning_occupied = fields.Many2One('hotel.room.cleaning_type',
|
||||
'Cleaning Occupied')
|
||||
quarantine_rooms = fields.Numeric('Quarantine Rooms', digits=(2, 0), help='In days')
|
||||
booking_email_template = fields.Many2One('email.template',
|
||||
|
|
37
folio.py
37
folio.py
|
@ -219,23 +219,21 @@ class Folio(ModelSQL, ModelView):
|
|||
raise UserError(gettext('hotel.msg_missing_select_room'))
|
||||
rec.set_registration_number()
|
||||
rec.check_room()
|
||||
cls.update_room(rec.room, 'dirty')
|
||||
cls.update_room(rec, 'check_in')
|
||||
cls.write(records, {'registration_state': 'check_in'})
|
||||
|
||||
def check_room(self):
|
||||
Housekeeping = Pool().get('hotel.housekeeping')
|
||||
rooms = Housekeeping.search([
|
||||
('room', '=', self.room.id)
|
||||
])
|
||||
if not rooms or rooms[0].state != 'clean':
|
||||
raise UserError(gettext('hotel.msg_room_no_clean', s=self.room.name))
|
||||
if self.room.state != 'clean':
|
||||
raise UserError(
|
||||
gettext('hotel.msg_room_no_clean', s=self.room.name)
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
def check_out(cls, records):
|
||||
for record in records:
|
||||
cls.write([record], {'registration_state': 'check_out'})
|
||||
cls.update_room(record.room, 'dirty')
|
||||
cls.update_room(record, 'check_out')
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
|
@ -257,14 +255,21 @@ class Folio(ModelSQL, ModelView):
|
|||
return 'pending'
|
||||
|
||||
@classmethod
|
||||
def update_room(cls, room, state):
|
||||
Housekeeping = Pool().get('hotel.housekeeping')
|
||||
hk_rooms = Housekeeping.search([
|
||||
('room', '=', room.id),
|
||||
])
|
||||
for hk_room in hk_rooms:
|
||||
hk_room.state = state
|
||||
hk_room.save()
|
||||
def update_room(cls, folio, status):
|
||||
pool = Pool()
|
||||
Configuration = pool.get('hotel.configuration')
|
||||
config = Configuration.get_configuration()
|
||||
cleaning_type_id = None
|
||||
if status in 'check_in' and config.cleaning_occupied:
|
||||
cleaning_type_id = config.cleaning_occupied.id
|
||||
elif status in 'check_out' and config.cleaning_check_out:
|
||||
cleaning_type_id = config.cleaning_check_out.id
|
||||
|
||||
room = folio.room
|
||||
room.state = 'dirty'
|
||||
if cleaning_type_id:
|
||||
room.cleaning_type = cleaning_type_id
|
||||
room.save()
|
||||
|
||||
def get_invoice_state(self, name=None):
|
||||
if self.invoice_line:
|
||||
|
|
Binary file not shown.
|
@ -11,11 +11,16 @@ from trytond.pool import Pool
|
|||
STATES = {'invisible': (Eval('type') != 'service')}
|
||||
|
||||
|
||||
class HousekeepingCleaningType(ModelSQL, ModelView):
|
||||
"Housekeeping Cleaning Type"
|
||||
class RoomCleaningType(ModelSQL, ModelView):
|
||||
"Room Cleaning Type"
|
||||
__name__ = "hotel.housekeeping.cleaning_type"
|
||||
name = fields.Char('Name', required=True, select=True)
|
||||
description = fields.Text('Description')
|
||||
kind = fields.Selection([
|
||||
('tweak', 'Tweak'),
|
||||
('deep', 'Deep'),
|
||||
('standard', 'Standard'),
|
||||
], 'Kind', required=True)
|
||||
|
||||
|
||||
class Housekeeping(Workflow, ModelSQL, ModelView):
|
||||
|
@ -44,8 +49,10 @@ class Housekeeping(Workflow, ModelSQL, ModelView):
|
|||
start_date_assigned = fields.Date('Start Date Assigned')
|
||||
end_date_assigned = fields.Date('End Date Assigned')
|
||||
notes = fields.Text('Notes')
|
||||
check_in_time = fields.Function(fields.Time('Check In Time'), 'get_check_in_time')
|
||||
check_out_time = fields.Function(fields.Time('Check In Time'), 'get_check_out_time')
|
||||
check_in_time = fields.Function(fields.Time('Check In Time'),
|
||||
'get_check_in_time')
|
||||
check_out_time = fields.Function(fields.Time('Check In Time'),
|
||||
'get_check_out_time')
|
||||
amenities = fields.Function(fields.Many2Many('hotel.room-hotel.amenities',
|
||||
'room', 'amenities', 'Amenities'), 'get_amenities')
|
||||
|
||||
|
@ -165,87 +172,3 @@ class Housekeeping(Workflow, ModelSQL, ModelView):
|
|||
# for line in lines:
|
||||
# occupancies.add(line.id)
|
||||
# return list(occupancies)
|
||||
|
||||
|
||||
class HotelTask(ModelSQL, ModelView):
|
||||
"Hotel Task"
|
||||
__name__ = "hotel.task"
|
||||
name = fields.Char('Name Task', required=True, select=True)
|
||||
frecuency = fields.Integer('Frecuency', select=True, help='In days')
|
||||
quantity = fields.Integer('Quantity', select=True)
|
||||
|
||||
|
||||
class HotelHousekeepingTask(ModelView, ModelSQL):
|
||||
'Hotel Housekeeping Task'
|
||||
__name__ = 'hotel.housekeeping.task'
|
||||
housekeeping = fields.Many2One('hotel.housekeeping', 'Hotel Housekeeping',
|
||||
ondelete='CASCADE', select=True, required=True)
|
||||
task = fields.Many2One('hotel.task', 'Task', select=True, required=True)
|
||||
frecuency = fields.Integer('Frecuency', select=True, help='In days')
|
||||
quantity = fields.Integer('Quantity', select=True)
|
||||
|
||||
@fields.depends('task', 'frecuency')
|
||||
def on_change_task(self, name=None):
|
||||
if self.task:
|
||||
self.frecuency = self.task.frecuency
|
||||
|
||||
|
||||
class HousekeepingServiceStart(ModelView):
|
||||
'Print Housekeeping Service Start'
|
||||
__name__ = 'hotel.print_housekeeping_service.start'
|
||||
date = fields.Date('Date', required=True)
|
||||
employee = fields.Many2One('company.employee', 'Employee')
|
||||
company = fields.Many2One('company.company', 'Company', required=True)
|
||||
|
||||
@staticmethod
|
||||
def default_date():
|
||||
Date_ = Pool().get('ir.date')
|
||||
return Date_.today()
|
||||
|
||||
@staticmethod
|
||||
def default_company():
|
||||
return Transaction().context.get('company')
|
||||
|
||||
|
||||
class HousekeepingService(Wizard):
|
||||
'Housekeeping Service'
|
||||
__name__ = 'hotel.print_housekeeping_service'
|
||||
start = StateView('hotel.print_housekeeping_service.start',
|
||||
'hotel.print_housekeeping_service_start_view_form', [
|
||||
Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Open', 'print_', 'tryton-print', default=True),
|
||||
])
|
||||
print_ = StateReport('hotel.print_housekeeping_service.report')
|
||||
|
||||
def do_print_(self, action):
|
||||
company = self.start.company
|
||||
data = {
|
||||
'date': self.start.date,
|
||||
'employee': self.start.employee.id if self.start.employee else None,
|
||||
'company': company.id,
|
||||
}
|
||||
return action, data
|
||||
|
||||
def transition_print_(self):
|
||||
return 'end'
|
||||
|
||||
|
||||
class HousekeepingServiceReport(Report):
|
||||
__name__ = 'hotel.print_housekeeping_service.report'
|
||||
|
||||
@classmethod
|
||||
def get_context(cls, records, header, data):
|
||||
report_context = super().get_context(records, header, data)
|
||||
pool = Pool()
|
||||
Company = pool.get('company.company')
|
||||
Housekeeping = pool.get('hotel.housekeeping')
|
||||
|
||||
dom = []
|
||||
if data['employee']:
|
||||
dom.append(('employee.id', '=', data['employee']))
|
||||
|
||||
housekeepings = Housekeeping.search(dom)
|
||||
report_context['records'] = housekeepings
|
||||
report_context['company'] = Company(data['company']).party.name
|
||||
report_context['date'] = datetime.now()
|
||||
return report_context
|
||||
|
|
|
@ -81,5 +81,8 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<record model="ir.message" id="msg_missing_customer">
|
||||
<field name="text">Missing party or customer to pay!</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_missing_payment_mode">
|
||||
<field name="text">Missing payment mode in channel!</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
184
room.py
184
room.py
|
@ -1,13 +1,27 @@
|
|||
#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
|
||||
from trytond.model import ModelView, ModelSQL, Workflow, fields
|
||||
from trytond.pyson import Eval
|
||||
from trytond.wizard import (
|
||||
Wizard, StateView, Button, StateTransition, StateReport
|
||||
)
|
||||
from trytond.pool import Pool
|
||||
from trytond.report import Report
|
||||
|
||||
|
||||
STATES = {'readonly': (Eval('state') != 'draft')}
|
||||
class CleaningType(ModelSQL, ModelView):
|
||||
"Room Cleaning Type"
|
||||
__name__ = "hotel.room.cleaning_type"
|
||||
name = fields.Char('Name', required=True, select=True)
|
||||
description = fields.Text('Description')
|
||||
kind = fields.Selection([
|
||||
('tweak', 'Tweak'),
|
||||
('deep', 'Deep'),
|
||||
('standard', 'Standard'),
|
||||
], 'Kind', required=True)
|
||||
|
||||
|
||||
class Room(ModelSQL, ModelView):
|
||||
class Room(Workflow, ModelSQL, ModelView):
|
||||
'Room'
|
||||
__name__ = 'hotel.room'
|
||||
name = fields.Char('Name', required=True)
|
||||
|
@ -33,19 +47,87 @@ class Room(ModelSQL, ModelView):
|
|||
# TODO: Maybe add require a Current State field
|
||||
min_unit_price = fields.Numeric('Min. Unit Price', digits=(16, 4))
|
||||
max_unit_price = fields.Numeric('Max. Unit Price', digits=(16, 4))
|
||||
state = fields.Selection([
|
||||
('inspected', 'Inspected'),
|
||||
('dirty', 'Dirty'),
|
||||
('clean', 'Clean'),
|
||||
('maintenance', 'Maintenance'),
|
||||
], 'Status', required=True, readonly=True)
|
||||
state_string = state.translated('state')
|
||||
cleaning_type = fields.Many2One('hotel.room.cleaning_type',
|
||||
'Cleaning Type', required=False)
|
||||
last_check_in = fields.DateTime('Last Check In')
|
||||
last_check_out = fields.DateTime('Last Check Out')
|
||||
housekeeping = fields.Many2One('company.employee', 'Employee')
|
||||
notes = fields.Text('Notes')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Room, cls).__setup__()
|
||||
cls._transitions |= set((
|
||||
('clean', 'dirty'),
|
||||
('clean', 'inspected'),
|
||||
('clean', 'maintenance'),
|
||||
('dirty', 'clean'),
|
||||
('dirty', 'maintenance'),
|
||||
('dirty', 'inspected'),
|
||||
('maintenance', 'inspected'),
|
||||
('maintenance', 'dirty'),
|
||||
('inspected', 'dirty'),
|
||||
('inspected', 'maintenance'),
|
||||
('inspected', 'clean'),
|
||||
))
|
||||
cls._buttons.update({
|
||||
'clean': {
|
||||
'invisible': Eval('state').in_(['maintenance', 'clean']),
|
||||
},
|
||||
'dirty': {
|
||||
'invisible': Eval('state').in_(['dirty']),
|
||||
},
|
||||
'inspected': {
|
||||
'invisible': Eval('state').in_(['inspected']),
|
||||
},
|
||||
'maintenance': {
|
||||
'invisible': Eval('state').in_(['maintenance']),
|
||||
},
|
||||
})
|
||||
|
||||
@staticmethod
|
||||
def default_active():
|
||||
return True
|
||||
|
||||
@fields.depends('start_mnt', 'end_mnt')
|
||||
def on_change_start_mnt(self):
|
||||
if not self.start_mnt:
|
||||
self.end_mnt = None
|
||||
@staticmethod
|
||||
def default_state():
|
||||
return 'dirty'
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('clean')
|
||||
def clean(cls, records):
|
||||
for rec in records:
|
||||
rec.cleaning_type = None
|
||||
rec.save()
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('dirty')
|
||||
def dirty(cls, records):
|
||||
Config = Pool().get('hotel.configuration')
|
||||
config = Config.get_configuration()
|
||||
for rec in records:
|
||||
rec.cleaning_type = config.cleaning_occupied.id
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('maintenance')
|
||||
def maintenance(cls, records):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('inspected')
|
||||
def inspected(cls, records):
|
||||
pass
|
||||
|
||||
|
||||
class RoomAmenities(ModelSQL):
|
||||
|
@ -74,10 +156,6 @@ class Amenities(ModelSQL, ModelView):
|
|||
'invisible': Eval('type') != 'lingerie',
|
||||
}, depends=['type'])
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Amenities, cls).__setup__()
|
||||
|
||||
|
||||
class RoomClassification(ModelSQL, ModelView):
|
||||
'Room Classification'
|
||||
|
@ -109,3 +187,87 @@ class RoomTemplate(ModelSQL):
|
|||
ondelete='CASCADE')
|
||||
template = fields.Many2One('product.template', 'Product Template',
|
||||
required=True, ondelete='CASCADE')
|
||||
|
||||
|
||||
class HousekeepingStart(ModelView):
|
||||
'Print Housekeeping Service Start'
|
||||
__name__ = 'hotel.print_housekeeping.start'
|
||||
date = fields.Date('Date', required=True)
|
||||
employee = fields.Many2One('company.employee', 'Employee')
|
||||
company = fields.Many2One('company.company', 'Company', required=True)
|
||||
|
||||
@staticmethod
|
||||
def default_date():
|
||||
Date_ = Pool().get('ir.date')
|
||||
return Date_.today()
|
||||
|
||||
@staticmethod
|
||||
def default_company():
|
||||
return Transaction().context.get('company')
|
||||
|
||||
|
||||
class Housekeeping(Wizard):
|
||||
'Housekeeping Service'
|
||||
__name__ = 'hotel.print_housekeeping'
|
||||
start = StateView('hotel.print_housekeeping.start',
|
||||
'hotel.print_housekeeping_start_view_form', [
|
||||
Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Open', 'print_', 'tryton-print', default=True),
|
||||
])
|
||||
print_ = StateReport('hotel.print_housekeeping.report')
|
||||
|
||||
def do_print_(self, action):
|
||||
company = self.start.company
|
||||
data = {
|
||||
'date': self.start.date,
|
||||
'employee': self.start.employee.id if self.start.employee else None,
|
||||
'company': company.id,
|
||||
}
|
||||
return action, data
|
||||
|
||||
def transition_print_(self):
|
||||
return 'end'
|
||||
|
||||
|
||||
class HousekeepingReport(Report):
|
||||
__name__ = 'hotel.print_housekeeping.report'
|
||||
|
||||
@classmethod
|
||||
def get_context(cls, records, header, data):
|
||||
report_context = super().get_context(records, header, data)
|
||||
pool = Pool()
|
||||
Company = pool.get('company.company')
|
||||
Housekeeping = pool.get('hotel.housekeeping')
|
||||
|
||||
dom = []
|
||||
if data['employee']:
|
||||
dom.append(('employee.id', '=', data['employee']))
|
||||
|
||||
housekeepings = Housekeeping.search(dom)
|
||||
report_context['records'] = housekeepings
|
||||
report_context['company'] = Company(data['company'])
|
||||
report_context['date'] = datetime.now()
|
||||
return report_context
|
||||
|
||||
|
||||
class HotelTask(ModelSQL, ModelView):
|
||||
"Hotel Task"
|
||||
__name__ = "hotel.task"
|
||||
name = fields.Char('Name Task', required=True, select=True)
|
||||
frecuency = fields.Integer('Frecuency', select=True, help='In days')
|
||||
quantity = fields.Integer('Quantity', select=True)
|
||||
|
||||
|
||||
# class HotelHousekeepingTask(ModelView, ModelSQL):
|
||||
# 'Hotel Housekeeping Task'
|
||||
# __name__ = 'hotel.housekeeping.task'
|
||||
# room = fields.Many2One('hotel.room', 'Hotel Housekeeping',
|
||||
# ondelete='CASCADE', select=True, required=True)
|
||||
# task = fields.Many2One('hotel.task', 'Task', select=True, required=True)
|
||||
# frecuency = fields.Integer('Frecuency', select=True, help='In days')
|
||||
# quantity = fields.Integer('Quantity', select=True)
|
||||
#
|
||||
# @fields.depends('task', 'frecuency')
|
||||
# def on_change_task(self, name=None):
|
||||
# if self.task:
|
||||
# self.frecuency = self.task.frecuency
|
||||
|
|
145
room.xml
145
room.xml
|
@ -193,5 +193,150 @@ this repository contains the full copyright notices and license terms. -->
|
|||
</record>
|
||||
<menuitem name="Room Classification" parent="hotel.menu_configuration" sequence="50"
|
||||
action="act_room_classification_form" id="menu_hotel_room_classification"/>
|
||||
|
||||
<record model="ir.ui.view" id="room_housekeeping_view_form">
|
||||
<field name="model">hotel.room</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">room_housekeeping_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="room_housekeeping_view_tree">
|
||||
<field name="model">hotel.room</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">room_housekeeping_tree</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window" id="act_room_housekeeping_form">
|
||||
<field name="name">Housekeeping</field>
|
||||
<field name="res_model">hotel.room</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_room_housekeeping_form_view1">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view" ref="room_housekeeping_view_tree"/>
|
||||
<field name="act_window" ref="act_room_housekeeping_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_room_housekeeping_form_view2">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view" ref="room_housekeeping_view_form"/>
|
||||
<field name="act_window" ref="act_room_housekeeping_form"/>
|
||||
</record>
|
||||
<menuitem parent="menu_hotel" sequence="30" icon="hotel-housekeeping"
|
||||
action="act_room_housekeeping_form" id="menu_housekeeping_form"/>
|
||||
|
||||
<!-- Model Access -->
|
||||
<!-- <record model="ir.model.access" id="access_housekeeping">
|
||||
<field name="model" search="[('model', '=', 'hotel.housekeeping')]"/>
|
||||
<field name="perm_read" eval="False"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_housekeeping_group_hotel">
|
||||
<field name="model" search="[('model', '=', 'hotel.housekeeping')]"/>
|
||||
<field name="group" ref="group_hotel"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_housekeeping_group_hotel_frontdesk">
|
||||
<field name="model" search="[('model', '=', 'hotel.housekeeping')]"/>
|
||||
<field name="group" ref="group_hotel_frontdesk"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.model.access" id="access_housekeeping_group_hotel_admin">
|
||||
<field name="model" search="[('model', '=', 'hotel.housekeeping')]"/>
|
||||
<field name="group" ref="group_hotel_admin"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record> -->
|
||||
|
||||
<record model="ir.ui.view" id="room_cleaning_type_view_form">
|
||||
<field name="model">hotel.room.cleaning_type</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">room_cleaning_type_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="room_cleaning_type_view_tree">
|
||||
<field name="model">hotel.room.cleaning_type</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">room_cleaning_type_tree</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window" id="act_room_cleaning_type_form">
|
||||
<field name="name">Cleaning Type</field>
|
||||
<field name="res_model">hotel.room.cleaning_type</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_room_cleaning_type_form_view1">
|
||||
<field name="sequence" eval="15"/>
|
||||
<field name="view" ref="room_cleaning_type_view_tree"/>
|
||||
<field name="act_window" ref="act_room_cleaning_type_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_room_cleaning_type_form_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view" ref="room_cleaning_type_view_form"/>
|
||||
<field name="act_window" ref="act_room_cleaning_type_form"/>
|
||||
</record>
|
||||
<menuitem name="Cleaning Type" parent="hotel.menu_configuration"
|
||||
sequence="50" action="act_room_cleaning_type_form"
|
||||
id="menu_hotel_room_cleaning_type"/>
|
||||
|
||||
<!-- <record model="ir.ui.view" id="housekeeping_task_view_form">
|
||||
<field name="model">hotel.housekeeping.task</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">housekeeping_task_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="housekeeping_task_view_tree">
|
||||
<field name="model">hotel.housekeeping.task</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">housekeeping_task_tree</field>
|
||||
</record> -->
|
||||
|
||||
<record model="ir.ui.view" id="task_view_form">
|
||||
<field name="model">hotel.task</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">task_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="task_view_tree">
|
||||
<field name="model">hotel.task</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">task_tree</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window" id="act_task_housekeeping_form">
|
||||
<field name="name">Tasks Housekeeping</field>
|
||||
<field name="res_model">hotel.task</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_task_housekeeping_form_view1">
|
||||
<field name="sequence" eval="15"/>
|
||||
<field name="view" ref="task_view_tree"/>
|
||||
<field name="act_window" ref="act_task_housekeeping_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_task_housekeeping_form_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view" ref="task_view_form"/>
|
||||
<field name="act_window" ref="act_task_housekeeping_form"/>
|
||||
</record>
|
||||
<menuitem name="Task HouseKeeping" parent="hotel.menu_configuration" sequence="50"
|
||||
action="act_task_housekeeping_form" id="menu_hotel_task_housekeeping"/>
|
||||
|
||||
<record model="ir.action.report" id="report_housekeeping">
|
||||
<field name="name">Housekeeping Report</field>
|
||||
<field name="model"></field>
|
||||
<field name="report_name">hotel.print_housekeeping.report</field>
|
||||
<field name="report">hotel/housekeeping.fods</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="print_housekeeping_start_view_form">
|
||||
<field name="model">hotel.print_housekeeping.start</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">housekeeping_start_form</field>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="wizard_print_housekeeping">
|
||||
<field name="name">Housekeeping Report</field>
|
||||
<field name="wiz_name">hotel.print_housekeeping</field>
|
||||
</record>
|
||||
<menuitem parent="hotel.menu_reporting" id="menu_housekeeping_report"
|
||||
action="wizard_print_housekeeping"/>
|
||||
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[tryton]
|
||||
version=6.0.24
|
||||
version=6.0.25
|
||||
depends:
|
||||
party
|
||||
company
|
||||
|
@ -23,7 +23,6 @@ xml:
|
|||
location.xml
|
||||
booking.xml
|
||||
folio.xml
|
||||
housekeeping.xml
|
||||
company.xml
|
||||
city.xml
|
||||
party.xml
|
||||
|
|
|
@ -10,8 +10,6 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<field name="hotel_service_sequence"/>
|
||||
<label name="registration_card_sequence"/>
|
||||
<field name="registration_card_sequence"/>
|
||||
<label name="default_accommodation"/>
|
||||
<field name="default_accommodation"/>
|
||||
<label name="check_in_time"/>
|
||||
<field name="check_in_time"/>
|
||||
<label name="check_out_time"/>
|
||||
|
@ -26,8 +24,6 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<field name="storage_by_default"/>
|
||||
<label name="payment_term"/>
|
||||
<field name="payment_term"/>
|
||||
<label name="default_channel_seller"/>
|
||||
<field name="default_channel_seller"/>
|
||||
<label name="age_children_policy"/>
|
||||
<field name="age_children_policy"/>
|
||||
<label name="booking_email_template"/>
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="booking_sequence"/>
|
||||
<field name="company"/>
|
||||
<field name="check_in_time"/>
|
||||
<field name="check_out_time"/>
|
||||
|
|
|
@ -4,6 +4,8 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<form>
|
||||
<label name="name"/>
|
||||
<field name="name"/>
|
||||
<label name="kind"/>
|
||||
<field name="kind"/>
|
||||
<separator name="description" colspan="4"/>
|
||||
<field name="description" colspan="4"/>
|
||||
</form>
|
|
@ -3,5 +3,6 @@
|
|||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="kind"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
|
@ -2,33 +2,23 @@
|
|||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<label name="room"/>
|
||||
<field name="room"/>
|
||||
<label name="employee"/>
|
||||
<field name="employee"/>
|
||||
<label name="availability"/>
|
||||
<field name="availability"/>
|
||||
<label name="state"/>
|
||||
<field name="state"/>
|
||||
<label name="start_date_assigned"/>
|
||||
<field name="start_date_assigned"/>
|
||||
<label name="end_date_assigned"/>
|
||||
<field name="end_date_assigned"/>
|
||||
<label name="name"/>
|
||||
<field name="name"/>
|
||||
<label name="housekeeping"/>
|
||||
<field name="housekeeping" widget="selection"/>
|
||||
<label name="cleaning_type"/>
|
||||
<field name="cleaning_type" widget="selection"/>
|
||||
<label name="state"/>
|
||||
<field name="state"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Tasks" id="tasks">
|
||||
<field name="tasks" colspan="2"/>
|
||||
<!-- <field name="tasks" colspan="2"/> -->
|
||||
<field name="amenities" colspan="2"/>
|
||||
</page>
|
||||
<page string="Info Addtional" id="comments">
|
||||
<separator string="Check List" colspan="4" id="check_list"/>
|
||||
<field name="check_list" colspan="4"/>
|
||||
<separator string="Notes" colspan="4" id="notes"/>
|
||||
<field name="notes" colspan="4"/>
|
||||
</page>
|
||||
<page string="Amenities" id="amenities">
|
||||
</page>
|
||||
</notebook>
|
||||
<group col="5" colspan="4" id="buttons">
|
||||
<button name="clean" string="Clean"
|
|
@ -2,11 +2,10 @@
|
|||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree >
|
||||
<field name="room"/>
|
||||
<field name="employee"/>
|
||||
<field name="name"/>
|
||||
<field name="housekeeping"/>
|
||||
<field name="state"/>
|
||||
<field name="cleaning_type"/>
|
||||
<field name="availability"/>
|
||||
<button name="clean" string="Clean"/>
|
||||
<button name="dirty" string="Dirty"/>
|
||||
<button name="inspected" string="Inspected"/>
|
Loading…
Reference in New Issue