From e81eb89adb58ace7e87096de917d2c328b9fd59f Mon Sep 17 00:00:00 2001 From: braisab Date: Fri, 23 Dec 2022 14:13:53 +0100 Subject: [PATCH] [IMP]pms_api_rest: added filter by state and checkin/checkout in folios get service --- pms_api_rest/datamodels/pms_folio.py | 1 + pms_api_rest/services/pms_folio_service.py | 34 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/pms_api_rest/datamodels/pms_folio.py b/pms_api_rest/datamodels/pms_folio.py index 9efb69ea3..04d66796f 100644 --- a/pms_api_rest/datamodels/pms_folio.py +++ b/pms_api_rest/datamodels/pms_folio.py @@ -10,6 +10,7 @@ class PmsFolioSearchParam(Datamodel): dateFrom = fields.String(required=False, allow_none=True) dateTo = fields.String(required=False, allow_none=True) filter = fields.String(required=False, allow_none=True) + filterByState = fields.String(required=False, allow_none=True) class PmsFolioInfo(Datamodel): diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index db5cc2b78..e426fdb38 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -109,7 +109,7 @@ class PmsFolioService(Component): if folio_search_param.filter: target = folio_search_param.filter if "@" in target: - domain_filter.append(("email", "ilike", target)) + domain_filter.append([("email", "ilike", target)]) else: subdomains = [ [("name", "ilike", target)], @@ -118,9 +118,39 @@ class PmsFolioService(Component): [("external_reference", "ilike", target)], ] domain_filter.append(expression.OR(subdomains)) - domain = [] + if folio_search_param.filterByState: + if folio_search_param.filterByState == "byCheckin": + subdomains = [ + [("state", "in", ("confirm", "arrival_delayed"))], + [("checkin", "<=", fields.Date.today())], + ] + domain_filter.append(expression.AND(subdomains)) + elif folio_search_param.filterByState == "byCheckout": + subdomains = [ + [("state", "in", ("onboard", "departure_delayed"))], + [("checkout", "=", fields.Date.today())], + ] + 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 = [ + [("state", "in", ("onboard", "departure_delayed"))], + [("checkout", "=", fields.Date.today())], + ] + subdomain_checkout = expression.AND(subdomain_checkout) + domain_filter.append( + expression.OR([subdomain_checkin, subdomain_checkout]) + ) if domain_filter: domain = expression.AND([domain_fields, domain_filter[0]]) + if folio_search_param.filter and folio_search_param.filterByState: + domain = expression.AND( + [domain_fields, domain_filter[0], domain_filter[1]] + ) else: domain = domain_fields result_folios = []