[ADD]pms_api_rest: reservation_lines get and patch services

This commit is contained in:
Darío Lodeiros
2022-06-20 18:48:31 +02:00
parent 94b2caacab
commit f64577e523
4 changed files with 158 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ from . import pms_room_type
from . import pms_room_type_class
from . import pms_reservation
from . import pms_reservation_line
from . import pms_checkin_partner
from . import pms_partner

View File

@@ -0,0 +1,23 @@
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
class PmsReservationLineSearchParam(Datamodel):
_name = "pms.reservation.line.search.param"
id = fields.Integer(required=False, allow_none=True)
date = fields.String(required=False, allow_none=True)
reservationId = fields.Integer(required=False, allow_none=True)
pmsPropertyId = fields.Integer(required=False, allow_none=True)
class PmsReservationLineInfo(Datamodel):
_name = "pms.reservation.line.info"
id = fields.Integer(required=False, allow_none=False)
date = fields.String(required=False, allow_none=False)
price = fields.Float(required=False, allow_none=False)
discount = fields.Float(required=False, allow_none=True)
cancelDiscount = fields.Float(required=False, allow_none=True)
roomId = fields.Integer(required=False, allow_none=False)
reservationId = fields.Integer(required=False, allow_none=False)
pmsPropertyId = fields.Integer(required=False, allow_none=False)

View File

@@ -5,6 +5,7 @@ from . import pms_calendar_service
from . import pms_partner_service
from . import pms_reservation_service
from . import pms_reservation_line_service
from . import pms_property_service
from . import pms_login_service
from . import pms_pricelist_service

View File

@@ -0,0 +1,133 @@
from datetime import datetime
from odoo import _
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 PmsReservationLineService(Component):
_inherit = "base.rest.service"
_name = "pms.reservation.line.service"
_usage = "reservation-lines"
_collection = "pms.services"
@restapi.method(
[
(
[
"/<int:reservation_line_id>",
],
"GET",
)
],
output_param=Datamodel("pms.reservation.line.info", is_list=False),
auth="jwt_api_pms",
)
def get_reservation_line(self, reservation_line_id):
reservation_line = self.env["pms.reservation.line"].search(
[("id", "=", reservation_line_id)]
)
if reservation_line:
PmsReservationLineInfo = self.env.datamodels["pms.reservation.line.info"]
return PmsReservationLineInfo(
id=reservation_line.id,
date=datetime.combine(
reservation_line.date, datetime.min.time()
).isoformat(),
price=reservation_line.price,
discount=reservation_line.discount,
cancelDiscount=reservation_line.cancel_discount,
roomId=reservation_line.room_id.id,
reservationId=reservation_line.reservation_id.id,
pmsPropertyId=reservation_line.pms_property_id.id,
)
else:
raise MissingError(_("Reservation Line not found"))
@restapi.method(
[
(
[
"/",
],
"GET",
)
],
input_param=Datamodel("pms.reservation.line.search.param"),
output_param=Datamodel("pms.reservation.line.info", is_list=True),
auth="jwt_api_pms",
)
def get_reservation_lines(self, reservation_lines_search_param):
domain = []
if reservation_lines_search_param.date:
domain.append(("date", "=", reservation_lines_search_param.date))
if reservation_lines_search_param.id:
domain.append(("id", "=", reservation_lines_search_param.id))
if reservation_lines_search_param.reservationId:
domain.append(
("reservation_id", "=", reservation_lines_search_param.reservationId)
)
if reservation_lines_search_param.pmsPropertyId:
domain.extend(
[
(
"pms_property_id",
"=",
reservation_lines_search_param.pmsPropertyId,
),
]
)
result_lines = []
PmsReservationLineInfo = self.env.datamodels["pms.reservation.line.info"]
for reservation_line in self.env["pms.reservation.line"].search(
domain,
):
result_lines.append(
PmsReservationLineInfo(
id=reservation_line.id,
date=datetime.combine(
reservation_line.date, datetime.min.time()
).isoformat(),
price=reservation_line.price,
discount=reservation_line.discount,
cancelDiscount=reservation_line.cancel_discount,
roomId=reservation_line.room_id.id,
reservationId=reservation_line.reservation_id.id,
pmsPropertyId=reservation_line.pms_property_id.id,
)
)
return result_lines
@restapi.method(
[
(
[
"/<int:reservation_line_id>",
],
"PATCH",
)
],
input_param=Datamodel("pms.reservation.line.info"),
auth="jwt_api_pms",
)
def update_reservation_line(self, reservation_line_id, reservation_line_info):
reservation_line = self.env["pms.reservation.line"].search(
[("id", "=", reservation_line_id)]
)
vals = dict()
if reservation_line:
if reservation_line_info.price:
vals["price"] = reservation_line_info.price
if reservation_line_info.discount:
vals["discount"] = reservation_line_info.discount
if reservation_line_info.cancelDiscount:
vals["cancel_discount"] = reservation_line_info.cancelDiscount
if reservation_line_info.roomId:
vals["room_id"] = reservation_line_info.roomId
reservation_line.write(vals)
else:
raise MissingError(_("Reservation Line not found"))