Initial commit
This commit is contained in:
79
fusion_claims/wizard/account_payment_register.py
Normal file
79
fusion_claims/wizard/account_payment_register.py
Normal file
@@ -0,0 +1,79 @@
|
||||
# -*- 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
|
||||
Reference in New Issue
Block a user