mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[ADD] Hour compute on checkin and required segmentation
This commit is contained in:
@@ -5,6 +5,7 @@ import datetime
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tools import (
|
||||
DEFAULT_SERVER_DATETIME_FORMAT,
|
||||
DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
|
||||
@@ -67,16 +68,6 @@ class HotelCheckinPartner(models.Model):
|
||||
return reservation.checkout
|
||||
return False
|
||||
|
||||
def _default_to_enter(self):
|
||||
tz_hotel = self.env['ir.default'].sudo().get(
|
||||
'res.config.settings', 'tz_hotel')
|
||||
today = fields.Date.context_today(self.with_context(tz=tz_hotel))
|
||||
today_str = fields.Date.from_string(today).strftime(
|
||||
DEFAULT_SERVER_DATE_FORMAT)
|
||||
if self._default_enter_date() == today_str:
|
||||
return True
|
||||
return False
|
||||
|
||||
partner_id = fields.Many2one('res.partner', default=_default_partner_id,
|
||||
required=True)
|
||||
email = fields.Char('E-mail', related='partner_id.email')
|
||||
@@ -88,7 +79,11 @@ class HotelCheckinPartner(models.Model):
|
||||
readonly=True, required=True)
|
||||
enter_date = fields.Date(default=_default_enter_date, required=True)
|
||||
exit_date = fields.Date(default=_default_exit_date, required=True)
|
||||
auto_booking = fields.Boolean('Get in Now', default=_default_to_enter)
|
||||
arrival_hour = fields.Char('Arrival Hour',
|
||||
help="Default Arrival Hour (HH:MM)")
|
||||
departure_hour = fields.Char('Departure Hour',
|
||||
help="Default Departure Hour (HH:MM)")
|
||||
auto_booking = fields.Boolean('Get in Now', default=False)
|
||||
state = fields.Selection([('draft', 'Pending Entry'),
|
||||
('booking', 'On Board'),
|
||||
('done', 'Out'),
|
||||
@@ -135,14 +130,22 @@ class HotelCheckinPartner(models.Model):
|
||||
indoor_partner_ids = record.reservation_id.checkin_partner_ids.\
|
||||
filtered(lambda r: r.id != record.id).mapped('partner_id.id')
|
||||
if indoor_partner_ids.count(record.partner_id.id) > 1:
|
||||
record.partner_id = None
|
||||
raise models.ValidationError(
|
||||
_('This guest is already registered in the room'))
|
||||
record.partner_id = None
|
||||
|
||||
@api.multi
|
||||
def action_on_board(self):
|
||||
for record in self:
|
||||
record.state = 'booking'
|
||||
if record.reservation_id.checkin > fields.Date.today():
|
||||
raise models.ValidationError(
|
||||
_('It is not yet checkin day!'))
|
||||
hour = record._get_arrival_hour()
|
||||
vals = {
|
||||
'state': 'booking',
|
||||
'arrival_hour': hour,
|
||||
}
|
||||
record.update(vals)
|
||||
if record.reservation_id.state == 'confirm':
|
||||
record.reservation_id.state = 'booking'
|
||||
|
||||
@@ -150,5 +153,48 @@ class HotelCheckinPartner(models.Model):
|
||||
def action_done(self):
|
||||
for record in self:
|
||||
if record.state == 'booking':
|
||||
record.state = 'done'
|
||||
hour = record._get_departure_hour()
|
||||
vals = {
|
||||
'state': 'done',
|
||||
'departure_hour': hour,
|
||||
}
|
||||
record.update(vals)
|
||||
return True
|
||||
|
||||
def _get_arrival_hour(self):
|
||||
self.ensure_one()
|
||||
tz_hotel = self.env['ir.default'].sudo().get(
|
||||
'res.config.settings', 'tz_hotel')
|
||||
today = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
datetime.datetime.strptime(fields.Date.today(),
|
||||
DEFAULT_SERVER_DATE_FORMAT))
|
||||
default_arrival_hour = self.env['ir.default'].sudo().get(
|
||||
'res.config.settings', 'default_arrival_hour')
|
||||
if self.reservation_id.checkin < today.strftime(DEFAULT_SERVER_DATE_FORMAT):
|
||||
return default_arrival_hour
|
||||
now = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
datetime.datetime.strptime(fields.Datetime.now(),
|
||||
DEFAULT_SERVER_DATETIME_FORMAT))
|
||||
arrival_hour = now.strftime("%H:%M")
|
||||
return arrival_hour
|
||||
|
||||
def _get_departure_hour(self):
|
||||
self.ensure_one()
|
||||
tz_hotel = self.env['ir.default'].sudo().get(
|
||||
'res.config.settings', 'tz_hotel')
|
||||
today = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
datetime.datetime.strptime(fields.Date.today(),
|
||||
DEFAULT_SERVER_DATE_FORMAT))
|
||||
default_departure_hour = self.env['ir.default'].sudo().get(
|
||||
'res.config.settings', 'default_departure_hour')
|
||||
if self.reservation_id.checkout < today.strftime(DEFAULT_SERVER_DATE_FORMAT):
|
||||
return default_departure_hour
|
||||
now = fields.Datetime.context_timestamp(
|
||||
self.with_context(tz=tz_hotel),
|
||||
datetime.datetime.strptime(fields.Datetime.now(),
|
||||
DEFAULT_SERVER_DATETIME_FORMAT))
|
||||
departure_hour = now.strftime("%H:%M")
|
||||
return departure_hour
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
domain="[('is_company','=', False)]"/>
|
||||
<field name="enter_date"/>
|
||||
<field name="exit_date"/>
|
||||
<field name="arrival_hour"/>
|
||||
<field name="departure_hour"/>
|
||||
</group>
|
||||
<group name="group_left">
|
||||
<field name="reservation_id"/>
|
||||
|
||||
@@ -124,3 +124,6 @@ class HotelCheckinPartner(models.Model):
|
||||
raise UserError(
|
||||
_('To perform the checkin the following data are missing:\
|
||||
%s') % (', '.join(missing_fields)))
|
||||
if not record.reservation_id.segmentation_ids:
|
||||
raise UserError(
|
||||
_('To perform the checkin the segmentation is required'))
|
||||
|
||||
Reference in New Issue
Block a user