From 56ef95bcd4ba70f53fe628bfc592c74c8c1308e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Wed, 22 Jun 2022 10:13:24 +0200 Subject: [PATCH] [ADD]pms_api_rest: boards services --- pms_api_rest/datamodels/__init__.py | 3 + pms_api_rest/datamodels/pms_board_service.py | 19 ++++ .../datamodels/pms_board_service_line.py | 17 ++++ pms_api_rest/services/__init__.py | 3 + .../pms_board_service_line_service.py | 81 +++++++++++++++++ .../services/pms_board_service_service.py | 91 +++++++++++++++++++ 6 files changed, 214 insertions(+) create mode 100644 pms_api_rest/datamodels/pms_board_service.py create mode 100644 pms_api_rest/datamodels/pms_board_service_line.py create mode 100644 pms_api_rest/services/pms_board_service_line_service.py create mode 100644 pms_api_rest/services/pms_board_service_service.py diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 199a2eab6..35f81da72 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -34,3 +34,6 @@ from . import pms_extra_bed from . import pms_amenity_type from . import pms_amenity + +from . import pms_board_service +from . import pms_board_service_line diff --git a/pms_api_rest/datamodels/pms_board_service.py b/pms_api_rest/datamodels/pms_board_service.py new file mode 100644 index 000000000..ebf27b4b3 --- /dev/null +++ b/pms_api_rest/datamodels/pms_board_service.py @@ -0,0 +1,19 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsBoardServiceSearchParam(Datamodel): + _name = "pms.board.service.search.param" + ids = fields.List(fields.Integer(required=False, allow_none=True)) + name = fields.String(required=False, allow_none=True) + pmsPropertyId = fields.Integer(required=False, allow_none=True) + roomTypeId = fields.Integer(required=False, allow_none=True) + + +class PmsBoardServiceInfo(Datamodel): + _name = "pms.board.service.info" + id = fields.Integer(required=True, allow_none=False) + name = fields.String(required=True, allow_none=False) + roomTypeId = fields.Integer(required=True, allow_none=False) + amount = fields.Float(required=False, allow_none=False) diff --git a/pms_api_rest/datamodels/pms_board_service_line.py b/pms_api_rest/datamodels/pms_board_service_line.py new file mode 100644 index 000000000..1820f8a23 --- /dev/null +++ b/pms_api_rest/datamodels/pms_board_service_line.py @@ -0,0 +1,17 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsBoardServiceLineSearchParam(Datamodel): + _name = "pms.board.service.line.search.param" + pmsBoarServiceId = fields.Integer(required=True, allow_none=False) + + +class PmsBoardServiceLineInfo(Datamodel): + _name = "pms.board.service.line.info" + id = fields.Integer(required=True, allow_none=False) + name = fields.String(required=True, allow_none=False) + boardServiceId = fields.Integer(required=True, allow_none=False) + productId = fields.Integer(required=True, allow_none=False) + amount = fields.Float(required=False, allow_none=False) diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index fc97b6bb8..a4ed64412 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -20,3 +20,6 @@ from . import pms_extra_beds_service from . import pms_amenity_service from . import pms_amenity_type_service + +from . import pms_board_service_line_service +from . import pms_board_service_service diff --git a/pms_api_rest/services/pms_board_service_line_service.py b/pms_api_rest/services/pms_board_service_line_service.py new file mode 100644 index 000000000..7ae8cc841 --- /dev/null +++ b/pms_api_rest/services/pms_board_service_line_service.py @@ -0,0 +1,81 @@ +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 PmsBoardServiceService(Component): + _inherit = "base.rest.service" + _name = "pms.board.service.line.service" + _usage = "board-service-line" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.board.service.line.search.param"), + output_param=Datamodel("pms.board.service.line.info", is_list=True), + auth="jwt_api_pms", + ) + def get_board_service_lines(self, board_service_lines_search_param): + domain = [] + if board_service_lines_search_param.pmsBoardServiceId: + domain.append( + ( + "pms_board_service_room_type_id", + "=", + board_service_lines_search_param.pmsBoardServiceId, + ) + ) + + result_board_service_lines = [] + PmsBoardServiceInfo = self.env.datamodels["pms.board.service.line.info"] + for line in self.env["pms.board.service.room.type.line"].search( + domain, + ): + result_board_service_lines.append( + PmsBoardServiceInfo( + id=line.id, + name=line.pms_board_service_room_type_id.display_name, + boardServiceId=line.pms_board_service_room_type_id.id, + productId=line.product_id.id, + amount=line.amount, + ) + ) + return result_board_service_lines + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.board.service.line.info", is_list=False), + auth="jwt_api_pms", + ) + def get_board_service_line(self, board_service_line_id): + board_service_line = self.env["pms.board.service.room.type.line"].search( + [("id", "=", board_service_line_id)] + ) + if board_service_line: + PmsBoardServiceInfo = self.env.datamodels["pms.board.service.line.info"] + return PmsBoardServiceInfo( + id=board_service_line.id, + name=board_service_line.pms_board_service_room_type_id.display_name, + boardServiceId=board_service_line.pms_board_service_room_type_id.id, + productId=board_service_line.product_id.id, + amount=board_service_line.amount, + ) + else: + raise MissingError(_("Board service line not found")) diff --git a/pms_api_rest/services/pms_board_service_service.py b/pms_api_rest/services/pms_board_service_service.py new file mode 100644 index 000000000..4462077c2 --- /dev/null +++ b/pms_api_rest/services/pms_board_service_service.py @@ -0,0 +1,91 @@ +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 PmsBoardServiceService(Component): + _inherit = "base.rest.service" + _name = "pms.board.service.service" + _usage = "board-service" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.board.service.search.param"), + output_param=Datamodel("pms.board.service.info", is_list=True), + auth="jwt_api_pms", + ) + def get_board_services(self, board_services_search_param): + domain = [] + if board_services_search_param.name: + domain.append(("name", "like", board_services_search_param.name)) + if board_services_search_param.ids: + domain.append(("id", "in", board_services_search_param.ids)) + if board_services_search_param.roomTypeId: + domain.append( + ("pms_room_type_id", "=", board_services_search_param.roomTypeId) + ) + if board_services_search_param.pmsPropertyId: + domain.extend( + [ + "|", + ( + "pms_property_ids", + "in", + board_services_search_param.pmsPropertyId, + ), + ("pms_property_ids", "=", False), + ] + ) + + result_board_services = [] + PmsBoardServiceInfo = self.env.datamodels["pms.board.service.info"] + for board_service in self.env["pms.board.service.room.type"].search( + domain, + ): + result_board_services.append( + PmsBoardServiceInfo( + id=board_service.id, + name=board_service.pms_board_service_id.display_name, + roomTypeId=board_service.pms_room_type_id.id, + amount=board_service.amount, + ) + ) + return result_board_services + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + output_param=Datamodel("pms.board.service.info", is_list=False), + auth="jwt_api_pms", + ) + def get_board_service(self, board_service_id): + board_service = self.env["pms.board.service.room.type"].search( + [("id", "=", board_service_id)] + ) + if board_service: + PmsBoardServiceInfo = self.env.datamodels["pms.board.service.info"] + return PmsBoardServiceInfo( + id=board_service.id, + name=board_service.pms_board_service_id.display_name, + roomTypeId=board_service.pms_room_type_id.id, + amount=board_service.amount, + ) + else: + raise MissingError(_("Amenity Type not found"))