mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
104 lines
3.8 KiB
Python
104 lines
3.8 KiB
Python
import logging
|
|
import re
|
|
|
|
from odoo import api, fields, models
|
|
|
|
CODE_SPAIN = "ES"
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class PmsCheckinPartner(models.Model):
|
|
_inherit = "pms.checkin.partner"
|
|
|
|
support_number = fields.Char(
|
|
string="Support number",
|
|
help="ID support number",
|
|
readonly=False,
|
|
store=True,
|
|
compute="_compute_support_number",
|
|
)
|
|
|
|
@api.depends("partner_id")
|
|
def _compute_support_number(self):
|
|
for record in self:
|
|
if not record.support_number:
|
|
if record.partner_id.id_numbers:
|
|
dni_numbers = record.partner_id.id_numbers.filtered(
|
|
lambda x: x.category_id.name == "DNI"
|
|
)
|
|
if len(dni_numbers) == 1 and dni_numbers.support_number:
|
|
record.support_number = dni_numbers.support_number
|
|
else:
|
|
record.support_number = False
|
|
else:
|
|
record.support_number = False
|
|
|
|
@api.model
|
|
def _checkin_mandatory_fields(self, country=False, depends=False):
|
|
mandatory_fields = super(PmsCheckinPartner, self)._checkin_mandatory_fields(
|
|
depends
|
|
)
|
|
mandatory_fields.extend(
|
|
[
|
|
"birthdate_date",
|
|
"gender",
|
|
"document_number",
|
|
"document_type",
|
|
"document_expedition_date",
|
|
"nationality_id",
|
|
]
|
|
)
|
|
if depends or (country and country.code == CODE_SPAIN):
|
|
mandatory_fields.extend(
|
|
[
|
|
"residence_state_id",
|
|
"residence_street",
|
|
"residence_city",
|
|
]
|
|
)
|
|
return mandatory_fields
|
|
|
|
@api.model
|
|
def _checkin_manual_fields(self, country=False, depends=False):
|
|
manual_fields = super(PmsCheckinPartner, self)._checkin_manual_fields(depends)
|
|
manual_fields.extend(["support_number"])
|
|
return manual_fields
|
|
|
|
def _get_partner_by_document(self, document_number, document_type):
|
|
# if not find partner by documents (super method) then search by
|
|
# partner fields, VAT, or aeat_identification equivalent
|
|
partner = super(PmsCheckinPartner, self)._get_partner_by_document(
|
|
document_number, document_type
|
|
)
|
|
document_number = re.sub(r"[^a-zA-Z0-9]", "", document_number).upper()
|
|
if not partner and document_number and document_type:
|
|
search_field_name = False
|
|
if document_type.aeat_identification_type in ["03", "05", "06"]:
|
|
search_field_name = "aeat_identification"
|
|
search_comparison = "="
|
|
elif document_type.aeat_identification_type in ["02", "04"]:
|
|
# If we have a NIF, we search by VAT (with or without country code)
|
|
search_field_name = "vat"
|
|
search_comparison = "=like"
|
|
document_number = "%" + document_number
|
|
if search_field_name:
|
|
partner = self.env["res.partner"].search(
|
|
[
|
|
("is_company", "=", False),
|
|
("is_agency", "=", False),
|
|
(search_field_name, search_comparison, document_number),
|
|
],
|
|
limit=1,
|
|
)
|
|
if (
|
|
partner
|
|
and partner.vat
|
|
and len(partner.vat) - len(document_number) > 2
|
|
):
|
|
# The country code length is 2, so if the difference is greater than 2
|
|
# the partner is not the same
|
|
# TODO: this method need pass country code to search
|
|
partner = False
|
|
return partner
|