From f9f04e532270e1342214cbb2eed56bb8d96aec58 Mon Sep 17 00:00:00 2001 From: Sara Lago Date: Wed, 5 Oct 2022 16:04:45 +0200 Subject: [PATCH] [IMP] pms_api_rest: add filters in partner service --- pms_api_rest/datamodels/pms_partner.py | 4 +++- pms_api_rest/services/pms_partner_service.py | 22 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/pms_api_rest/datamodels/pms_partner.py b/pms_api_rest/datamodels/pms_partner.py index 770199322..e1765fb66 100644 --- a/pms_api_rest/datamodels/pms_partner.py +++ b/pms_api_rest/datamodels/pms_partner.py @@ -8,9 +8,11 @@ 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) documentNumber = fields.String(required=False, allow_none=True) + name = fields.String(required=False, allow_none=True) + housed = fields.Boolean(required=False, allow_none=True) + filter = fields.String(required=False, allow_none=True) class PmsPartnerInfo(Datamodel): diff --git a/pms_api_rest/services/pms_partner_service.py b/pms_api_rest/services/pms_partner_service.py index 57b7a0943..2771a19af 100644 --- a/pms_api_rest/services/pms_partner_service.py +++ b/pms_api_rest/services/pms_partner_service.py @@ -3,6 +3,7 @@ from datetime import datetime from odoo.addons.base_rest import restapi from odoo.addons.base_rest_datamodel.restapi import Datamodel from odoo.addons.component.core import Component +from odoo.odoo.osv import expression class PmsPartnerService(Component): @@ -26,7 +27,28 @@ class PmsPartnerService(Component): ) def get_partners(self, pms_partner_search_params): result_partners = [] + domain_fields = [] + + if pms_partner_search_params.name: + domain_fields.append(("name", "ilike", pms_partner_search_params.name)) + if pms_partner_search_params.housed: + partners_housed = self.env["pms.checkin.partner"].search([("state", "=", "onboard")]).mapped( + "partner_id") + domain_fields.append(("id", "in", partners_housed.ids)) + domain_filter = list() + if pms_partner_search_params.filter: + for search in pms_partner_search_params.filter.split(" "): + subdomains = [ + [("name", "ilike", search)], + [("firstname", "ilike", search)], + [("lastname", "ilike", search)], + ] + domain_filter.append(expression.OR(subdomains)) domain = [] + if domain_filter: + domain = expression.AND([domain_fields, domain_filter[0]]) + else: + domain = domain_fields PmsPartnerResults = self.env.datamodels["pms.partner.results"] PmsPartnerInfo = self.env.datamodels["pms.partner.info"] total_partners = self.env["res.partner"].search_count(domain)