From 259a72a87eec405de51414be7fdb3e84d3cf5ccd Mon Sep 17 00:00:00 2001 From: Sara Lago Date: Mon, 7 Jun 2021 12:17:31 +0200 Subject: [PATCH] [IMP] pms: partner creation and modification in checkin flow --- pms/models/__init__.py | 1 + pms/models/pms_checkin_partner.py | 113 ++++++++++++---------------- pms/models/res_partner.py | 111 ++++++++++++++++++++++++++- pms/models/res_partner_id_number.py | 34 +++++++++ 4 files changed, 190 insertions(+), 69 deletions(-) create mode 100644 pms/models/res_partner_id_number.py diff --git a/pms/models/__init__.py b/pms/models/__init__.py index 5cb804757..2a7be0cf8 100644 --- a/pms/models/__init__.py +++ b/pms/models/__init__.py @@ -46,3 +46,4 @@ from . import account_bank_statement_line from . import account_bank_statement from . import account_journal from . import pms_availability +from . import res_partner_id_number diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py index 5b8826a14..7216b053c 100644 --- a/pms/models/pms_checkin_partner.py +++ b/pms/models/pms_checkin_partner.py @@ -25,11 +25,11 @@ class PmsCheckinPartner(models.Model): partner_id = fields.Many2one( string="Partner", help="Partner associated with checkin partner", + readonly=False, + store=True, comodel_name="res.partner", domain="[('is_company', '=', False)]", compute="_compute_partner_id", - store=True, - readonly=False, ) reservation_id = fields.Many2one( string="Reservation", @@ -67,9 +67,9 @@ class PmsCheckinPartner(models.Model): mobile = fields.Char( string="Mobile", help="Checkin Partner Mobile", - compute="_compute_mobile", - store=True, readonly=False, + store=True, + compute="_compute_mobile", ) image_128 = fields.Image( string="Image", @@ -79,8 +79,8 @@ class PmsCheckinPartner(models.Model): segmentation_ids = fields.Many2many( string="Segmentation", help="Segmentation tags to classify checkin partners", - related="reservation_id.segmentation_ids", readonly=True, + related="reservation_id.segmentation_ids", ) checkin = fields.Date( string="Checkin", @@ -116,68 +116,77 @@ class PmsCheckinPartner(models.Model): ) gender = fields.Selection( - [("male", "Male"), ("female", "Female"), ("other", "Other")], string="Gender", - compute="_compute_gender", - store=True, + help="host gender", readonly=False, + store=True, + compute="_compute_gender", + selection=[("male", "Male"), ("female", "Female"), ("other", "Other")], ) nationality_id = fields.Many2one( string="Nationality ID", + help="host nationality", + readonly=False, + store=True, compute="_compute_nationality", comodel_name="res.country", - store=True, - readonly=False, ) firstname = fields.Char( string="First Name", - compute="_compute_firstname", - store=True, + help="host firstname", readonly=False, + store=True, + compute="_compute_firstname", ) lastname = fields.Char( string="Last Name", + help="host lastname", readonly=False, store=True, compute="_compute_lastname", ) lastname2 = fields.Char( string="Second Last Name", - compute="_compute_lastname2", - store=True, + help="host second lastname", readonly=False, + store=True, + compute="_compute_lastname2", ) birthdate_date = fields.Date( string="Birthdate", - compute="_compute_birth_date", - store=True, + help="host birthdate", readonly=False, + store=True, + compute="_compute_birth_date", ) document_number = fields.Char( string="Document Number", - compute="_compute_document_number", - store=True, + help="Host document number", readonly=False, + store=True, + compute="_compute_document_number", ) document_type = fields.Many2one( string="Document Type", - comodel_name="res.partner.id_category", help="Select a valid document type", - compute="_compute_document_type", - store=True, readonly=False, + store=True, + comodel_name="res.partner.id_category", + compute="_compute_document_type", ) document_expedition_date = fields.Date( string="Expedition Date", help="Date on which document_type was issued", - compute="_compute_document_expedition_date", - store=True, readonly=False, + store=True, + compute="_compute_document_expedition_date", ) document_id = fields.Many2one( string="Document", - help="Select a valid document type", + help="Technical field", + readonly=False, + store=True, comodel_name="res.partner.id_number", compute="_compute_document_id", ) @@ -198,13 +207,6 @@ class PmsCheckinPartner(models.Model): 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", @@ -217,16 +219,6 @@ class PmsCheckinPartner(models.Model): record.document_expedition_date = record.partner_id.id_numbers[ 0 ].valid_from - else: - id_number = self.env["res.partner.id_number"].search( - [ - ("partner_id", "=", record.partner_id.id), - ("category_id", "=", record.document_type), - ("name", "=", record.document_number), - ] - ) - if not id_number.valid_from: - id_number.write({"valid_from": record.document_expedition_date}) @api.depends("partner_id", "partner_id.firstname") def _compute_firstname(self): @@ -239,24 +231,18 @@ class PmsCheckinPartner(models.Model): 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", @@ -264,18 +250,14 @@ class PmsCheckinPartner(models.Model): ) def _compute_gender(self): for record in self: - if not record.gender: + if not record.gender and record.partner_id.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): @@ -331,30 +313,31 @@ 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("partner_id") def _compute_document_id(self): for record in self: if record.partner_id: - id_number_id = self.env["res.partner.id_number"].create( - { - "partner_id": record.partner_id.id, - "name": record.document_number, - "category_id": record.document_type.id, - "valid_from": record.document_expedition_date, - } - ) - record.document_id = id_number_id + if ( + not record.document_id + and record.document_number + and record.document_type + ): + id_number_id = self.env["res.partner.id_number"].create( + { + "partner_id": record.partner_id.id, + "name": record.document_number, + "category_id": record.document_type.id, + "valid_from": record.document_expedition_date, + } + ) + record.document_id = id_number_id else: record.document_id = False diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py index 88c1bc57f..8523e1d0c 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -63,21 +63,124 @@ class ResPartner(models.Model): inverse_name="partner_id", ) + gender = fields.Selection( + readonly=False, + store=True, + compute="_compute_gender", + ) + + birthdate_date = fields.Date( + readonly=False, + store=True, + compute="_compute_birthdate_date", + ) + + nationality_id = fields.Many2one( + readonly=False, + store=True, + compute="_compute_nationality_id", + ) + + email = fields.Char( + readonly=False, + store=True, + compute="_compute_email", + ) + mobile = fields.Char( + readonly=False, + store=True, + compute="_compute_mobile", + ) + firstname = fields.Char( readonly=False, store=True, compute="_compute_firstname", ) + lastname = fields.Char( + readonly=False, + store=True, + compute="_compute_lastname", + ) + + lastname2 = fields.Char( + readonly=False, + store=True, + compute="_compute_lastname2", + ) + + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.gender") + def _compute_gender(self): + if hasattr(super(), "_compute_gender"): + super()._compute_field() + for record in self: + gender = record.pms_checkin_partner_ids.mapped("gender") + if not record.gender and gender: + record.gender = gender[0] + + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.birthdate_date") + def _compute_birthdate_date(self): + if hasattr(super(), "_compute_birthdate_date"): + super()._compute_field() + for record in self: + birthdate = record.pms_checkin_partner_ids.mapped("birthdate_date") + if not record.birthdate_date and birthdate: + record.birthdate_date = birthdate[0] + + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.nationality_id") + def _compute_nationality_id(self): + if hasattr(super(), "_compute_nationality_id"): + super()._compute_field() + for record in self: + nationality = record.pms_checkin_partner_ids.nationality_id + if not record.nationality_id and nationality: + record.nationality_id = nationality[0] + + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.email") + def _compute_email(self): + if hasattr(super(), "_compute_email"): + super()._compute_field() + for record in self: + email = record.pms_checkin_partner_ids.mapped("email") + if not record.email and email: + record.email = email[0] + + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.mobile") + def _compute_mobile(self): + if hasattr(super(), "_compute_mobile"): + super()._compute_field() + for record in self: + mobile = record.pms_checkin_partner_ids.mapped("mobile") + if not record.mobile and mobile: + record.mobile = mobile[0] + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.firstname") def _compute_firstname(self): if hasattr(super(), "_compute_firstname"): super()._compute_field() + for record in self: + firstname = record.pms_checkin_partner_ids.mapped("firstname") + if not record.firstname and firstname: + record.firstname = firstname[0] - # for record in self: - # if not record.firstname: - # print(record.pms_checkin_partner_ids.mapped("firstname")) - # #record.firstname = + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.lastname") + def _compute_lastname(self): + if hasattr(super(), "_compute_lastname"): + super()._compute_field() + for record in self: + lastname = record.pms_checkin_partner_ids.mapped("lastname") + if not record.lastname and lastname: + record.lastname = lastname[0] + + @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.lastname2") + def _compute_lastname2(self): + if hasattr(super(), "_compute_lastname2"): + super()._compute_field() + for record in self: + lastname2 = record.pms_checkin_partner_ids.mapped("lastname2") + if not record.lastname2 and lastname2: + record.lastname2 = lastname2[0] def _compute_reservations_count(self): # TODO: recuperar las reservas de los folios del partner diff --git a/pms/models/res_partner_id_number.py b/pms/models/res_partner_id_number.py new file mode 100644 index 000000000..6601bcc94 --- /dev/null +++ b/pms/models/res_partner_id_number.py @@ -0,0 +1,34 @@ +# Copyright 2004-2010 Tiny SPRL http://tiny.be +# Copyright 2010-2012 ChriCar Beteiligungs- und Beratungs- GmbH +# http://www.camptocamp.at +# Copyright 2015 Antiun Ingenieria, SL (Madrid, Spain) +# http://www.antiun.com +# Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + + +from odoo import api, fields, models + + +class ResPartnerIdNumber(models.Model): + _inherit = "res.partner.id_number" + + valid_from = fields.Date( + readonly=False, + store=True, + compute="_compute_valid_from", + ) + + @api.depends( + "partner_id", "partner_id.pms_checkin_partner_ids.document_expedition_date" + ) + def _compute_valid_from(self): + if hasattr(super(), "_compute_valid_from"): + super()._compute_field() + for record in self: + expedition_date = record.partner_id.pms_checkin_partner_ids.mapped( + "document_expedition_date" + ) + if expedition_date: + if not record.valid_from and expedition_date[0]: + record.valid_from = expedition_date[0]