From 27d314eac1d1f48933cda65f0302ab5ce88ce566 Mon Sep 17 00:00:00 2001 From: Pablo Quesada Barriuso Date: Tue, 31 Jul 2018 22:20:20 +0200 Subject: [PATCH] [WIP] datetime by date using Odoo --- hotel/models/hotel_reservation.py | 51 +++++++++---------------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py index 213a00c42..2330898ba 100644 --- a/hotel/models/hotel_reservation.py +++ b/hotel/models/hotel_reservation.py @@ -586,18 +586,16 @@ class HotelReservation(models.Model): self.ensure_one() tz_hotel = self.env['ir.default'].sudo().get( 'res.config.settings', 'tz_hotel') - tzinfo = tz.gettz(tz_hotel and str(tz_hotel) or 'UTC') - today = datetime.date(datetime.now(tz=tzinfo)).strftime(DEFAULT_SERVER_DATE_FORMAT) - return fields.Date.from_string(self.checkin) == today + today = fields.Date.context_today(self.with_context(tz=tz_hotel)) + return self.checkin == today @api.model def checkout_is_today(self): self.ensure_one() tz_hotel = self.env['ir.default'].sudo().get( 'res.config.settings', 'tz_hotel') - tzinfo = tz.gettz(tz_hotel and str(tz_hotel) or 'UTC') - today = datetime.date(datetime.now(tz=tzinfo)).strftime(DEFAULT_SERVER_DATE_FORMAT) - return fields.Date.from_string(self.checkout) == today + today = fields.Date.context_today(self.with_context(tz=tz_hotel)) + return self.checkout == today @api.multi def action_cancel(self): @@ -928,7 +926,6 @@ class HotelReservation(models.Model): def on_change_checkin_checkout_product_id(self): _logger.info('on_change_checkin_checkout_product_id') # import wdb; wdb.set_trace() - # TODO: Remove this check once added as contrain if not self.checkin: self.checkin = self._get_default_checkin() if not self.checkout: @@ -951,26 +948,18 @@ class HotelReservation(models.Model): self.room_type_id = self.room_id.room_type_id self.tax_id = [(6, False, self.room_id.room_type_id.taxes_id.ids)] - # UTC -> Hotel tz - tz = self.env['ir.default'].sudo().get('res.config.settings', - 'tz_hotel') - # import wdb; wdb.set_trace() - # chkin_utc_dt = date_utils.get_datetime(self.checkin) - # chkout_utc_dt = date_utils.get_datetime(self.checkout) checkin_dt = fields.Date.from_string(self.checkin) checkout_dt = fields.Date.from_string(self.checkout) + if checkin_dt >= checkout_dt: + self.checkout = (fields.Date.from_string(self.checkin) + timedelta(days=1)).strftime(DEFAULT_SERVER_DATE_FORMAT) + # ensure checkin and checkout are correct before changing the name if self.room_type_id: checkin_str = checkin_dt.strftime('%d/%m/%Y') checkout_str = checkout_dt.strftime('%d/%m/%Y') self.name = self.room_type_id.name + ': ' + checkin_str + ' - '\ + checkout_str - if checkin_dt >= checkout_dt: - _logger.info('checkin_dt >= checkout_dt as expected') - self.checkout = fields.Date.from_string(self.checkin) + timedelta(days=1) - - if self.state == 'confirm' and self.checkin_is_today(): self.is_checkin = True folio = self.env['hotel.folio'].browse(self.folio_id.id) @@ -987,8 +976,6 @@ class HotelReservation(models.Model): ('folio_id', '=', folio.id), ('is_checkout', '=', True) ]) - # days_diff = date_utils.date_diff( - # self.checkin, self.checkout, hours=False) days_diff = (fields.Date.from_string(self.checkout) - fields.Date.from_string(self.checkin)).days rlines = self.prepare_reservation_lines( self.checkin, @@ -1074,11 +1061,9 @@ class HotelReservation(models.Model): if pricelist_id: pricelist_id = int(pricelist_id) old_lines_days = self.mapped('reservation_line_ids.date') - # import wdb; wdb.set_trace() for i in range(0, days): - idate = fields.Date.from_string(dfrom) + timedelta(days=i) - idate_str = fields.Date.to_string(idate) - if update_old_prices or idate_str not in old_lines_days: + idate = (fields.Date.from_string(dfrom) + timedelta(days=i)).strftime(DEFAULT_SERVER_DATE_FORMAT) + if update_old_prices or idate not in old_lines_days: # prod = product_id.with_context( # lang=self.partner_id.lang, # partner=self.partner_id.id, @@ -1095,10 +1080,10 @@ class HotelReservation(models.Model): # line_price = prod.price line_price = product_id.list_price else: - line = self.reservation_line_ids.filtered(lambda r: r.date == idate_str) + line = self.reservation_line_ids.filtered(lambda r: r.date == idate) line_price = line.price cmds.append((0, False, { - 'date': idate_str, + 'date': idate, 'price': line_price })) total_price += line_price @@ -1110,6 +1095,7 @@ class HotelReservation(models.Model): self.adults = self.room_id.capacity @api.multi + # TODO: This onchange has almost the same values than on_change_checkin_checkout_product_id... join ? @api.onchange('checkin', 'checkout', 'room_type_id', 'room_id') def on_change_checkout(self): ''' @@ -1120,18 +1106,12 @@ class HotelReservation(models.Model): ''' _logger.info('on_change_checkout') self.ensure_one() - now_utc_dt = date_utils.now() - # TODO: Remove this check once added as contrain - if not self.checkin: - self.checkin = self._get_default_checkin() - if not self.checkout: - self.checkout = self._get_default_checkout() if self.overbooking: return - checkout_dt = date_utils.get_datetime(self.checkout) + occupied = self.env['hotel.reservation'].get_reservations( self.checkin, - checkout_dt.strftime(DEFAULT_SERVER_DATE_FORMAT)).filtered( + fields.Date.from_string(self.checkout).strftime(DEFAULT_SERVER_DATE_FORMAT)).filtered( lambda r: r.id != self._origin.id) rooms_occupied = occupied.mapped('room_id.id') if self.room_id and self.room_id.id in rooms_occupied: @@ -1222,14 +1202,13 @@ class HotelReservation(models.Model): 3.-Check the reservation dates are not occuped """ _logger.info('check_dates') - if self.checkin >= self.checkout: + if fields.Date.from_string(self.checkin) >= fields.Date.from_string(self.checkout): raise ValidationError(_('Room line Check In Date Should be \ less than the Check Out Date!')) if not self.overbooking and not self._context.get("ignore_avail_restrictions", False): occupied = self.env['hotel.reservation'].get_reservations( self.checkin, self.checkout) - # chkout_utc_dt.strftime(DEFAULT_SERVER_DATE_FORMAT)) occupied = occupied.filtered( lambda r: r.room_id.id == self.room_id.id and r.id != self.id)