Merge pull request #6195 from expsa/14.0-fix-odex_benefit-auto-20260113_170517

[FIX] odex_benefit: fix issues and bugs
This commit is contained in:
Mohamed Eltayar 2026-01-13 17:06:08 +03:00 committed by GitHub
commit 7471027d5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 157 additions and 97 deletions

View File

@ -3,6 +3,9 @@
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError, UserError
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
import logging
_logger = logging.getLogger(__name__)
class FamilyBankReportXlsx(models.AbstractModel):
@ -12,6 +15,11 @@ 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 ===")
_logger.info("Total lines to process: %s", len(lines))
sheet = workbook.add_worksheet(_('Family Bank Report'))
header_format = workbook.add_format({
@ -62,7 +70,8 @@ class FamilyBankReportXlsx(models.AbstractModel):
row = 3
total_amount = 0
for line in data['lines']:
for idx, line in enumerate(lines):
try:
sheet.write(row, 0, line['bank_name'], normal)
sheet.write(row, 1, line['account_number'], normal)
sheet.write(row, 2, line['beneficiary_name'], normal)
@ -74,6 +83,10 @@ class FamilyBankReportXlsx(models.AbstractModel):
sheet.write(row, 8, line.get('beneficiary_email', ''), normal)
total_amount += line['transfer_amount']
row += 1
except Exception as line_error:
_logger.error("ERROR processing line %s: %s", idx, line_error)
_logger.error("Line data: %s", line)
raise
sheet.set_column('A:A', 25)
sheet.set_column('B:B', 25)
@ -84,3 +97,15 @@ class FamilyBankReportXlsx(models.AbstractModel):
sheet.set_column('G:G', 25)
sheet.set_column('H:H', 20)
sheet.set_column('I:I', 30)
_logger.info("=== FAMILY BANK REPORT SUCCESS: %s rows, total amount: %s ===", len(lines), total_amount)
except Exception as e:
_logger.error("=== FAMILY BANK REPORT FAILED ===")
_logger.error("Error type: %s", type(e).__name__)
_logger.error("Error message: %s", str(e))
_logger.error("Data keys: %s", data.keys() if data else 'No data')
_logger.error("Lines count: %s", len(data.get('lines', [])) if data else 0)
import traceback
_logger.error("Full traceback:\n%s", traceback.format_exc())
raise

View File

@ -3,6 +3,9 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError
from odoo.tools import date_utils
import logging
_logger = logging.getLogger(__name__)
class FamilyBankReportWizard(models.TransientModel):
@ -32,16 +35,25 @@ class FamilyBankReportWizard(models.TransientModel):
record.total_amount = sum(record.payment_order_ids.mapped('total_amount'))
def action_print_bank_report(self):
try:
_logger.info("=== WIZARD: action_print_bank_report START ===")
_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:
@ -60,6 +72,9 @@ class FamilyBankReportWizard(models.TransientModel):
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."))
@ -68,4 +83,24 @@ class FamilyBankReportWizard(models.TransientModel):
'end_date': self.end_date,
'lines': lines_data,
}
return self.env.ref('odex_benefit.action_family_bank_report_xlsx').report_action(self, data=datas)
# 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 ===")
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
except Exception as e:
_logger.error("=== WIZARD: action_print_bank_report FAILED ===")
_logger.error("Error type: %s", type(e).__name__)
_logger.error("Error message: %s", str(e))
import traceback
_logger.error("Full traceback:\n%s", traceback.format_exc())
raise