From f55b8d5d6e17ed155d1b7539bbe8b5fb545a3af8 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Wed, 24 Jan 2024 18:33:45 +0000 Subject: [PATCH] [IMP] pms-api-rest: adapt services & datamodels (folio, reservation, reservation_line) to swapping mode requirements --- pms_api_rest/datamodels/pms_folio.py | 1 + .../datamodels/pms_reservation_line.py | 5 ++ pms_api_rest/datamodels/pms_search_param.py | 1 + pms_api_rest/services/pms_folio_service.py | 3 ++ .../services/pms_reservation_line_service.py | 51 +++++++++++++++++++ .../services/pms_reservation_service.py | 2 + 6 files changed, 63 insertions(+) diff --git a/pms_api_rest/datamodels/pms_folio.py b/pms_api_rest/datamodels/pms_folio.py index 271489d8d..61267a2ba 100644 --- a/pms_api_rest/datamodels/pms_folio.py +++ b/pms_api_rest/datamodels/pms_folio.py @@ -13,6 +13,7 @@ class PmsFolioSearchParam(Datamodel): filter = fields.String(required=False, allow_none=True) filterByState = fields.String(required=False, allow_none=True) last = fields.Boolean(required=False, allow_none=True) + ids = fields.List(fields.Integer(), required=False) class PmsFolioInfo(Datamodel): diff --git a/pms_api_rest/datamodels/pms_reservation_line.py b/pms_api_rest/datamodels/pms_reservation_line.py index f7597b684..cfecb2910 100644 --- a/pms_api_rest/datamodels/pms_reservation_line.py +++ b/pms_api_rest/datamodels/pms_reservation_line.py @@ -6,6 +6,8 @@ from odoo.addons.datamodel.core import Datamodel class PmsReservationLineSearchParam(Datamodel): _name = "pms.reservation.line.search.param" date = fields.String(required=False, allow_none=False) + dateFrom = fields.String(required=False, allow_none=False) + dateTo = fields.String(required=False, allow_none=False) reservationId = fields.Integer(required=False, allow_none=False) pmsPropertyId = fields.Integer(required=False, allow_none=False) roomId = fields.Integer(required=False, allow_none=False) @@ -23,3 +25,6 @@ class PmsReservationLineInfo(Datamodel): reservationId = fields.Integer(required=False, allow_none=False) pmsPropertyId = fields.Integer(required=False, allow_none=False) isReselling = fields.Boolean(required=False, allow_none=True) + reservationType = fields.String(required=False, allow_none=True) + state = fields.String(required=False, allow_none=True) + isSplitted = fields.Boolean(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_search_param.py b/pms_api_rest/datamodels/pms_search_param.py index dc7f79001..78474734b 100644 --- a/pms_api_rest/datamodels/pms_search_param.py +++ b/pms_api_rest/datamodels/pms_search_param.py @@ -9,3 +9,4 @@ class PmsSearchParam(Datamodel): pmsPropertyId = fields.Integer(required=False, allow_none=True) pmsPropertyIds = fields.List(fields.Integer(), required=False) toAssign = fields.Boolean(required=False, allow_none=True) + ids = fields.List(fields.Integer(), required=False) diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index afca0ed68..b913cbbf5 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -137,6 +137,9 @@ class PmsFolioService(Component): if folio_search_param.last: domain_filter.append([("checkin", ">=", fields.Date.today())]) + if folio_search_param.ids: + domain_filter.append([("folio_id", "in", folio_search_param.ids)]) + if folio_search_param.filter: target = folio_search_param.filter if "@" in target: diff --git a/pms_api_rest/services/pms_reservation_line_service.py b/pms_api_rest/services/pms_reservation_line_service.py index 5c5c0756e..0cb9d8049 100644 --- a/pms_api_rest/services/pms_reservation_line_service.py +++ b/pms_api_rest/services/pms_reservation_line_service.py @@ -48,6 +48,57 @@ class PmsReservationLineService(Component): else: raise MissingError(_("Reservation Line not found")) + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.reservation.line.search.param", is_list=False), + output_param=Datamodel("pms.reservation.line.info", is_list=True), + auth="jwt_api_pms", + ) + def get_reservation_lines(self, pms_reservation_lines_search_param): + result = [] + if ( + pms_reservation_lines_search_param.dateFrom + and pms_reservation_lines_search_param.dateTo + and pms_reservation_lines_search_param.pmsPropertyId + ): + date_from = datetime.strptime(pms_reservation_lines_search_param.dateFrom, "%Y-%m-%d").date() + date_to = datetime.strptime(pms_reservation_lines_search_param.dateTo, "%Y-%m-%d").date() + + domain = [ + ("date", ">=", date_from), + ("date", "<", date_to), + ("pms_property_id", "=", pms_reservation_lines_search_param.pmsPropertyId) + ] + PmsReservationLineInfo = self.env.datamodels["pms.reservation.line.info"] + for reservation_line in self.env["pms.reservation.line"].search(domain): + print(reservation_line.state) + result.append( + PmsReservationLineInfo( + id=reservation_line.id, + date=datetime.combine( + reservation_line.date, datetime.min.time() + ).isoformat(), + price=round(reservation_line.price, 2), + discount=round(reservation_line.discount, 2), + cancelDiscount=round(reservation_line.cancel_discount, 2), + roomId=reservation_line.room_id.id, + reservationId=reservation_line.reservation_id.id, + pmsPropertyId=reservation_line.pms_property_id.id, + isReselling=reservation_line.is_reselling, + reservationType=reservation_line.reservation_id.reservation_type, + state=reservation_line.state, + isSplitted=reservation_line.reservation_id.splitted, + ) + ) + return result + # @restapi.method( # [ # ( diff --git a/pms_api_rest/services/pms_reservation_service.py b/pms_api_rest/services/pms_reservation_service.py index 6ee3af037..ff7c161e1 100644 --- a/pms_api_rest/services/pms_reservation_service.py +++ b/pms_api_rest/services/pms_reservation_service.py @@ -673,6 +673,8 @@ class PmsReservationService(Component): if pms_search_param.toAssign: domain.append(("to_assign", "=", True)) domain.append(("checkin", ">=", fields.Date.today())) + if pms_search_param.ids: + domain.append(("id", "in", pms_search_param.ids)) reservations = self.env["pms.reservation"].search(domain) PmsReservationInfo = self.env.datamodels["pms.reservation.info"] if not reservations: