diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 5e0a0d70a..4d649c170 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -8,7 +8,7 @@ from . import pms_room_type_class from . import pms_reservation from . import pms_reservation_line - +from . import pms_rest_metadata from . import pms_checkin_partner from . import pms_partner diff --git a/pms_api_rest/datamodels/pms_partner.py b/pms_api_rest/datamodels/pms_partner.py index c2e509d42..770199322 100644 --- a/pms_api_rest/datamodels/pms_partner.py +++ b/pms_api_rest/datamodels/pms_partner.py @@ -1,10 +1,12 @@ from marshmallow import fields from odoo.addons.datamodel.core import Datamodel +from odoo.addons.datamodel.fields import NestedModel class PmsPartnerSearchParam(Datamodel): _name = "pms.partner.search.param" + _inherit = "pms.rest.metadata" id = fields.Integer(required=False, allow_none=True) vatNumber = fields.String(required=False, allow_none=True) documentType = fields.Integer(required=False, allow_none=True) @@ -59,3 +61,9 @@ class PmsPartnerInfo(Datamodel): invoiceToAgency = fields.String(required=False, allow_none=True) tagIds = fields.List(fields.Integer(required=False, allow_none=True)) lastStay = fields.String(required=False, allow_none=True) + + +class PmsPartnerResults(Datamodel): + _name = "pms.partner.results" + partners = fields.List(NestedModel("pms.partner.info")) + total = fields.Integer(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_rest_metadata.py b/pms_api_rest/datamodels/pms_rest_metadata.py new file mode 100644 index 000000000..1ca229c04 --- /dev/null +++ b/pms_api_rest/datamodels/pms_rest_metadata.py @@ -0,0 +1,10 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsRestMetadata(Datamodel): + _name = "pms.rest.metadata" + orderBy = fields.String(required=False, allow_none=True) + limit = fields.Integer(required=False, allow_none=True) + offset = fields.Integer(required=False, allow_none=True) diff --git a/pms_api_rest/services/pms_partner_service.py b/pms_api_rest/services/pms_partner_service.py index 661ea3870..57b7a0943 100644 --- a/pms_api_rest/services/pms_partner_service.py +++ b/pms_api_rest/services/pms_partner_service.py @@ -21,14 +21,21 @@ class PmsPartnerService(Component): ) ], input_param=Datamodel("pms.partner.search.param", is_list=False), - output_param=Datamodel("pms.partner.info", is_list=True), + output_param=Datamodel("pms.partner.results", is_list=False), auth="jwt_api_pms", ) def get_partners(self, pms_partner_search_params): result_partners = [] domain = [] + PmsPartnerResults = self.env.datamodels["pms.partner.results"] PmsPartnerInfo = self.env.datamodels["pms.partner.info"] - for partner in self.env["res.partner"].search(domain): + total_partners = self.env["res.partner"].search_count(domain) + for partner in self.env["res.partner"].search( + domain, + order=pms_partner_search_params.orderBy, + limit=pms_partner_search_params.limit, + offset=pms_partner_search_params.offset + ): checkouts = ( self.env["pms.checkin.partner"] .search([("partner_id.id", "=", partner.id)]) @@ -118,7 +125,10 @@ class PmsPartnerService(Component): lastStay=max(checkouts).strftime("%d/%m/%Y") if checkouts else "", ) ) - return result_partners + return PmsPartnerResults( + partners=result_partners, + total=total_partners + ) @restapi.method( [