From 8e76fe6e61fe9e9574c1698b25b286cee71c415d Mon Sep 17 00:00:00 2001 From: Anthony Muschang Date: Fri, 10 Oct 2014 13:43:46 +0200 Subject: [PATCH] [CHG]account_financial_report_webkit: Migration to v8 --- .../report/aged_partner_balance.py | 33 ++++++++--- .../report/common_balance_reports.py | 55 +++++++++++-------- .../report/common_partner_balance_reports.py | 54 ++++++++++++------ .../report/open_invoices.py | 29 ++++++---- .../account_report_partner_balance.mako | 6 +- .../account_report_trial_balance.mako | 12 ++-- .../report/templates/aged_trial_webkit.mako | 10 ++-- 7 files changed, 126 insertions(+), 73 deletions(-) diff --git a/account_financial_report_webkit/report/aged_partner_balance.py b/account_financial_report_webkit/report/aged_partner_balance.py index 721b787e..fd9cb550 100644 --- a/account_financial_report_webkit/report/aged_partner_balance.py +++ b/account_financial_report_webkit/report/aged_partner_balance.py @@ -128,6 +128,7 @@ class AccountAgedTrialBalanceWebkit(PartnersOpenInvoicesWebkit): call to set_context """ + res = super(AccountAgedTrialBalanceWebkit, self).set_context( objects, data, @@ -135,21 +136,35 @@ class AccountAgedTrialBalanceWebkit(PartnersOpenInvoicesWebkit): report_type=report_type ) + agged_lines_accounts = {} + agged_totals_accounts = {} + agged_percents_accounts = {} + for acc in self.objects: - acc.aged_lines = {} - acc.agged_totals = {} - acc.agged_percents = {} - for part_id, partner_lines in acc.ledger_lines.items(): + agged_lines_accounts[acc.id] = {} + agged_totals_accounts[acc.id] = {} + agged_percents_accounts[acc.id] = {} + + for part_id, partner_lines in\ + self.localcontext['ledger_lines'][acc.id].items(): + aged_lines = self.compute_aged_lines(part_id, partner_lines, data) if aged_lines: - acc.aged_lines[part_id] = aged_lines - acc.aged_totals = totals = self.compute_totals( - acc.aged_lines.values()) - acc.aged_percents = self.compute_percents(totals) + agged_lines_accounts[acc.id][part_id] = aged_lines + agged_totals_accounts[acc.id] = totals = self.compute_totals( + agged_lines_accounts[acc.id].values()) + agged_percents_accounts[acc.id] = self.compute_percents(totals) + + self.localcontext.update({ + 'agged_lines_accounts': agged_lines_accounts, + 'agged_totals_accounts': agged_totals_accounts, + 'agged_percents_accounts': agged_percents_accounts, + }) + # Free some memory - del(acc.ledger_lines) + del(self.localcontext['ledger_lines']) return res def compute_aged_lines(self, partner_id, ledger_lines, data): diff --git a/account_financial_report_webkit/report/common_balance_reports.py b/account_financial_report_webkit/report/common_balance_reports.py index c3017e3b..da21a34e 100644 --- a/account_financial_report_webkit/report/common_balance_reports.py +++ b/account_financial_report_webkit/report/common_balance_reports.py @@ -276,23 +276,30 @@ class CommonBalanceReportHeaderWebkit(CommonReportHeaderWebkit): comparison_params.append(comp_params) comp_accounts_by_ids.append(comparison_result) - to_display = dict.fromkeys(account_ids, True) - objects = [] - for account in self.pool.get('account.account').browse(self.cursor, - self.uid, - account_ids): + objects = self.pool.get('account.account').browse(self.cursor, + self.uid, + account_ids) + + to_display_accounts = dict.fromkeys(account_ids, True) + init_balance_accounts = dict.fromkeys(account_ids, False) + comparisons_accounts = dict.fromkeys(account_ids, []) + debit_accounts = dict.fromkeys(account_ids, False) + credit_accounts = dict.fromkeys(account_ids, False) + balance_accounts = dict.fromkeys(account_ids, False) + + for account in objects: if not account.parent_id: # hide top level account continue if account.type == 'consolidation': - to_display.update( + to_display_accounts.update( dict([(a.id, False) for a in account.child_consol_ids])) elif account.type == 'view': - to_display.update( + to_display_accounts.update( dict([(a.id, True) for a in account.child_id])) - account.debit = accounts_by_ids[account.id]['debit'] - account.credit = accounts_by_ids[account.id]['credit'] - account.balance = accounts_by_ids[account.id]['balance'] - account.init_balance = accounts_by_ids[ + debit_accounts['account_id'] = accounts_by_ids[account.id]['debit'] + credit_accounts['account_id'] = accounts_by_ids[account.id]['credit'] + balance_accounts['account_id'] = accounts_by_ids[account.id]['balance'] + init_balance_accounts[account.id] = accounts_by_ids[ account.id].get('init_balance', 0.0) # if any amount is != 0 in comparisons, we have to display the @@ -308,21 +315,18 @@ class CommonBalanceReportHeaderWebkit(CommonReportHeaderWebkit): values.get('balance', 0.0), values.get('init_balance', 0.0))) comp_accounts.append(values) - account.comparisons = comp_accounts + comparisons_accounts[account.id] = comp_accounts # we have to display the account if a comparison as an amount or # if we have an amount in the main column # we set it as a property to let the data in the report if someone # want to use it in a custom report - display_account = display_account or any((account.debit, - account.credit, - account.balance, - account.init_balance)) - to_display.update( - {account.id: display_account and to_display[account.id]}) - objects.append(account) - - for account in objects: - account.to_display = to_display[account.id] + display_account = display_account\ + or any((account.debit, + account.credit, account.balance, + init_balance_accounts[account.id])) + to_display_accounts.update( + {account.id: display_account and + to_display_accounts[account.id]}) context_report_values = { 'fiscalyear': fiscalyear, @@ -336,5 +340,12 @@ class CommonBalanceReportHeaderWebkit(CommonReportHeaderWebkit): 'initial_balance': init_balance, 'initial_balance_mode': initial_balance_mode, 'comp_params': comparison_params, + 'to_display_accounts': to_display_accounts, + 'init_balance_accounts': init_balance_accounts, + 'comparisons_accounts': comparisons_accounts, + 'debit_accounts': debit_accounts, + 'credit_accounts': credit_accounts, + 'balance_accounts': balance_accounts, } + return objects, new_ids, context_report_values diff --git a/account_financial_report_webkit/report/common_partner_balance_reports.py b/account_financial_report_webkit/report/common_partner_balance_reports.py index 08cc3818..b291a8bf 100644 --- a/account_financial_report_webkit/report/common_partner_balance_reports.py +++ b/account_financial_report_webkit/report/common_partner_balance_reports.py @@ -278,19 +278,29 @@ class CommonPartnerBalanceReportHeaderWebkit(CommonBalanceReportHeaderWebkit, partner_filter_ids=partner_ids) comparison_params.append(comp_params) comp_accounts_by_ids.append(comparison_result) - objects = [] - - for account in self.pool.get('account.account').browse(self.cursor, - self.uid, - account_ids): + objects = self.pool.get('account.account').browse(self.cursor, + self.uid, + account_ids) + + init_balance_accounts = {} + comparisons_accounts = {} + partners_order_accounts = {} + partners_amounts_accounts = {} + debit_accounts = {} + credit_accounts = {} + balance_accounts = {} + + for account in objects: if not account.parent_id: # hide top level account continue - account.debit = accounts_by_ids[account.id]['debit'] - account.credit = accounts_by_ids[account.id]['credit'] - account.balance = accounts_by_ids[account.id]['balance'] - account.init_balance = accounts_by_ids[ + debit_accounts[account.id] = accounts_by_ids[account.id]['debit'] + credit_accounts[account.id] = accounts_by_ids[account.id]['credit'] + balance_accounts[account.id] = \ + accounts_by_ids[account.id]['balance'] + init_balance_accounts[account.id] = accounts_by_ids[ account.id].get('init_balance', 0.0) - account.partners_amounts = partner_details_by_ids[account.id] + partners_amounts_accounts[account.id] =\ + partner_details_by_ids[account.id] comp_accounts = [] for comp_account_by_id in comp_accounts_by_ids: values = comp_account_by_id.get(account.id) @@ -302,24 +312,25 @@ class CommonPartnerBalanceReportHeaderWebkit(CommonBalanceReportHeaderWebkit, for partner_id, partner_values in \ values['partners_amounts'].copy().iteritems(): - base_partner_balance = account.partners_amounts[ - partner_id]['balance'] if \ - account.partners_amounts.get(partner_id) else 0.0 + base_partner_balance = partners_amounts_accounts[account.id][partner_id]['balance']\ + if partners_amounts_accounts.get(account.id)\ + and partners_amounts_accounts.get(account.id)\ + .get(partner_id) else 0.0 partner_values.update(self._get_diff( base_partner_balance, partner_values.get('balance', 0.0))) values['partners_amounts'][ partner_id].update(partner_values) - account.comparisons = comp_accounts + comparisons_accounts[account.id] = comp_accounts all_partner_ids = reduce(add, [comp['partners_amounts'].keys() for comp in comp_accounts], - account.partners_amounts.keys()) - - account.partners_order = self._order_partners(all_partner_ids) + partners_amounts_accounts[account.id] + .keys()) - objects.append(account) + partners_order_accounts[account.id] = \ + self._order_partners(all_partner_ids) context_report_values = { 'fiscalyear': fiscalyear, @@ -333,6 +344,13 @@ class CommonPartnerBalanceReportHeaderWebkit(CommonBalanceReportHeaderWebkit, 'comp_params': comparison_params, 'initial_balance_mode': initial_balance_mode, 'compute_diff': self._get_diff, + 'init_balance_accounts': init_balance_accounts, + 'comparisons_accounts': comparisons_accounts, + 'partners_order_accounts': partners_order_accounts, + 'partners_amounts_accounts': partners_amounts_accounts, + 'debit_accounts': debit_accounts, + 'credit_accounts': credit_accounts, + 'balance_accounts': balance_accounts, } return objects, new_ids, context_report_values diff --git a/account_financial_report_webkit/report/open_invoices.py b/account_financial_report_webkit/report/open_invoices.py index ace849ee..3afdd099 100644 --- a/account_financial_report_webkit/report/open_invoices.py +++ b/account_financial_report_webkit/report/open_invoices.py @@ -145,29 +145,35 @@ class PartnersOpenInvoicesWebkit(report_sxw.rml_parse, ledger_lines_memoizer = self._compute_open_transactions_lines( account_ids, main_filter, target_move, start, stop, date_until, partner_filter=partner_ids) - objects = [] - for account in self.pool.get('account.account').browse(self.cursor, - self.uid, - account_ids): - account.ledger_lines = ledger_lines_memoizer.get(account.id, {}) - account.init_balance = init_balance_memoizer.get(account.id, {}) + objects = self.pool.get('account.account').browse(self.cursor, + self.uid, + account_ids) + + ledger_lines = {} + init_balance = {} + partners_order = {} + for account in objects: + ledger_lines[account.id] = ledger_lines_memoizer.get(account.id, + {}) + init_balance[account.id] = init_balance_memoizer.get(account.id, + {}) # we have to compute partner order based on inital balance # and ledger line as we may have partner with init bal # that are not in ledger line and vice versa ledg_lines_pids = ledger_lines_memoizer.get(account.id, {}).keys() non_null_init_balances = dict([ (ib, amounts) for ib, amounts - in account.init_balance.iteritems() + in init_balance[account.id].iteritems() if amounts['init_balance'] or amounts['init_balance_currency']]) init_bal_lines_pids = non_null_init_balances.keys() - account.partners_order = self._order_partners( + partners_order[account.id] = self._order_partners( ledg_lines_pids, init_bal_lines_pids) - account.ledger_lines = ledger_lines_memoizer.get(account.id, {}) + ledger_lines[account.id] = ledger_lines_memoizer.get(account.id, + {}) if group_by_currency: self._group_lines_by_currency(account) - objects.append(account) self.localcontext.update({ 'fiscalyear': fiscalyear, @@ -178,6 +184,9 @@ class PartnersOpenInvoicesWebkit(report_sxw.rml_parse, 'date_until': date_until, 'partner_ids': partner_ids, 'chart_account': chart_account, + 'ledger_lines': ledger_lines, + 'init_balance': init_balance, + 'partners_order': partners_order }) return super(PartnersOpenInvoicesWebkit, self).set_context( diff --git a/account_financial_report_webkit/report/templates/account_report_partner_balance.mako b/account_financial_report_webkit/report/templates/account_report_partner_balance.mako index c05ae040..f9be09d9 100644 --- a/account_financial_report_webkit/report/templates/account_report_partner_balance.mako +++ b/account_financial_report_webkit/report/templates/account_report_partner_balance.mako @@ -105,13 +105,13 @@ %for current_account in objects: <% - partners_order = partners_order[current_account.id] + partners_order = partners_order_accounts[current_account.id] # do not display accounts without partners if not partners_order: continue - comparisons = current_account.comparisons + comparisons = comparisons_accounts[current_account.id] # in multiple columns mode, we do not want to print accounts without any rows if comparison_mode in ('single', 'multiple'): @@ -121,7 +121,7 @@ if not display_line(all_comparison_lines): continue - current_partner_amounts = current_account.partners_amounts + current_partner_amounts = partners_amounts_accounts[current_account.id] total_initial_balance = 0.0 total_debit = 0.0 diff --git a/account_financial_report_webkit/report/templates/account_report_trial_balance.mako b/account_financial_report_webkit/report/templates/account_report_trial_balance.mako index cc833226..d4581002 100644 --- a/account_financial_report_webkit/report/templates/account_report_trial_balance.mako +++ b/account_financial_report_webkit/report/templates/account_report_trial_balance.mako @@ -161,10 +161,10 @@ %> %for current_account in objects: <% - if not current_account.to_display: + if not to_display_accounts[current_account.id]: continue - comparisons = current_account.comparisons + comparisons = comparisons_accounts[current_account.id] if current_account.id in last_child_consol_ids: # current account is a consolidation child of the last account: use the level of last account @@ -185,15 +185,15 @@ %if comparison_mode == 'no_comparison': %if initial_balance_mode: ## opening balance -
${formatLang(current_account.init_balance) | amount}
+
${formatLang(init_balance_accounts[current_account.id]) | amount}
%endif ## debit -
${formatLang(current_account.debit) | amount}
+
${formatLang(debit_accounts[current_account.id]) | amount}
## credit -
${formatLang(current_account.credit) | amount}
+
${formatLang(credit_accounts[current_account.id]) | amount}
%endif ## balance -
${formatLang(current_account.balance) | amount}
+
${formatLang(balance_accounts[current_account.id]) | amount}
%if comparison_mode in ('single', 'multiple'): %for comp_account in comparisons: diff --git a/account_financial_report_webkit/report/templates/aged_trial_webkit.mako b/account_financial_report_webkit/report/templates/aged_trial_webkit.mako index ee62a4b9..6ad17d7f 100644 --- a/account_financial_report_webkit/report/templates/aged_trial_webkit.mako +++ b/account_financial_report_webkit/report/templates/aged_trial_webkit.mako @@ -89,7 +89,7 @@ %for acc in objects: - %if acc.aged_lines: + %if agged_lines_accounts[acc.id]:
${acc.code} - ${acc.name}
@@ -111,11 +111,11 @@
%for partner_name, p_id, p_ref, p_name in partners_order[acc.id]: - %if acc.aged_lines.get(p_id): + %if agged_lines_accounts[acc.id].get(p_id):
- <%line = acc.aged_lines[p_id]%> - <%percents = acc.aged_percents%> - <%totals = acc.aged_totals%> + <%line = agged_lines_accounts[acc.id][p_id]%> + <%percents = agged_percents_accounts[acc.id]%> + <%totals = agged_totals_accounts[acc.id]%>
${partner_name}
${p_ref or ''}