mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]:added create and autocomplete of partner_id in folio
This commit is contained in:
@@ -446,6 +446,35 @@ class PmsFolio(models.Model):
|
||||
help="The payment communication of this sale order.",
|
||||
copy=False,
|
||||
)
|
||||
document_number = fields.Char(
|
||||
string="Document Number",
|
||||
readonly=False,
|
||||
store=True,
|
||||
compute="_compute_document_number",
|
||||
)
|
||||
document_type = fields.Many2one(
|
||||
string="Document Type",
|
||||
readonly=False,
|
||||
store=True,
|
||||
comodel_name="res.partner.id_category",
|
||||
compute="_compute_document_type",
|
||||
)
|
||||
|
||||
document_id = fields.Many2one(
|
||||
string="Document",
|
||||
readonly=False,
|
||||
store=True,
|
||||
comodel_name="res.partner.id_number",
|
||||
compute="_compute_document_id",
|
||||
ondelete="restrict",
|
||||
)
|
||||
|
||||
is_possible_existing_customer = fields.Boolean(
|
||||
string="Possible existing customer",
|
||||
compute="_compute_is_possible_existing_customer",
|
||||
)
|
||||
|
||||
add_possible_customer = fields.Boolean(string="Add possible Customer")
|
||||
|
||||
def name_get(self):
|
||||
result = []
|
||||
@@ -640,14 +669,65 @@ class PmsFolio(models.Model):
|
||||
elif not folio.pricelist_id:
|
||||
folio.pricelist_id = folio.pms_property_id.default_pricelist_id
|
||||
|
||||
@api.depends("agency_id", "reservation_type")
|
||||
@api.depends(
|
||||
"agency_id",
|
||||
"reservation_type",
|
||||
"document_number",
|
||||
"document_type",
|
||||
"add_possible_customer",
|
||||
"partner_name",
|
||||
"email",
|
||||
"mobile",
|
||||
)
|
||||
def _compute_partner_id(self):
|
||||
for folio in self:
|
||||
if folio.reservation_type == "out":
|
||||
if folio.add_possible_customer:
|
||||
partner = False
|
||||
if folio.email:
|
||||
partner = self.env["res.partner"].search(
|
||||
[("email", "=", folio.email)]
|
||||
)
|
||||
elif folio.mobile:
|
||||
partner = self.env["res.partner"].search(
|
||||
[("mobile", "=", folio.mobile)]
|
||||
)
|
||||
folio.partner_id = partner.id
|
||||
elif folio.reservation_type == "out":
|
||||
folio.partner_id = False
|
||||
elif folio.agency_id and folio.agency_id.invoice_to_agency:
|
||||
folio.partner_id = folio.agency_id.id
|
||||
elif not folio.partner_id:
|
||||
elif folio.document_number and folio.document_type:
|
||||
number = self.env["res.partner.id_number"].search(
|
||||
[
|
||||
("name", "=", folio.document_number),
|
||||
("category_id", "=", folio.document_type.id),
|
||||
]
|
||||
)
|
||||
partner = self.env["res.partner"].search(
|
||||
[("id", "=", number.partner_id.id)]
|
||||
)
|
||||
if partner:
|
||||
folio.partner_id = partner.id
|
||||
else:
|
||||
if (
|
||||
folio.partner_name
|
||||
and folio.document_number
|
||||
and folio.document_type
|
||||
):
|
||||
partner_values = {
|
||||
"name": folio.partner_name,
|
||||
"email": folio.email,
|
||||
"mobile": folio.mobile,
|
||||
}
|
||||
partner = self.env["res.partner"].create(partner_values)
|
||||
number_values = {
|
||||
"partner_id": partner.id,
|
||||
"name": folio.document_number,
|
||||
"category_id": folio.document_type.id,
|
||||
}
|
||||
self.env["res.partner.id_number"].create(number_values)
|
||||
folio.partner_id = partner
|
||||
else:
|
||||
folio.partner_id = False
|
||||
|
||||
@api.depends("partner_id")
|
||||
@@ -952,6 +1032,26 @@ class PmsFolio(models.Model):
|
||||
)
|
||||
record.checkin_partner_pending_count = sum(mapped_checkin_partner_count)
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_document_number(self):
|
||||
for record in self:
|
||||
self._apply_document_number(record)
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_document_type(self):
|
||||
for record in self:
|
||||
self._apply_document_type(record)
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_document_id(self):
|
||||
for record in self:
|
||||
self._apply_document_id(record)
|
||||
|
||||
@api.depends("email", "mobile")
|
||||
def _compute_is_possible_existing_customer(self):
|
||||
for record in self:
|
||||
self._apply_is_possible_existing_customer(record)
|
||||
|
||||
def _search_invoice_ids(self, operator, value):
|
||||
if operator == "in" and value:
|
||||
self.env.cr.execute(
|
||||
@@ -1710,3 +1810,58 @@ class PmsFolio(models.Model):
|
||||
record.email = record.partner_id.email
|
||||
elif not record.email:
|
||||
record.email = False
|
||||
|
||||
@api.model
|
||||
def _apply_is_possible_existing_customer(self, record):
|
||||
partner = False
|
||||
if record.email and not record.partner_id:
|
||||
partner = self.env["res.partner"].search([("email", "=", record.email)])
|
||||
elif record.mobile and not record.partner_id:
|
||||
partner = self.env["res.partner"].search([("mobile", "=", record.mobile)])
|
||||
if partner:
|
||||
record.is_possible_existing_customer = True
|
||||
else:
|
||||
record.is_possible_existing_customer = False
|
||||
|
||||
@api.model
|
||||
def _apply_document_id(self, record):
|
||||
if record.partner_id:
|
||||
if (
|
||||
not record.document_id
|
||||
and record.document_number
|
||||
and record.document_type
|
||||
):
|
||||
id_number_id = self.env["res.partner.id_number"].search(
|
||||
[
|
||||
("partner_id", "=", record.partner_id.id),
|
||||
("name", "=", record.document_number),
|
||||
("category_id", "=", record.document_type.id),
|
||||
]
|
||||
)
|
||||
if not id_number_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
|
||||
else:
|
||||
record.document_id = False
|
||||
|
||||
@api.model
|
||||
def _apply_document_number(self, record):
|
||||
if record.partner_id and record.partner_id.id_numbers:
|
||||
if not record.document_number:
|
||||
if record.partner_id.id_numbers:
|
||||
record.document_number = record.partner_id.id_numbers[0].name
|
||||
|
||||
@api.model
|
||||
def _apply_document_type(self, record):
|
||||
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
|
||||
|
||||
@@ -828,7 +828,18 @@ class PmsReservation(models.Model):
|
||||
def _compute_partner_id(self):
|
||||
for reservation in self:
|
||||
if not reservation.partner_id:
|
||||
if reservation.reservation_type == "out":
|
||||
if reservation.add_possible_customer:
|
||||
partner = False
|
||||
if reservation.email:
|
||||
partner = self.env["res.partner"].search(
|
||||
[("email", "=", reservation.email)]
|
||||
)
|
||||
elif reservation.mobile:
|
||||
partner = self.env["res.partner"].search(
|
||||
[("mobile", "=", reservation.mobile)]
|
||||
)
|
||||
reservation.partner_id = partner.id
|
||||
elif reservation.reservation_type == "out":
|
||||
reservation.partner_id = False
|
||||
elif reservation.folio_id and reservation.folio_id.partner_id:
|
||||
reservation.partner_id = reservation.folio_id.partner_id
|
||||
@@ -865,17 +876,6 @@ class PmsReservation(models.Model):
|
||||
}
|
||||
self.env["res.partner.id_number"].create(number_values)
|
||||
reservation.partner_id = partner
|
||||
elif reservation.add_possible_customer:
|
||||
partner = False
|
||||
if reservation.email:
|
||||
partner = self.env["res.partner"].search(
|
||||
[("email", "=", reservation.email)]
|
||||
)
|
||||
elif reservation.mobile:
|
||||
partner = self.env["res.partner"].search(
|
||||
[("mobile", "=", reservation.mobile)]
|
||||
)
|
||||
reservation.partner_id = partner.id
|
||||
else:
|
||||
reservation.partner_id = False
|
||||
|
||||
@@ -1447,68 +1447,22 @@ class PmsReservation(models.Model):
|
||||
@api.depends("partner_id")
|
||||
def _compute_document_number(self):
|
||||
for record in self:
|
||||
if record.partner_id and record.partner_id.id_numbers:
|
||||
if not record.document_number:
|
||||
if record.partner_id.id_numbers:
|
||||
record.document_number = record.partner_id.id_numbers[0].name
|
||||
self.env["pms.folio"]._apply_document_number(record)
|
||||
|
||||
@api.depends("partner_id")
|
||||
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
|
||||
self.env["pms.folio"]._apply_document_type(record)
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_document_id(self):
|
||||
for record in self:
|
||||
if record.partner_id:
|
||||
if (
|
||||
not record.document_id
|
||||
and record.document_number
|
||||
and record.document_type
|
||||
):
|
||||
id_number_id = self.env["res.partner.id_number"].search(
|
||||
[
|
||||
("partner_id", "=", record.partner_id.id),
|
||||
("name", "=", record.document_number),
|
||||
("category_id", "=", record.document_type.id),
|
||||
]
|
||||
)
|
||||
if not id_number_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
|
||||
else:
|
||||
record.document_id = False
|
||||
self.env["pms.folio"]._apply_document_id(record)
|
||||
|
||||
@api.depends("email", "mobile")
|
||||
def _compute_is_possible_existing_customer(self):
|
||||
for record in self:
|
||||
partner_email = False
|
||||
partner_mobile = False
|
||||
if record.email and not record.partner_id:
|
||||
partner_email = self.env["res.partner"].search(
|
||||
[("email", "=", record.email)]
|
||||
)
|
||||
elif record.mobile and not record.partner_id:
|
||||
partner_mobile = self.env["res.partner"].search(
|
||||
[("mobile", "=", record.mobile)]
|
||||
)
|
||||
if partner_email or partner_mobile:
|
||||
record.is_possible_existing_customer = True
|
||||
else:
|
||||
record.is_possible_existing_customer = False
|
||||
self.env["pms.folio"]._apply_is_possible_existing_customer(record)
|
||||
|
||||
def _search_allowed_checkin(self, operator, value):
|
||||
if operator not in ("=",):
|
||||
|
||||
@@ -55,6 +55,19 @@
|
||||
/>
|
||||
</bold>
|
||||
</div>
|
||||
<div
|
||||
class="alert alert-warning"
|
||||
role="alert"
|
||||
style="margin-bottom:0px;"
|
||||
attrs="{'invisible': [('is_possible_existing_customer','=',False)]}"
|
||||
>
|
||||
There is a customer with this email or mobile, do you want to add it to the reservation?
|
||||
<field name="is_possible_existing_customer" invisible="1" />
|
||||
<field
|
||||
name="add_possible_customer"
|
||||
attrs="{'invisible': [('is_possible_existing_customer','=',False)]}"
|
||||
/>
|
||||
</div>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button
|
||||
@@ -209,6 +222,14 @@
|
||||
string="General Info"
|
||||
name="contact_details"
|
||||
>
|
||||
<field
|
||||
name="document_type"
|
||||
attrs="{'invisible':[('reservation_type','in',('out'))]}"
|
||||
/>
|
||||
<field
|
||||
name="document_number"
|
||||
attrs="{'invisible':[('reservation_type','in',('out'))]}"
|
||||
/>
|
||||
<field
|
||||
name="partner_name"
|
||||
placeholder="Guest"
|
||||
|
||||
@@ -321,6 +321,7 @@
|
||||
string="General Info"
|
||||
name="contact_details"
|
||||
>
|
||||
<field name="partner_id" invisible="1" />
|
||||
<field name="partner_id" invisible="1" />
|
||||
<field
|
||||
name="document_type"
|
||||
|
||||
Reference in New Issue
Block a user