From a525ac9984d76a09c569c3c314b02241fb1746ae Mon Sep 17 00:00:00 2001 From: Jose Luis Date: Mon, 1 Apr 2019 21:57:33 +0200 Subject: [PATCH] [ADD] CheckinPartner function --- hotel_roommatik/models/__init__.py | 1 + .../models/inherited_hotel_checkin_partner.py | 153 ++++++++++++++++++ .../models/inherited_res_partner.py | 32 ++-- hotel_roommatik/models/roommatik.py | 12 +- 4 files changed, 183 insertions(+), 15 deletions(-) create mode 100644 hotel_roommatik/models/inherited_hotel_checkin_partner.py diff --git a/hotel_roommatik/models/__init__.py b/hotel_roommatik/models/__init__.py index 9432fd559..9352d8efe 100755 --- a/hotel_roommatik/models/__init__.py +++ b/hotel_roommatik/models/__init__.py @@ -1,3 +1,4 @@ from . import inherited_hotel_folio +from . import inherited_hotel_checkin_partner from . import inherited_res_partner from . import roommatik diff --git a/hotel_roommatik/models/inherited_hotel_checkin_partner.py b/hotel_roommatik/models/inherited_hotel_checkin_partner.py new file mode 100644 index 000000000..f32bff332 --- /dev/null +++ b/hotel_roommatik/models/inherited_hotel_checkin_partner.py @@ -0,0 +1,153 @@ +# Copyright 2018 Jose Luis Algara (Alda hotels) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import json +from odoo import api, models +from datetime import date, datetime +import logging + +class HotelFolio(models.Model): + + _inherit = 'hotel.folio' + + @api.model + def rm_checkin_partner(self, stay): + # CHECK-IN + _logger = logging.getLogger(__name__) + folio_rm = self.env['hotel.folio'].search([('id', '=', stay['Code'])]) + reservation_rm = self.env['hotel.reservation'].search([('id', '=', stay['Code'])]) + # folio_res = self.env['hotel.checkin.partner'].search([('id', '=', stay['Code'])]) + json_response = dict() + + # Need checkin? + if reservation_rm.checkin_partner_pending_count > 0: + checkin_partner_val = { + 'folio_id': reservation_rm.folio_id.id, + 'reservation_id': reservation_rm.id, + 'enter_date': datetime.strptime(stay["Arrival"], "%d%m%Y").date(), + 'exit_date': datetime.strptime(stay["Departure"], "%d%m%Y").date(), + 'partner_id': stay["Customers"]["Customer"]["Id"], + 'email': stay["Customers"]["Customer"]["Contact"]["Email"], + 'mobile': stay["Customers"]["Customer"]["Contact"]["Mobile"], + 'document_type': stay["Customers"]["Customer"]["IdentityDocument"]["Type"], + 'document_number': stay["Customers"]["Customer"]["IdentityDocument"]["Number"], + 'document_expedition_date': datetime.strptime(stay["Customers"]["Customer"]["IdentityDocument"]["ExpiryDate"], "%d%m%Y").date(), + 'gender': stay["Customers"]["Customer"]["Sex"], + 'birthdate_date': datetime.strptime(stay["Customers"]["Customer"]["Birthday"], "%d%m%Y").date(), + 'code_ine_id': stay["Customers"]["Customer"]["Address"]["Province"], + 'state': 'booking', + } + try: + # Debug Stop ------------------- + #import wdb; wdb.set_trace() + # Debug Stop ------------------ + _logger.info('ROOMMATIK check-in Document: %s in (%s reservation_id).', + checkin_partner_val['document_number'], + checkin_partner_val['reservation_id']) + json_response = {'Estate': 'O.K.'} + record = self.env['hotel.checkin.partner'].create(checkin_partner_val) + except: + json_response = {'Estate': 'Error not create Checkin'} + _logger.error('ROOMMATIK writing %s in (%s reservation_id).', + checkin_partner_val['document_number'], + checkin_partner_val['reservation_id']) + + # ATENCION SI LO CREA, AUNQUE DA ERROR CUANDO ES LA MISMA PERSONA. + else: + json_response = {'Estate': 'Error not create Checkin NO checkin_partner_pending_count'} + _logger.error('ROOMMATIK NO checkin pending count in Reservation ID %s.', reservation_rm.id) + # stay1 = { + # + # "Id": 123, + # "Code": "44", + # "Room": { + # "Id": 123, + # "Name": "Name", + # }, + # "RoomType": { + # "Id": 123, + # "Name": "Name", + # "GuestNumber": 123, + # }, + # "Arrival": date(2001, 7, 19).strftime("%d%m%Y"), + # "Departure": date(2001, 7, 19).strftime("%d%m%Y"), + # "Customers": { + # "Customer": { + # "Id": 123, + # "FirstName": "FirstName", + # "LastName1": "LastName1", + # "LastName2": "LastName2", + # "Birthday": date(2001, 7, 19).strftime("%d%m%Y"), + # "Sex": "Sex", + # "Address": { + # "Nationality": "Nationality", + # "Country": "Country", + # "ZipCode": "ZipCode", + # "City": "City", + # "Street": "Street", + # "House": "House", + # "Flat": "Flat", + # "Number": "Number", + # "Province": "Province", + # }, + # "IdentityDocument": { + # "Number": "Number", + # "Type": "Type", + # "ExpiryDate": date(2001, 7, 19).strftime("%d%m%Y"), + # "ExpeditionDate": date(2001, 7, 19).strftime("%d%m%Y"), + # }, + # "Contact": { + # "Telephone": "Telephone", + # "Fax": "Fax", + # "Mobile": "Mobile", + # "Email": "Email", + # }, + # }, + # "Customer": { + # "Id": 124, + # "FirstName": "FirstName2", + # "LastName1": "LastName12", + # "LastName2": "LastName22", + # "Birthday": date(2001, 7, 19).strftime("%d%m%Y"), + # "Sex": "Sex", + # "Address": { + # "Nationality": "Nationality", + # "Country": "Country", + # "ZipCode": "ZipCode", + # "City": "City", + # "Street": "Street", + # "House": "House", + # "Flat": "Flat", + # "Number": "Number", + # "Province": "Province", + # }, + # "IdentityDocument": { + # "Number": "Number", + # "Type": "Type", + # "ExpiryDate": date(2001, 7, 19).strftime("%d%m%Y"), + # "ExpeditionDate": date(2001, 7, 19).strftime("%d%m%Y"), + # }, + # "Contact": { + # "Telephone": "Telephone", + # "Fax": "Fax", + # "Mobile": "Mobile", + # "Email": "Email", + # }, + # }, + # }, + # "TimeInterval": { + # "Id": 123, + # "Name": "Name", + # "Minutes": 123, + # }, + # "Adults": 2, + # "ReservationCode": "ReservationCode", + # "Total": 10.5, + # "Paid": 10.5, + # "Outstanding": 10.5, + # "Taxable": 10.5, + # } + + json_response = json.dumps(json_response) + + return json_response diff --git a/hotel_roommatik/models/inherited_res_partner.py b/hotel_roommatik/models/inherited_res_partner.py index a68cd73c0..20822aa83 100755 --- a/hotel_roommatik/models/inherited_res_partner.py +++ b/hotel_roommatik/models/inherited_res_partner.py @@ -12,11 +12,13 @@ class ResPartner(models.Model): @api.model def rm_add_customer(self, customer): - # CREACIÓN DE CLIENTE - partnername = customer['LastName1'] + ' ' + customer['LastName2'] + ' ' + customer['FirstName'] + # RoomMatik API CREACIÓN DE CLIENTE + partnername = customer['LastName1'] + ' ' + customer[ + 'LastName2'] + ' ' + customer['FirstName'] partner_res = self.env['res.partner'].search( [('name', '=', partnername)]) - # Need a smart search function here (Check name, document, mail) return unique or null customer. + # Need a smart search function here (Check name, document, mail) return + # unique or null customer. json_response = dict() if any(partner_res): @@ -62,12 +64,16 @@ class ResPartner(models.Model): # Check state_id city_srch = self.env['res.country.state'].search([ ('name', 'ilike', - customer['IdentityDocument'][0]['Address'][0]['Province'])]) + customer['IdentityDocument'][0][ + 'Address'][0]['Province'])]) # Create Street2 - street_2 = 'Nº ' + customer['IdentityDocument'][0]['Address'][0]['House'] - street_2 += ', ' + customer['IdentityDocument'][0]['Address'][0]['Flat'] - street_2 += ', ' + customer['IdentityDocument'][0]['Address'][0]['Number'] + street_2 = 'Nº ' + customer['IdentityDocument'][0][ + 'Address'][0]['House'] + street_2 += ', ' + customer['IdentityDocument'][0][ + 'Address'][0]['Flat'] + street_2 += ', ' + customer['IdentityDocument'][0][ + 'Address'][0]['Number'] # Check birthdate_date # Here need to convert birthdate_date to '%d%m%Y' fomat @@ -79,9 +85,12 @@ class ResPartner(models.Model): 'birthdate_date': datetime.strptime( customer['Birthday'], '%d%m%Y'), 'gender': customer['Sex'], - 'zip': customer['IdentityDocument'][0]['Address'][0]['ZipCode'], - 'city': customer['IdentityDocument'][0]['Address'][0]['City'], - 'street': customer['IdentityDocument'][0]['Address'][0]['Street'], + 'zip': customer['IdentityDocument'][0][ + 'Address'][0]['ZipCode'], + 'city': customer['IdentityDocument'][0][ + 'Address'][0]['City'], + 'street': customer['IdentityDocument'][0][ + 'Address'][0]['Street'], 'street2': street_2, 'state_id': city_srch.id, 'phone': customer['Contact'][0]['Telephone'], @@ -89,10 +98,9 @@ class ResPartner(models.Model): 'email': customer['Contact'][0]['Email'], }) - json_response = {'Id': write_custumer.id} - # Id: será 0 en la solicitud y será diferente de 0 si el cliente se ha creado + # Id: será 0 en solicitud y diferente de 0 si el cliente se ha creado # correctamente en el PMS. # FirstName: nombre. # LastName1: primer apellido. diff --git a/hotel_roommatik/models/roommatik.py b/hotel_roommatik/models/roommatik.py index 1f816bbd3..95f2ebcec 100755 --- a/hotel_roommatik/models/roommatik.py +++ b/hotel_roommatik/models/roommatik.py @@ -11,10 +11,9 @@ class RoomMatik(models.Model): @api.model def rm_get_date(self): - # FECHA/HORA - # TODO Need know UTC in the machine/hotel + # RoomMatik API FECHA/HORA utc_s = '+01:00' - json_response = dict() + # TODO Need know UTC in the machine/hotel json_response = { 'dateTime': datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f") + utc_s } @@ -23,9 +22,16 @@ class RoomMatik(models.Model): @api.model def rm_add_customer(self, customer): + # RoomMatik API CREACIÓN DE CLIENTE apidata = self.env['res.partner'] return apidata.rm_add_customer(customer) + @api.model + def rm_checkin_partner(self, stay): + # RoomMatik API CHECK-IN + apidata = self.env['hotel.folio'] + return apidata.rm_checkin_partner(stay) + # Debug Stop ------------------- # import wdb; wdb.set_trace() # Debug Stop -------------------