From f5afcaf4e9a3a6b17b2bb67b76f1b0b0917b1476 Mon Sep 17 00:00:00 2001 From: Sara Date: Thu, 12 May 2022 11:46:02 +0200 Subject: [PATCH] [IMP] pms_api_rest: add room type class service --- pms_api_rest/datamodels/__init__.py | 1 + .../datamodels/pms_room_type_class.py | 17 +++++ pms_api_rest/services/__init__.py | 1 + .../services/pms_room_type_class_service.py | 63 +++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 pms_api_rest/datamodels/pms_room_type_class.py create mode 100644 pms_api_rest/services/pms_room_type_class_service.py diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index ecb00454a..9be95bc02 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -4,6 +4,7 @@ from . import pms_folio from . import pms_room from . import pms_room_type +from . import pms_room_type_class from . import pms_reservation diff --git a/pms_api_rest/datamodels/pms_room_type_class.py b/pms_api_rest/datamodels/pms_room_type_class.py new file mode 100644 index 000000000..dbc60131d --- /dev/null +++ b/pms_api_rest/datamodels/pms_room_type_class.py @@ -0,0 +1,17 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsRoomTypeClassSearchParam(Datamodel): + _name = "pms.room.type.class.search.param" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + pms_property_ids = fields.List(fields.Integer(), required=False) + + +class PmsRoomTypeClassInfo(Datamodel): + _name = "pms.room.type.class.info" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + pms_property_ids = fields.List(fields.Integer(), required=False) diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index 2763228ea..fdbc2d46a 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -9,3 +9,4 @@ from . import pms_property_service from . import pms_login_service from . import pms_pricelist_service from . import pms_availability_plan_service +from . import pms_room_type_class_service diff --git a/pms_api_rest/services/pms_room_type_class_service.py b/pms_api_rest/services/pms_room_type_class_service.py new file mode 100644 index 000000000..1d35f7c9b --- /dev/null +++ b/pms_api_rest/services/pms_room_type_class_service.py @@ -0,0 +1,63 @@ +from odoo.addons.base_rest import restapi +from odoo.addons.base_rest_datamodel.restapi import Datamodel +from odoo.addons.component.core import Component + + +class PmsRoomTypeClassService(Component): + _inherit = "base.rest.service" + _name = "pms.room.type.class.service" + _usage = "room-type-class" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.room.type.class.search.param"), + output_param=Datamodel("pms.room.type.class.info", is_list=True), + auth="jwt_api_pms", + ) + def get_room_type_class(self, room_type_class_search_param): + room_type_class_all_properties = self.env["pms.room.type.class"].search( + [("pms_property_ids", "=", False)] + ) + if room_type_class_search_param.pms_property_ids: + room_type_class = set() + for index, prop in enumerate(room_type_class_search_param.pms_property_ids): + room_type_class_with_query_property = self.env[ + "pms.room.type.class" + ].search([("pms_property_ids", "=", prop)]) + if index == 0: + room_type_class = set(room_type_class_with_query_property.ids) + else: + room_type_class = room_type_class.intersection( + set(room_type_class_with_query_property.ids) + ) + room_type_class_total = list( + set(list(room_type_class) + room_type_class_all_properties.ids) + ) + else: + room_type_class_total = list(room_type_class_all_properties.ids) + domain = [ + ("id", "in", room_type_class_total), + ] + + result_room_type_class = [] + PmsRoomTypeClassInfo = self.env.datamodels["pms.room.type.class.info"] + for room in self.env["pms.room.type.class"].search( + domain, + ): + + result_room_type_class.append( + PmsRoomTypeClassInfo( + id=room.id, + name=room.name, + pms_property_ids=room.pms_property_ids.mapped("id"), + ) + ) + return result_room_type_class