[IMP] pms-api-rest: change swap behaviour, now swap force splitteds if required

This commit is contained in:
miguelpadin
2022-10-26 10:24:53 +02:00
committed by Darío Lodeiros
parent c8a3ca110e
commit 839b510dc9
2 changed files with 32 additions and 30 deletions

View File

@@ -1,6 +1,7 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
from odoo.addons.datamodel.fields import NestedModel
class PmsReservationUpdates(Datamodel):
@@ -16,11 +17,10 @@ class PmsReservationUpdates(Datamodel):
class PmsCalendarSwapInfo(Datamodel):
_name = "pms.calendar.swap.info"
swapFrom = fields.String(required=True, allow_none=False)
swapTo = fields.String(required=True, allow_none=False)
roomIdA = fields.Integer(required=True, allow_none=False)
roomIdB = fields.Integer(required=True, allow_none=False)
pmsPropertyId = fields.Integer(required=False, allow_none=True)
pmsPropertyId = fields.Integer(required=True, allow_none=False)
roomId = fields.Integer(required=True, allow_none=False)
date = fields.String(required=True, allow_none=False)
reservationLineIds = fields.List(fields.Integer(required=True, allow_none=False))
class PmsCalendarSearchParam(Datamodel):

View File

@@ -158,35 +158,37 @@ class PmsCalendarService(Component):
auth="jwt_api_pms",
)
def swap_reservation_slices(self, swap_info):
room_id_a = swap_info.roomIdA
room_id_b = swap_info.roomIdB
lines_room_a = self.env["pms.reservation.line"].search(
reservation_lines_target = self.env['pms.reservation.line'].search(
[
("room_id", "=", room_id_a),
("date", ">=", swap_info.swapFrom),
("date", "<=", swap_info.swapTo),
("pms_property_id", "=", swap_info.pmsPropertyId),
("id", "in", swap_info.reservationLineIds)
]
)
).sorted(key=lambda l: l.date)
for reservation_line in reservation_lines_target:
old_room_id = reservation_line.room_id
affected_line = self.env["pms.reservation.line"].search(
[
("date", "=", reservation_line.date),
("room_id", "=", swap_info.roomId),
]
)
reservation_line.occupies_availability = False
affected_line.occupies_availability = False
reservation_line.flush()
affected_line.flush()
reservation_line.room_id = swap_info.roomId
affected_line.room_id = old_room_id
reservation_line.occupies_availability = True
affected_line.occupies_availability = True
reservation_line._compute_occupies_availability()
affected_line._compute_occupies_availability()
lines_room_b = self.env["pms.reservation.line"].search(
[
("room_id", "=", room_id_b),
("date", ">=", swap_info.swapFrom),
("date", "<=", swap_info.swapTo),
("pms_property_id", "=", swap_info.pmsPropertyId),
]
)
lines_room_a.occupies_availability = False
lines_room_b.occupies_availability = False
lines_room_a.flush()
lines_room_b.flush()
lines_room_a.room_id = room_id_b
lines_room_b.room_id = room_id_a
lines_room_a._compute_occupies_availability()
lines_room_b._compute_occupies_availability()
@restapi.method(
[