Files
Odoo-Modules/fusion_poynt/models/payment_token.py
gsinghpal 14fe9ab716 feat: hide authorizer for rental orders, auto-set sale type
Rental orders no longer show the "Authorizer Required?" question or
the Authorizer field. The sale type is automatically set to 'Rentals'
when creating or confirming a rental order. Validation logic also
skips authorizer checks for rental sale type.

Made-with: Cursor
2026-02-25 23:33:23 -05:00

63 lines
2.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
from odoo import _, fields, models
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
class PaymentToken(models.Model):
_inherit = 'payment.token'
poynt_card_id = fields.Char(
string="Poynt Card ID",
help="The unique card identifier stored on the Poynt platform.",
readonly=True,
)
poynt_payment_token = fields.Char(
string="Poynt Payment Token (JWT)",
help="Long-lived JWT issued by Poynt /cards/tokenize, used for "
"recurring charges via /cards/tokenize/charge.",
readonly=True,
groups='base.group_system',
)
def _poynt_validate_stored_card(self):
"""Validate that the stored card is still usable on Poynt.
Fetches the card details from Poynt to confirm the card ID is valid
and the card is still active.
:return: True if the card is valid.
:rtype: bool
:raises ValidationError: If the card cannot be validated.
"""
self.ensure_one()
if not self.poynt_card_id:
raise ValidationError(
_("No Poynt card ID found on this payment token.")
)
try:
result = self.provider_id.sudo()._poynt_make_request(
'GET',
f'cards/{self.poynt_card_id}',
)
status = result.get('status', '')
if status != 'ACTIVE':
raise ValidationError(
_("The stored card is no longer active on Poynt (status: %(status)s).",
status=status)
)
return True
except ValidationError:
raise
except Exception as e:
_logger.warning("Failed to validate Poynt card %s: %s", self.poynt_card_id, e)
raise ValidationError(
_("Unable to validate the stored card with Poynt.")
)