mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[ADD]pms_api_rest: avails service and datamodel
This commit is contained in:
20
pms_api_rest/datamodels/pms_avail.py
Normal file
20
pms_api_rest/datamodels/pms_avail.py
Normal 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)
|
||||||
65
pms_api_rest/services/pms_avail_service.py
Normal file
65
pms_api_rest/services/pms_avail_service.py
Normal 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
|
||||||
Reference in New Issue
Block a user