From dd444f12adb7654f96551f07685968721c8cac16 Mon Sep 17 00:00:00 2001 From: Dario Lodeiros Date: Sat, 8 Dec 2018 17:35:07 +0100 Subject: [PATCH] [ADD] Extra bed Logic and demo data --- hotel/data/hotel_demo.xml | 6 ++++-- hotel/models/hotel_reservation.py | 12 ++++++++---- hotel/models/hotel_room.py | 7 +++++++ hotel/models/hotel_service.py | 3 +++ hotel/models/hotel_service_line.py | 11 +++++++---- hotel/models/inherited_product_template.py | 2 +- hotel/views/hotel_room_views.xml | 1 + hotel/views/inherited_product_template_views.xml | 2 +- 8 files changed, 32 insertions(+), 12 deletions(-) diff --git a/hotel/data/hotel_demo.xml b/hotel/data/hotel_demo.xml index 8a178cb52..ee34db3c8 100644 --- a/hotel/data/hotel_demo.xml +++ b/hotel/data/hotel_demo.xml @@ -152,6 +152,7 @@ 2 + 1 Double-202 @@ -188,9 +189,10 @@ 15.0 service False - False - True + True + False 1 + True diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py index 8406eee33..8d7b3e7b6 100644 --- a/hotel/models/hotel_reservation.py +++ b/hotel/models/hotel_reservation.py @@ -353,8 +353,8 @@ class HotelReservation(models.Model): service.update(service.prepare_service_lines( dfrom=checkin, days=days_diff, - per_person=product.per_person, - persons=reservation.adults, + per_person=service.product_id.per_person, + persons=service.ser_room_line.adults, old_line_days=service.service_line_ids )) if ('checkin' in vals and record.checkin != vals['checkin']) or \ @@ -485,7 +485,9 @@ class HotelReservation(models.Model): @api.constrains('adults') def _check_adults(self): for record in self: - if record.adults > record.room_id.capacity: + extra_bed = record.service_ids.filtered( + lambda r: r.product_id.is_extra_bed == True) + if record.adults > record.room_id.get_capacity(len(extra_bed)): raise ValidationError( _("Reservation persons can't be higher than room capacity")) if record.adults == 0: @@ -499,7 +501,9 @@ class HotelReservation(models.Model): def onchange_room_id(self): if self.room_id: write_vals = {} - if self.room_id.capacity < self.adults: + extra_bed = self.service_ids.filtered( + lambda r: r.product_id.is_extra_bed == True) + if self.room_id.get_capacity(len(extra_bed)) < self.adults: raise UserError( _('%s people do not fit in this room! ;)') % (self.adults)) if self.adults == 0: diff --git a/hotel/models/hotel_room.py b/hotel/models/hotel_room.py index a71d5c71c..fcbf4224e 100644 --- a/hotel/models/hotel_room.py +++ b/hotel/models/hotel_room.py @@ -32,8 +32,15 @@ class HotelRoom(models.Model): help="A description of the Product that you want to communicate to " " your customers. This description will be copied to every Sales " " Order, Delivery Order and Customer Invoice/Credit Note") + extra_beds_allowed = fields.Integer('Extra beds allowed', + default='0', + required=True) @api.constrains('capacity') def _check_capacity(self): if self.capacity < 1: raise ValidationError(_("Room capacity can't be less than one")) + + @api.multi + def get_capacity(self, extra_bed=0): + return self.capacity + extra_bed diff --git a/hotel/models/hotel_service.py b/hotel/models/hotel_service.py index 26c52c7b6..c19aaddbc 100644 --- a/hotel/models/hotel_service.py +++ b/hotel/models/hotel_service.py @@ -145,6 +145,9 @@ class HotelService(models.Model): per_person=product.per_person, persons=reservation.adults, old_line_days=self.service_line_ids)) + if record.product_id.daily_limit > 0: + for day in record.service_line_ids: + day.no_free_resources() @api.model def prepare_service_lines(self, **kwargs): diff --git a/hotel/models/hotel_service_line.py b/hotel/models/hotel_service_line.py index 94956c6e2..2afcf7673 100644 --- a/hotel/models/hotel_service_line.py +++ b/hotel/models/hotel_service_line.py @@ -20,12 +20,15 @@ class HotelServiceLine(models.Model): for record in self: limit = record.product_id.daily_limit if limit > 0: - out_qty = sum(self.env['hotel.service.line'].search([( - 'product_id', '=', record.product_id, - 'date', '=', record.date)]).mapped('day_qty')) + out_qty = sum(self.env['hotel.service.line'].search([ + ('product_id', '=', record.product_id.id), + ('date', '=', record.date), + ('service_id', '!=', record.service_id.id) + ]).mapped('day_qty')) if limit < out_qty + record.day_qty: raise ValidationError( - _("Limit exceeded for %s")% record.date) + _("%s limit exceeded for %s")% (record.service_id.product_id.name, + record.date)) diff --git a/hotel/models/inherited_product_template.py b/hotel/models/inherited_product_template.py index 2ae139ff0..5a1409757 100644 --- a/hotel/models/inherited_product_template.py +++ b/hotel/models/inherited_product_template.py @@ -6,7 +6,7 @@ from openerp import models, fields class ProductTemplate(models.Model): _inherit = "product.template" - is_hotel_service = fields.Boolean('Is a Hotel Service', default=False) per_day = fields.Boolean('Unit increment per day') per_person = fields.Boolean('Unit increment per person') daily_limit = fields.Integer('Daily limit') + is_extra_bed = fields.Boolean('Is extra bed', default=False) diff --git a/hotel/views/hotel_room_views.xml b/hotel/views/hotel_room_views.xml index 137ca6579..e99531004 100644 --- a/hotel/views/hotel_room_views.xml +++ b/hotel/views/hotel_room_views.xml @@ -34,6 +34,7 @@ + diff --git a/hotel/views/inherited_product_template_views.xml b/hotel/views/inherited_product_template_views.xml index ba3dd61e3..1f99d3e0a 100644 --- a/hotel/views/inherited_product_template_views.xml +++ b/hotel/views/inherited_product_template_views.xml @@ -10,7 +10,7 @@ - +