From 613a158310f6fa1086b7a854dc6486e3b1b8c529 Mon Sep 17 00:00:00 2001 From: braisab Date: Mon, 16 Aug 2021 22:07:27 +0200 Subject: [PATCH] [IMP]:added create and autocomplete of partner_id in folio --- pms/models/pms_folio.py | 161 +++++++++++++++++++++++++++- pms/models/pms_reservation.py | 78 +++----------- pms/views/pms_folio_views.xml | 21 ++++ pms/views/pms_reservation_views.xml | 1 + 4 files changed, 196 insertions(+), 65 deletions(-) diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py index 6b7b6017f..e6a8d2c70 100644 --- a/pms/models/pms_folio.py +++ b/pms/models/pms_folio.py @@ -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 diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 4ef2e4720..00a0554d3 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -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 ("=",): diff --git a/pms/views/pms_folio_views.xml b/pms/views/pms_folio_views.xml index 2dfb29d07..710589ac6 100644 --- a/pms/views/pms_folio_views.xml +++ b/pms/views/pms_folio_views.xml @@ -55,6 +55,19 @@ /> +