[ADD]pms_api_rest: avails service and datamodel

This commit is contained in:
Darío Lodeiros
2022-12-24 16:27:44 +01:00
parent 7fad80698a
commit 7074bb129d
2 changed files with 85 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
class PmsAvailSearchParam(Datamodel):
_name = "pms.avail.search.param"
availabilityFrom = fields.String(required=True, allow_none=True)
availabilityTo = fields.String(required=True, allow_none=True)
pmsPropertyId = fields.Integer(required=True, allow_none=True)
pricelistId = fields.Integer(required=False, allow_none=True)
roomTypeId = fields.Integer(required=False, allow_none=True)
realAvail = fields.Boolean(required=False, allow_none=True)
currentLines = fields.List(fields.Integer(), required=False, allow_none=False)
class PmsAvailInfo(Datamodel):
_name = "pms.avail.info"
date = fields.String(required=True, allow_none=False)
roomIds = fields.List(fields.Integer, required=False, allow_none=True)

View File

@@ -0,0 +1,65 @@
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