Files
Odoo-Modules/fusion_claims/wizard/account_payment_register.py
2026-02-22 01:22:18 -05:00

80 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2024-2025 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
# Part of the Fusion Claim Assistant product family.
from odoo import models, fields, api
from odoo.exceptions import UserError
class AccountPaymentRegister(models.TransientModel):
_inherit = 'account.payment.register'
x_fc_card_last_four = fields.Char(
string='Card Last 4 Digits',
size=4,
help='Enter last 4 digits of the card used for payment (required for card payments)',
)
x_fc_payment_note = fields.Char(
string='Payment Note',
help='Additional note for this payment',
)
x_fc_is_card_payment = fields.Boolean(
string='Is Card Payment',
compute='_compute_is_card_payment',
help='True if payment method is Credit Card or Debit Card',
)
@api.depends('payment_method_line_id', 'payment_method_line_id.x_fc_requires_card_digits')
def _compute_is_card_payment(self):
"""Check if the selected payment method requires card digits.
Uses the x_fc_requires_card_digits flag on payment method line.
Falls back to keyword matching if field not set.
"""
card_keywords = ['credit', 'debit', 'visa', 'mastercard', 'amex']
for wizard in self:
is_card = False
if wizard.payment_method_line_id:
# First check the explicit flag
if hasattr(wizard.payment_method_line_id, 'x_fc_requires_card_digits'):
is_card = wizard.payment_method_line_id.x_fc_requires_card_digits
# Fallback to keyword matching if flag not explicitly set
if not is_card and wizard.payment_method_line_id.name:
method_name = wizard.payment_method_line_id.name.lower()
is_card = any(keyword in method_name for keyword in card_keywords)
wizard.x_fc_is_card_payment = is_card
def action_create_payments(self):
"""Override to validate card number is entered for card payments."""
# Validate card number for card payments
if self.x_fc_is_card_payment and not self.x_fc_card_last_four:
raise UserError(
"Card Last 4 Digits is required for Credit Card and Debit Card payments.\n\n"
"Please enter the last 4 digits of the card used for this payment."
)
# Validate card number format (must be exactly 4 digits)
if self.x_fc_card_last_four:
if not self.x_fc_card_last_four.isdigit() or len(self.x_fc_card_last_four) != 4:
raise UserError(
"Card Last 4 Digits must be exactly 4 numeric digits.\n\n"
"Example: 1234"
)
return super().action_create_payments()
def _create_payment_vals_from_wizard(self, batch_result):
"""Override to add card info to payment values."""
vals = super()._create_payment_vals_from_wizard(batch_result)
# Add our custom fields
if self.x_fc_card_last_four:
vals['x_fc_card_last_four'] = self.x_fc_card_last_four
if self.x_fc_payment_note:
vals['x_fc_payment_note'] = self.x_fc_payment_note
return vals