From ae282e0701a27bbfaf529b6734a9619912cecee3 Mon Sep 17 00:00:00 2001 From: Miguel Padin Date: Fri, 13 Jun 2025 20:08:32 +0100 Subject: [PATCH] [FIX] pms-api-rest: add new endpoint to create reservations belonging to existent folio --- pms_api_rest/datamodels/pms_reservation.py | 4 +- pms_api_rest/services/pms_folio_service.py | 43 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/pms_api_rest/datamodels/pms_reservation.py b/pms_api_rest/datamodels/pms_reservation.py index 5f0c05be1f..bb9280b355 100644 --- a/pms_api_rest/datamodels/pms_reservation.py +++ b/pms_api_rest/datamodels/pms_reservation.py @@ -104,7 +104,9 @@ class PmsReservationInfo(Datamodel): nights = fields.Integer(required=False, allow_none=True) numServices = fields.Integer(required=False, allow_none=True) - reservationLines = fields.List(NestedModel("pms.reservation.line.info")) + reservationLines = fields.List( + NestedModel("pms.reservation.line.info"), required=False, allow_none=True + ) services = fields.List( NestedModel("pms.service.info"), required=False, allow_none=True ) diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index 97118e5558..275f3a608b 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -696,6 +696,49 @@ def get_folio_reservations(self, folio_id): ) return reservations + @restapi.method( + [ + ( + [ + "//reservations", + ], + "POST", + ) + ], + input_param=Datamodel("pms.folio.info", is_list=False), + auth="jwt_api_pms", + ) + def create_folio_reservations(self, folio_id, folio_info): + folio_record = self.env["pms.folio"].sudo().search([("id", "=", folio_id)]) + if not folio_record: + raise MissingError(_("Folio not found")) + pms_api_check_access(user=self.env.user, records=folio_record) + for reservation in folio_info.reservations: + new_reservation_record = self.env["pms.reservation"].create( + { + "folio_id": folio_record.id, + "pricelist_id": folio_info.pricelistId, + "pms_property_id": folio_record.pms_property_id.id, + "checkin": datetime.strptime( + reservation.checkin, "%Y-%m-%d" + ).date(), + "checkout": datetime.strptime( + reservation.checkout, "%Y-%m-%d" + ).date(), + "room_type_id": reservation.roomTypeId, + "adults": reservation.adults, + "children": reservation.children or 0, + "board_service_room_id": reservation.boardServiceId, + "preferred_room_id": reservation.preferredRoomId + if reservation.preferredRoomId + else None, + "splitted": reservation.isSplitted + if reservation.isSplitted + else False, + "reservation_type": reservation.reservationType or "normal", + } + ) + @restapi.method( [ (