Files
pms/pms_api_rest/services/pms_notification_service.py
2024-04-22 17:25:01 +02:00

90 lines
2.9 KiB
Python

import datetime
from odoo import fields
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(
[
(
[
"/reservations-to-assign",
],
"GET",
)
],
input_param=Datamodel("pms.notification.search", is_list=False),
output_param=Datamodel("pms.notification.info", is_list=False),
auth="jwt_api_pms",
cors="*",
)
def get_reservations_to_assign_notifications(self, pms_notification_search):
num_reservation_ids_to_assign = self.env["pms.reservation"].search_count(
[
("pms_property_id", "=", pms_notification_search.pmsPropertyId),
("checkin", ">=", fields.Date.today()),
("to_assign", "=", True),
],
)
PmsNotificationInfo = self.env.datamodels["pms.notification.info"]
return PmsNotificationInfo(
numReservationsToAssign=num_reservation_ids_to_assign
)
@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_date_time = datetime.datetime.fromtimestamp(
int(pms_notification_search.fromTimestamp) / 1000
)
new_reservations = self.env["pms.reservation"].search(
[
("create_date", ">=", from_date_time),
("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,
timeStamp=int(folio.create_date.strftime("%s%f")) / 1000,
folioName=folio.name,
partnerName=folio.partner_name,
saleChannelName=folio.agency_id.name
if folio.agency_id
else folio.sale_channel_origin_id.name or None,
)
)
return notifications