From d7c193005d4b0783bfcea36d6cefc6d842dd9495 Mon Sep 17 00:00:00 2001 From: Dario Lodeiros Date: Sun, 28 Apr 2019 12:45:37 +0200 Subject: [PATCH] [ADD] Hour compute on checkin and required segmentation --- hotel/models/hotel_checkin_partner.py | 74 +++++++++++++++---- hotel/views/hotel_checkin_partner_views.xml | 2 + .../models/inherit_hotel_checkin_partner.py | 3 + 3 files changed, 65 insertions(+), 14 deletions(-) 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'))