From f694f2b8ecb97e6c37fe22cebd0e7e1433395ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Tue, 27 Feb 2024 13:21:13 +0100 Subject: [PATCH] [IMP]pms: Add adults/children board service manage --- pms/models/pms_board_service_line.py | 10 ++++++++++ pms/models/pms_board_service_room_type.py | 11 ++++++++++- .../pms_board_service_room_type_line.py | 19 ++++++++++++++++++- pms/models/pms_reservation.py | 16 ++++++++++------ pms/models/pms_service.py | 18 +++++++++++++++++- .../pms_board_service_room_type_views.xml | 4 +++- pms/views/pms_board_service_views.xml | 2 ++ 7 files changed, 70 insertions(+), 10 deletions(-) diff --git a/pms/models/pms_board_service_line.py b/pms/models/pms_board_service_line.py index d32cb1435..bba4abd1a 100644 --- a/pms/models/pms_board_service_line.py +++ b/pms/models/pms_board_service_line.py @@ -44,6 +44,16 @@ class PmsBoardServiceLine(models.Model): inverse="_inverse_amount", digits=("Product Price"), ) + adults = fields.Boolean( + string="Adults", + help="Apply service to adults", + default=False, + ) + children = fields.Boolean( + string="Children", + help="Apply service to children", + default=False, + ) def _get_default_price(self): if self.product_id: diff --git a/pms/models/pms_board_service_room_type.py b/pms/models/pms_board_service_room_type.py index c8e28bd5d..95dcc6900 100644 --- a/pms/models/pms_board_service_room_type.py +++ b/pms/models/pms_board_service_room_type.py @@ -143,6 +143,15 @@ class PmsBoardServiceRoomType(models.Model): board_service = self.env["pms.board.service"].browse(board_service_id) for line in board_service.board_service_line_ids: cmds.append( - (0, False, {"product_id": line.product_id.id, "amount": line.amount}) + ( + 0, + False, + { + "product_id": line.product_id.id, + "amount": line.amount, + "adults": line.adults, + "children": line.children, + }, + ) ) return {"board_service_line_ids": cmds} diff --git a/pms/models/pms_board_service_room_type_line.py b/pms/models/pms_board_service_room_type_line.py index 80c3677bc..9381a1bea 100644 --- a/pms/models/pms_board_service_room_type_line.py +++ b/pms/models/pms_board_service_room_type_line.py @@ -1,6 +1,7 @@ # Copyright 2017 Dario Lodeiros # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError class PmsBoardServiceRoomTypeLine(models.Model): @@ -40,6 +41,22 @@ class PmsBoardServiceRoomTypeLine(models.Model): default=lambda self: self._default_amount(), digits=("Product Price"), ) + adults = fields.Boolean( + string="Adults", + help="Apply service to adults", + default=False, + ) + children = fields.Boolean( + string="Children", + help="Apply service to children", + default=False, + ) def _default_amount(self): return self.product_id.list_price + + @api.constrains("adults", "children") + def _check_adults_children(self): + for record in self: + if not record.adults and not record.children: + raise ValidationError(_("Adults or Children must be checked")) diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 8ac1e258a..d4eccb218 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -1008,12 +1008,16 @@ class PmsReservation(models.Model): reservation.board_service_room_id.id ) for line in board.board_service_line_ids: - res = { - "product_id": line.product_id.id, - "is_board_service": True, - "folio_id": reservation.folio_id.id, - "reservation_id": reservation.id, - } + if (reservation.adults and line.adults) or ( + reservation.children and line.children + ): + res = { + "product_id": line.product_id.id, + "is_board_service": True, + "folio_id": reservation.folio_id.id, + "reservation_id": reservation.id, + "board_service_line_id": line.id, + } board_services.append((0, False, res)) reservation.service_ids -= old_board_lines reservation.service_ids = board_services diff --git a/pms/models/pms_service.py b/pms/models/pms_service.py index 146539c9b..c0d3ff3a7 100644 --- a/pms/models/pms_service.py +++ b/pms/models/pms_service.py @@ -130,6 +130,12 @@ class PmsService(models.Model): string="Is Board Service", help="Indicates if the service is part of a board service", ) + board_service_line_id = fields.Many2one( + string="Board Service Line", + help="Board Service Line in which this service is included", + comodel_name="pms.board.service.room.type.line", + check_pms_properties=True, + ) # Non-stored related field to allow portal user to # see the image of the product he has ordered product_image = fields.Binary( @@ -537,7 +543,17 @@ class PmsService(models.Model): # TODO: Pass per_person to service line from product default_per_person # When the user modifies the quantity avoid overwriting if self.product_id.per_person: - qty = self.reservation_id.adults + if self.is_board_service: + qty = ( + self.reservation.adults if self.board_service_line_id.adults else 0 + ) + qty += ( + self.reservation.children + if self.board_service_line_id.children + else 0 + ) + else: + qty = self.reservation_id.adults return qty def _get_price_unit_line(self, date=False): diff --git a/pms/views/pms_board_service_room_type_views.xml b/pms/views/pms_board_service_room_type_views.xml index b7e604c06..741ccf691 100644 --- a/pms/views/pms_board_service_room_type_views.xml +++ b/pms/views/pms_board_service_room_type_views.xml @@ -7,8 +7,8 @@
- + + + diff --git a/pms/views/pms_board_service_views.xml b/pms/views/pms_board_service_views.xml index e1439f1fc..3447c420a 100644 --- a/pms/views/pms_board_service_views.xml +++ b/pms/views/pms_board_service_views.xml @@ -18,6 +18,8 @@ + +