mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[WIP] pms: working on partner creation in checkin flow
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from odoo import _, api, fields, models
|
||||
from odoo import models
|
||||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
|
||||
@@ -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>-->
|
||||
Reference in New Issue
Block a user