diff --git a/dynamic_accounts_report/__manifest__.py b/dynamic_accounts_report/__manifest__.py
index b936a0c57..967d2c973 100644
--- a/dynamic_accounts_report/__manifest__.py
+++ b/dynamic_accounts_report/__manifest__.py
@@ -21,9 +21,8 @@
################################################################################
{
'name': 'Odoo18 Dynamic Accounting Reports',
- 'version': '18.0.1.1.2',
+ 'version': '18.0.1.2.3',
'category': 'Accounting',
- 'live_test_url': 'https://www.youtube.com/watch?v=bqtqqnGVAD8',
'summary': "Odoo 18 Accounting Financial Reports,Dynamic Accounting Reports, Dynamic Financial Reports,Dynamic Report Odoo18, Odoo18,Financial Reports, Odoo18 Accounting,Accounting, Odoo Apps",
'description': "This module creates dynamic Accounting General Ledger, Trial"
"Balance, Balance Sheet, Profit and Loss, Cash Book, Partner"
diff --git a/dynamic_accounts_report/doc/RELEASE_NOTES.md b/dynamic_accounts_report/doc/RELEASE_NOTES.md
index 5a8b464ac..63b677466 100644
--- a/dynamic_accounts_report/doc/RELEASE_NOTES.md
+++ b/dynamic_accounts_report/doc/RELEASE_NOTES.md
@@ -13,4 +13,9 @@
#### 27.01.2025
#### Version 18.0.1.1.2
#### UPDT
-- Fixed the errors in the filters.
\ No newline at end of file
+- Fixed the errors in the filters.
+
+#### 16.05.2025
+#### Version 18.0.1.2.3
+#### UPDT
+- Bug Fixing and added thousand seperators
\ No newline at end of file
diff --git a/dynamic_accounts_report/models/account_general_ledger.py b/dynamic_accounts_report/models/account_general_ledger.py
index cb58773b1..b67d4af71 100644
--- a/dynamic_accounts_report/models/account_general_ledger.py
+++ b/dynamic_accounts_report/models/account_general_ledger.py
@@ -276,53 +276,53 @@ class AccountGeneralLedger(models.TransientModel):
sheet.merge_range('J9:K9', 'Credit', sub_heading)
sheet.merge_range('L9:M9', 'Balance', sub_heading)
row = 8
- for account in data['account']:
- row += 1
- sheet.write(row, col, account, txt_name)
- sheet.write(row, col + 1, ' ', txt_name)
- sheet.merge_range(row, col + 2, row, col + 4, ' ', txt_name)
- sheet.merge_range(row, col + 5, row, col + 6, ' ',
- txt_name)
- sheet.merge_range(row, col + 7, row, col + 8,
- data['total'][account]['total_debit'],
- txt_name)
- sheet.merge_range(row, col + 9, row, col + 10,
- data['total'][account]['total_credit'],
- txt_name)
- sheet.merge_range(row, col + 11, row, col + 12,
- data['total'][account]['total_debit'] -
- data['total'][account]['total_credit'],
- txt_name)
- for rec in data['data'][account]:
+ if data['account']:
+ for account in data['account']:
row += 1
- partner = rec[0]['partner_id']
- name = partner[1] if partner else None
- sheet.write(row, col, rec[0]['move_name'], txt_name)
- sheet.write(row, col + 1, rec[0]['date'], txt_name)
- sheet.merge_range(row, col + 2, row, col + 4,
- rec[0]['name'], txt_name)
- sheet.merge_range(row, col + 5, row, col + 6, name,
+ sheet.write(row, col, account, txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.merge_range(row, col + 2, row, col + 4, ' ', txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ',
txt_name)
sheet.merge_range(row, col + 7, row, col + 8,
- rec[0]['debit'],
+ data['total'][account]['total_debit_display'],
txt_name)
sheet.merge_range(row, col + 9, row, col + 10,
- rec[0]['credit'], txt_name)
- sheet.merge_range(row, col + 11, row, col + 12, ' ',
+ data['total'][account]['total_credit_display'],
+ txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ data['total'][account]['balance_display'],
txt_name)
- row += 1
- sheet.merge_range(row, col, row, col + 6, 'Total',
- filter_head)
- sheet.merge_range(row, col + 7, row, col + 8,
- data['grand_total']['total_debit'],
- filter_head)
- sheet.merge_range(row, col + 9, row, col + 10,
- data['grand_total']['total_credit'],
- filter_head)
- sheet.merge_range(row, col + 11, row, col + 12,
- float(data['grand_total']['total_debit']) -
- float(data['grand_total']['total_credit']),
- filter_head)
+ for rec in data['data'][account]:
+ row += 1
+ partner = rec[0]['partner_id']
+ name = partner[1] if partner else None
+ sheet.write(row, col, rec[0]['move_name'], txt_name)
+ sheet.write(row, col + 1, rec[0]['date'], txt_name)
+ sheet.merge_range(row, col + 2, row, col + 4,
+ rec[0]['name'], txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, name,
+ txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ rec[0]['debit'],
+ txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ rec[0]['credit'], txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, ' ',
+ txt_name)
+ row += 1
+ sheet.merge_range(row, col, row, col + 6, 'Total',
+ filter_head)
+ sheet.merge_range(row, col + 7, row, col + 8,
+ data['grand_total']['total_debit_display'],
+ filter_head)
+ sheet.merge_range(row, col + 9, row, col + 10,
+ data['grand_total']['total_credit_display'],
+ filter_head)
+ sheet.merge_range(row, col + 11, row, col + 12,
+ float(data['grand_total']['total_debit']) -
+ float(data['grand_total']['total_credit']),
+ filter_head)
workbook.close()
output.seek(0)
response.stream.write(output.read())
diff --git a/dynamic_accounts_report/models/account_partner_ledger.py b/dynamic_accounts_report/models/account_partner_ledger.py
index 4306e946f..e7276cd6e 100644
--- a/dynamic_accounts_report/models/account_partner_ledger.py
+++ b/dynamic_accounts_report/models/account_partner_ledger.py
@@ -361,136 +361,141 @@ class AccountPartnerLedger(models.TransientModel):
data = json.loads(data)
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
- start_date = data['filters']['start_date'] if \
- data['filters']['start_date'] else ''
- end_date = data['filters']['end_date'] if \
- data['filters']['end_date'] else ''
+ start_date = data['filters']['start_date'] if data['filters']['start_date'] else ''
+ end_date = data['filters']['end_date'] if data['filters']['end_date'] else ''
sheet = workbook.add_worksheet()
- head = workbook.add_format(
- {'font_size': 15, 'align': 'center', 'bold': True})
- head_highlight = workbook.add_format(
- {'font_size': 10, 'align': 'center', 'bold': True})
+
+ # Define formats
+ head = workbook.add_format({'font_size': 15, 'align': 'center', 'bold': True})
+ head_highlight = workbook.add_format({'font_size': 10, 'align': 'center', 'bold': True})
sub_heading = workbook.add_format(
- {'align': 'center', 'bold': True, 'font_size': '10px',
- 'border': 1, 'bg_color': '#D3D3D3',
+ {'align': 'center', 'bold': True, 'font_size': '10px', 'border': 1, 'bg_color': '#D3D3D3',
'border_color': 'black'})
filter_head = workbook.add_format(
- {'align': 'center', 'bold': True, 'font_size': '10px',
- 'border': 1, 'bg_color': '#D3D3D3',
+ {'align': 'center', 'bold': True, 'font_size': '10px', 'border': 1, 'bg_color': '#D3D3D3',
'border_color': 'black'})
- filter_body = workbook.add_format(
- {'align': 'center', 'bold': True, 'font_size': '10px'})
+ filter_body = workbook.add_format({'align': 'center', 'bold': True, 'font_size': '10px'})
side_heading_sub = workbook.add_format(
- {'align': 'left', 'bold': True, 'font_size': '10px',
- 'border': 1,
- 'border_color': 'black'})
+ {'align': 'left', 'bold': True, 'font_size': '10px', 'border': 1, 'border_color': 'black'})
side_heading_sub.set_indent(1)
txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
txt_name.set_indent(2)
+
+ # Set column widths
sheet.set_column(0, 0, 30)
sheet.set_column(1, 1, 20)
sheet.set_column(2, 2, 15)
sheet.set_column(3, 3, 15)
+
+ # Write headers and filters
col = 0
- sheet.write('A1:b1', report_name, head)
- sheet.write('B3:b4', 'Date Range', filter_head)
- sheet.write('B4:b4', 'Partners', filter_head)
- sheet.write('B5:b4', 'Accounts', filter_head)
- sheet.write('B6:b4', 'Options', filter_head)
+ sheet.write('A1:B1', report_name, head)
+ sheet.write('B3:B4', 'Date Range', filter_head)
+ sheet.write('B4:B4', 'Partners', filter_head)
+ sheet.write('B5:B4', 'Accounts', filter_head)
+ sheet.write('B6:B4', 'Options', filter_head)
+
if start_date or end_date:
- sheet.merge_range('C3:G3', f"{start_date} to {end_date}",
- filter_body)
+ sheet.merge_range('C3:G3', f"{start_date} to {end_date}", filter_body)
+
if data['filters']['partner']:
- display_names = [partner.get('display_name', 'undefined') for
- partner in data['filters']['partner']]
+ display_names = [partner.get('display_name', 'undefined') for partner in data['filters']['partner']]
display_names_str = ', '.join(display_names)
sheet.merge_range('C4:G4', display_names_str, filter_body)
+
if data['filters']['account']:
account_keys = list(data['filters']['account'].keys())
account_keys_str = ', '.join(account_keys)
sheet.merge_range('C5:G5', account_keys_str, filter_body)
+
if data['filters']['options']:
option_keys = list(data['filters']['options'].keys())
option_keys_str = ', '.join(option_keys)
sheet.merge_range('C6:G6', option_keys_str, filter_body)
- if data:
- if report_action == 'dynamic_accounts_report.action_partner_ledger':
- sheet.write(8, col, ' ', sub_heading)
- sheet.write(8, col + 1, 'JNRL', sub_heading)
- sheet.write(8, col + 2, 'Account', sub_heading)
- sheet.merge_range('D9:E9', 'Ref', sub_heading)
- sheet.merge_range('F9:G9', 'Due Date', sub_heading)
- sheet.merge_range('H9:I9', 'Debit', sub_heading)
- sheet.merge_range('J9:K9', 'Credit', sub_heading)
- sheet.merge_range('L9:M9', 'Balance', sub_heading)
- row = 8
- for partner in data['partners']:
+
+ # Define a helper function to format numbers with thousand separators
+ def format_number(value):
+ if value is None:
+ return "0.00"
+ return "{:,.2f}".format(float(value))
+
+ # Process partner data
+ if data and report_action == 'dynamic_accounts_report.action_partner_ledger':
+ sheet.write(8, col, ' ', sub_heading)
+ sheet.write(8, col + 1, 'JNRL', sub_heading)
+ sheet.write(8, col + 2, 'Account', sub_heading)
+ sheet.merge_range('D9:E9', 'Ref', sub_heading)
+ sheet.merge_range('F9:G9', 'Due Date', sub_heading)
+ sheet.merge_range('H9:I9', 'Debit', sub_heading)
+ sheet.merge_range('J9:K9', 'Credit', sub_heading)
+ sheet.merge_range('L9:M9', 'Balance', sub_heading)
+
+ row = 8
+ # Ensure data['partners'] is iterable; default to empty list if None
+ partners = data.get('partners', []) or []
+ for partner in partners:
+ row += 1
+ # Format partner totals
+ total_debit = data['total'][partner]['total_debit'] if data['total'] and partner in data['total'] else 0
+ total_credit = data['total'][partner]['total_credit'] if data['total'] and partner in data[
+ 'total'] else 0
+ balance = total_debit - total_credit
+
+ sheet.write(row, col, partner, txt_name)
+ sheet.write(row, col + 1, ' ', txt_name)
+ sheet.write(row, col + 2, ' ', txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, ' ', txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ', txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(total_debit), txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(total_credit), txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, format_number(balance), txt_name)
+
+ # Handle initial balance
+ initial_balance = data['total'][partner]['initial_balance'] if data['total'] and partner in data[
+ 'total'] else 0
+ if initial_balance != 0:
row += 1
- sheet.write(row, col, partner, txt_name)
+ initial_debit = data['total'][partner]['initial_debit'] if data['total'] and partner in data[
+ 'total'] else 0
+ initial_credit = data['total'][partner]['initial_credit'] if data['total'] and partner in data[
+ 'total'] else 0
+
+ sheet.write(row, col, '', txt_name)
sheet.write(row, col + 1, ' ', txt_name)
sheet.write(row, col + 2, ' ', txt_name)
- sheet.merge_range(row, col + 3, row, col + 4, ' ',
- txt_name)
- sheet.merge_range(row, col + 5, row, col + 6, ' ',
- txt_name)
- sheet.merge_range(row, col + 7, row, col + 8,
- data['total'][partner]['total_debit'],
- txt_name)
- sheet.merge_range(row, col + 9, row, col + 10,
- data['total'][partner]['total_credit'],
- txt_name)
- sheet.merge_range(row, col + 11, row, col + 12,
- data['total'][partner]['total_debit'] -
- data['total'][partner]['total_credit'],
- txt_name)
- if data['total'][partner]['initial_balance'] != 0:
- row += 1
- sheet.write(row, col, '', txt_name)
- sheet.write(row, col + 1, ' ', txt_name)
- sheet.write(row, col + 2, ' ', txt_name)
- sheet.merge_range(row, col + 3, row, col + 4, 'Initial Balance ',
- head_highlight)
- sheet.merge_range(row, col + 5, row, col + 6, ' ',
- txt_name)
- sheet.merge_range(row, col + 7, row, col + 8,
- data['total'][partner]['initial_debit'],
- txt_name)
- sheet.merge_range(row, col + 9, row, col + 10,
- data['total'][partner]['initial_credit'],
- txt_name)
- sheet.merge_range(row, col + 11, row, col + 12,
- data['total'][partner]['initial_balance'],
- txt_name)
- for rec in data['data'][partner]:
- row += 1
- sheet.write(row, col, rec[0]['date'], txt_name)
- sheet.write(row, col + 1, rec[0]['jrnl'], txt_name)
- sheet.write(row, col + 2, rec[0]['code'], txt_name)
- sheet.merge_range(row, col + 3, row, col + 4,
- rec[0]['move_name'],
- txt_name)
- sheet.merge_range(row, col + 5, row, col + 6,
- rec[0]['date_maturity'],
- txt_name)
- sheet.merge_range(row, col + 7, row, col + 8,
- rec[0]['debit'], txt_name)
- sheet.merge_range(row, col + 9, row, col + 10,
- rec[0]['credit'], txt_name)
- sheet.merge_range(row, col + 11, row, col + 12, ' ',
- txt_name)
- row += 1
- sheet.merge_range(row, col, row, col + 6, 'Total', filter_head)
- sheet.merge_range(row, col + 7, row, col + 8,
- data['grand_total']['total_debit'],
- filter_head)
- sheet.merge_range(row, col + 9, row, col + 10,
- data['grand_total']['total_credit'],
- filter_head)
- sheet.merge_range(row, col + 11, row, col + 12,
- data['grand_total']['total_debit'] -
- data['grand_total']['total_credit'],
- filter_head)
+ sheet.merge_range(row, col + 3, row, col + 4, 'Initial Balance', head_highlight)
+ sheet.merge_range(row, col + 5, row, col + 6, ' ', txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(initial_debit), txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(initial_credit), txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, format_number(initial_balance), txt_name)
+
+ # Process move lines for the partner
+ for rec in data['data'][partner]:
+ row += 1
+ sheet.write(row, col, rec[0]['date'], txt_name)
+ sheet.write(row, col + 1, rec[0]['jrnl'], txt_name)
+ sheet.write(row, col + 2, rec[0]['code'], txt_name)
+ sheet.merge_range(row, col + 3, row, col + 4, rec[0]['move_name'], txt_name)
+ sheet.merge_range(row, col + 5, row, col + 6, rec[0]['date_maturity'] or '', txt_name)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(rec[0]['debit']), txt_name)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(rec[0]['credit']), txt_name)
+ sheet.merge_range(row, col + 11, row, col + 12, ' ', txt_name)
+
+ # Grand totals
+ row += 1
+ # Ensure grand_total values are numbers
+ grand_total_debit = data['grand_total']['total_debit'] if data['grand_total'] and data['grand_total'][
+ 'total_debit'] is not None else 0
+ grand_total_credit = data['grand_total']['total_credit'] if data['grand_total'] and data['grand_total'][
+ 'total_credit'] is not None else 0
+ grand_balance = grand_total_debit - grand_total_credit
+
+ sheet.merge_range(row, col, row, col + 6, 'Total', filter_head)
+ sheet.merge_range(row, col + 7, row, col + 8, format_number(grand_total_debit), filter_head)
+ sheet.merge_range(row, col + 9, row, col + 10, format_number(grand_total_credit), filter_head)
+ sheet.merge_range(row, col + 11, row, col + 12, format_number(grand_balance), filter_head)
+
workbook.close()
output.seek(0)
response.stream.write(output.read())
- output.close()
+ output.close()
\ No newline at end of file
diff --git a/dynamic_accounts_report/models/account_trial_balance.py b/dynamic_accounts_report/models/account_trial_balance.py
index 5dd50f778..d3117e49b 100644
--- a/dynamic_accounts_report/models/account_trial_balance.py
+++ b/dynamic_accounts_report/models/account_trial_balance.py
@@ -77,14 +77,13 @@ class AccountTrialBalance(models.TransientModel):
data = {
'account': account_id.display_name,
'account_id': account_id.id,
- 'journal_ids': self.env['account.journal'].search_read([], [
- 'name']),
- 'initial_total_debit': initial_total_debit,
- 'initial_total_credit': initial_total_credit,
+ 'journal_ids': self.env['account.journal'].search_read([], ['name']),
+ 'initial_total_debit': "{:,.2f}".format(initial_total_debit),
+ 'initial_total_credit': "{:,.2f}".format(initial_total_credit),
'total_debit': total_debit,
'total_credit': total_credit,
- 'end_total_debit': end_total_debit,
- 'end_total_credit': end_total_credit
+ 'end_total_debit': "{:,.2f}".format(end_total_debit),
+ 'end_total_credit': "{:,.2f}".format(end_total_credit)
}
move_line_list.append(data)
journal = {
@@ -422,7 +421,7 @@ class AccountTrialBalance(models.TransientModel):
if data:
if report_action == 'dynamic_accounts_report.action_trial_balance':
row = 11
- for move_line in data['data']:
+ for move_line in data['data'][0]:
sheet.write(row, col, move_line['account'],
side_heading_sub)
sheet.write(row, col + 1, move_line['initial_total_debit'],
@@ -450,4 +449,4 @@ class AccountTrialBalance(models.TransientModel):
workbook.close()
output.seek(0)
response.stream.write(output.read())
- output.close()
+ output.close()
\ No newline at end of file
diff --git a/dynamic_accounts_report/models/aged_payable_report.py b/dynamic_accounts_report/models/aged_payable_report.py
index 63e35aade..7aa401cf5 100644
--- a/dynamic_accounts_report/models/aged_payable_report.py
+++ b/dynamic_accounts_report/models/aged_payable_report.py
@@ -255,8 +255,7 @@ class AgePayableReport(models.TransientModel):
txt_name)
for rec in data['data'][move_line]:
row += 1
- sheet.write(row, col, rec['move_name'] + rec['name'],
- txt_name)
+ sheet.write(row, col, rec['move_name'] + (rec['name'] or ""), txt_name)
sheet.write(row, col + 1, rec['date'],
txt_name)
sheet.write(row, col + 2, rec['amount_currency'],
diff --git a/dynamic_accounts_report/models/aged_receivable_report.py b/dynamic_accounts_report/models/aged_receivable_report.py
index 037a57060..2efa6ce66 100644
--- a/dynamic_accounts_report/models/aged_receivable_report.py
+++ b/dynamic_accounts_report/models/aged_receivable_report.py
@@ -35,9 +35,9 @@ class AgeReceivableReport(models.TransientModel):
def view_report(self):
"""
Generate a report with move line data categorized by partner and debit
- difference.This method retrieves move line data from the
+ difference. This method retrieves move line data from the
'account.move.line' model, filters the records based on specific
- criteria (parent_state, account_type, reconciled),and categorizes the
+ criteria (parent_state, account_type, reconciled), and categorizes the
data by each partner's name. For each move line, it calculates the debit
difference based on the number of days between today's date and the
maturity date of the move line.
@@ -56,6 +56,11 @@ class AgeReceivableReport(models.TransientModel):
currency_id = self.env.company.currency_id.symbol
partner_ids = paid.mapped('partner_id')
today = fields.Date.today()
+
+ # Define a helper function to format numbers with thousand separators
+ def format_number(value):
+ return "{:,.2f}".format(value) # Adds thousand separator and 2 decimal places
+
for partner_id in partner_ids:
move_line_ids = paid.filtered(
lambda rec: rec.partner_id in partner_id)
@@ -63,29 +68,51 @@ class AgeReceivableReport(models.TransientModel):
['name', 'move_name', 'date', 'amount_currency', 'account_id',
'date_maturity', 'currency_id', 'debit', 'move_id'])
for val in move_line_data:
+ difference = 0 # Initialize difference to avoid undefined variable
if val['date_maturity']:
- diffrence = (today - val['date_maturity']).days
- val['diff0'] = val['debit'] if diffrence <= 0 else 0.0
- val['diff1'] = val['debit'] if 0 < diffrence <= 30 else 0.0
- val['diff2'] = val['debit'] if 30 < diffrence <= 60 else 0.0
- val['diff3'] = val['debit'] if 60 < diffrence <= 90 else 0.0
- val['diff4'] = val['debit'] if 90 < diffrence <= 120 else 0.0
- val['diff5'] = val['debit'] if diffrence > 120 else 0.0
+ difference = (today - val['date_maturity']).days
+ # Keep raw numeric values for calculations
+ val['raw_amount_currency'] = val['amount_currency']
+ val['raw_debit'] = val['debit']
+ val['diff0'] = val['debit'] if difference <= 0 else 0.0
+ val['diff1'] = val['debit'] if 0 < difference <= 30 else 0.0
+ val['diff2'] = val['debit'] if 30 < difference <= 60 else 0.0
+ val['diff3'] = val['debit'] if 60 < difference <= 90 else 0.0
+ val['diff4'] = val['debit'] if 90 < difference <= 120 else 0.0
+ val['diff5'] = val['debit'] if difference > 120 else 0.0
+ # Keep raw values for diff fields
+ val['raw_diff0'] = val['diff0']
+ val['raw_diff1'] = val['diff1']
+ val['raw_diff2'] = val['diff2']
+ val['raw_diff3'] = val['diff3']
+ val['raw_diff4'] = val['diff4']
+ val['raw_diff5'] = val['diff5']
+ # Format the numeric fields for display
+ val['amount_currency'] = format_number(val['amount_currency'])
+ val['debit'] = format_number(val['debit'])
+ val['diff0'] = format_number(val['diff0'])
+ val['diff1'] = format_number(val['diff1'])
+ val['diff2'] = format_number(val['diff2'])
+ val['diff3'] = format_number(val['diff3'])
+ val['diff4'] = format_number(val['diff4'])
+ val['diff5'] = format_number(val['diff5'])
move_line_list[partner_id.name] = move_line_data
partner_total[partner_id.name] = {
- 'debit_sum': sum(val['debit'] for val in move_line_data),
- 'diff0_sum': round(sum(val['diff0'] for val in move_line_data),
- 2),
- 'diff1_sum': round(sum(val['diff1'] for val in move_line_data),
- 2),
- 'diff2_sum': round(sum(val['diff2'] for val in move_line_data),
- 2),
- 'diff3_sum': round(sum(val['diff3'] for val in move_line_data),
- 2),
- 'diff4_sum': round(sum(val['diff4'] for val in move_line_data),
- 2),
- 'diff5_sum': round(sum(val['diff5'] for val in move_line_data),
- 2),
+ 'debit_sum': sum(val['raw_debit'] for val in move_line_data),
+ 'diff0_sum': round(sum(val['raw_diff0'] for val in move_line_data), 2),
+ 'diff1_sum': round(sum(val['raw_diff1'] for val in move_line_data), 2),
+ 'diff2_sum': round(sum(val['raw_diff2'] for val in move_line_data), 2),
+ 'diff3_sum': round(sum(val['raw_diff3'] for val in move_line_data), 2),
+ 'diff4_sum': round(sum(val['raw_diff4'] for val in move_line_data), 2),
+ 'diff5_sum': round(sum(val['raw_diff5'] for val in move_line_data), 2),
+ # Format the summary fields for display
+ 'debit_sum_display': format_number(sum(val['raw_debit'] for val in move_line_data)),
+ 'diff0_sum_display': format_number(round(sum(val['raw_diff0'] for val in move_line_data), 2)),
+ 'diff1_sum_display': format_number(round(sum(val['raw_diff1'] for val in move_line_data), 2)),
+ 'diff2_sum_display': format_number(round(sum(val['raw_diff2'] for val in move_line_data), 2)),
+ 'diff3_sum_display': format_number(round(sum(val['raw_diff3'] for val in move_line_data), 2)),
+ 'diff4_sum_display': format_number(round(sum(val['raw_diff4'] for val in move_line_data), 2)),
+ 'diff5_sum_display': format_number(round(sum(val['raw_diff5'] for val in move_line_data), 2)),
'currency_id': currency_id,
'partner_id': partner_id.id
}
@@ -166,7 +193,7 @@ class AgeReceivableReport(models.TransientModel):
@api.model
def get_xlsx_report(self, data, response, report_name, report_action):
"""
- Generate an Excel report based on the provided data.
+ Generate an Excel report based on the provided data with thousand separators.
:param data: The data used to generate the report.
:type data: str (JSON format)
@@ -204,6 +231,14 @@ class AgeReceivableReport(models.TransientModel):
side_heading_sub.set_indent(1)
txt_name = workbook.add_format({'font_size': '10px', 'border': 1})
txt_name.set_indent(2)
+ # Define a number format with thousand separator
+ num_format = workbook.add_format({'font_size': '10px', 'border': 1, 'num_format': '#,##0.00'})
+ num_format.set_indent(2)
+ # Define a number format for totals with thousand separator
+ total_num_format = workbook.add_format(
+ {'align': 'center', 'bold': True, 'font_size': '10px',
+ 'border': 1, 'bg_color': '#D3D3D3',
+ 'border_color': 'black', 'num_format': '#,##0.00'})
sheet.set_column(0, 0, 30)
sheet.set_column(1, 1, 20)
sheet.set_column(2, 2, 15)
@@ -249,25 +284,25 @@ class AgeReceivableReport(models.TransientModel):
txt_name)
sheet.write(row, col + 8,
data['total'][move_line]['diff0_sum'],
- txt_name)
+ num_format)
sheet.write(row, col + 9,
data['total'][move_line]['diff1_sum'],
- txt_name)
+ num_format)
sheet.write(row, col + 10,
data['total'][move_line]['diff2_sum'],
- txt_name)
+ num_format)
sheet.write(row, col + 11,
data['total'][move_line]['diff3_sum'],
- txt_name)
+ num_format)
sheet.write(row, col + 12,
data['total'][move_line]['diff4_sum'],
- txt_name)
+ num_format)
sheet.write(row, col + 13,
data['total'][move_line]['diff5_sum'],
- txt_name)
+ num_format)
sheet.write(row, col + 14,
data['total'][move_line]['debit_sum'],
- txt_name)
+ num_format)
for rec in data['data'][move_line]:
row += 1
if not rec['name']:
@@ -277,7 +312,7 @@ class AgeReceivableReport(models.TransientModel):
sheet.write(row, col + 1, rec['date'],
txt_name)
sheet.write(row, col + 2, rec['amount_currency'],
- txt_name)
+ num_format)
sheet.write(row, col + 3, rec['currency_id'][1],
txt_name)
sheet.merge_range(row, col + 4, row, col + 5,
@@ -286,38 +321,38 @@ class AgeReceivableReport(models.TransientModel):
sheet.merge_range(row, col + 6, row, col + 7,
rec['date_maturity'],
txt_name)
- sheet.write(row, col + 8, rec['diff0'], txt_name)
- sheet.write(row, col + 9, rec['diff1'], txt_name)
- sheet.write(row, col + 10, rec['diff2'], txt_name)
- sheet.write(row, col + 11, rec['diff3'], txt_name)
- sheet.write(row, col + 12, rec['diff4'], txt_name)
- sheet.write(row, col + 13, rec['diff5'], txt_name)
+ sheet.write(row, col + 8, rec['diff0'], num_format)
+ sheet.write(row, col + 9, rec['diff1'], num_format)
+ sheet.write(row, col + 10, rec['diff2'], num_format)
+ sheet.write(row, col + 11, rec['diff3'], num_format)
+ sheet.write(row, col + 12, rec['diff4'], num_format)
+ sheet.write(row, col + 13, rec['diff5'], num_format)
sheet.write(row, col + 14, ' ', txt_name)
sheet.merge_range(row + 1, col, row + 1, col + 7, 'Total',
filter_head)
sheet.write(row + 1, col + 8,
data['grand_total']['diff0_sum'],
- filter_head)
+ total_num_format)
sheet.write(row + 1, col + 9,
data['grand_total']['diff1_sum'],
- filter_head)
+ total_num_format)
sheet.write(row + 1, col + 10,
data['grand_total']['diff2_sum'],
- filter_head)
+ total_num_format)
sheet.write(row + 1, col + 11,
data['grand_total']['diff3_sum'],
- filter_head)
+ total_num_format)
sheet.write(row + 1, col + 12,
data['grand_total']['diff4_sum'],
- filter_head)
+ total_num_format)
sheet.write(row + 1, col + 13,
data['grand_total']['diff5_sum'],
- filter_head)
+ total_num_format)
sheet.write(row + 1, col + 14,
data['grand_total']['total_debit'],
- filter_head)
+ total_num_format)
workbook.close()
output.seek(0)
response.stream.write(output.read())
- output.close()
+ output.close()
\ No newline at end of file
diff --git a/dynamic_accounts_report/models/bank_book_report.py b/dynamic_accounts_report/models/bank_book_report.py
index 4c3f0fb6c..5fa8db34a 100644
--- a/dynamic_accounts_report/models/bank_book_report.py
+++ b/dynamic_accounts_report/models/bank_book_report.py
@@ -268,10 +268,10 @@ class BankBookReport(models.TransientModel):
sheet.merge_range(row, col + 9, row, col + 10, ' ',
txt_name)
sheet.merge_range(row, col + 11, row, col + 12,
- data['total'][move_line]['total_debit'],
+ data['total'][move_line]['total_debit_display'],
txt_name)
sheet.merge_range(row, col + 13, row, col + 14,
- data['total'][move_line]['total_credit'],
+ data['total'][move_line]['total_credit_display'],
txt_name)
sheet.merge_range(row, col + 15, row, col + 16,
data['total'][move_line]['total_debit'] -
@@ -298,18 +298,18 @@ class BankBookReport(models.TransientModel):
rec['name'],
txt_name)
sheet.merge_range(row, col + 11, row, col + 12,
- rec['debit'], txt_name)
+ rec['debit_display'], txt_name)
sheet.merge_range(row, col + 13, row, col + 14,
- rec['credit'], txt_name)
+ rec['credit_display'], txt_name)
sheet.merge_range(row, col + 15, row, col + 16, ' ',
txt_name)
sheet.merge_range(row + 1, col, row + 1, col + 10, 'Total',
filter_head)
sheet.merge_range(row + 1, col + 11, row + 1, col + 12,
- data['grand_total']['total_debit'],
+ data['grand_total']['total_debit_display'],
filter_head)
sheet.merge_range(row + 1, col + 13, row + 1, col + 14,
- data['grand_total']['total_credit'],
+ data['grand_total']['total_credit_display'],
filter_head)
sheet.merge_range(row + 1, col + 15, row + 1, col + 16,
float(data['grand_total']['total_debit']) -
diff --git a/dynamic_accounts_report/report/aged_receivable_templates.xml b/dynamic_accounts_report/report/aged_receivable_templates.xml
index be7f6ff06..499cd14e6 100644
--- a/dynamic_accounts_report/report/aged_receivable_templates.xml
+++ b/dynamic_accounts_report/report/aged_receivable_templates.xml
@@ -93,7 +93,7 @@
@@ -101,7 +104,7 @@
|
- |
- |
- |
|||||
---|---|---|---|---|---|---|---|---|
|
|