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 @@ - - - - - - - - - - - - - - - - - - -