mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
225 lines
9.6 KiB
Python
225 lines
9.6 KiB
Python
import logging
|
|
from openerp import models, fields, api
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Wizard(models.TransientModel):
|
|
_name = 'checkin.wizard'
|
|
|
|
def default_enter_date(self):
|
|
if ('reservation_ids' and 'folio') in self.env.context:
|
|
ids = [item[1] for item in self.env.context.get('reservation_ids')]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
return res.checkin
|
|
if 'enter_date' in self.env.context:
|
|
return self.env.context['enter_date']
|
|
return False
|
|
|
|
def default_exit_date(self):
|
|
if ('reservation_ids' and 'folio') in self.env.context:
|
|
ids = [item[1] for item in self.env.context.get('reservation_ids')]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
return res.checkout
|
|
if 'exit_date' in self.env.context:
|
|
return self.env.context['exit_date']
|
|
return False
|
|
|
|
def default_reservation_id(self):
|
|
if ('reservation_ids' and 'folio') in self.env.context:
|
|
ids = [item[1] for item in self.env.context.get('reservation_ids')]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
if len(reservations) == 1:
|
|
# return current room line (onlyone in this case)
|
|
return reservations
|
|
for res in reservations:
|
|
# return the first room line with free space for a checkin
|
|
# TODO: add 'done' to res.state condition... Maybe too restrictive right now
|
|
if res.checkin_partner_count < (res.adults + res.children) and \
|
|
res.state not in ["cancelled"]:
|
|
return res
|
|
elif 'reservation_id' in self.env.context:
|
|
return self.env['hotel.reservation'].browse(
|
|
self.env.context['reservation_id'])
|
|
|
|
_logger.info('default_reservation_id is FALSE')
|
|
return False
|
|
|
|
def default_partner_id(self):
|
|
# no partner by default. User must search and choose one
|
|
return False
|
|
|
|
def default_checkin_partner_ids(self):
|
|
if ('reservation_ids' and 'folio') in self.env.context:
|
|
ids = [item[1] for item in self.env.context.get('reservation_ids')]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
return res.checkin_partner_ids
|
|
|
|
def default_checkin_partner_ids(self):
|
|
if ('reservation_ids' and 'folio') in self.env.context:
|
|
ids = [item[1] for item in self.env.context.get('reservation_ids')]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
return res.segmentation_id
|
|
|
|
''' TODO: clean-up
|
|
def default_count_checkin_partner(self):
|
|
if 'reservation_ids' and 'folio' in self.env.context:
|
|
ids = [item[1] for item in self.env.context['reservation_ids']]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
return res.checkin_partner_count
|
|
'''
|
|
''' TODO: clean-up
|
|
def default_pending_checkin_partner(self):
|
|
if 'reservation_ids' and 'folio' in self.env.context:
|
|
ids = [item[1] for item in self.env.context['reservation_ids']]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
return res.adults + res.children - res.checkin_partner_count
|
|
'''
|
|
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
|
|
def comp_checkin_list_visible(self):
|
|
if 'partner_id' in self.env.context:
|
|
self.list_checkin_checkin_partner = False
|
|
return
|
|
'''
|
|
def comp_checkin_edit(self):
|
|
if 'edit_checkin_partner' in self.env.context:
|
|
return True
|
|
return False
|
|
|
|
checkin_partner_ids = fields.Many2many('hotel_checkin_partner', 'reservation_id',
|
|
default=default_checkin_partner_ids)
|
|
# count_checkin_partner = fields.Integer('Checkin counter',
|
|
# default=default_count_checkin_partner)
|
|
# pending_checkin_partner = fields.Integer('Checkin pending',
|
|
# default=default_pending_checkin_partner)
|
|
partner_id = fields.Many2one('res.partner',
|
|
default=default_partner_id)
|
|
reservation_id = fields.Many2one('hotel.reservation',
|
|
default=default_reservation_id)
|
|
enter_date = fields.Date(default=default_enter_date,
|
|
required=True)
|
|
exit_date = fields.Date(default=default_exit_date,
|
|
required=True)
|
|
|
|
firstname_checkin_partner = fields.Char('Firstname',
|
|
required=True)
|
|
lastname_checkin_partner = fields.Char('Lastname',
|
|
required=True)
|
|
|
|
email_checkin_partner = fields.Char('E-mail')
|
|
|
|
mobile_checkin_partner = fields.Char('Mobile')
|
|
|
|
segmentation_id = fields.Many2many(
|
|
related='reservation_id.folio_id.segmentation_ids')
|
|
|
|
|
|
''' TODO: clean-up - list of checkins on smart button clean is not used anymore
|
|
list_checkin_checkin_partner = fields.Boolean(compute=comp_checkin_list_visible,
|
|
default=True, store=True)
|
|
'''
|
|
# edit_checkin_checkin_partner = fields.Boolean(default=comp_checkin_edit,
|
|
# store=True)
|
|
|
|
op_select_partner = fields.Selection([
|
|
('S', 'Select a partner for checkin'),
|
|
('C', 'Create a new partner for checkin')
|
|
], default='S', string='Partner for checkin')
|
|
# checkin mode:
|
|
# 0 - no selection made by the user, so hide the client fields
|
|
# 1 - select a client for update his values and do the checkin
|
|
# 2 - create a new client with the values and do the checkin
|
|
checkin_mode = fields.Integer(default=0)
|
|
|
|
@api.multi
|
|
def action_save_check(self):
|
|
# prepare partner values
|
|
if self.op_select_partner == 'S':
|
|
partner_vals = {
|
|
'id': self.partner_id.id,
|
|
'firstname': self.firstname_checkin_partner,
|
|
'lastname': self.lastname_checkin_partner,
|
|
'email': self.email_checkin_partner,
|
|
'mobile': self.mobile_checkin_partner,
|
|
}
|
|
self.partner_id.sudo().write(partner_vals)
|
|
elif self.op_select_partner == 'C':
|
|
partner_vals = {
|
|
'firstname': self.firstname_checkin_partner,
|
|
'lastname': self.lastname_checkin_partner,
|
|
'email': self.email_checkin_partner,
|
|
'mobile': self.mobile_checkin_partner,
|
|
}
|
|
new_partner = self.env['res.partner'].create(partner_vals)
|
|
self.partner_id = self.env['res.partner'].browse(new_partner.id)
|
|
|
|
# prepare checkin values
|
|
checkin_partner_val = {
|
|
'partner_id': self.partner_id.id,
|
|
'enter_date': self.enter_date,
|
|
'exit_date': self.exit_date
|
|
}
|
|
record_id = self.env['hotel.reservation'].browse(
|
|
self.reservation_id.id)
|
|
# save the checkin for this reservation
|
|
record_id.write({
|
|
'checkin_partner_ids': [(0, False, checkin_partner_val)],
|
|
'segmentation_id': self.segmentation_id,
|
|
})
|
|
|
|
# update the state of the current reservation
|
|
if record_id.checkin_partner_count > 0:
|
|
record_id.state = 'booking'
|
|
record_id.is_checkin = False
|
|
folio = self.env['hotel.folio'].browse(self.reservation_id.folio_id.id)
|
|
folio.checkins_reservations -= 1
|
|
|
|
@api.onchange('reservation_id')
|
|
def change_enter_exit_date(self):
|
|
record_id = self.env['hotel.reservation'].browse(
|
|
self.reservation_id.id)
|
|
|
|
self.enter_date = record_id.checkin
|
|
self.exit_date = record_id.checkout
|
|
|
|
''' trying to filter the reservations only to pending checkins ...
|
|
if 'reservation_ids' and 'folio' in self.env.context:
|
|
ids = [item[1] for item in self.env.context['reservation_ids']]
|
|
reservations = self.env['hotel.reservation'].browse(ids)
|
|
for res in reservations:
|
|
_logger.info('reservation checkin_partner_count %d', res.checkin_partner_count)
|
|
|
|
# return {
|
|
# 'domain': {'reservation_id': [('folio_id','=', self.env.context['folio']), 'count_checkin_partner','=','2']},
|
|
# 'warning': {'title': "Warning", 'message': self.env.context['checkin_partner_count']},
|
|
# }
|
|
'''
|
|
|
|
@api.onchange('partner_id')
|
|
def onchange_partner_id(self):
|
|
# update partner fields
|
|
write_vals = {
|
|
'firstname_checkin_partner': self.partner_id.firstname,
|
|
'lastname_checkin_partner': self.partner_id.lastname,
|
|
'email_checkin_partner': self.partner_id.email,
|
|
'mobile_checkin_partner': self.partner_id.mobile,
|
|
}
|
|
# show the checkin fields if a partner is selected
|
|
if self.op_select_partner == 'S' and self.partner_id.id != False:
|
|
write_vals.update({'checkin_mode': 1})
|
|
self.update(write_vals)
|
|
|
|
@api.onchange('op_select_partner')
|
|
def onchange_op_select_partner(self):
|
|
# field one2many return false is record does not exist
|
|
if self.op_select_partner == 'S' and self.partner_id.id:
|
|
self.checkin_mode = 1
|
|
# field one2many return 0 on empty record (nothing typed)
|
|
elif self.op_select_partner == 'C' and self.partner_id.id == 0:
|
|
self.checkin_mode = 2
|