[WIP] pms: working on partner creation in checkin flow

This commit is contained in:
Sara Lago
2021-06-03 18:17:18 +02:00
parent ec375c749b
commit 753155479d
10 changed files with 150 additions and 119 deletions

View File

@@ -61,7 +61,10 @@
<field name="name">Driving License</field>
<field name="code">C</field>
</record>
<record id="document_type_identification_document" model="res.partner.id_category">
<record
id="document_type_identification_document"
model="res.partner.id_category"
>
<field name="name">Identification Document</field>
<field name="code">I</field>
</record>

View File

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

View File

@@ -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",
}

View File

@@ -31,7 +31,7 @@
name="partner_id"
domain="[('is_company','=', False)]"
/>
<field name="firstname"/>
<field name="firstname" />
<field name="lastname" />
<field name="lastname2" />
<field name="gender" />
@@ -40,6 +40,8 @@
<field name="document_number" />
<field name="document_expedition_date" />
<field name="nationality_id" />
<field name="email" />
<field name="mobile" />
<field name="pms_property_id" invisible="1" />
<field name="arrival" />
<field name="departure" />
@@ -77,7 +79,7 @@
/>
<field name="identifier" />
<field name="partner_id" />
<field name="firstname"/>
<field name="firstname" />
<field name="lastname" />
<field name="lastname2" />
<field name="gender" />
@@ -122,7 +124,7 @@
<field name="reservation_id" />
<field name="pms_property_id" invisible="1" />
<field name="partner_id" domain="[('is_company','=', False)]" />
<field name="firstname"/>
<field name="firstname" />
<field name="lastname" />
<field name="lastname2" />
<field name="gender" />
@@ -164,7 +166,7 @@
<field name="partner_id" domain="[('is_company','=', False)]" />
<field name="reservation_id" />
<field name="pms_property_id" invisible="1" />
<field name="firstname"/>
<field name="firstname" />
<field name="lastname" />
<field name="lastname2" />
<field name="gender" />
@@ -177,8 +179,6 @@
<field name="email" />
<field name="arrival" />
<field name="departure" />
<field name="reservation_id" />
<field name="pms_property_id" invisible="1" />
<field name="folio_id" force_save="1" invisible="1" />
<field name="state" />
</tree>
@@ -202,11 +202,9 @@
<field name="identifier" />
<field name="reservation_id" />
<field name="folio_id" />
<field name="pms_property_id" />
<field name="reservation_id" />
<field name="pms_property_id" invisible="1" />
<field name="partner_id" domain="[('is_company','=', False)]" />
<field name="firstname"/>
<field name="firstname" />
<field name="lastname" />
<field name="lastname2" />
<field name="gender" />

View File

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

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="document_type_dni" model="res.partner.id_category">

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
from odoo import _, api, fields, models
from odoo import models
class ResPartner(models.Model):

View File

@@ -1,19 +0,0 @@
<!--<?xml version="1.0" encoding="utf-8" ?>-->
<!--<odoo>-->
<!-- <record id="view_partner_pms_l10n_es" model="ir.ui.view">-->
<!-- <field name="name">Legal Spanish information</field>-->
<!-- <field name="model">res.partner</field>-->
<!-- <field-->
<!-- name="inherit_id"-->
<!-- ref="partner_contact_personal_information_page.personal_information"-->
<!-- />-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//group[@name='personal_information_group']" position="inside">-->
<!-- <field name='document_type' />-->
<!-- <field name='document_number' />-->
<!-- <field name='document_expedition_date' />-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<!--</odoo>-->