Browse Source

[FIX] account_financial_report: general_ledger

* centralization is only calculated on accounts where 'centralized' is True
* Cumul. Balance of each move_line fixed
pull/660/head
Joan Sisquella 5 years ago
parent
commit
e67177c562
  1. 154
      account_financial_report/report/general_ledger.py
  2. 30
      account_financial_report/report/general_ledger_xlsx.py
  3. 1
      account_financial_report/report/journal_ledger.py
  4. 57
      account_financial_report/report/templates/general_ledger.xml
  5. 4
      account_financial_report/report/trial_balance_xlsx.py

154
account_financial_report/report/general_ledger.py

@ -21,7 +21,9 @@ class GeneralLedgerReport(models.AbstractModel):
'name': account.name,
'group_id': account.group_id.id,
'currency_id': account.currency_id or False,
'currency_name': account.currency_id.name}
'currency_name': account.currency_id.name,
'centralized': account.centralized
}
})
return accounts_data
@ -213,6 +215,7 @@ class GeneralLedgerReport(models.AbstractModel):
else:
prt_id = gl['partner_id'][0]
prt_name = gl['partner_id'][1]
prt_name = prt_name._value
if prt_id not in partners_ids:
partners_ids.add(prt_id)
partners_data.update({
@ -283,7 +286,7 @@ class GeneralLedgerReport(models.AbstractModel):
move_line['partner_id'] else False,
'partner_name': move_line['partner_id'][1] if
move_line['partner_id'] else "",
'ref': move_line['name'],
'ref': '' if not move_line['ref'] else move_line['ref'],
'tax_ids': move_line['tax_ids'],
'debit': move_line['debit'],
'credit': move_line['credit'],
@ -366,7 +369,7 @@ class GeneralLedgerReport(models.AbstractModel):
'id', 'name', 'date', 'move_id', 'journal_id', 'account_id',
'partner_id', 'debit', 'credit', 'balance', 'currency_id',
'full_reconcile_id', 'tax_ids', 'analytic_tag_ids',
'amount_currency']
'amount_currency', 'ref']
move_lines = self.env['account.move.line'].search_read(
domain=domain,
fields=ml_fields)
@ -403,23 +406,13 @@ class GeneralLedgerReport(models.AbstractModel):
if not move_line['partner_id']:
prt_id = 0
partner_name = 'Missing Partner'
if gen_ld_data:
if prt_id not in gen_ld_data[acc_id]:
if prt_id not in partners_ids:
partners_ids.append(prt_id)
partners_data.update({
prt_id: {'id': prt_id,
'name': partner_name}
})
gen_ld_data = self._initialize_partner(
gen_ld_data, acc_id, prt_id, foreign_currency
)
else:
partners_ids.append(prt_id)
partners_data.update({
prt_id: {'id': prt_id,
'name': partner_name}
})
partners_ids.append(prt_id)
partners_data.update({
prt_id: {'id': prt_id,
'name': partner_name}
})
if prt_id not in gen_ld_data[acc_id]:
gen_ld_data = self._initialize_partner(
gen_ld_data, acc_id, prt_id, foreign_currency
)
@ -452,6 +445,13 @@ class GeneralLedgerReport(models.AbstractModel):
return gen_ld_data, accounts_data, partners_data, journals_data, \
full_reconcile_data, taxes_data, tags_data
@api.model
def _recalculate_cumul_balance(self, move_lines, last_cumul_balance):
for move_line in move_lines:
move_line['balance'] += last_cumul_balance
last_cumul_balance = move_line['balance']
return move_lines
@api.model
def _create_general_ledger(self, gen_led_data, accounts_data):
general_ledger = []
@ -462,6 +462,7 @@ class GeneralLedgerReport(models.AbstractModel):
'name': accounts_data[acc_id]['name'],
'type': 'account',
'currency_id': accounts_data[acc_id]['currency_id'],
'centralized': accounts_data[acc_id]['centralized'],
})
if not gen_led_data[acc_id]['partners']:
move_lines = []
@ -471,6 +472,8 @@ class GeneralLedgerReport(models.AbstractModel):
else:
move_lines += [gen_led_data[acc_id][ml_id]]
move_lines = sorted(move_lines, key=lambda k: (k['date']))
move_lines = self._recalculate_cumul_balance(
move_lines, gen_led_data[acc_id]['init_bal']['balance'])
account.update({'move_lines': move_lines})
else:
list_partner = []
@ -489,6 +492,10 @@ class GeneralLedgerReport(models.AbstractModel):
gen_led_data[acc_id][prt_id][ml_id]]
move_lines = sorted(move_lines,
key=lambda k: (k['date']))
move_lines = self._recalculate_cumul_balance(
move_lines,
gen_led_data[acc_id][prt_id]['init_bal'][
'balance'])
partner.update({'move_lines': move_lines})
list_partner += [partner]
account.update({'list_partner': list_partner})
@ -496,47 +503,65 @@ class GeneralLedgerReport(models.AbstractModel):
return general_ledger
@api.model
def _get_centralized_ml(self, partners, date_to):
def _calculate_centralization(self, centralized_ml, move_line, date_to):
jnl_id = move_line['journal_id']
month = move_line['date'].month
if jnl_id not in centralized_ml.keys():
centralized_ml[jnl_id] = {}
if month not in centralized_ml[jnl_id].keys():
centralized_ml[jnl_id][month] = {}
last_day_month = \
calendar.monthrange(move_line['date'].year, month)
date = datetime.date(
move_line['date'].year,
month,
last_day_month[1])
if date > date_to:
date = date_to
centralized_ml[jnl_id][month].update({
'journal_id': jnl_id,
'ref': 'Centralized entries',
'date': date,
'debit': 0.0,
'credit': 0.0,
'balance': 0.0,
'bal_curr': 0.0,
'partner_id': False,
'rec_id': 0,
'entry_id': False,
'tax_ids': [],
'full_reconcile_id': False,
'id': False,
'tag_ids': False,
'currency_id': False,
})
centralized_ml[jnl_id][month]['debit'] += move_line['debit']
centralized_ml[jnl_id][month]['credit'] += move_line['credit']
centralized_ml[jnl_id][month]["balance"] += move_line["debit"] - \
move_line["credit"]
centralized_ml[jnl_id][month]['bal_curr'] += move_line['bal_curr']
return centralized_ml
@api.model
def _get_centralized_ml(self, account, date_to):
centralized_ml = {}
if isinstance(date_to, str):
date_to = datetime.datetime.strptime(date_to, '%Y-%m-%d').date()
for partner in partners:
for move_line in partner['move_lines']:
jnl_id = move_line['journal_id']
month = move_line['date'].month
if jnl_id not in centralized_ml.keys():
centralized_ml[jnl_id] = {}
if month not in centralized_ml[jnl_id].keys():
centralized_ml[jnl_id][month] = {}
last_day_month = \
calendar.monthrange(move_line['date'].year, month)
date = datetime.date(
move_line['date'].year,
month,
last_day_month[1])
if date > date_to:
date = date_to
centralized_ml[jnl_id][month].update({
'journal_id': jnl_id,
'ref': 'Centralized entries',
'date': date,
'debit': 0.0,
'credit': 0.0,
'balance': 0.0,
'bal_curr': 0.0,
'partner_id': False,
'rec_id': 0,
'entry_id': False,
'tax_ids': [],
'full_reconcile_id': False,
'id': False,
'tag_ids': False,
'currency_id': False,
})
centralized_ml[jnl_id][month]['debit'] += move_line['debit']
centralized_ml[jnl_id][month]['credit'] += move_line['credit']
centralized_ml[jnl_id][month]['balance'] += move_line['balance']
centralized_ml[jnl_id][month]['bal_curr'] += move_line['bal_curr']
if account['partners']:
for partner in account['list_partner']:
for move_line in partner['move_lines']:
centralized_ml = self._calculate_centralization(
centralized_ml,
move_line,
date_to,
)
else:
for move_line in account['move_lines']:
centralized_ml = self._calculate_centralization(
centralized_ml,
move_line,
date_to,
)
list_centralized_ml = []
for jnl_id in centralized_ml.keys():
list_centralized_ml += list(centralized_ml[jnl_id].values())
@ -579,12 +604,17 @@ class GeneralLedgerReport(models.AbstractModel):
general_ledger = self._create_general_ledger(gen_ld_data, accounts_data)
if centralize:
for account in general_ledger:
if account['partners']:
if account['centralized']:
centralized_ml = self._get_centralized_ml(
account['list_partner'], date_to)
account, date_to)
account['move_lines'] = centralized_ml
account['partners'] = False
del account['list_partner']
account["move_lines"] = self._recalculate_cumul_balance(
account["move_lines"],
gen_ld_data[account["id"]]["init_bal"]["balance"],
)
if account['partners']:
account['partners'] = False
del account['list_partner']
general_ledger = sorted(general_ledger, key=lambda k: k['code'])
return {
'doc_ids': [wizard_id],

30
account_financial_report/report/general_ledger_xlsx.py

@ -178,6 +178,17 @@ class GeneralLedgerXslx(models.AbstractModel):
'tags': tags,
})
self.write_line_from_dict(line)
# Display ending balance line for account
account.update({
'final_debit': account['fin_bal']['debit'],
'final_credit': account['fin_bal']['credit'],
'final_balance': account['fin_bal']['balance'],
})
if foreign_currency:
account.update({
'final_bal_curr': account['fin_bal']['bal_curr'],
})
self.write_ending_balance_from_dict(account)
else:
# For each partner
@ -241,18 +252,17 @@ class GeneralLedgerXslx(models.AbstractModel):
# Line break
self.row_pos += 1
# Display ending balance line for account
if not filter_partner_ids:
account.update({
'final_debit': account['fin_bal']['debit'],
'final_credit': account['fin_bal']['credit'],
'final_balance': account['fin_bal']['balance'],
})
if foreign_currency:
if not filter_partner_ids:
account.update({
'final_bal_curr': account['fin_bal']['bal_curr'],
'final_debit': account['fin_bal']['debit'],
'final_credit': account['fin_bal']['credit'],
'final_balance': account['fin_bal']['balance'],
})
self.write_ending_balance_from_dict(account)
if foreign_currency:
account.update({
'final_bal_curr': account['fin_bal']['bal_curr'],
})
self.write_ending_balance_from_dict(account)
# 2 lines break
self.row_pos += 2

1
account_financial_report/report/journal_ledger.py

@ -77,7 +77,6 @@ class JournalLedgerReport(models.AbstractModel):
return moves.ids, Moves, move_data
def _get_move_lines_domain(self, move_ids, wizard, journal_ids):
return [
('move_id', 'in', move_ids),
]

57
account_financial_report/report/templates/general_ledger.xml

@ -14,6 +14,7 @@
<template id="report_general_ledger_base">
<!-- Saved flag fields into variables, used to define columns display -->
<t t-set="foreign_currency" t-value="foreign_currency"/>
<t t-set="filter_partner_ids" t-value="filter_partner_ids"/>
<!-- Defines global variables used by internal layout -->
<t t-set="title">General Ledger - <t t-raw="company_name"/> - <t t-raw="currency_name"/></t>
<div class="page">
@ -38,39 +39,45 @@
<t t-call="account_financial_report.report_general_ledger_lines">
<t t-set="account_or_partner_object" t-value="account"/>
</t>
<!-- Display account footer -->
<t t-call="account_financial_report.report_general_ledger_ending_cumul">
<t t-set="account_or_partner_object" t-value="account"/>
<t t-set="type" t-value='"account_type"'/>
</t>
</t>
<t t-if="account['partners']">
<!-- Display account partners -->
<t t-if="not centralize">
<t t-foreach="account['list_partner']" t-as="partner">
<t t-set="type" t-value='"partner_type"'/>
<div class="page_break">
<!-- Display partner header -->
<div class="act_as_caption account_title">
<span
t-esc="o._get_atr_from_dict(partner['id'], partners_data, 'name')"/>
</div>
<!-- Display account partners -->
<t t-foreach="account['list_partner']" t-as="partner">
<t t-set="type" t-value='"partner_type"'/>
<div class="page_break">
<!-- Display partner header -->
<div class="act_as_caption account_title">
<span
t-esc="o._get_atr_from_dict(partner['id'], partners_data, 'name')"/>
</div>
<!-- Display partner move lines -->
<t t-call="account_financial_report.report_general_ledger_lines">
<t t-set="account_or_partner_object" t-value="partner"/>
</t>
<!-- Display partner move lines -->
<t t-call="account_financial_report.report_general_ledger_lines">
<t t-set="account_or_partner_object" t-value="partner"/>
</t>
<!-- Display partner footer -->
<t t-call="account_financial_report.report_general_ledger_ending_cumul">
<t t-set="account_or_partner_object" t-value="partner"/>
<t t-set="type" t-value='"partner_type"'/>
</t>
<!-- Display partner footer -->
<!-- Display account footer -->
<t t-if="not filter_partner_ids">
<t t-call="account_financial_report.report_general_ledger_ending_cumul">
<t t-set="account_or_partner_object" t-value="partner"/>
<t t-set="type" t-value='"partner_type"'/>
<t t-set="account_or_partner_object" t-value="account"/>
<t t-set="type" t-value='"account_type"'/>
</t>
</div>
</t>
</t>
</t>
</t>
<!-- Display account footer -->
<t t-if="not account['partners']" t-call="account_financial_report.report_general_ledger_ending_cumul">
<t t-set="account_or_partner_object" t-value="account"/>
<t t-set="type" t-value='"account_type"'/>
</div>
</t>
</t>
</div>
</t>

4
account_financial_report/report/trial_balance_xlsx.py

@ -53,11 +53,11 @@ class TrialBalanceXslx(models.AbstractModel):
'field_currency_balance': 'currency_id',
'type': 'many2one', 'width': 7},
8: {'header': _('Initial balance'),
'field': 'initial_balance_foreign_currency',
'field': 'initial_currency_balance',
'type': 'amount_currency',
'width': 14},
9: {'header': _('Ending balance'),
'field': 'final_balance_foreign_currency',
'field': 'ending_currency_balance',
'type': 'amount_currency',
'width': 14},
}

Loading…
Cancel
Save