From a8292ff9c1d24fbf9e6b51d0be666b545165d64d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Wed, 20 Jan 2021 18:05:47 +0100 Subject: [PATCH] [IMP] reservation views --- pms/models/pms_folio.py | 27 ++++++++++++++++++------ pms/models/pms_reservation.py | 30 +++++---------------------- pms/models/res_partner.py | 27 ++++++++++++------------ pms/views/pms_folio_views.xml | 2 +- pms/views/pms_reservation_views.xml | 32 +++++++++++++++++++++++++++++ pms/wizards/wizard_payment_folio.py | 19 ++--------------- 6 files changed, 75 insertions(+), 62 deletions(-) diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py index 8c3d27b14..b42d974d0 100644 --- a/pms/models/pms_folio.py +++ b/pms/models/pms_folio.py @@ -708,10 +708,10 @@ class PmsFolio(models.Model): # Compute 'payment_state'. if total <= paid_out: payment_state = "paid" - elif paid_out < total: - payment_state = "partial" - else: + elif paid_out <= 0: payment_state = "not_paid" + else: + payment_state = "partial" vals = { "pending_amount": total - paid_out, "invoices_paid": paid_out, @@ -723,9 +723,24 @@ class PmsFolio(models.Model): def action_pay(self): self.ensure_one() - action = self.env.ref("pms.action_payment_folio").sudo().read()[0] - action["res_id"] = self.id - return action + self.ensure_one() + partner = self.partner_id.id + amount = self.pending_amount + view_id = self.env.ref("pms.wizard_payment_folio_view_form").id + return { + "name": _("Register Payment"), + "view_type": "form", + "view_mode": "form", + "res_model": "wizard.payment.folio", + "type": "ir.actions.act_window", + "view_id": view_id, + "context": { + "default_folio_id": self.id, + "default_amount": amount, + "default_partner_id": partner, + }, + "target": "new", + } def open_moves_folio(self): invoices = self.mapped("move_ids") diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index ecff34948..76975a598 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -365,6 +365,11 @@ class PmsReservation(models.Model): "Detail Origin", compute="_compute_detail_origin", store=True ) folio_pending_amount = fields.Monetary(related="folio_id.pending_amount") + folio_payment_state = fields.Selection( + related="folio_id.payment_state", + string="Payment State", + store=True, + ) shared_folio = fields.Boolean(compute="_compute_shared") # Used to notify is the reservation folio has other reservations/services email = fields.Char("E-mail", related="partner_id.email") @@ -1196,31 +1201,6 @@ class PmsReservation(models.Model): self.ensure_one() return self.folio_id.action_pay() - def action_pay_reservation(self): - self.ensure_one() - partner = self.partner_id.id - amount = min(self.price_room_services_set, self.folio_pending_amount) - note = self.folio_id.name + " (" + self.name + ")" - view_id = self.env.ref("pms.account_payment_view_form_folio").id - return { - "name": _("Register Payment"), - "view_type": "form", - "view_mode": "form", - "res_model": "account.payment", - "type": "ir.actions.act_window", - "view_id": view_id, - "context": { - "default_folio_id": self.folio_id.id, - "default_room_id": self.id, - "default_amount": amount, - "default_payment_type": "inbound", - "default_partner_type": "customer", - "default_partner_id": partner, - "default_communication": note, - }, - "target": "new", - } - def open_reservation_wizard(self): rooms_available = self.env["pms.room.type.availability.plan"].rooms_available( checkin=self.checkin, diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py index 317c489a9..58d7eaabe 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -94,19 +94,20 @@ class ResPartner(models.Model): if not record.is_agency and record.sale_channel_id: record.sale_channel_id = None - @api.constrains("mobile", "email") - def _check_duplicated(self): - for record in self: - partner, field = record._search_duplicated() - if partner: - raise models.ValidationError( - _( - "Partner %s found with same %s (%s)", - partner.name, - partner._fields[field].string, - getattr(record, field), - ) - ) + # REVIEW: problems with odoo demo data + # @api.constrains("mobile", "email") + # def _check_duplicated(self): + # for record in self: + # partner, field = record._search_duplicated() + # if partner: + # raise models.ValidationError( + # _( + # "Partner %s found with same %s (%s)", + # partner.name, + # partner._fields[field].string, + # getattr(record, field), + # ) + # ) def _search_duplicated(self): self.ensure_one() diff --git a/pms/views/pms_folio_views.xml b/pms/views/pms_folio_views.xml index ff75dd430..97084e528 100644 --- a/pms/views/pms_folio_views.xml +++ b/pms/views/pms_folio_views.xml @@ -541,7 +541,7 @@ tree,form,graph + + + + @@ -809,6 +830,11 @@ + + diff --git a/pms/wizards/wizard_payment_folio.py b/pms/wizards/wizard_payment_folio.py index 71dd219c5..1c8222fc0 100644 --- a/pms/wizards/wizard_payment_folio.py +++ b/pms/wizards/wizard_payment_folio.py @@ -11,25 +11,10 @@ class WizardPaymentFolio(models.TransientModel): _name = "wizard.payment.folio" _description = "Payments" - @api.model - def default_folio_id(self): - return self.env["pms.folio"].browse(self._context.get("active_id", [])).id - - @api.model - def _default_amount(self): - folio = self.env["pms.folio"].browse(self._context.get("active_id", [])) - return folio.pending_amount - - @api.model - def _default_partner(self): - folio = self.env["pms.folio"].browse(self._context.get("active_id", [])) - return folio.partner_id.id - folio_id = fields.Many2one( "pms.folio", string="Folio", required=True, - default=default_folio_id, ) reservation_ids = fields.Many2many( "pms.reservation", @@ -53,9 +38,9 @@ class WizardPaymentFolio(models.TransientModel): compute="_compute_allowed_method_ids", store="True", ) - amount = fields.Float("Amount", digits=("Product Price"), default=_default_amount) + amount = fields.Float("Amount", digits=("Product Price")) date = fields.Date("Date", default=fields.Date.context_today, required=True) - partner_id = fields.Many2one("res.partner", default=_default_partner) + partner_id = fields.Many2one("res.partner") @api.depends("folio_id") def _compute_allowed_method_ids(self):