From 74a83d732817e342296bdecd8025aea9a0885b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Tue, 22 Feb 2022 22:13:05 +0100 Subject: [PATCH] [IMP]pms: smartbutton reservations/folios in partner form --- pms/models/account_move_line.py | 1 - pms/models/res_partner.py | 107 +++++++++++++++++++++++++++++++- pms/views/res_partner_views.xml | 8 +-- 3 files changed, 108 insertions(+), 8 deletions(-) diff --git a/pms/models/account_move_line.py b/pms/models/account_move_line.py index ca1bb49a5..aed425ca5 100644 --- a/pms/models/account_move_line.py +++ b/pms/models/account_move_line.py @@ -18,7 +18,6 @@ class AccountMoveLine(models.Model): relation="folio_sale_line_invoice_rel", column1="invoice_line_id", column2="sale_line_id", - check_pms_properties=True, ) folio_ids = fields.Many2many( comodel_name="pms.folio", diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py index 7ef209c1f..22ede5464 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -328,32 +328,133 @@ class ResPartner(models.Model): record.lastname2 = False def _compute_reservations_count(self): - # TODO: recuperar las reservas de los folios del partner + # Return reservation with partner included in reservation and/or checkin pms_reservation_obj = self.env["pms.reservation"] for record in self: + checkin_reservation_ids = ( + self.env["pms.checkin.partner"] + .search([("partner_id", "=", record.id)]) + .mapped("reservation_id.id") + ) record.reservations_count = pms_reservation_obj.search_count( [ + "|", ( "partner_id.id", "child_of", record.id if isinstance(record.id, int) else False, - ) + ), + ("id", "in", checkin_reservation_ids), ] ) + def action_partner_reservations(self): + self.ensure_one() + checkin_reservation_ids = ( + self.env["pms.checkin.partner"] + .search([("partner_id", "=", self.id)]) + .mapped("reservation_id.id") + ) + reservations = self.env["pms.reservation"].search( + [ + "|", + ( + "partner_id.id", + "child_of", + self.id if isinstance(self.id, int) else False, + ), + ("id", "in", checkin_reservation_ids), + ] + ) + action = self.env["ir.actions.actions"]._for_xml_id( + "pms.open_pms_reservation_form_tree_all" + ) + if len(reservations) > 1: + action["domain"] = [("id", "in", reservations.ids)] + elif len(reservations) == 1: + form_view = [(self.env.ref("pms.pms_reservation_view_form").id, "form")] + if "views" in action: + action["views"] = form_view + [ + (state, view) for state, view in action["views"] if view != "form" + ] + else: + action["views"] = form_view + action["res_id"] = reservations.id + else: + action = {"type": "ir.actions.act_window_close"} + + if len(self) == 1: + context = { + "default_partner_id": self.id, + "default_user_id": self.user_id.id, + } + action["context"] = context + return action + def _compute_folios_count(self): + # Return folios count with partner included in folio and/or folio checkins pms_folio_obj = self.env["pms.folio"] for record in self: + checkin_folio_ids = ( + self.env["pms.checkin.partner"] + .search([("partner_id", "=", record.id)]) + .mapped("folio_id.id") + ) record.folios_count = pms_folio_obj.search_count( [ + "|", ( "partner_id.id", "=", record.id if isinstance(record.id, int) else False, - ) + ), + ("id", "in", checkin_folio_ids), ] ) + def action_partner_folios(self): + self.ensure_one() + checkin_folio_ids = ( + self.env["pms.checkin.partner"] + .search([("partner_id", "=", self.id)]) + .mapped("folio_id.id") + ) + folios = self.env["pms.folio"].search( + [ + "|", + ( + "partner_id.id", + "child_of", + self.id if isinstance(self.id, int) else False, + ), + ("id", "in", checkin_folio_ids), + ] + ) + action = self.env["ir.actions.actions"]._for_xml_id( + "pms.open_pms_folio1_form_tree_all" + ) + if len(folios) > 1: + action["domain"] = [("id", "in", folios.ids)] + elif len(folios) == 1: + form_view = [(self.env.ref("pms.pms_folio_view_form").id, "form")] + if "views" in action: + action["views"] = form_view + [ + (state, view) for state, view in action["views"] if view != "form" + ] + else: + action["views"] = form_view + action["res_id"] = folios.id + else: + action = {"type": "ir.actions.act_window_close"} + + if len(self) == 1: + context = { + "default_partner_id": self.id, + "default_user_id": self.user_id.id, + } + action["context"] = context + return action + @api.constrains("is_agency", "sale_channel_id") def _check_is_agency(self): for record in self: diff --git a/pms/views/res_partner_views.xml b/pms/views/res_partner_views.xml index 5ab2c6581..2dd65cb37 100644 --- a/pms/views/res_partner_views.xml +++ b/pms/views/res_partner_views.xml @@ -38,9 +38,9 @@