mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
121 lines
4.8 KiB
Python
Executable File
121 lines
4.8 KiB
Python
Executable File
# Copyright 2019 Jose Luis Algara (Alda hotels) <osotranquilo@gmail.com>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
import json
|
|
from odoo import api, models
|
|
from datetime import datetime
|
|
import logging
|
|
|
|
|
|
class ResPartner(models.Model):
|
|
|
|
_inherit = 'res.partner'
|
|
|
|
@api.model
|
|
def rm_add_customer(self, customer):
|
|
# RoomMatik API CREACIÓN DE CLIENTE
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
partner_res = self.env['res.partner'].search([(
|
|
'document_number', '=',
|
|
customer['IdentityDocument']['Number'])])
|
|
|
|
json_response = {'Id': 0}
|
|
if any(partner_res):
|
|
# Change customer data
|
|
_logger.warning('ROOMMATIK %s exist in BD [ %s ] Rewriting',
|
|
partner_res[0].document_number,
|
|
partner_res[0].id,)
|
|
try:
|
|
partner_res[0].update(self.rm_prepare_customer(customer))
|
|
write_custumer = partner_res[0]
|
|
except:
|
|
_logger.error('ROOMMATIK Rewriting [%s] in BD [ %s ] ID',
|
|
partner_res[0].document_number,
|
|
partner_res[0].id,)
|
|
else:
|
|
# Create new customer
|
|
try:
|
|
write_custumer = self.create(self.rm_prepare_customer(customer))
|
|
_logger.info('ROOMMATIK Writing %s Name: %s',
|
|
customer['IdentityDocument']['Number'],
|
|
customer['FirstName'])
|
|
except:
|
|
_logger.error('ROOMMATIK Creating %s %s in BD',
|
|
customer['IdentityDocument']['Number'],
|
|
customer['FirstName'])
|
|
json_response = self.rm_get_a_customer(write_custumer.id)
|
|
json_response = json.dumps(json_response)
|
|
return json_response
|
|
|
|
def rm_prepare_customer(self, customer):
|
|
# Check Sex string
|
|
if customer['Sex'] not in {'male', 'female'}:
|
|
customer['Sex'] = ''
|
|
# Check state_id
|
|
state = self.env['res.country.state'].search([
|
|
('name', 'ilike', customer['Address']['Province'])])
|
|
country = self.env['res.country'].search([
|
|
('code_alpha3', '=', customer['Address']['Country'])])
|
|
# Create Street2s
|
|
street_2 = customer['Address']['House']
|
|
street_2 += ' ' + customer['Address']['Flat']
|
|
street_2 += ' ' + customer['Address']['Number']
|
|
metadata = {
|
|
'firstname': customer['FirstName'],
|
|
'lastname': customer['LastName1'],
|
|
'lastname2': customer['LastName2'],
|
|
'birthdate_date': datetime.strptime(customer['Birthday'],
|
|
"%d%m%Y").date(),
|
|
'gender': customer['Sex'],
|
|
'zip': customer['Address']['ZipCode'],
|
|
'city': customer['Address']['City'],
|
|
'street': customer['Address']['Street'],
|
|
'street2': street_2,
|
|
'state_id': state.id if state else False,
|
|
'country': country.id if country else False,
|
|
'phone': customer['Contact']['Telephone'],
|
|
'mobile': customer['Contact']['Mobile'],
|
|
'email': customer['Contact']['Email'],
|
|
'document_number': customer['IdentityDocument']['Number'],
|
|
'document_type': customer['IdentityDocument']['Type'],
|
|
'document_expedition_date': datetime.strptime(customer[
|
|
'IdentityDocument']['ExpeditionDate'], "%d%m%Y").date(),
|
|
}
|
|
return {k: v for k, v in metadata.items() if v != ""}
|
|
|
|
def rm_get_a_customer(self, customer):
|
|
# Prepare a Customer for RoomMatik
|
|
partner = self.search([('id', '=', customer)])
|
|
response = {}
|
|
response['Id'] = partner.id
|
|
response['FirstName'] = partner.firstname
|
|
response['LastName1'] = partner.lastname
|
|
response['LastName2'] = partner.lastname2
|
|
response['Birthday'] = partner.birthdate_date
|
|
response['Sex'] = partner.gender
|
|
response['Address'] = {
|
|
# 'Nationality': 'xxxxx'
|
|
'Country': partner.country_id.code_alpha3,
|
|
'ZipCode': partner.zip,
|
|
'City': partner.city,
|
|
'Street': partner.street,
|
|
'House': partner.street2,
|
|
# 'Flat': "xxxxxxx",
|
|
# 'Number': "xxxxxxx",
|
|
'Province': partner.state_id.name,
|
|
}
|
|
response['IdentityDocument'] = {
|
|
'Number': partner.document_number,
|
|
'Type': partner.document_type,
|
|
'ExpiryDate': "",
|
|
'ExpeditionDate': partner.document_expedition_date,
|
|
}
|
|
response['Contact'] = {
|
|
'Telephone': partner.phone,
|
|
# 'Fax': 'xxxxxxx',
|
|
'Mobile': partner.mobile,
|
|
'Email': partner.email,
|
|
}
|
|
return response
|