diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py
index f4b5f9a11..1658f7180 100644
--- a/pms/models/pms_folio.py
+++ b/pms/models/pms_folio.py
@@ -1747,6 +1747,71 @@ class PmsFolio(models.Model):
)
return True
+ def do_refund(
+ self,
+ journal,
+ receivable_account,
+ user,
+ amount,
+ folio,
+ reservations=False,
+ services=False,
+ partner=False,
+ date=False,
+ pay_type=False,
+ ):
+ """
+ create folio refund
+ type: set cash to use statement or bank to use account.payment,
+ by default, use the journal type
+ """
+ if not pay_type:
+ pay_type = journal.type
+ if pay_type == "cash":
+ line = self._get_statement_line_vals(
+ journal=journal,
+ receivable_account=receivable_account,
+ user=user,
+ amount=amount if amount < 0 else -amount,
+ folios=folio,
+ reservations=reservations,
+ services=services,
+ partner=partner,
+ date=date,
+ )
+ self.env["account.bank.statement.line"].sudo().create(line)
+ else:
+ vals = {
+ "journal_id": journal.id,
+ "partner_id": partner.id,
+ "amount": amount if amount > 0 else -amount,
+ "date": fields.Date.today(),
+ "ref": folio.name,
+ "folio_ids": [(6, 0, [folio.id])],
+ "payment_type": "outbound",
+ "partner_type": "customer",
+ "state": "draft",
+ }
+ pay = self.env["account.payment"].create(vals)
+ pay.action_post()
+
+ folio.message_post(
+ body=_(
+ """Refund: %s by %s""",
+ amount,
+ journal.display_name,
+ )
+ )
+ for reservation in folio.reservation_ids:
+ reservation.message_post(
+ body=_(
+ """Refund: %s by %s""",
+ amount,
+ journal.display_name,
+ )
+ )
+ return True
+
def open_wizard_several_partners(self):
ctx = dict(
folio_id=self.id,