From cef4d9f860551a22a5c308643a853b4694816912 Mon Sep 17 00:00:00 2001 From: braisab Date: Wed, 19 Oct 2022 14:53:05 +0200 Subject: [PATCH] [IMP]pms_api_rest: added action_on_board, action_checkout and print checkin pdf services --- pms_api_rest/datamodels/__init__.py | 1 + .../datamodels/pms_checkin_partner.py | 1 + pms_api_rest/datamodels/pms_report.py | 7 ++ pms_api_rest/datamodels/pms_reservation.py | 1 + .../services/pms_reservation_service.py | 69 ++++++++++++++++++- 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 pms_api_rest/datamodels/pms_report.py diff --git a/pms_api_rest/datamodels/__init__.py b/pms_api_rest/datamodels/__init__.py index 52b777ba0..4cb78ab87 100644 --- a/pms_api_rest/datamodels/__init__.py +++ b/pms_api_rest/datamodels/__init__.py @@ -51,3 +51,4 @@ from . import res_lang from . import pms_account_payment_term from . import pms_room_closure_reason +from . import pms_report diff --git a/pms_api_rest/datamodels/pms_checkin_partner.py b/pms_api_rest/datamodels/pms_checkin_partner.py index 2f5fdd7b4..cbab41329 100644 --- a/pms_api_rest/datamodels/pms_checkin_partner.py +++ b/pms_api_rest/datamodels/pms_checkin_partner.py @@ -26,3 +26,4 @@ class PmsCheckinPartnerInfo(Datamodel): countryState = fields.Integer(required=False, allow_none=True) countryId = fields.Integer(required=False, allow_none=True) checkinPartnerState = fields.String(required=False, allow_none=True) + actionOnBoard = fields.Boolean(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_report.py b/pms_api_rest/datamodels/pms_report.py new file mode 100644 index 000000000..d49a885a7 --- /dev/null +++ b/pms_api_rest/datamodels/pms_report.py @@ -0,0 +1,7 @@ +from marshmallow import fields + +from odoo.addons.datamodel.core import Datamodel + +class PmsReportInfo(Datamodel): + _name = "pms.report.info" + pdf = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/datamodels/pms_reservation.py b/pms_api_rest/datamodels/pms_reservation.py index b43969228..0c69fbb48 100644 --- a/pms_api_rest/datamodels/pms_reservation.py +++ b/pms_api_rest/datamodels/pms_reservation.py @@ -58,6 +58,7 @@ class PmsReservationInfo(Datamodel): segmentationId = fields.Integer(required=False, allow_none=True) cancelationRuleId = fields.Integer(required=False, allow_none=True) toAssign = fields.Boolean(required=False, allow_none=True) + toCheckout = fields.Boolean(required=False, allow_none=True) reservationType = fields.String(required=False, allow_none=True) priceTotal = fields.Float(required=False, allow_none=True) diff --git a/pms_api_rest/services/pms_reservation_service.py b/pms_api_rest/services/pms_reservation_service.py index 4e2278586..a4f9dd2dd 100644 --- a/pms_api_rest/services/pms_reservation_service.py +++ b/pms_api_rest/services/pms_reservation_service.py @@ -1,3 +1,4 @@ +import base64 from datetime import datetime, timedelta from odoo import _ @@ -196,6 +197,8 @@ class PmsReservationService(Component): reservation.action_cancel() if reservation_data.stateCode == "confirm": reservation.confirm() + if reservation_data.toCheckout is not None and reservation_data.toCheckout: + reservation.action_reservation_checkout() reservation_vals = self._create_vals_from_params( reservation_vals, reservation_data @@ -548,6 +551,13 @@ class PmsReservationService(Component): checkin_partner = self.env["pms.checkin.partner"].search( [("id", "=", checkin_partner_id), ("reservation_id", "=", reservation_id)] ) + if ( + pms_checkin_partner_info.actionOnBoard + and pms_checkin_partner_info.actionOnBoard is not None + and pms_checkin_partner_info.actionOnBoard + and checkin_partner + ): + checkin_partner.action_on_board() if checkin_partner: checkin_partner.write( self.mapping_checkin_partner_values(pms_checkin_partner_info) @@ -682,7 +692,7 @@ class PmsReservationService(Component): "support_number": pms_checkin_partner_info.documentSupportNumber, "gender": pms_checkin_partner_info.gender, "residence_street": pms_checkin_partner_info.residenceStreet, - "nationality_id": pms_checkin_partner_info.nationality, + "nationality_id": pms_checkin_partner_info.countryId, "residence_zip": pms_checkin_partner_info.zip, "residence_city": pms_checkin_partner_info.residenceCity, "residence_state_id": pms_checkin_partner_info.countryState, @@ -704,3 +714,60 @@ class PmsReservationService(Component): if v: vals.update({k: v}) return vals + + @restapi.method( + [ + ( + [ + "//checkin-report", + ], + "GET", + ) + ], + auth="jwt_api_pms", + output_param=Datamodel("pms.report.info", is_list=False), + ) + def print_all_checkins(self, reservation_id): + reservations = False + if reservation_id: + reservations = self.env["pms.reservation"].sudo().browse(reservation_id) + checkins = reservations.checkin_partner_ids.filtered( + lambda x: x.state in ["precheckin", "onboard", "done"] + ) + pdf = ( + self.env.ref("pms.action_traveller_report") + .sudo() + ._render_qweb_pdf(checkins.ids)[0] + ) + base64EncodedStr = base64.b64encode(pdf) + PmsResponse = self.env.datamodels["pms.report.info"] + return PmsResponse(pdf=base64EncodedStr) + + @restapi.method( + [ + ( + [ + "//checkin-partners/" + "/checkin-report", + ], + "GET", + ) + ], + auth="jwt_api_pms", + output_param=Datamodel("pms.report.info", is_list=False), + ) + def print_checkin(self, reservation_id, checkin_partner_id): + reservations = False + if reservation_id: + reservations = self.env["pms.reservation"].sudo().browse(reservation_id) + checkin_partner = reservations.checkin_partner_ids.filtered( + lambda x: x.id == checkin_partner_id + ) + pdf = ( + self.env.ref("pms.action_traveller_report") + .sudo() + ._render_qweb_pdf(checkin_partner.id)[0] + ) + base64EncodedStr = base64.b64encode(pdf) + PmsResponse = self.env.datamodels["pms.report.info"] + return PmsResponse(pdf=base64EncodedStr)