Odoo18-Base/addons/payment_razorpay/models/payment_token.py
2025-01-06 10:57:38 +07:00

51 lines
2.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, models
from odoo.tools import float_round
from odoo.addons.payment_razorpay import const
class PaymentToken(models.Model):
_inherit = 'payment.token'
def _razorpay_get_limit_exceed_warning(self, amount, currency_id):
""" Return a warning message when the maximum payment amount is exceeded.
:param float amount: The amount to be paid.
:param currency_id: The currency of the amount.
:return: A warning message when the maximum payment amount is exceeded.
:rtype: str
"""
self.ensure_one()
if not amount or self.provider_code != 'razorpay':
return ""
# Try to get the maximum amount based on the transaction from which this token was created.
Transaction = self.env['payment.transaction']
primary_tx = Transaction.search(
[('token_id', '=', self.id), ('operation', 'not in', ['offline', 'online_token'])],
limit=1,
)
if primary_tx:
mandate_max_amount = primary_tx._razorpay_get_mandate_max_amount()
else: # Get the maximum amount based on the token's payment method code.
pm = self.payment_method_id.primary_payment_method_id or self.payment_method_id
mandate_max_amount_INR = const.MANDATE_MAX_AMOUNT.get(
pm.code, const.MANDATE_MAX_AMOUNT['card']
)
mandate_max_amount = Transaction._razorpay_convert_inr_to_currency(
mandate_max_amount_INR, currency_id
)
# Return the warning message if the amount exceeds the maximum amount; else an empty string.
if amount > mandate_max_amount:
return _(
"You can not pay amounts greater than %(currency_symbol)s %(max_amount)s with this"
" payment method",
currency_symbol=currency_id.symbol,
max_amount=float_round(mandate_max_amount, precision_digits=0),
)
return ""