From 9d0be353fe8c3a27e18e048086b0946da33ec923 Mon Sep 17 00:00:00 2001 From: maltayyar2 Date: Tue, 13 Jan 2026 17:34:11 +0300 Subject: [PATCH] [FIX] odex_benefit: automatic update Auto-generated commit based on local changes. --- .../reports/family_bank_report.py | 37 +++++++++++++- .../wizards/family_bank_report_wizard.py | 48 +++---------------- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/odex25_benefit/odex_benefit/reports/family_bank_report.py b/odex25_benefit/odex_benefit/reports/family_bank_report.py index 10b695009..fbb75111f 100644 --- a/odex25_benefit/odex_benefit/reports/family_bank_report.py +++ b/odex25_benefit/odex_benefit/reports/family_bank_report.py @@ -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')) diff --git a/odex25_benefit/odex_benefit/wizards/family_bank_report_wizard.py b/odex25_benefit/odex_benefit/wizards/family_bank_report_wizard.py index fd7309640..e99317ae4 100644 --- a/odex25_benefit/odex_benefit/wizards/family_bank_report_wizard.py +++ b/odex25_benefit/odex_benefit/wizards/family_bank_report_wizard.py @@ -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)) + # 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. - 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 = { '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