Files
pms/hotel_roommatik/models/inherited_res_partner.py
2019-08-27 09:40:45 +02:00

141 lines
5.6 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
from odoo.addons.hotel_roommatik.models.roommatik import (
DEFAULT_ROOMMATIK_DATE_FORMAT)
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}
write_customer = False
if any(partner_res):
# Change customer data
try:
partner_res[0].update(self.rm_prepare_customer(customer))
write_customer = partner_res[0]
_logger.info('ROOMMATIK %s exist in BD [ %s ] Rewriting',
partner_res[0].document_number,
partner_res[0].id,)
except Exception as e:
if 'args' in e.__dir__():
error_name = e.args
else:
error_name = e.name
else:
# Create new customer
try:
self.create(self.rm_prepare_customer(customer))
_logger.info('ROOMMATIK Created %s Name: %s',
customer['IdentityDocument']['Number'],
customer['FirstName'])
write_customer = self.env['res.partner'].search([
('document_number', '=',
customer['IdentityDocument']['Number'])])
except Exception as e:
if 'args' in e.__dir__():
error_name = e.args
else:
error_name = e.name
partner_res = self.env['res.partner'].search([(
'document_number', '=',
customer['IdentityDocument']['Number'])])
partner_res.unlink()
if write_customer:
json_response = self.rm_get_a_customer(write_customer.id)
json_response = json.dumps(json_response)
return json_response
else:
_logger.error(error_name)
return [False, error_name]
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'], DEFAULT_ROOMMATIK_DATE_FORMAT).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_id': 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'],
DEFAULT_ROOMMATIK_DATE_FORMAT).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 if partner.zip else "",
'City': partner.city if partner.city else "",
'Street': partner.street if partner.street else "",
'House': partner.street2 if partner.street2 else "",
# 'Flat': "xxxxxxx",
# 'Number': "xxxxxxx",
'Province': partner.state_id.name if partner.state_id.name else "",
}
response['IdentityDocument'] = {
'Number': partner.document_number,
'Type': partner.document_type,
'ExpiryDate': "",
'ExpeditionDate': partner.document_expedition_date,
}
response['Contact'] = {
'Telephone': partner.phone if partner.phone else "",
# 'Fax': 'xxxxxxx',
'Mobile': partner.mobile if partner.mobile else "",
'Email': partner.email if partner.email else "",
}
return response