Skip to content

Commit ae282e0

Browse files
committed
[FIX] pms-api-rest: add new endpoint to create reservations belonging to existent folio
1 parent ed1b100 commit ae282e0

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

pms_api_rest/datamodels/pms_reservation.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ class PmsReservationInfo(Datamodel):
104104
nights = fields.Integer(required=False, allow_none=True)
105105
numServices = fields.Integer(required=False, allow_none=True)
106106

107-
reservationLines = fields.List(NestedModel("pms.reservation.line.info"))
107+
reservationLines = fields.List(
108+
NestedModel("pms.reservation.line.info"), required=False, allow_none=True
109+
)
108110
services = fields.List(
109111
NestedModel("pms.service.info"), required=False, allow_none=True
110112
)

pms_api_rest/services/pms_folio_service.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,49 @@ def get_folio_reservations(self, folio_id):
696696
)
697697
return reservations
698698

699+
@restapi.method(
700+
[
701+
(
702+
[
703+
"/<int:folio_id>/reservations",
704+
],
705+
"POST",
706+
)
707+
],
708+
input_param=Datamodel("pms.folio.info", is_list=False),
709+
auth="jwt_api_pms",
710+
)
711+
def create_folio_reservations(self, folio_id, folio_info):
712+
folio_record = self.env["pms.folio"].sudo().search([("id", "=", folio_id)])
713+
if not folio_record:
714+
raise MissingError(_("Folio not found"))
715+
pms_api_check_access(user=self.env.user, records=folio_record)
716+
for reservation in folio_info.reservations:
717+
new_reservation_record = self.env["pms.reservation"].create(
718+
{
719+
"folio_id": folio_record.id,
720+
"pricelist_id": folio_info.pricelistId,
721+
"pms_property_id": folio_record.pms_property_id.id,
722+
"checkin": datetime.strptime(
723+
reservation.checkin, "%Y-%m-%d"
724+
).date(),
725+
"checkout": datetime.strptime(
726+
reservation.checkout, "%Y-%m-%d"
727+
).date(),
728+
"room_type_id": reservation.roomTypeId,
729+
"adults": reservation.adults,
730+
"children": reservation.children or 0,
731+
"board_service_room_id": reservation.boardServiceId,
732+
"preferred_room_id": reservation.preferredRoomId
733+
if reservation.preferredRoomId
734+
else None,
735+
"splitted": reservation.isSplitted
736+
if reservation.isSplitted
737+
else False,
738+
"reservation_type": reservation.reservationType or "normal",
739+
}
740+
)
741+
699742
@restapi.method(
700743
[
701744
(

0 commit comments

Comments
 (0)