From 74578e1c1a0c0b815843e5ba040916e8a1718c96 Mon Sep 17 00:00:00 2001 From: miguelpadin Date: Wed, 6 Jul 2022 11:14:23 +0200 Subject: [PATCH] [WIP] pms-api-rest: pending update reservation by id --- pms_api_rest/datamodels/pms_amenity.py | 3 +-- .../datamodels/pms_reservation_line.py | 14 +++++----- pms_api_rest/datamodels/pms_room.py | 10 ++++--- pms_api_rest/services/pms_amenity_service.py | 5 ++-- pms_api_rest/services/pms_folio_service.py | 6 +++-- .../services/pms_reservation_service.py | 21 +++++++++++++++ pms_api_rest/services/pms_room_service.py | 27 +++++++++++++++++++ 7 files changed, 70 insertions(+), 16 deletions(-) diff --git a/pms_api_rest/datamodels/pms_amenity.py b/pms_api_rest/datamodels/pms_amenity.py index f8bfe3396..c95f244fe 100644 --- a/pms_api_rest/datamodels/pms_amenity.py +++ b/pms_api_rest/datamodels/pms_amenity.py @@ -14,5 +14,4 @@ class PmsAmenityInfo(Datamodel): _name = "pms.amenity.info" id = fields.Integer(required=True, allow_none=False) name = fields.String(required=True, allow_none=False) - defaultCode = fields.String(required=False, allow_none=True) - pmsAmenityTypeId = fields.Integer(required=True, allow_none=False) + amenityTypeId = fields.Integer(required=True, allow_none=False) diff --git a/pms_api_rest/datamodels/pms_reservation_line.py b/pms_api_rest/datamodels/pms_reservation_line.py index 22f770e01..f92d02ea6 100644 --- a/pms_api_rest/datamodels/pms_reservation_line.py +++ b/pms_api_rest/datamodels/pms_reservation_line.py @@ -5,10 +5,12 @@ from odoo.addons.datamodel.core import Datamodel class PmsReservationLineSearchParam(Datamodel): _name = "pms.reservation.line.search.param" - id = fields.Integer(required=False, allow_none=True) - date = fields.String(required=False, allow_none=True) - reservationId = fields.Integer(required=False, allow_none=True) - pmsPropertyId = fields.Integer(required=False, allow_none=True) + id = fields.Integer(required=False, allow_none=False) + date = 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) + overbooking = fields.Boolean(required=False, allow_none=False) class PmsReservationLineInfo(Datamodel): @@ -16,8 +18,8 @@ class PmsReservationLineInfo(Datamodel): id = fields.Integer(required=False, allow_none=False) date = fields.String(required=False, allow_none=False) price = fields.Float(required=False, allow_none=False) - discount = fields.Float(required=False, allow_none=True) - cancelDiscount = fields.Float(required=False, allow_none=True) + discount = fields.Float(required=False, allow_none=False) + cancelDiscount = fields.Float(required=False, allow_none=False) roomId = fields.Integer(required=False, allow_none=False) reservationId = fields.Integer(required=False, allow_none=False) pmsPropertyId = fields.Integer(required=False, allow_none=False) diff --git a/pms_api_rest/datamodels/pms_room.py b/pms_api_rest/datamodels/pms_room.py index fffc82ca5..c44ab2890 100644 --- a/pms_api_rest/datamodels/pms_room.py +++ b/pms_api_rest/datamodels/pms_room.py @@ -5,9 +5,13 @@ from odoo.addons.datamodel.core import Datamodel class PmsRoomSearchParam(Datamodel): _name = "pms.room.search.param" - id = fields.Integer(required=False, allow_none=True) - name = fields.String(required=False, allow_none=True) - pms_property_id = fields.Integer(required=False, allow_none=True) + id = fields.Integer(required=False, allow_none=False) + name = fields.String(required=False, allow_none=False) + pms_property_id = fields.Integer(required=True, allow_none=False) + availabilityFrom = fields.String(required=False, allow_none=False) + availabilityTo = fields.String(required=False, allow_none=False) + currentLines = fields.List(fields.Integer(), required=False, allow_none=False) + pricelistId = fields.Integer(required=False, allow_none=False) class PmsRoomInfo(Datamodel): diff --git a/pms_api_rest/services/pms_amenity_service.py b/pms_api_rest/services/pms_amenity_service.py index edca83c72..a722c3b94 100644 --- a/pms_api_rest/services/pms_amenity_service.py +++ b/pms_api_rest/services/pms_amenity_service.py @@ -26,7 +26,7 @@ class PmsAmenityService(Component): auth="jwt_api_pms", ) def get_amenities(self, amenities_search_param): - domain = [] + domain = [("pms_amenity_type_id", "!=", False)] if amenities_search_param.name: domain.append(("name", "like", amenities_search_param.name)) if amenities_search_param.id: @@ -50,8 +50,7 @@ class PmsAmenityService(Component): PmsAmenityInfo( id=amenity.id, name=amenity.name, - defaultCode=amenity.default_code, - pmsAmenityTypeId=amenity.pms_amenity_type_id.id, + amenityTypeId=amenity.pms_amenity_type_id.id, ) ) return result_amenities diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index 6742a4b3c..45730a8e6 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -82,7 +82,9 @@ class PmsFolioService(Component): reservation_lines.append( { "id": reservation_line.id, - "date": reservation_line.date, + "date": datetime.combine( + reservation_line.date, datetime.min.time() + ).isoformat(), "roomId": reservation_line.room_id.id, "roomName": reservation_line.room_id.name, } @@ -103,7 +105,7 @@ class PmsFolioService(Component): "checkout": datetime.combine( reservation.checkout, datetime.min.time() ).isoformat(), - "preferredRoomId": reservation.preferred_room_id.name + "preferredRoomId": reservation.preferred_room_id.id if reservation.preferred_room_id else "", "preferredRoomCapacity": reservation.preferred_room_id.capacity diff --git a/pms_api_rest/services/pms_reservation_service.py b/pms_api_rest/services/pms_reservation_service.py index 8d65f4cbb..c557f4dae 100644 --- a/pms_api_rest/services/pms_reservation_service.py +++ b/pms_api_rest/services/pms_reservation_service.py @@ -208,6 +208,27 @@ class PmsReservationService(Component): ) reservation_to_update.write(reservation_vals) + @restapi.method( + [ + ( + [ + "//reservation-lines/", + ], + "PATCH", + ) + ], + input_param=Datamodel("pms.reservation.line.info", is_list=False), + auth="jwt_api_pms", + ) + def update_reservation_lines( + self, _reservation_id, reservation_line_id, reservation_line_param + ): + if reservation_line_param.roomId: + reservation_line_id = self.env["pms.reservation.line"].browse( + reservation_line_id + ) + reservation_line_id.room_id = reservation_line_param.roomId + @restapi.method( [ ( diff --git a/pms_api_rest/services/pms_room_service.py b/pms_api_rest/services/pms_room_service.py index c1dadb5b7..c05dd36d2 100644 --- a/pms_api_rest/services/pms_room_service.py +++ b/pms_api_rest/services/pms_room_service.py @@ -1,3 +1,5 @@ +from datetime import datetime + from odoo import _ from odoo.exceptions import MissingError @@ -33,6 +35,30 @@ class PmsRoomService(Component): domain.append(("id", "=", room_search_param.id)) if room_search_param.pms_property_id: domain.append(("pms_property_id", "=", room_search_param.pms_property_id)) + if ( + room_search_param.availabilityFrom + and room_search_param.availabilityTo + and room_search_param.pms_property_id + and room_search_param.pricelistId + ): + date_from = datetime.strptime( + room_search_param.availabilityFrom, "%Y-%m-%d" + ).date() + date_to = datetime.strptime( + room_search_param.availabilityTo, "%Y-%m-%d" + ).date() + pms_property = self.env["pms.property"].browse( + room_search_param.pms_property_id + ) + pms_property = pms_property.with_context( + checkin=date_from, + checkout=date_to, + room_type_id=False, # Allows to choose any available room + current_lines=room_search_param.currentLines, + pricelist_id=room_search_param.pricelistId, + real_avail=True, + ) + domain.append(("id", "in", pms_property.free_room_ids.ids)) result_rooms = [] PmsRoomInfo = self.env.datamodels["pms.room.info"] @@ -54,6 +80,7 @@ class PmsRoomService(Component): roomTypeClassId=room.room_type_id.class_id, ubicationId=room.ubication_id, extraBedsAllowed=room.extra_beds_allowed, + roomAmenityIds=room.room_amenity_ids.ids, ) ) return result_rooms