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