From 21ce6ac762a682e62f6139787785c93ff99522e5 Mon Sep 17 00:00:00 2001 From: Sara Lago Date: Wed, 26 Jul 2023 17:58:14 +0200 Subject: [PATCH] [ADD] pms_api_rest: add dashboard service --- pms_api_rest/datamodels/__init__.py | 1 + pms_api_rest/datamodels/pms_dashboard.py | 18 +++++++ pms_api_rest/datamodels/pms_folio.py | 1 + pms_api_rest/services/__init__.py | 1 + .../services/pms_dashboard_service.py | 51 +++++++++++++++++++ pms_api_rest/services/pms_folio_service.py | 6 ++- 6 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 pms_api_rest/datamodels/pms_dashboard.py create mode 100644 pms_api_rest/services/pms_dashboard_service.py diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index dc54f816a..2108ac656 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -60,3 +60,4 @@ from . import pms_mail from . import pms_notification from . import pms_reservation_message from . import pms_avail +from . import pms_dashboard diff --git a/pms_api_rest/datamodels/pms_dashboard.py b/pms_api_rest/datamodels/pms_dashboard.py new file mode 100644 index 000000000..e11ffee67 --- /dev/null +++ b/pms_api_rest/datamodels/pms_dashboard.py @@ -0,0 +1,18 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + + +class PmsDashboardCheckinsSearchParam(Datamodel): + _name = "pms.dashboard.checkins.search.param" + dateTo = fields.String(required=False, allow_none=True) + dateFrom = fields.String(required=False, allow_none=True) + + +class PmsDashboardCheckins(Datamodel): + _name = "pms.dashboard.checkins" + id = fields.Integer(required=True, allow_none=False) + checkinPartnerState = fields.String(required=False, allow_none=True) + date = fields.String(required=False, allow_none=True) + + diff --git a/pms_api_rest/datamodels/pms_folio.py b/pms_api_rest/datamodels/pms_folio.py index 76389921f..822b3158c 100644 --- a/pms_api_rest/datamodels/pms_folio.py +++ b/pms_api_rest/datamodels/pms_folio.py @@ -12,6 +12,7 @@ class PmsFolioSearchParam(Datamodel): dateTo = fields.String(required=False, allow_none=True) filter = fields.String(required=False, allow_none=True) filterByState = fields.String(required=False, allow_none=True) + last = fields.Boolean(required=False, allow_none=True) class PmsFolioInfo(Datamodel): diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index cc14bf200..4d43a7359 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -42,3 +42,4 @@ from . import pms_invoice_service from . import pms_notification_service from . import pms_avail_service from . import pms_user_service +from . import pms_dashboard_service diff --git a/pms_api_rest/services/pms_dashboard_service.py b/pms_api_rest/services/pms_dashboard_service.py new file mode 100644 index 000000000..236812975 --- /dev/null +++ b/pms_api_rest/services/pms_dashboard_service.py @@ -0,0 +1,51 @@ +from odoo.addons.component.core import Component +from odoo.addons.base_rest import restapi +from odoo.addons.base_rest_datamodel.restapi import Datamodel +from odoo import fields +from datetime import datetime + + + +class PmsDashboardServices(Component): + _inherit = "base.rest.service" + _name = "pms.dashboard.service" + _usage = "dashboard" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/checkins", + ], + "GET", + ) + ], + input_param=Datamodel("pms.dashboard.checkins.search.param"), + output_param=Datamodel("pms.dashboard.checkins", is_list=True), + auth="jwt_api_pms", + ) + def get_checkins(self, pms_checkins_search_param): + date_from = fields.Date.from_string(pms_checkins_search_param.dateFrom) + date_to = fields.Date.from_string(pms_checkins_search_param.dateTo) + + domain = [ + ("checkin", ">=", date_from), + ("checkin", "<=", date_to), + ("state", "in", ("confirm", "arrival_delayed")), + ("reservation_type", "!=", "out") + ] + reservations = self.env["pms.reservation"].search(domain) + PmsDashboardCheckins = self.env.datamodels["pms.dashboard.checkins"] + result_checkins = [] + for checkin_partner in reservations.checkin_partner_ids: + result_checkins.append( + PmsDashboardCheckins( + id=checkin_partner.id, + checkinPartnerState=checkin_partner.state, + date=datetime.combine( + checkin_partner.checkin, datetime.min.time() + ).isoformat(), + ) + ) + return result_checkins diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index b817930f9..78adfeff8 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -99,6 +99,10 @@ class PmsFolioService(Component): domain_fields = list() pms_property_id = int(folio_search_param.pmsPropertyId) domain_fields.append(("pms_property_id", "=", pms_property_id)) + today = fields.Datetime.now() + today = today.replace(hour=0, minute=0, second=0, microsecond=0) + if folio_search_param.last: + domain_fields.append(("create_date", ">", today)) if folio_search_param.dateTo and folio_search_param.dateFrom: date_from = fields.Date.from_string(folio_search_param.dateFrom) @@ -182,11 +186,9 @@ class PmsFolioService(Component): else: domain = domain_fields result_folios = [] - reservations_result = ( self.env["pms.reservation"].search(domain).mapped("folio_id").ids ) - PmsFolioShortInfo = self.env.datamodels["pms.folio.short.info"] for folio in self.env["pms.folio"].search( [("id", "in", reservations_result), ("reservation_type", "!=", "out")],