From 473510a60b15ef48db803f654bbd9f0acd510b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Thu, 26 Nov 2020 15:43:56 +0100 Subject: [PATCH] [ADD] checkin/out dateime compute with property timezone --- pms/models/pms_property.py | 22 ++++++++++++++++++++++ pms/models/pms_reservation.py | 10 ++++++++-- pms/views/pms_reservation_views.xml | 6 +++--- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/pms/models/pms_property.py b/pms/models/pms_property.py index ebbfa19bf..76295607d 100644 --- a/pms/models/pms_property.py +++ b/pms/models/pms_property.py @@ -4,9 +4,13 @@ import time +import pytz + from odoo import _, api, fields, models from odoo.exceptions import ValidationError +from odoo.addons.base.models.res_partner import _tz_get + class PmsProperty(models.Model): _name = "pms.property" @@ -54,6 +58,14 @@ class PmsProperty(models.Model): folio_sequence_id = fields.Many2one( "ir.sequence", "Folio Sequence", check_company=True, copy=False ) + tz = fields.Selection( + _tz_get, + string="Timezone", + required=True, + default=lambda self: self.env.user.tz or "UTC", + help="This field is used in order to define \ + in which timezone the arrival/departure will work.", + ) # Constraints and onchanges @api.constrains("default_arrival_hour") @@ -83,3 +95,13 @@ class PmsProperty(models.Model): record.default_departure_hour, ) ) + + def date_property_timezone(self, date): + self.ensure_one() + tz_property = self.tz + date = pytz.timezone(tz_property).localize(date) + date = date.replace(tzinfo=None) + date = pytz.timezone(self.env.user.tz).localize(date) + date = date.astimezone(pytz.utc) + date = date.replace(tzinfo=None) + return date diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 604a837e8..c01237849 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -472,9 +472,12 @@ class PmsReservation(models.Model): checkin_hour = int(reservation.arrival_hour[0:2]) checkin_minut = int(reservation.arrival_hour[3:5]) checkin_time = datetime.time(checkin_hour, checkin_minut) - reservation.checkin_datetime = datetime.datetime.combine( + checkin_datetime = datetime.datetime.combine( reservation.checkin, checkin_time ) + reservation.checkin_datetime = ( + reservation.pms_property_id.date_property_timezone(checkin_datetime) + ) @api.depends("checkout", "departure_hour") def _compute_checkout_datetime(self): @@ -482,9 +485,12 @@ class PmsReservation(models.Model): checkout_hour = int(reservation.departure_hour[0:2]) checkout_minut = int(reservation.departure_hour[3:5]) checkout_time = datetime.time(checkout_hour, checkout_minut) - reservation.checkout_datetime = datetime.datetime.combine( + checkout_datetime = datetime.datetime.combine( reservation.checkout, checkout_time ) + reservation.checkout_datetime = ( + reservation.pms_property_id.date_property_timezone(checkout_datetime) + ) @api.depends( "reservation_line_ids.date", "overbooking", "state", "preferred_room_id" diff --git a/pms/views/pms_reservation_views.xml b/pms/views/pms_reservation_views.xml index 3ce4b6eeb..3a13a911d 100644 --- a/pms/views/pms_reservation_views.xml +++ b/pms/views/pms_reservation_views.xml @@ -543,12 +543,12 @@ pms.reservation