[FIX] odex_benefit: automatic update
Auto-generated commit based on local changes.
This commit is contained in:
parent
7471027d5e
commit
9d0be353fe
|
|
@ -16,8 +16,41 @@ class FamilyBankReportXlsx(models.AbstractModel):
|
||||||
@api.model
|
@api.model
|
||||||
def generate_xlsx_report(self, workbook, data, objs):
|
def generate_xlsx_report(self, workbook, data, objs):
|
||||||
try:
|
try:
|
||||||
lines = data.get('lines', [])
|
# CHANGE: Use objs (wizard record) directly instead of data['lines']
|
||||||
_logger.info("=== FAMILY BANK REPORT START ===")
|
# 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))
|
_logger.info("Total lines to process: %s", len(lines))
|
||||||
|
|
||||||
sheet = workbook.add_worksheet(_('Family Bank Report'))
|
sheet = workbook.add_worksheet(_('Family Bank Report'))
|
||||||
|
|
|
||||||
|
|
@ -36,63 +36,29 @@ class FamilyBankReportWizard(models.TransientModel):
|
||||||
|
|
||||||
def action_print_bank_report(self):
|
def action_print_bank_report(self):
|
||||||
try:
|
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 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:
|
if not self.payment_order_ids:
|
||||||
raise UserError(_("Please select at least one Payment Order."))
|
raise UserError(_("Please select at least one Payment Order."))
|
||||||
|
|
||||||
moves = self.payment_order_ids.mapped('move_id')
|
moves = self.payment_order_ids.mapped('move_id')
|
||||||
_logger.info("Moves found: %s", len(moves))
|
|
||||||
|
|
||||||
if not moves:
|
if not moves:
|
||||||
raise UserError(_("Selected Payment Orders do not reference any posted moves."))
|
raise UserError(_("Selected Payment Orders do not reference any posted moves."))
|
||||||
|
|
||||||
grouped = {}
|
# Optimization:
|
||||||
total_lines_processed = 0
|
# We REMOVED the data grouping logic from here.
|
||||||
for move in moves:
|
# Instead, we let the Report AbstractModel handle the data fetching using the Wizard record (objs).
|
||||||
for line in move.line_ids.filtered(lambda l: l.debit > 0 and l.benefit_family_id):
|
# This prevents passing massive JSON data through the client/URL, avoiding 502/414 errors for large datasets.
|
||||||
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."))
|
|
||||||
|
|
||||||
|
# Pass only minimal metadata if needed (start/end dates are also on the wizard record, so strictly not needed but harmless)
|
||||||
datas = {
|
datas = {
|
||||||
'start_date': self.start_date,
|
'start_date': self.start_date,
|
||||||
'end_date': self.end_date,
|
'end_date': self.end_date,
|
||||||
'lines': lines_data,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Log data size for debugging
|
_logger.info("=== WIZARD: Calling report_action (No heavy data payload) ===")
|
||||||
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 ===")
|
|
||||||
result = self.env.ref('odex_benefit.action_family_bank_report_xlsx').report_action(self, data=datas)
|
result = self.env.ref('odex_benefit.action_family_bank_report_xlsx').report_action(self, data=datas)
|
||||||
_logger.info("=== WIZARD: report_action returned successfully ===")
|
_logger.info("=== WIZARD: report_action returned successfully ===")
|
||||||
return result
|
return result
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue