diff --git a/dynamic_accounts_report/__manifest__.py b/dynamic_accounts_report/__manifest__.py
index 6810712fa..0259abd50 100644
--- a/dynamic_accounts_report/__manifest__.py
+++ b/dynamic_accounts_report/__manifest__.py
@@ -21,7 +21,7 @@
################################################################################
{
'name': 'Odoo17 Dynamic Accounting Reports',
- 'version': '17.0.1.0.1',
+ 'version': '17.0.1.1.1',
'category': 'Accounting',
'summary': "Odoo 17 Accounting Financial Reports,Dynamic Accounting Reports, Dynamic Financial Reports,Dynamic Report Odoo17, Odoo17,Financial Reports, Odoo17 Accounting,Accounting, Odoo Apps",
'description': "This module creates dynamic Accounting General Ledger, Trial"
diff --git a/dynamic_accounts_report/doc/RELEASE_NOTES.md b/dynamic_accounts_report/doc/RELEASE_NOTES.md
index a6e408924..26792beb6 100644
--- a/dynamic_accounts_report/doc/RELEASE_NOTES.md
+++ b/dynamic_accounts_report/doc/RELEASE_NOTES.md
@@ -10,3 +10,7 @@
##### BUG FIX
- Updated the Dynamic Balance sheet Reporting
+#### 10.07.2024
+#### Version 17.0.1.1.1
+##### BUG FIX
+- Added the initial balance in partner ledger (xlsx and PDF)
diff --git a/dynamic_accounts_report/models/account_partner_ledger.py b/dynamic_accounts_report/models/account_partner_ledger.py
index 3cffdaec3..0076ccee8 100644
--- a/dynamic_accounts_report/models/account_partner_ledger.py
+++ b/dynamic_accounts_report/models/account_partner_ledger.py
@@ -47,6 +47,9 @@ class AccountPartnerLedger(models.TransientModel):
:return: A dictionary containing the partner data for the report.
:rtype: dict
"""
+ fiscal_year = self.env['res.company'].search([]).mapped('account_opening_date')[0].strftime('%Y-%m-%d')
+ fiscal_year_start = datetime.strptime(fiscal_year,
+ '%Y-%m-%d').date()
partner_dict = {}
partner_totals = {}
move_line_ids = self.env['account.move.line'].search(
@@ -55,10 +58,18 @@ class AccountPartnerLedger(models.TransientModel):
('parent_state', '=', 'posted')])
partner_ids = move_line_ids.mapped('partner_id')
for partner in partner_ids:
+ total_debit_balance = 0
+ total_credit_balance = 0
+ balance = 0
move_line_id = move_line_ids.filtered(
lambda x: x.partner_id == partner)
move_line_list = []
for move_line in move_line_id:
+ if move_line.invoice_date:
+ if move_line.invoice_date < fiscal_year_start:
+ total_debit_balance += move_line.debit
+ total_credit_balance += move_line.credit
+ balance = total_debit_balance - total_credit_balance
move_line_data = move_line.read(
['date', 'move_name', 'account_type', 'debit', 'credit',
'date_maturity', 'account_id', 'journal_id', 'move_id',
@@ -77,7 +88,12 @@ class AccountPartnerLedger(models.TransientModel):
'total_debit': round(sum(move_line_id.mapped('debit')), 2),
'total_credit': round(sum(move_line_id.mapped('credit')), 2),
'currency_id': currency_id,
- 'partner_id': partner.id}
+ 'initial_balance': balance,
+ 'partner_id': partner.id,
+ 'move_name': 'Initial Balance',
+ 'initial_debit': total_debit_balance,
+ 'initial_credit': total_credit_balance,
+ }
partner_dict['partner_totals'] = partner_totals
return partner_dict
@@ -139,6 +155,14 @@ class AccountPartnerLedger(models.TransientModel):
account_type_domain),
('parent_state', 'in', option_domain)]).filtered(
lambda x: x.date.month == fields.Date.today().month)
+ date_start = fields.Date.today().replace(day=1)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif data_range == 'year':
move_line_ids = self.env['account.move.line'].search(
[('partner_id', '=', partners), (
@@ -146,6 +170,14 @@ class AccountPartnerLedger(models.TransientModel):
account_type_domain),
('parent_state', 'in', option_domain)]).filtered(
lambda x: x.date.year == fields.Date.today().year)
+ date_start = fields.Date.today().replace(month=1, day=1)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif data_range == 'quarter':
move_line_ids = self.env['account.move.line'].search(
[('partner_id', '=', partners), (
@@ -154,6 +186,14 @@ class AccountPartnerLedger(models.TransientModel):
('date', '>=', quarter_start),
('date', '<=', quarter_end),
('parent_state', 'in', option_domain)])
+ date_start = quarter_start
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif data_range == 'last-month':
move_line_ids = self.env['account.move.line'].search(
[('partner_id', '=', partners), (
@@ -161,6 +201,14 @@ class AccountPartnerLedger(models.TransientModel):
account_type_domain),
('parent_state', 'in', option_domain)]).filtered(
lambda x: x.date.month == fields.Date.today().month - 1)
+ date_start = fields.Date.today().replace(day=1,month=fields.Date.today().month - 1)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif data_range == 'last-year':
move_line_ids = self.env['account.move.line'].search(
[('partner_id', '=', partners), (
@@ -168,6 +216,14 @@ class AccountPartnerLedger(models.TransientModel):
account_type_domain),
('parent_state', 'in', option_domain)]).filtered(
lambda x: x.date.year == fields.Date.today().year - 1)
+ date_start = fields.Date.today().replace(day=1,month=1,)
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif data_range == 'last-quarter':
move_line_ids = self.env['account.move.line'].search(
[('partner_id', '=', partners), (
@@ -176,6 +232,14 @@ class AccountPartnerLedger(models.TransientModel):
('date', '>=', previous_quarter_start),
('date', '<=', previous_quarter_end),
('parent_state', 'in', option_domain)])
+ date_start = previous_quarter_start
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif 'start_date' in data_range and 'end_date' in data_range:
start_date = datetime.strptime(data_range['start_date'],
'%Y-%m-%d').date()
@@ -188,6 +252,14 @@ class AccountPartnerLedger(models.TransientModel):
('date', '>=', start_date),
('date', '<=', end_date),
('parent_state', 'in', option_domain)])
+ date_start = start_date
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif 'start_date' in data_range:
start_date = datetime.strptime(data_range['start_date'],
'%Y-%m-%d').date()
@@ -197,6 +269,14 @@ class AccountPartnerLedger(models.TransientModel):
account_type_domain),
('date', '>=', start_date),
('parent_state', 'in', option_domain)])
+ date_start = start_date
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
elif 'end_date' in data_range:
end_date = datetime.strptime(data_range['end_date'],
'%Y-%m-%d').date()
@@ -206,12 +286,26 @@ class AccountPartnerLedger(models.TransientModel):
account_type_domain),
('date', '<=', end_date),
('parent_state', 'in', option_domain)])
+ fiscal_year = self.env['res.company'].search([]).mapped(
+ 'account_opening_date')[0].strftime('%Y-%m-%d')
+ date_start = datetime.strptime(fiscal_year,
+ '%Y-%m-%d').date()
+ balance_move_line_ids = self.env[
+ 'account.move.line'].search(
+ [('partner_id', '=', partners), (
+ 'account_type', 'in',
+ account_type_domain),
+ ('parent_state', 'in', option_domain),
+ ('invoice_date', '<', date_start)])
else:
move_line_ids = self.env['account.move.line'].search(
[('partner_id', '=', partners), (
'account_type', 'in',
account_type_domain),
('parent_state', 'in', option_domain)])
+ total_debit_balance = 0
+ total_credit_balance = 0
+ balance = 0
move_line_list = []
for move_line in move_line_ids:
move_line_data = move_line.read(
@@ -226,13 +320,24 @@ class AccountPartnerLedger(models.TransientModel):
move_line_data[0]['jrnl'] = journal_code
move_line_data[0]['code'] = account_code
move_line_list.append(move_line_data)
+ for remaining_move in balance_move_line_ids:
+ if remaining_move.invoice_date:
+ if remaining_move.invoice_date < date_start:
+ total_debit_balance += remaining_move.debit
+ total_credit_balance += remaining_move.credit
+ balance = total_debit_balance - total_credit_balance
partner_dict[partner] = move_line_list
currency_id = self.env.company.currency_id.symbol
partner_totals[partner] = {
'total_debit': round(sum(move_line_ids.mapped('debit')), 2),
'total_credit': round(sum(move_line_ids.mapped('credit')), 2),
'currency_id': currency_id,
- 'partner_id': partners}
+ 'partner_id': partners,
+ 'initial_balance': balance,
+ 'move_name': 'Initial Balance',
+ 'initial_debit': total_debit_balance,
+ 'initial_credit': total_credit_balance,
+ }
partner_dict['partner_totals'] = partner_totals
return partner_dict
@@ -262,6 +367,8 @@ class AccountPartnerLedger(models.TransientModel):
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})
sub_heading = workbook.add_format(
{'align': 'center', 'bold': True, 'font_size': '10px',
'border': 1, 'bg_color': '#D3D3D3',
@@ -335,6 +442,24 @@ class AccountPartnerLedger(models.TransientModel):
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)
diff --git a/dynamic_accounts_report/report/partner_ledger_templates.xml b/dynamic_accounts_report/report/partner_ledger_templates.xml
index 6969a9361..a5a089831 100644
--- a/dynamic_accounts_report/report/partner_ledger_templates.xml
+++ b/dynamic_accounts_report/report/partner_ledger_templates.xml
@@ -142,6 +142,50 @@
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+ |
+
+
+
+
+ |
+
+ |
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+
+
+
diff --git a/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml b/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml
index 4a93f58af..b196c00e9 100644
--- a/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml
+++ b/dynamic_accounts_report/static/src/xml/partner_ledger_view.xml
@@ -218,190 +218,237 @@
-
-
-
-
-
-
-
-
- |
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+ |
+
-
- |
-
- Total
- |
-
-
-
- |
-
-
-
- |
- |
-
-
-
- |
-
+
+
+ |
+
+ Total
+ |
+
+
+
+ |
+
+
+
+ |
+ |
+
+
+
+ |
+
+
+
+
+