diff --git a/pms_api_rest/datamodels/pms_calendar.py b/pms_api_rest/datamodels/pms_calendar.py index d539f2448..9391864e7 100644 --- a/pms_api_rest/datamodels/pms_calendar.py +++ b/pms_api_rest/datamodels/pms_calendar.py @@ -9,6 +9,9 @@ class PmsReservationUpdates(Datamodel): preferredRoomId = fields.Integer(required=False, allow_none=True) boardServiceId = fields.Integer(required=False, allow_none=True) pricelistId = fields.Integer(required=False, allow_none=True) + adults = fields.Integer(required=False, allow_none=True) + children = fields.Integer(required=False, allow_none=True) + segmentationId = fields.Integer(required=False, allow_none=True) class PmsCalendarSwapInfo(Datamodel): diff --git a/pms_api_rest/datamodels/pms_checkin_partner.py b/pms_api_rest/datamodels/pms_checkin_partner.py index b34466e3e..045cc27e2 100644 --- a/pms_api_rest/datamodels/pms_checkin_partner.py +++ b/pms_api_rest/datamodels/pms_checkin_partner.py @@ -13,7 +13,7 @@ class PmsCheckinPartnerInfo(Datamodel): lastname2 = fields.String(required=False, allow_none=True) email = fields.String(required=False, allow_none=True) mobile = fields.String(required=False, allow_none=True) - documentType = fields.String(required=False, allow_none=True) + documentType = fields.Integer(required=False, allow_none=True) documentNumber = fields.String(required=False, allow_none=True) documentExpeditionDate = fields.String(required=False, allow_none=True) documentSupportNumber = fields.String(required=False, allow_none=True) @@ -22,5 +22,6 @@ class PmsCheckinPartnerInfo(Datamodel): residenceStreet = fields.String(required=False, allow_none=True) zip = fields.String(required=False, allow_none=True) residenceCity = fields.String(required=False, allow_none=True) - nationality = fields.String(required=False, allow_none=True) - countryState = fields.String(required=False, allow_none=True) + nationality = fields.Integer(required=False, allow_none=True) + countryState = fields.Integer(required=False, allow_none=True) + checkinPartnerState = fields.String(required=False, allow_none=True) diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index dbd99b828..6742a4b3c 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -90,7 +90,7 @@ class PmsFolioService(Component): segmentation_ids = [] if reservation.segmentation_ids: for segmentation in reservation.segmentation_ids: - segmentation_ids.append(segmentation.name) + segmentation_ids.append(segmentation.id) reservations.append( { @@ -149,9 +149,7 @@ class PmsFolioService(Component): "roomTypeCode": reservation.room_type_id.default_code if reservation.room_type_id else "", - "children": reservation.children - if reservation.children - else "", + "children": reservation.children if reservation.children else 0, "countServices": len(reservation.service_ids) if reservation.service_ids else 0, @@ -162,9 +160,9 @@ class PmsFolioService(Component): "departureHour": reservation.departure_hour, "pendingCheckinData": reservation.pending_checkin_data, "createDate": reservation.create_date, - "segmentations": segmentation_ids[0] + "segmentationId": segmentation_ids[0] if segmentation_ids - else "", + else 0, "cancellationPolicy": reservation.pricelist_id.cancelation_rule_id.name if reservation.pricelist_id.cancelation_rule_id.name else "", diff --git a/pms_api_rest/services/pms_partner_service.py b/pms_api_rest/services/pms_partner_service.py index db2b52691..2a95e6af0 100644 --- a/pms_api_rest/services/pms_partner_service.py +++ b/pms_api_rest/services/pms_partner_service.py @@ -51,7 +51,7 @@ class PmsPartnerService(Component): ) def get_partner_by_doc_number(self, document_type, document_number): doc_type = self.env["res.partner.id_category"].search( - [("name", "=", document_type)] + [("id", "=", document_type)] ) doc_number = self.env["res.partner.id_number"].search( [("name", "=", document_number), ("category_id", "=", doc_type.id)] @@ -88,7 +88,7 @@ class PmsPartnerService(Component): mobile=doc_number.partner_id.mobile if doc_number.partner_id.mobile else "", - documentType=doc_type.name, + documentType=doc_type.id, documentNumber=doc_number.name, documentExpeditionDate=document_expedition_date if doc_number.valid_from @@ -111,12 +111,12 @@ class PmsPartnerService(Component): residenceCity=doc_number.partner_id.residence_city if doc_number.partner_id.residence_city else "", - nationality=doc_number.partner_id.nationality_id.name + nationality=doc_number.partner_id.nationality_id.id if doc_number.partner_id.nationality_id - else "", - countryState=doc_number.partner_id.residence_state_id.name + else -1, + countryState=doc_number.partner_id.residence_state_id.id if doc_number.partner_id.residence_state_id - else "", + else -1, ) ) return partners diff --git a/pms_api_rest/services/pms_reservation_service.py b/pms_api_rest/services/pms_reservation_service.py index 40543cda6..8d65f4cbb 100644 --- a/pms_api_rest/services/pms_reservation_service.py +++ b/pms_api_rest/services/pms_reservation_service.py @@ -192,7 +192,20 @@ class PmsReservationService(Component): reservation_vals.update( {"pricelist_id": reservation_lines_changes.pricelistId} ) - + if reservation_lines_changes.adults: + reservation_vals.update({"adults": reservation_lines_changes.adults}) + if reservation_lines_changes.children: + reservation_vals.update( + {"children": reservation_lines_changes.children} + ) + if reservation_lines_changes.segmentationId: + reservation_vals.update( + { + "segmentation_ids": [ + (6, 0, [reservation_lines_changes.segmentationId]) + ] + } + ) reservation_to_update.write(reservation_vals) @restapi.method( @@ -214,7 +227,10 @@ class PmsReservationService(Component): if not reservation: pass else: - for checkin_partner in reservation.checkin_partner_ids: + # TODO Review state draft + for checkin_partner in reservation.checkin_partner_ids.filtered( + lambda ch: ch.state != "dummy" + ): if checkin_partner.document_expedition_date: document_expedition_date = ( checkin_partner.document_expedition_date.strftime("%d/%m/%Y") @@ -237,9 +253,9 @@ class PmsReservationService(Component): else "", email=checkin_partner.email if checkin_partner.email else "", mobile=checkin_partner.mobile if checkin_partner.mobile else "", - documentType=checkin_partner.document_type.name - if checkin_partner.document_type.name - else "", + documentType=checkin_partner.document_type.id + if checkin_partner.document_type + else -1, documentNumber=checkin_partner.document_number if checkin_partner.document_number else "", @@ -262,12 +278,13 @@ class PmsReservationService(Component): residenceCity=checkin_partner.residence_city if checkin_partner.residence_city else "", - nationality=checkin_partner.residence_country_id.name + nationality=checkin_partner.residence_country_id.id if checkin_partner.residence_country_id - else "", - countryState=checkin_partner.residence_state_id.name + else -1, + countryState=checkin_partner.residence_state_id.id if checkin_partner.residence_state_id - else "", + else -1, + checkinPartnerState=checkin_partner.state, ) ) return checkin_partners @@ -276,64 +293,7 @@ class PmsReservationService(Component): [ ( [ - "//adults/", - ], - "PATCH", - ) - ], - auth="jwt_api_pms", - ) - def update_reservation_adults(self, reservation_id, adults): - reservation_id = self.env["pms.reservation"].browse(reservation_id) - reservation_id.write( - { - "adults": adults, - } - ) - - @restapi.method( - [ - ( - [ - "//children/", - ], - "PATCH", - ) - ], - auth="jwt_api_pms", - ) - def update_reservation_children(self, reservation_id, children): - reservation_id = self.env["pms.reservation"].browse(reservation_id) - reservation_id.write( - { - "children": children, - } - ) - - @restapi.method( - [ - ( - [ - "//segmentation/", - ], - "PATCH", - ) - ], - auth="jwt_api_pms", - ) - def update_segmentation_id(self, reservation_id, segmentation_id): - reservation_id = self.env["pms.reservation"].browse(reservation_id) - reservation_id.write( - { - "segmentation_ids": [segmentation_id], - } - ) - - @restapi.method( - [ - ( - [ - "//checkin_partner/", + "//checkin_partners/", ], "PATCH", ) @@ -348,60 +308,109 @@ class PmsReservationService(Component): [("id", "=", checkin_partner_id), ("reservation_id", "=", reservation_id)] ) if checkin_partner: - vals = dict() - if pms_checkin_partner_info.firstname: - vals.update({"firstname": pms_checkin_partner_info.firstname}) - if pms_checkin_partner_info.lastname: - vals.update({"lastname": pms_checkin_partner_info.lastname}) - if pms_checkin_partner_info.lastname2: - vals.update({"lastname2": pms_checkin_partner_info.lastname2}) - if pms_checkin_partner_info.email: - vals.update({"email": pms_checkin_partner_info.email}) - if pms_checkin_partner_info.mobile: - vals.update({"mobile": pms_checkin_partner_info.mobile}) - if pms_checkin_partner_info.documentType: - document_type = self.env["res.partner.id_category"].search( - [("name", "=", pms_checkin_partner_info.documentType)] + checkin_partner.write( + self._get_checkin_partner_values(pms_checkin_partner_info) + ) + + @restapi.method( + [ + ( + [ + "//checkin_partners", + ], + "POST", + ) + ], + input_param=Datamodel("pms.checkin.partner.info", is_list=False), + auth="jwt_api_pms", + ) + def create_reservation_checkin_partner( + self, reservation_id, pms_checkin_partner_info + ): + reservation_rec = self.env["pms.reservation"].browse(reservation_id) + if any( + reservation_rec.checkin_partner_ids.filtered(lambda ch: ch.state == "dummy") + ): + checkin_partner_last_id = max( + reservation_rec.checkin_partner_ids.filtered( + lambda ch: ch.state == "dummy" ) - vals.update({"document_type": document_type}) - if pms_checkin_partner_info.documentNumber: - vals.update( - {"document_number": pms_checkin_partner_info.documentNumber} - ) - if pms_checkin_partner_info.documentExpeditionDate: - document_expedition_date = datetime.strptime( - pms_checkin_partner_info.documentExpeditionDate, "%d/%m/%Y" - ) - document_expedition_date = document_expedition_date.strftime("%Y-%m-%d") - vals.update({"document_expedition_date": document_expedition_date}) - if pms_checkin_partner_info.documentSupportNumber: - vals.update( - {"support_number": pms_checkin_partner_info.documentSupportNumber} - ) - if pms_checkin_partner_info.gender: - vals.update({"gender": pms_checkin_partner_info.gender}) - if pms_checkin_partner_info.birthdate: - birthdate = datetime.strptime( - pms_checkin_partner_info.birthdate, "%d/%m/%Y" - ) - birthdate = birthdate.strftime("%Y-%m-%d") - vals.update({"birthdate_date": birthdate}) - if pms_checkin_partner_info.residenceStreet: - vals.update( - {"residence_street": pms_checkin_partner_info.residenceStreet} - ) - if pms_checkin_partner_info.zip: - vals.update({"residence_zip": pms_checkin_partner_info.zip}) - if pms_checkin_partner_info.residenceCity: - vals.update({"residence_city": pms_checkin_partner_info.residenceCity}) - if pms_checkin_partner_info.nationality: - country_id = self.env["res.country"].search( - [("name", "=", pms_checkin_partner_info.nationality)] - ) - vals.update({"residence_country_id": country_id}) - if pms_checkin_partner_info.countryState: - country_state = self.env["res.country.state"].search( - [("name", "=", pms_checkin_partner_info.countryState)] - ) - vals.update({"residence_state_id": country_state}) - checkin_partner.write(vals) + ).id + checkin_partner = self.env["pms.checkin.partner"].browse( + checkin_partner_last_id + ) + checkin_partner.write( + self._get_checkin_partner_values(pms_checkin_partner_info) + ) + + @restapi.method( + [ + ( + [ + "//checkin_partners/", + ], + "DELETE", + ) + ], + auth="jwt_api_pms", + ) + def delete_reservation_checkin_partner(self, reservation_id, checkin_partner_id): + reservation = self.env["pms.reservation"].browse(reservation_id) + reservation.adults = reservation.adults - 1 + + def _get_checkin_partner_values(self, pms_checkin_partner_info): + vals = dict() + if pms_checkin_partner_info.firstname: + vals.update({"firstname": pms_checkin_partner_info.firstname}) + if pms_checkin_partner_info.lastname: + vals.update({"lastname": pms_checkin_partner_info.lastname}) + if pms_checkin_partner_info.lastname2: + vals.update({"lastname2": pms_checkin_partner_info.lastname2}) + if pms_checkin_partner_info.email: + vals.update({"email": pms_checkin_partner_info.email}) + if pms_checkin_partner_info.mobile: + vals.update({"mobile": pms_checkin_partner_info.mobile}) + if ( + pms_checkin_partner_info.documentType + and pms_checkin_partner_info.documentType != -1 + ): + document_type = pms_checkin_partner_info.documentType + vals.update({"document_type": document_type}) + if pms_checkin_partner_info.documentNumber: + vals.update({"document_number": pms_checkin_partner_info.documentNumber}) + if pms_checkin_partner_info.documentExpeditionDate: + document_expedition_date = datetime.strptime( + pms_checkin_partner_info.documentExpeditionDate, "%d/%m/%Y" + ) + document_expedition_date = document_expedition_date.strftime("%Y-%m-%d") + vals.update({"document_expedition_date": document_expedition_date}) + if pms_checkin_partner_info.documentSupportNumber: + vals.update( + {"support_number": pms_checkin_partner_info.documentSupportNumber} + ) + if pms_checkin_partner_info.gender: + vals.update({"gender": pms_checkin_partner_info.gender}) + if pms_checkin_partner_info.birthdate: + birthdate = datetime.strptime( + pms_checkin_partner_info.birthdate, "%d/%m/%Y" + ) + birthdate = birthdate.strftime("%Y-%m-%d") + vals.update({"birthdate_date": birthdate}) + if pms_checkin_partner_info.residenceStreet: + vals.update({"residence_street": pms_checkin_partner_info.residenceStreet}) + if pms_checkin_partner_info.zip: + vals.update({"residence_zip": pms_checkin_partner_info.zip}) + if pms_checkin_partner_info.residenceCity: + vals.update({"residence_city": pms_checkin_partner_info.residenceCity}) + if ( + pms_checkin_partner_info.nationality + and pms_checkin_partner_info.nationality != -1 + ): + vals.update({"nationality_id": pms_checkin_partner_info.nationality}) + vals.update({"residence_country_id": pms_checkin_partner_info.nationality}) + if ( + pms_checkin_partner_info.countryState + and pms_checkin_partner_info.countryState != -1 + ): + vals.update({"residence_state_id": pms_checkin_partner_info.countryState}) + return vals