[IMP] pms: partner creation and modification in checkin flow

This commit is contained in:
Sara Lago
2021-06-07 12:17:31 +02:00
parent 69379e2cb2
commit 259a72a87e
4 changed files with 190 additions and 69 deletions

View File

@@ -46,3 +46,4 @@ from . import account_bank_statement_line
from . import account_bank_statement from . import account_bank_statement
from . import account_journal from . import account_journal
from . import pms_availability from . import pms_availability
from . import res_partner_id_number

View File

@@ -25,11 +25,11 @@ class PmsCheckinPartner(models.Model):
partner_id = fields.Many2one( partner_id = fields.Many2one(
string="Partner", string="Partner",
help="Partner associated with checkin partner", help="Partner associated with checkin partner",
readonly=False,
store=True,
comodel_name="res.partner", comodel_name="res.partner",
domain="[('is_company', '=', False)]", domain="[('is_company', '=', False)]",
compute="_compute_partner_id", compute="_compute_partner_id",
store=True,
readonly=False,
) )
reservation_id = fields.Many2one( reservation_id = fields.Many2one(
string="Reservation", string="Reservation",
@@ -67,9 +67,9 @@ class PmsCheckinPartner(models.Model):
mobile = fields.Char( mobile = fields.Char(
string="Mobile", string="Mobile",
help="Checkin Partner Mobile", help="Checkin Partner Mobile",
compute="_compute_mobile",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_mobile",
) )
image_128 = fields.Image( image_128 = fields.Image(
string="Image", string="Image",
@@ -79,8 +79,8 @@ class PmsCheckinPartner(models.Model):
segmentation_ids = fields.Many2many( segmentation_ids = fields.Many2many(
string="Segmentation", string="Segmentation",
help="Segmentation tags to classify checkin partners", help="Segmentation tags to classify checkin partners",
related="reservation_id.segmentation_ids",
readonly=True, readonly=True,
related="reservation_id.segmentation_ids",
) )
checkin = fields.Date( checkin = fields.Date(
string="Checkin", string="Checkin",
@@ -116,68 +116,77 @@ class PmsCheckinPartner(models.Model):
) )
gender = fields.Selection( gender = fields.Selection(
[("male", "Male"), ("female", "Female"), ("other", "Other")],
string="Gender", string="Gender",
compute="_compute_gender", help="host gender",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_gender",
selection=[("male", "Male"), ("female", "Female"), ("other", "Other")],
) )
nationality_id = fields.Many2one( nationality_id = fields.Many2one(
string="Nationality ID", string="Nationality ID",
help="host nationality",
readonly=False,
store=True,
compute="_compute_nationality", compute="_compute_nationality",
comodel_name="res.country", comodel_name="res.country",
store=True,
readonly=False,
) )
firstname = fields.Char( firstname = fields.Char(
string="First Name", string="First Name",
compute="_compute_firstname", help="host firstname",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_firstname",
) )
lastname = fields.Char( lastname = fields.Char(
string="Last Name", string="Last Name",
help="host lastname",
readonly=False, readonly=False,
store=True, store=True,
compute="_compute_lastname", compute="_compute_lastname",
) )
lastname2 = fields.Char( lastname2 = fields.Char(
string="Second Last Name", string="Second Last Name",
compute="_compute_lastname2", help="host second lastname",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_lastname2",
) )
birthdate_date = fields.Date( birthdate_date = fields.Date(
string="Birthdate", string="Birthdate",
compute="_compute_birth_date", help="host birthdate",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_birth_date",
) )
document_number = fields.Char( document_number = fields.Char(
string="Document Number", string="Document Number",
compute="_compute_document_number", help="Host document number",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_document_number",
) )
document_type = fields.Many2one( document_type = fields.Many2one(
string="Document Type", string="Document Type",
comodel_name="res.partner.id_category",
help="Select a valid document type", help="Select a valid document type",
compute="_compute_document_type",
store=True,
readonly=False, readonly=False,
store=True,
comodel_name="res.partner.id_category",
compute="_compute_document_type",
) )
document_expedition_date = fields.Date( document_expedition_date = fields.Date(
string="Expedition Date", string="Expedition Date",
help="Date on which document_type was issued", help="Date on which document_type was issued",
compute="_compute_document_expedition_date",
store=True,
readonly=False, readonly=False,
store=True,
compute="_compute_document_expedition_date",
) )
document_id = fields.Many2one( document_id = fields.Many2one(
string="Document", string="Document",
help="Select a valid document type", help="Technical field",
readonly=False,
store=True,
comodel_name="res.partner.id_number", comodel_name="res.partner.id_number",
compute="_compute_document_id", compute="_compute_document_id",
) )
@@ -198,13 +207,6 @@ class PmsCheckinPartner(models.Model):
record.document_type = record.partner_id.id_numbers[ record.document_type = record.partner_id.id_numbers[
0 0
].category_id ].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( @api.depends(
"partner_id", "partner_id",
@@ -217,16 +219,6 @@ class PmsCheckinPartner(models.Model):
record.document_expedition_date = record.partner_id.id_numbers[ record.document_expedition_date = record.partner_id.id_numbers[
0 0
].valid_from ].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") @api.depends("partner_id", "partner_id.firstname")
def _compute_firstname(self): def _compute_firstname(self):
@@ -239,24 +231,18 @@ class PmsCheckinPartner(models.Model):
for record in self: for record in self:
if not record.lastname: if not record.lastname:
record.lastname = record.partner_id.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") @api.depends("partner_id", "partner_id.lastname2")
def _compute_lastname2(self): def _compute_lastname2(self):
for record in self: for record in self:
if not record.lastname2: if not record.lastname2:
record.lastname2 = record.partner_id.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") @api.depends("partner_id", "partner_id.birthdate_date")
def _compute_birth_date(self): def _compute_birth_date(self):
for record in self: for record in self:
if not record.birthdate_date: if not record.birthdate_date:
record.birthdate_date = record.partner_id.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( @api.depends(
"partner_id", "partner_id",
@@ -264,18 +250,14 @@ class PmsCheckinPartner(models.Model):
) )
def _compute_gender(self): def _compute_gender(self):
for record in self: for record in self:
if not record.gender: if not record.gender and record.partner_id.gender:
record.gender = 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") @api.depends("partner_id", "partner_id.lastname")
def _compute_nationality(self): def _compute_nationality(self):
for record in self: for record in self:
if not record.nationality_id: if not record.nationality_id:
record.nationality_id = record.partner_id.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") @api.depends("reservation_id", "folio_id", "reservation_id.preferred_room_id")
def _compute_identifier(self): def _compute_identifier(self):
@@ -331,30 +313,31 @@ class PmsCheckinPartner(models.Model):
for record in self: for record in self:
if not record.email: if not record.email:
record.email = record.partner_id.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") @api.depends("partner_id", "partner_id.mobile")
def _compute_mobile(self): def _compute_mobile(self):
for record in self: for record in self:
if not record.mobile: if not record.mobile:
record.mobile = record.partner_id.mobile record.mobile = record.partner_id.mobile
elif not record.partner_id.mobile:
record.partner_id.write({"mobile": record.mobile})
@api.depends("partner_id") @api.depends("partner_id")
def _compute_document_id(self): def _compute_document_id(self):
for record in self: for record in self:
if record.partner_id: if record.partner_id:
id_number_id = self.env["res.partner.id_number"].create( if (
{ not record.document_id
"partner_id": record.partner_id.id, and record.document_number
"name": record.document_number, and record.document_type
"category_id": record.document_type.id, ):
"valid_from": record.document_expedition_date, id_number_id = self.env["res.partner.id_number"].create(
} {
) "partner_id": record.partner_id.id,
record.document_id = id_number_id "name": record.document_number,
"category_id": record.document_type.id,
"valid_from": record.document_expedition_date,
}
)
record.document_id = id_number_id
else: else:
record.document_id = False record.document_id = False

View File

@@ -63,21 +63,124 @@ class ResPartner(models.Model):
inverse_name="partner_id", 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( firstname = fields.Char(
readonly=False, readonly=False,
store=True, store=True,
compute="_compute_firstname", 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") @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.firstname")
def _compute_firstname(self): def _compute_firstname(self):
if hasattr(super(), "_compute_firstname"): if hasattr(super(), "_compute_firstname"):
super()._compute_field() 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: @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.lastname")
# if not record.firstname: def _compute_lastname(self):
# print(record.pms_checkin_partner_ids.mapped("firstname")) if hasattr(super(), "_compute_lastname"):
# #record.firstname = 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): def _compute_reservations_count(self):
# TODO: recuperar las reservas de los folios del partner # TODO: recuperar las reservas de los folios del partner

View File

@@ -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 <antonioea@antiun.com>
# 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]