From a451b71812bc2263f1ae115551eb158fd4b7bba2 Mon Sep 17 00:00:00 2001 From: braisab Date: Thu, 27 Apr 2023 19:38:10 +0200 Subject: [PATCH] [IMP]pms-api-rest: filter folio by state and limit/offset --- pms_api_rest/datamodels/__init__.py | 3 +- pms_api_rest/datamodels/pms_folio.py | 1 + pms_api_rest/services/pms_folio_service.py | 34 +++++++++++++--------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 4f2156942..dc54f816a 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -1,3 +1,4 @@ +from . import pms_rest_metadata from . import pms_calendar from . import pms_folio @@ -8,7 +9,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_folio.py b/pms_api_rest/datamodels/pms_folio.py index 2dc9646b3..f94b8bd4b 100644 --- a/pms_api_rest/datamodels/pms_folio.py +++ b/pms_api_rest/datamodels/pms_folio.py @@ -6,6 +6,7 @@ from odoo.addons.datamodel.fields import NestedModel class PmsFolioSearchParam(Datamodel): _name = "pms.folio.search.param" + _inherit = "pms.rest.metadata" pmsPropertyId = fields.Integer(required=True, allow_none=True) dateFrom = fields.String(required=False, allow_none=True) dateTo = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index 9542efa3d..cf9b6e5dc 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -91,7 +91,7 @@ class PmsFolioService(Component): "GET", ) ], - input_param=Datamodel("pms.folio.search.param"), + input_param=Datamodel("pms.folio.search.param", is_list=False), output_param=Datamodel("pms.folio.short.info", is_list=True), auth="jwt_api_pms", ) @@ -155,20 +155,23 @@ class PmsFolioService(Component): [("reservation_type", "!=", "out")], ] domain_filter.append(expression.AND(subdomains)) - else: - subdomain_checkin = [ - [("state", "in", ("confirm", "arrival_delayed"))], - [("checkin", "<=", fields.Date.today())], - ] - subdomain_checkin = expression.AND(subdomain_checkin) - subdomain_checkout = [ + elif folio_search_param.filterByState == 'onBoard': + subdomains = [ [("state", "in", ("onboard", "departure_delayed"))], - [("checkout", "=", fields.Date.today())], + [("reservation_type", "!=", "out")], ] - subdomain_checkout = expression.AND(subdomain_checkout) - domain_filter.append( - expression.OR([subdomain_checkin, subdomain_checkout]) - ) + domain_filter.append(expression.AND(subdomains)) + elif folio_search_param.filterByState == 'toAssign': + subdomains = [ + [("to_assign", "=", True)], + [("reservation_type", "!=", "out")], + ] + domain_filter.append(expression.AND(subdomains)) + elif folio_search_param.filterByState == 'cancelled': + subdomains = [ + [("state", "=", "cancel")], + ] + domain_filter.append(expression.AND(subdomains)) if domain_filter: domain = expression.AND([domain_fields, domain_filter[0]]) if folio_search_param.filter and folio_search_param.filterByState: @@ -185,7 +188,10 @@ class PmsFolioService(Component): PmsFolioShortInfo = self.env.datamodels["pms.folio.short.info"] for folio in self.env["pms.folio"].search( - [("id", "in", reservations_result)], order="write_date desc" + [("id", "in", reservations_result)], + order="write_date desc", + limit=folio_search_param.limit, + offset=folio_search_param.offset, ): reservations = [] for reservation in folio.reservation_ids: