Files
pms/pms_api_rest/services/pms_avail_service.py
2024-04-22 17:25:00 +02:00

66 lines
2.2 KiB
Python

from datetime import datetime, timedelta
from odoo import _, fields
from odoo.exceptions import MissingError
from odoo.addons.base_rest import restapi
from odoo.addons.base_rest_datamodel.restapi import Datamodel
from odoo.addons.component.core import Component
class PmsAvailService(Component):
_inherit = "base.rest.service"
_name = "pms.avail.service"
_usage = "avails"
_collection = "pms.services"
@restapi.method(
[
(
[
"/",
],
"GET",
)
],
input_param=Datamodel("pms.avail.search.param"),
output_param=Datamodel("pms.avail.info", is_list=True),
auth="jwt_api_pms",
)
def get_avails(self, avails_search_param):
if not (
avails_search_param.availabilityFrom
and avails_search_param.availabilityTo
and avails_search_param.pmsPropertyId
):
raise MissingError(_("Missing required parameters"))
pricelist_id = avails_search_param.pricelistId or False
room_type_id = avails_search_param.roomTypeId or False
pms_property = self.env["pms.property"].browse(
avails_search_param.pmsPropertyId
)
PmsAvailInfo = self.env.datamodels["pms.avail.info"]
result_avails = []
date_from = fields.Date.from_string(avails_search_param.availabilityFrom)
date_to = fields.Date.from_string(avails_search_param.availabilityTo)
dates = [
date_from + timedelta(days=x)
for x in range(0, (date_to - date_from).days + 1)
]
for item_date in dates:
pms_property = pms_property.with_context(
checkin=item_date,
checkout=item_date + timedelta(days=1),
room_type_id=room_type_id,
current_lines=avails_search_param.currentLines or False,
pricelist_id=pricelist_id,
real_avail=True,
)
result_avails.append(
PmsAvailInfo(
date=datetime.combine(item_date, datetime.min.time()).isoformat(),
roomIds=pms_property.free_room_ids.ids,
)
)
return result_avails