[FIX] odex_benefit: automatic update

Auto-generated commit based on local changes.
This commit is contained in:
maltayyar2 2026-01-13 17:34:11 +03:00
parent 7471027d5e
commit 9d0be353fe
2 changed files with 42 additions and 43 deletions

View File

@ -16,8 +16,41 @@ class FamilyBankReportXlsx(models.AbstractModel):
@api.model
def generate_xlsx_report(self, workbook, data, objs):
try:
lines = data.get('lines', [])
_logger.info("=== FAMILY BANK REPORT START ===")
# CHANGE: Use objs (wizard record) directly instead of data['lines']
# This avoids passing large data through the client (HTTP/URL limits)
wizard = objs
_logger.info("=== FAMILY BANK REPORT START (Refactored) ===")
_logger.info("Processing Wizard ID: %s", wizard.id)
payment_orders = wizard.payment_order_ids
_logger.info("Payment Orders: %s", len(payment_orders))
moves = payment_orders.mapped('move_id')
_logger.info("Moves: %s", len(moves))
# Re-implement grouping logic here
grouped = {}
for move in moves:
for line in move.line_ids.filtered(lambda l: l.debit > 0 and l.benefit_family_id):
family = line.benefit_family_id
key = family.id
if key not in grouped:
beneficiary_name = family.acc_holder_name or ''
beneficiary_id = family.acc_holder_id_number or ''
grouped[key] = {
'bank_name': (family.bank_id.bic or ''),
'account_number': 'SA' + (family.acc_number or ''),
'beneficiary_name': beneficiary_name,
'beneficiary_id': beneficiary_id,
'transfer_amount': 0.0,
'currency': 'SAR',
'family_code': family.code or '',
'purpose': 'Others',
'beneficiary_email': '', # Default value
}
grouped[key]['transfer_amount'] += float(line.debit or 0.0)
lines = list(grouped.values())
_logger.info("Total lines to process: %s", len(lines))
sheet = workbook.add_worksheet(_('Family Bank Report'))

View File

@ -36,63 +36,29 @@ class FamilyBankReportWizard(models.TransientModel):
def action_print_bank_report(self):
try:
_logger.info("=== WIZARD: action_print_bank_report START ===")
_logger.info("=== WIZARD: action_print_bank_report START (Refactored) ===")
_logger.info("Payment orders selected: %s", len(self.payment_order_ids))
_logger.info("Payment order IDs: %s", self.payment_order_ids.ids)
if not self.payment_order_ids:
raise UserError(_("Please select at least one Payment Order."))
moves = self.payment_order_ids.mapped('move_id')
_logger.info("Moves found: %s", len(moves))
if not moves:
raise UserError(_("Selected Payment Orders do not reference any posted moves."))
grouped = {}
total_lines_processed = 0
for move in moves:
for line in move.line_ids.filtered(lambda l: l.debit > 0 and l.benefit_family_id):
total_lines_processed += 1
family = line.benefit_family_id
key = family.id
if key not in grouped:
beneficiary_name = family.acc_holder_name or ''
beneficiary_id = family.acc_holder_id_number or ''
grouped[key] = {
'bank_name': (family.bank_id.bic or ''),
'account_number': 'SA' + (family.acc_number or ''),
'beneficiary_name': beneficiary_name,
'beneficiary_id': beneficiary_id,
'transfer_amount': 0.0,
'currency': 'SAR',
'family_code': family.code or '',
'purpose': 'Others',
}
grouped[key]['transfer_amount'] += float(line.debit or 0.0)
lines_data = list(grouped.values())
_logger.info("Total move lines processed: %s", total_lines_processed)
_logger.info("Unique families (lines_data): %s", len(lines_data))
if not lines_data:
raise UserError(_("No debit lines with family information found."))
# Optimization:
# We REMOVED the data grouping logic from here.
# Instead, we let the Report AbstractModel handle the data fetching using the Wizard record (objs).
# This prevents passing massive JSON data through the client/URL, avoiding 502/414 errors for large datasets.
# Pass only minimal metadata if needed (start/end dates are also on the wizard record, so strictly not needed but harmless)
datas = {
'start_date': self.start_date,
'end_date': self.end_date,
'lines': lines_data,
}
# Log data size for debugging
import json
try:
data_json = json.dumps(datas, default=str)
_logger.info("Data size (bytes): %s", len(data_json))
except Exception as json_err:
_logger.warning("Could not serialize data for size check: %s", json_err)
_logger.info("=== WIZARD: Calling report_action ===")
_logger.info("=== WIZARD: Calling report_action (No heavy data payload) ===")
result = self.env.ref('odex_benefit.action_family_bank_report_xlsx').report_action(self, data=datas)
_logger.info("=== WIZARD: report_action returned successfully ===")
return result