diff --git a/pms/data/pms_data.xml b/pms/data/pms_data.xml
index bd434e6d6..cd852159b 100644
--- a/pms/data/pms_data.xml
+++ b/pms/data/pms_data.xml
@@ -61,7 +61,10 @@
Driving License
C
-
+
Identification Document
I
diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py
index ab9030b0c..1bb42ffc5 100644
--- a/pms/models/pms_checkin_partner.py
+++ b/pms/models/pms_checkin_partner.py
@@ -27,6 +27,9 @@ class PmsCheckinPartner(models.Model):
help="Partner associated with checkin partner",
comodel_name="res.partner",
domain="[('is_company', '=', False)]",
+ compute="_compute_partner_id",
+ store=True,
+ readonly=False,
)
reservation_id = fields.Many2one(
string="Reservation",
@@ -52,11 +55,7 @@ class PmsCheckinPartner(models.Model):
check_pms_properties=True,
)
name = fields.Char(
- string="Name",
- help="Checkin partner name",
- readonly=False,
- store=True,
- compute="_compute_name",
+ string="Name", help="Checkin partner name", related="partner_id.name"
)
email = fields.Char(
string="E-mail",
@@ -131,32 +130,32 @@ class PmsCheckinPartner(models.Model):
readonly=False,
)
firstname = fields.Char(
- "First Name",
+ string="First Name",
compute="_compute_firstname",
store=True,
readonly=False,
)
lastname = fields.Char(
- "Last Name",
+ string="Last Name",
compute="_compute_lastname",
store=True,
readonly=False,
)
lastname2 = fields.Char(
- "Second Last Name",
+ string="Second Last Name",
compute="_compute_lastname2",
store=True,
readonly=False,
)
birthdate_date = fields.Date(
- "Birthdate",
+ string="Birthdate",
compute="_compute_birth_date",
store=True,
readonly=False,
)
document_number = fields.Char(
- "Document Number",
- #compute="_compute_document_number",
+ string="Document Number",
+ compute="_compute_document_number",
store=True,
readonly=False,
)
@@ -164,73 +163,105 @@ class PmsCheckinPartner(models.Model):
string="Document Type",
comodel_name="res.partner.id_category",
help="Select a valid document type",
- #compute="_compute_document_type",
+ compute="_compute_document_type",
store=True,
readonly=False,
)
document_expedition_date = fields.Date(
- "Expedition Date",
- #compute="_compute_document_expedition_date",
+ string="Expedition Date",
+ help="Date on which document_type was issued",
+ compute="_compute_document_expedition_date",
store=True,
readonly=False,
)
- # Compute
- # ****************************************************
- # @api.depends("partner_id", "partner_id.document_number")
- # def _compute_document_number(self):
- # for record in self:
- # if not record.document_number:
- # record.document_number = record.partner_id.document_number
- #
- # @api.depends("partner_id", "partner_id.document_type")
- # def _compute_document_type(self):
- # for record in self:
- # if not record.document_type:
- # record.document_type = record.partner_id.document_type
- #
- # @api.depends("partner_id", "partner_id.document_expedition_date")
- # def _compute_document_expedition_date(self):
- # for record in self:
- # if not record.document_expedition_date:
- # record.document_expedition_date = (
- # record.partner_id.document_expedition_date
- # )
+
+ document_id = fields.Many2one(
+ string="Document",
+ help="Select a valid document type",
+ comodel_name="res.partner.id_number",
+ compute="_compute_document_id",
+ )
+
+ @api.depends("partner_id", "partner_id.id_numbers")
+ def _compute_document_number(self):
+ for record in self:
+ if not record.document_number:
+ if record.partner_id.id_numbers:
+ record.document_number = record.partner_id.id_numbers[0].name
+
+ @api.depends("partner_id", "partner_id.id_numbers", "document_type")
+ def _compute_document_type(self):
+ for record in self:
+ if record.partner_id and record.partner_id.id_numbers:
+ if not record.document_type:
+ if record.partner_id.id_numbers:
+ record.document_type = record.partner_id.id_numbers[
+ 0
+ ].category_id
+ else:
+ for number in record.partner_id.id_numbers:
+ if record.document_number == number.name:
+ if record.document_type != number.category_id:
+ raise ValidationError(
+ _("Document_type e document_number not match(DT)")
+ )
+
+ @api.depends("partner_id", "partner_id.id_numbers", "document_expedition_date")
+ def _compute_document_expedition_date(self):
+ for record in self:
+ if record.partner_id and record.partner_id.id_numbers:
+ if not record.document_expedition_date:
+ record.document_expedition_date = record.partner_id.id_numbers[
+ 0
+ ].valid_from
@api.depends("partner_id", "partner_id.firstname")
def _compute_firstname(self):
for record in self:
if not record.firstname:
record.firstname = record.partner_id.firstname
+ elif not record.partner_id.firstname:
+ record.partner_id.write({"firstname": record.firstname})
@api.depends("partner_id", "partner_id.lastname")
def _compute_lastname(self):
for record in self:
if not record.lastname:
record.lastname = record.partner_id.lastname
+ elif not record.partner_id.lastname:
+ record.partner_id.write({"lastname": record.lastname})
@api.depends("partner_id", "partner_id.lastname2")
def _compute_lastname2(self):
for record in self:
if not record.lastname2:
record.lastname2 = record.partner_id.lastname2
+ elif not record.partner_id.lastname2:
+ record.partner_id.write({"lastname2": record.lastname2})
@api.depends("partner_id", "partner_id.birthdate_date")
def _compute_birth_date(self):
for record in self:
if not record.birthdate_date:
record.birthdate_date = record.partner_id.birthdate_date
+ elif not record.partner_id.birthdate_date:
+ record.partner_id.write({"birthdate_date": record.birthdate_date})
@api.depends("partner_id", "partner_id.gender")
def _compute_gender(self):
for record in self:
if not record.gender:
record.gender = record.partner_id.gender
+ elif not record.partner_id.gender:
+ record.partner_id.write({"gender": record.gender})
@api.depends("partner_id", "partner_id.lastname")
def _compute_nationality(self):
for record in self:
if not record.nationality_id:
record.nationality_id = record.partner_id.nationality_id
+ elif not record.partner_id.nationality_id:
+ record.partner_id.write({"nationality_id": record.nationality_id})
@api.depends("reservation_id", "folio_id", "reservation_id.preferred_room_id")
def _compute_identifier(self):
@@ -286,12 +317,65 @@ class PmsCheckinPartner(models.Model):
for record in self:
if not record.email:
record.email = record.partner_id.email
+ elif not record.partner_id.email:
+ record.partner_id.write({"email": record.email})
@api.depends("partner_id", "partner_id.mobile")
def _compute_mobile(self):
for record in self:
if not record.mobile:
record.mobile = record.partner_id.mobile
+ elif not record.partner_id.mobile:
+ record.partner_id.write({"mobile": record.mobile})
+
+ @api.depends(
+ "document_number", "document_type", "document_expedition_date", "firstname"
+ )
+ def _compute_partner_id(self):
+ for record in self:
+ if not record.partner_id:
+ if (
+ record.document_number
+ and record.document_type
+ and record.document_expedition_date
+ ):
+ number = self.env["res.partner.id_number"].search(
+ [
+ ("name", "=", record.document_number),
+ ("category_id", "=", record.document_type.id),
+ ("valid_from", "=", record.document_expedition_date),
+ ]
+ )
+ partner = self.env["res.partner"].search(
+ [("id", "=", number.partner_id.id)]
+ )
+ if not partner:
+ if record.firstname or record.lastname or record.lastname2:
+ partner_values = {
+ "firstname": record.firstname,
+ "lastname": record.lastname,
+ "lastname2": record.lastname2,
+ "gender": record.gender,
+ "birthdate_date": record.birthdate_date,
+ "nationality_id": record.nationality_id.id,
+ }
+ partner = self.env["res.partner"].create(partner_values)
+ record.partner_id = partner
+
+ @api.depends("partner_id")
+ def _compute_document_id(self):
+ for record in self:
+ id_number_id = self.env["res.partner.id_number"].create(
+ {
+ "partner_id": record.partner_id,
+ "name": record.document_number,
+ "category_id": record.document_type.id,
+ "valid_from": record.document_expedition_date,
+ }
+ )
+ partner = self.env["res.partner"].browse(record.partner_id)
+ partner.update({"id_numbers": [(4, [id_number_id.id])]})
+ record.document_id = id_number_id
@api.constrains("departure", "arrival")
def _check_departure(self):
@@ -339,6 +423,17 @@ class PmsCheckinPartner(models.Model):
):
raise ValidationError(_("'%s' is not a valid phone", record.mobile))
+ @api.constrains("document_number")
+ def check_document_number(self):
+ for record in self:
+ if record.partner_id:
+ for number in record.partner_id.id_numbers:
+ if record.document_type == number.category_id:
+ if record.document_number != number.name:
+ raise ValidationError(
+ _("Document_type e document_number not match(DN)")
+ )
+
@api.model
def create(self, vals):
# The checkin records are created automatically from adult depends
@@ -370,43 +465,6 @@ class PmsCheckinPartner(models.Model):
_("Is not possible to create the proposed check-in in this reservation")
)
- def write(self, vals):
- res = super(PmsCheckinPartner, self).write(vals)
- ResPartner = self.env["res.partner"]
- if any(field in vals for field in ResPartner._get_key_fields()):
- # Create Partner if get key field in the checkin
- for record in self:
- key = False
- partner = False
- if not record.partner_id:
- partner_vals = {}
- for field in self._checkin_partner_fields():
- if getattr(record, field):
- partner_vals[field] = getattr(record, field)
- if field in ResPartner._get_key_fields() and partner_vals.get(
- field
- ):
- key = True
- # REVIEW: if partner exist, we can merge?
- partner = ResPartner.search(
- [(field, "=", getattr(record, field))]
- )
- if key:
- if not partner:
- partner = ResPartner.create(partner_vals)
- record.partner_id = partner
-
- if any(field in vals for field in self._checkin_partner_fields()):
- # Update partner when the checkin partner field is not set on the partner
- for record in self:
- if record.partner_id:
- partner_vals = {}
- for field in self._checkin_partner_fields():
- if not getattr(record.partner_id, field):
- partner_vals[field] = getattr(record, field)
- record.partner_id.write(partner_vals)
- return res
-
def unlink(self):
reservations = self.mapped("reservation_id")
res = super().unlink()
@@ -419,13 +477,8 @@ class PmsCheckinPartner(models.Model):
if depends:
return ["reservation_id.state", "name"]
mandatory_fields = [
- "birthdate_date",
- "document_number",
- "document_type",
- "document_expedition_date",
- "gender",
- "name"
- ]
+ "name",
+ ]
return mandatory_fields
diff --git a/pms/tests/test_pms_checkin_partner.py b/pms/tests/test_pms_checkin_partner.py
index d9b893c44..898b8c56a 100644
--- a/pms/tests/test_pms_checkin_partner.py
+++ b/pms/tests/test_pms_checkin_partner.py
@@ -16,7 +16,7 @@ class TestPmsCheckinPartner(common.SavepointCase):
# Arrange for one checkin on one reservation
cls.host1 = cls.env["res.partner"].create(
{
- "name": "Miguel",
+ "name": "Miguel Lopez",
"phone": "654667733",
"email": "miguel@example.com",
}
diff --git a/pms/views/pms_checkin_partner_views.xml b/pms/views/pms_checkin_partner_views.xml
index 62b082a15..d7e1e0c15 100644
--- a/pms/views/pms_checkin_partner_views.xml
+++ b/pms/views/pms_checkin_partner_views.xml
@@ -31,7 +31,7 @@
name="partner_id"
domain="[('is_company','=', False)]"
/>
-
+
@@ -40,6 +40,8 @@
+
+
@@ -77,7 +79,7 @@
/>
-
+
@@ -122,7 +124,7 @@
-
+
@@ -164,7 +166,7 @@
-
+
@@ -177,8 +179,6 @@
-
-
@@ -202,11 +202,9 @@
-
-
-
+
diff --git a/pms_l10n_es/__manifest__.py b/pms_l10n_es/__manifest__.py
index 68419783f..978999c71 100644
--- a/pms_l10n_es/__manifest__.py
+++ b/pms_l10n_es/__manifest__.py
@@ -25,11 +25,11 @@
},
"data": [
"data/cron_jobs.xml",
+ "data/pms_data.xml",
"data/queue_data.xml",
"data/queue_job_function_data.xml",
"security/ir.model.access.csv",
"views/pms_property_views.xml",
- #"views/res_partner_views.xml",
"wizards/traveller_report.xml",
],
"installable": True,
diff --git a/pms_l10n_es/data/pms_data.xml b/pms_l10n_es/data/pms_data.xml
index a0c645281..b609ca96f 100644
--- a/pms_l10n_es/data/pms_data.xml
+++ b/pms_l10n_es/data/pms_data.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/pms_l10n_es/models/__init__.py b/pms_l10n_es/models/__init__.py
index 96f0208e9..94a36dd6a 100644
--- a/pms_l10n_es/models/__init__.py
+++ b/pms_l10n_es/models/__init__.py
@@ -1,3 +1,3 @@
-#from . import res_partner
-from . import pms_checkin_partner
+# from . import res_partner
+# from . import pms_checkin_partner
from . import pms_property
diff --git a/pms_l10n_es/models/pms_checkin_partner.py b/pms_l10n_es/models/pms_checkin_partner.py
index 015a43cba..195d4b744 100644
--- a/pms_l10n_es/models/pms_checkin_partner.py
+++ b/pms_l10n_es/models/pms_checkin_partner.py
@@ -1,9 +1,5 @@
-from odoo import api, fields, models
+from odoo import models
class PmsCheckinPartner(models.Model):
_inherit = "pms.checkin.partner"
-
- lastname2 = fields.Char(
- required=True,
- )
diff --git a/pms_l10n_es/models/res_partner.py b/pms_l10n_es/models/res_partner.py
index 829ae8e41..10c9c65fd 100644
--- a/pms_l10n_es/models/res_partner.py
+++ b/pms_l10n_es/models/res_partner.py
@@ -1,4 +1,4 @@
-from odoo import _, api, fields, models
+from odoo import models
class ResPartner(models.Model):
diff --git a/pms_l10n_es/views/res_partner_views.xml b/pms_l10n_es/views/res_partner_views.xml
deleted file mode 100644
index 21e9dc562..000000000
--- a/pms_l10n_es/views/res_partner_views.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-