diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 84fd46711..93946d74e 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -56,3 +56,4 @@ from . import pms_report from . import pms_folio_sale_line from . import pms_invoice_line from . import pms_mail +from . import pms_notification diff --git a/pms_api_rest/services/__init__.py b/pms_api_rest/services/__init__.py index cab141501..bf7d290a4 100644 --- a/pms_api_rest/services/__init__.py +++ b/pms_api_rest/services/__init__.py @@ -39,3 +39,4 @@ from . import pms_transaction_service from . import pms_account_payment_terms_service from . import pms_account_journal_service from . import pms_invoice_service +from . import pms_notification_service diff --git a/pms_api_rest/services/pms_notification_service.py b/pms_api_rest/services/pms_notification_service.py new file mode 100644 index 000000000..2ef40ae39 --- /dev/null +++ b/pms_api_rest/services/pms_notification_service.py @@ -0,0 +1,70 @@ +from datetime import datetime + +import pytz + +from odoo import _ + +from odoo.addons.base_rest import restapi +from odoo.addons.base_rest_datamodel.restapi import Datamodel +from odoo.addons.component.core import Component + + +class PmsNotificationService(Component): + _inherit = "base.rest.service" + _name = "pms.notification.service" + _usage = "notifications" + _collection = "pms.services" + + @restapi.method( + [ + ( + [ + "/", + ], + "GET", + ) + ], + input_param=Datamodel("pms.notification.search", is_list=False), + output_param=Datamodel("pms.notification.info", is_list=True), + auth="jwt_api_pms", + cors="*", + ) + def get_notifications(self, pms_notification_search): + from_datetime = datetime.strptime( + pms_notification_search.fromDateTime, "%Y-%m-%d %H:%M:%S" + ) + timezone = pytz.timezone(self.env.user.tz or "UTC") + from_datetime = timezone.localize(from_datetime) + from_datetime_utc = from_datetime.astimezone(pytz.utc) + new_reservations = self.env["pms.reservation"].search( + [ + ("create_date", ">=", from_datetime_utc), + ("pms_property_id.id", "=", pms_notification_search.pmsPropertyId), + ("to_assign", "=", True), + ("create_uid.id", "!=", self.env.user.id), + ], + limit=10, + order="create_date desc", + ) + notifications = [] + PmsNotificationInfo = self.env.datamodels["pms.notification.info"] + for folio in new_reservations.mapped("folio_id"): + notifications.append( + PmsNotificationInfo( + pmsPropertyId=folio.pms_property_id.id, + folioId=folio.id, + dateTime=pytz.UTC.localize(folio.create_date) + .astimezone(timezone) + .strftime("%Y-%m-%d %H:%M:%S"), + userId=folio.create_uid.id, + mensaje=_("%s: Nueva reserva de %s por %s") + % ( + folio.name, + folio.partner_name, + folio.agency_id.name + if folio.agency_id + else folio.sale_channel_origin_id.name, + ), + ) + ) + return notifications