[WIP] pms-api-rest: pending update reservation by id

This commit is contained in:
miguelpadin
2022-07-06 11:14:23 +02:00
committed by Darío Lodeiros
parent 7a8db9757b
commit 74578e1c1a
7 changed files with 70 additions and 16 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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):

View File

@@ -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

View File

@@ -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

View File

@@ -208,6 +208,27 @@ class PmsReservationService(Component):
)
reservation_to_update.write(reservation_vals)
@restapi.method(
[
(
[
"/<int:_reservation_id>/reservation-lines/<int:reservation_line_id>",
],
"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(
[
(

View File

@@ -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