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):