From 94b2caacab9ffbc994cb19f8617d28765b891a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Thu, 16 Jun 2022 11:21:34 +0200 Subject: [PATCH] [ADD]pms_api_rest: amenities and amenity types services --- pms_api_rest/datamodels/__init__.py | 3 + pms_api_rest/datamodels/pms_amenity.py | 18 ++++ pms_api_rest/datamodels/pms_amenity_type.py | 17 ++++ pms_api_rest/datamodels/pms_room.py | 1 + pms_api_rest/services/__init__.py | 3 + pms_api_rest/services/pms_amenity_service.py | 82 ++++++++++++++++++ .../services/pms_amenity_type_service.py | 86 +++++++++++++++++++ 7 files changed, 210 insertions(+) create mode 100644 pms_api_rest/datamodels/pms_amenity.py create mode 100644 pms_api_rest/datamodels/pms_amenity_type.py create mode 100644 pms_api_rest/services/pms_amenity_service.py create mode 100644 pms_api_rest/services/pms_amenity_type_service.py diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 8f5e0178d..34616fd3f 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -30,3 +30,6 @@ from . import res_city_zip from . import pms_search_param from . import pms_ubication from . import pms_extra_bed + +from . import pms_amenity_type +from . import pms_amenity diff --git a/pms_api_rest/datamodels/pms_amenity.py b/pms_api_rest/datamodels/pms_amenity.py new file mode 100644 index 000000000..f8bfe3396 --- /dev/null +++ b/pms_api_rest/datamodels/pms_amenity.py @@ -0,0 +1,18 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsAmenitySearchParam(Datamodel): + _name = "pms.amenity.search.param" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + pmsPropertyId = fields.Integer(required=True, allow_none=False) + + +class PmsAmenityInfo(Datamodel): + _name = "pms.amenity.info" + id = fields.Integer(required=True, allow_none=False) + name = fields.String(required=True, allow_none=False) + defaultCode = fields.String(required=False, allow_none=True) + pmsAmenityTypeId = fields.Integer(required=True, allow_none=False) diff --git a/pms_api_rest/datamodels/pms_amenity_type.py b/pms_api_rest/datamodels/pms_amenity_type.py new file mode 100644 index 000000000..dacbf9550 --- /dev/null +++ b/pms_api_rest/datamodels/pms_amenity_type.py @@ -0,0 +1,17 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsAmenityTypeSearchParam(Datamodel): + _name = "pms.amenity.type.search.param" + id = fields.Integer(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + pmsPropertyId = fields.Integer(required=True, allow_none=False) + + +class PmsAmenityTypeInfo(Datamodel): + _name = "pms.amenity.type.info" + id = fields.Integer(required=True, allow_none=False) + name = fields.String(required=True, allow_none=False) + pmsAmenityIds = fields.List(fields.Integer(), required=False) diff --git a/pms_api_rest/datamodels/pms_room.py b/pms_api_rest/datamodels/pms_room.py index 6413634d3..fffc82ca5 100644 --- a/pms_api_rest/datamodels/pms_room.py +++ b/pms_api_rest/datamodels/pms_room.py @@ -20,3 +20,4 @@ class PmsRoomInfo(Datamodel): roomTypeClassId = fields.Integer(required=False, allow_none=True) ubicationId = fields.Integer(required=False, allow_none=True) extraBedsAllowed = fields.Integer(required=False, allow_none=True) + roomAmenityIds = fields.List(fields.Integer(), required=False) diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index 14419c344..cff288066 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -16,3 +16,6 @@ from . import res_city_zip_service from . import pms_room_type_class_service from . import pms_ubication_service from . import pms_extra_beds_service + +from . import pms_amenity_service +from . import pms_amenity_type_service diff --git a/pms_api_rest/services/pms_amenity_service.py b/pms_api_rest/services/pms_amenity_service.py new file mode 100644 index 000000000..edca83c72 --- /dev/null +++ b/pms_api_rest/services/pms_amenity_service.py @@ -0,0 +1,82 @@ +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 PmsAmenityService(Component): + _inherit = "base.rest.service" + _name = "pms.amenity.service" + _usage = "amenities" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.amenity.search.param"), + output_param=Datamodel("pms.amenity.info", is_list=True), + auth="jwt_api_pms", + ) + def get_amenities(self, amenities_search_param): + domain = [] + if amenities_search_param.name: + domain.append(("name", "like", amenities_search_param.name)) + if amenities_search_param.id: + domain.append(("id", "=", amenities_search_param.id)) + if amenities_search_param.pmsPropertyId: + domain.extend( + [ + "|", + ("pms_property_ids", "in", amenities_search_param.pmsPropertyId), + ("pms_property_ids", "=", False), + ] + ) + + result_amenities = [] + PmsAmenityInfo = self.env.datamodels["pms.amenity.info"] + for amenity in self.env["pms.amenity"].search( + domain, + ): + + result_amenities.append( + PmsAmenityInfo( + id=amenity.id, + name=amenity.name, + defaultCode=amenity.default_code, + pmsAmenityTypeId=amenity.pms_amenity_type_id.id, + ) + ) + return result_amenities + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.amenity.info", is_list=False), + auth="jwt_api_pms", + ) + def get_amenity(self, amenity_id): + amenity = self.env["pms.amenity"].search([("id", "=", amenity_id)]) + if amenity: + PmsAmenityInfo = self.env.datamodels["pms.amenity.info"] + return PmsAmenityInfo( + id=amenity.id, + name=amenity.name, + defaultCode=amenity.default_code, + pmsAmenityTypeId=amenity.pms_amenity_type_id.id, + ) + else: + raise MissingError(_("Amenity not found")) diff --git a/pms_api_rest/services/pms_amenity_type_service.py b/pms_api_rest/services/pms_amenity_type_service.py new file mode 100644 index 000000000..999d4b5b5 --- /dev/null +++ b/pms_api_rest/services/pms_amenity_type_service.py @@ -0,0 +1,86 @@ +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 PmsAmenityTypeService(Component): + _inherit = "base.rest.service" + _name = "pms.amenity.type.service" + _usage = "amenity-types" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.amenity.type.search.param"), + output_param=Datamodel("pms.amenity.type.info", is_list=True), + auth="jwt_api_pms", + ) + def get_amenity_types(self, amenity_types_search_param): + domain = [] + if amenity_types_search_param.name: + domain.append(("name", "like", amenity_types_search_param.name)) + if amenity_types_search_param.id: + domain.append(("id", "=", amenity_types_search_param.id)) + if amenity_types_search_param.pmsPropertyId: + domain.extend( + [ + "|", + ( + "pms_property_ids", + "in", + amenity_types_search_param.pmsPropertyId, + ), + ("pms_property_ids", "=", False), + ] + ) + + result_amenity_types = [] + PmsAmenityTypeInfo = self.env.datamodels["pms.amenity.type.info"] + for amenity_type in self.env["pms.amenity.type"].search( + domain, + ): + + result_amenity_types.append( + PmsAmenityTypeInfo( + id=amenity_type.id, + name=amenity_type.name, + pmsAmenityIds=amenity_type.pms_amenity_ids.ids, + ) + ) + return result_amenity_types + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.amenity.type.info", is_list=False), + auth="jwt_api_pms", + ) + def get_amenity_type(self, amenity_type_id): + amenity_type = self.env["pms.amenity.type"].search( + [("id", "=", amenity_type_id)] + ) + if amenity_type: + PmsAmenityTypeInfo = self.env.datamodels["pms.amenity.type.info"] + return PmsAmenityTypeInfo( + id=amenity_type.id, + name=amenity_type.name, + pmsAmenityIds=amenity_type.pms_amenity_ids.ids, + ) + else: + raise MissingError(_("Amenity Type not found"))