diff --git a/hotel/models/hotel_checkin_partner.py b/hotel/models/hotel_checkin_partner.py
index 16758c308..278cb814b 100644
--- a/hotel/models/hotel_checkin_partner.py
+++ b/hotel/models/hotel_checkin_partner.py
@@ -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
diff --git a/hotel/views/hotel_checkin_partner_views.xml b/hotel/views/hotel_checkin_partner_views.xml
index e8d421e24..7256ea93d 100644
--- a/hotel/views/hotel_checkin_partner_views.xml
+++ b/hotel/views/hotel_checkin_partner_views.xml
@@ -26,6 +26,8 @@
domain="[('is_company','=', False)]"/>
+
+
diff --git a/hotel_l10n_es/models/inherit_hotel_checkin_partner.py b/hotel_l10n_es/models/inherit_hotel_checkin_partner.py
index cbd48b012..e7ff16e82 100755
--- a/hotel_l10n_es/models/inherit_hotel_checkin_partner.py
+++ b/hotel_l10n_es/models/inherit_hotel_checkin_partner.py
@@ -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'))