diff --git a/addons/account/report/aged_trial_balance.py b/addons/account/report/aged_trial_balance.py old mode 100644 new mode 100755 index 78187c703b9..bd04138c8bf --- a/addons/account/report/aged_trial_balance.py +++ b/addons/account/report/aged_trial_balance.py @@ -1,9 +1,6 @@ -# -*- encoding: utf-8 -*- ############################################################################## # -# Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved. -# -# $Id$ +# Copyright (c) 2006 TINY SPRL. (http://tiny.be) All Rights Reserved. # # WARNING: This program as such is intended to be used by professional # programmers who take the whole responsability of assessing all potential @@ -30,166 +27,172 @@ import time import pooler +import rml_parse from report import report_sxw -class aged_trial_report(report_sxw.rml_parse): - def __init__(self, cr, uid, name, context): - super(aged_trial_report, self).__init__(cr, uid, name, context) - self.localcontext.update({ - 'time': time, - 'get_lines': self._get_lines, - 'get_total': self._get_total, - 'get_before': self._get_before, - 'get_for_period': self._get_for_period, - 'get_company': self._get_company, - 'get_currency': self._get_currency, - }) +class aged_trial_report(rml_parse.rml_parse): + + def __init__(self, cr, uid, name, context): + super(aged_trial_report, self).__init__(cr, uid, name, context) + self.line_query = '' + self.total_account = [] + + + self.localcontext.update({ + 'time': time, + 'get_lines': self._get_lines, + 'get_total': self._get_total, + 'get_direction': self._get_direction, + 'get_for_period': self._get_for_period, + 'get_company': self._get_company, + 'get_currency': self._get_currency, + + }) + + + def _get_lines(self, form): + + if (form['result_selection'] == 'customer' ): + self.ACCOUNT_TYPE = "('receivable')" + elif (form['result_selection'] == 'supplier'): + self.ACCOUNT_TYPE = "('payable')" + else: + self.ACCOUNT_TYPE = "('payable','receivable')" + - def _add_header(self, node): - return True + res = [] + account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line') + self.line_query = account_move_line_obj._query_get(self.cr, self.uid, obj='line', + context={'fiscalyear': form['fiscalyear']}) + self.cr.execute("SELECT DISTINCT res_partner.id AS id, " \ + "res_partner.name AS name " \ + "FROM res_partner,account_move_line AS line, account_account,account_move_reconcile AS recon " \ + "WHERE (line.account_id=account_account.id) " \ + "AND ((reconcile_id IS NULL) " \ + "OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s ))) " \ + "AND (line.partner_id=res_partner.id) " \ + "AND (account_account.company_id = %d) " \ + "ORDER BY res_partner.name", (form['date1'],form['company_id'])) + partners = self.cr.dictfetchall() + ## mise a 0 du total + for i in range(7): + self.total_account.append(0) + # + + for partner in partners: + values = {} + ## If choise selection is in the future + if form['direction_selection'] == 'future': + self.cr.execute("SELECT SUM(debit-credit) " \ + "FROM account_move_line AS line, account_account " \ + "WHERE (line.account_id=account_account.id) " \ + "AND (account_account.type IN " + self.ACCOUNT_TYPE + ") " \ + "AND (COALESCE(date_maturity,date) < %s) AND (partner_id=%d) " \ + "AND ((reconcile_id IS NULL) " \ + "OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s ))) " \ + "AND (account_account.company_id = %d) " \ + "AND account_account.active", + (form['date1'], partner['id'],form['date1'], form['company_id'])) + before = self.cr.fetchone() + + self.total_account[6] = self.total_account[6] + (before and before[0] or 0.0) - def _get_lines(self, form): - self.form=form - res = [] - account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line') - line_query = account_move_line_obj._query_get(self.cr, self.uid, obj='line', - context={'fiscalyear': form['fiscalyear'],'state':form['state']}) - self.cr.execute("SELECT DISTINCT res_partner.id AS id, " \ - "res_partner.name AS name, res_partner.ref AS code " \ - "FROM res_partner, account_move_line AS line, account_account " \ - "WHERE (line.account_id=account_account.id) " \ - "AND (line.reconcile_id IS NULL) " \ - "AND (line.partner_id=res_partner.id) " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active " \ - "ORDER BY res_partner.name", (form['company_id'],)) - partners = self.cr.dictfetchall() - for partner in partners: - values = {} - self.cr.execute("SELECT SUM(debit-credit) " \ - "FROM account_move_line AS line, account_account " \ - "WHERE (line.account_id=account_account.id) " \ - "AND (account_account.type IN (" + form['computation'] +")) " \ - "AND (date < %s) AND (partner_id=%d) " \ - "AND (reconcile_id IS NULL) " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active", - (form['0']['start'], partner['id'], form['company_id'])) - before = self.cr.fetchone() - values['before'] = before and before[0] or "" - for i in range(5): - self.cr.execute("SELECT SUM(debit-credit) " \ - "FROM account_move_line AS line, account_account " \ - "WHERE (line.account_id=account_account.id) " \ - "AND (account_account.type IN (" + form['computation'] + ")) " \ - "AND (date >= %s) AND (date <= %s) " \ - "AND (partner_id = %d) " \ - "AND (reconcile_id IS NULL) " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active", - (form[str(i)]['start'], form[str(i)]['stop'], - partner['id'], form['company_id'])) - during = self.cr.fetchone() - values[str(i)] = during and during[0] or "" + values['direction'] = before and before[0] or 0.0 + else: + self.cr.execute("SELECT SUM(debit-credit) " \ + "FROM account_move_line AS line, account_account " \ + "WHERE (line.account_id=account_account.id) " \ + "AND (account_account.type IN " + self.ACCOUNT_TYPE + ") " \ + "AND (COALESCE(date_maturity,date) > %s) AND (partner_id=%d) " \ + "AND ((reconcile_id IS NULL) " \ + "OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s ))) " \ + "AND (account_account.company_id = %d) " \ + "AND account_account.active", + (form['date1'], partner['id'],form['date1'], form['company_id'])) + after = self.cr.fetchone() + self.total_account[6] = self.total_account[6] + (after and after[0] or 0.0) + values['direction'] = after and after[0] or "" + #print str(values['direction']) + for i in range(5): + self.cr.execute("SELECT SUM(debit-credit) " \ + "FROM account_move_line AS line, account_account " \ + "WHERE (line.account_id=account_account.id) " \ + "AND (account_account.type IN " + self.ACCOUNT_TYPE + ") " \ + "AND (COALESCE(date_maturity,date) BETWEEN %s AND %s) " \ + "AND (partner_id = %d) " \ + "AND ((reconcile_id IS NULL) " \ + "OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s ))) " \ + "AND (account_account.company_id = %d) " \ + "AND account_account.active", + (form[str(i)]['start'], form[str(i)]['stop'],partner['id'],form['date1'] ,form['company_id'])) + during = self.cr.fetchone() + # Ajout du compteur + self.total_account[(i)] = self.total_account[(i)] + (during and during[0] or 0) - self.cr.execute("SELECT SUM(debit-credit) " \ - "FROM account_move_line AS line, account_account " \ - "WHERE (line.account_id = account_account.id) " \ - "AND (account_account.type IN (" + form['computation'] + ")) " \ - "AND (partner_id = %d) " \ - "AND (reconcile_id IS NULL) " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active", - (partner['id'], form['company_id'])) - total = self.cr.fetchone() - values['total'] = total and total[0] or 0.0 - values['name'] = partner['name'] - values['ref'] = partner['code'] - t = 0.0 - for i in range(5)+['before']: - t+= float(values.get(str(i), 0.0) or 0.0) - if values['total']: - res.append(values) - total = 0.0 - totals = {} - for r in res: - total += float(r['total'] or 0.0) - for i in range(5)+['before']: - totals.setdefault(str(i), 0.0) - totals[str(i)] += float(r[str(i)] or 0.0) - if form['sorting_on']=='amount': - res.sort(lambda x,y:cmp(y['total'],x['total'])) - return res + #print str(during) + values[str(i)] = during and during[0] or "" + self.cr.execute("SELECT SUM(debit-credit) " \ + "FROM account_move_line AS line, account_account " \ + "WHERE (line.account_id = account_account.id) " \ + "AND (account_account.type IN " + self.ACCOUNT_TYPE + ") " \ + "AND (partner_id = %d) " \ + "AND ((reconcile_id IS NULL) " \ + "OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s ))) " \ + "AND (account_account.company_id = %d) " \ + "AND account_account.active", + (partner['id'],form['date1'],form['company_id'])) + total = self.cr.fetchone() + values['total'] = total and total[0] or 0.0 + ## Add for total + self.total_account[(i+1)] = self.total_account[(i+1)] + (total and total[0] or 0.0) + print self.total_account,">>>>>>>>>>>>>Total>>>>>>>>>>>>>>>>" + values['name'] = partner['name'] + #t = 0.0 + #for i in range(5)+['direction']: + # t+= float(values.get(str(i), 0.0) or 0.0) + #values['total'] = t + + if values['total']: + + res.append(values) + + total = 0.0 + + totals = {} + for r in res: + total += float(r['total'] or 0.0) + for i in range(5)+['direction']: + totals.setdefault(str(i), 0.0) + totals[str(i)] += float(r[str(i)] or 0.0) + return res - def _get_total(self, fiscalyear, company_id): - account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line') - line_query = account_move_line_obj._query_get(self.cr, self.uid, obj='line', - context={'fiscalyear': fiscalyear,'state':self.datas['form']['state']}) - self.cr.execute("SELECT SUM(debit - credit) " \ - "FROM account_move_line AS line, account_account " \ - "WHERE (line.account_id = account_account.id) " \ - "AND (account_account.type IN (" + self.form['computation'] + ")) "\ - "AND reconcile_id IS NULL " \ - "AND partner_id is NOT NULL " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active", - (company_id,)) - total = self.cr.fetchone() - return total and total[0] or 0.0 + + + + def _get_total(self,pos): + print self.total_account,"========_get_total========" + period = self.total_account[int(pos)] + return period - def _get_before(self, date, fiscalyear, company_id): - account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line') - line_query = account_move_line_obj._query_get(self.cr, self.uid, obj='line', - context={'fiscalyear': fiscalyear,'state':self.datas['form']['state']}) - self.cr.execute("SELECT SUM(debit - credit) " \ - "FROM account_move_line AS line, account_account " \ - "WHERE (line.account_id = account_account.id) " \ - "AND (account_account.type IN (" + self.form['computation'] + ")) " \ - "AND reconcile_id IS NULL " \ - "AND (date < %s) " \ - "AND partner_id IS NOT NULL " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active", - (date, company_id)) - before = self.cr.fetchone() - return before and before[0] or 0.0 + + def _get_direction(self,pos): + + period = self.total_account[int(pos)] + return period - def _get_for_period(self, period, fiscalyear, company_id): - account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line') - line_query = account_move_line_obj._query_get(self.cr, self.uid, obj='line', - context={'fiscalyear': fiscalyear,'state':self.datas['form']['state']}) - self.cr.execute("SELECT SUM(debit - credit) " \ - "FROM account_move_line AS line, account_account " \ - "WHERE (line.account_id = account_account.id) " \ - "AND (account_account.type IN (" + self.form['computation'] + ")) " \ - "AND reconcile_id IS NULL " \ - "AND (date >= %s) " \ - "AND (date <= %s) " \ - "AND partner_id IS NOT NULL " \ - "AND " + line_query + " " \ - "AND (account_account.company_id = %d) " \ - "AND account_account.active", - (period['start'], period['stop'], company_id)) - period = self.cr.fetchone() - return period and period[0] or 0.0 + def _get_for_period(self,pos): + + period = self.total_account[int(pos)] + return period - def _get_company(self, form): - return pooler.get_pool(self.cr.dbname).get('res.company').browse(self.cr, self.uid, form['company_id']).name + def _get_company(self, form): + return pooler.get_pool(self.cr.dbname).get('res.company').browse(self.cr, self.uid, form['company_id']).name - def _get_currency(self, form): - return pooler.get_pool(self.cr.dbname).get('res.company').browse(self.cr, self.uid, form['company_id']).currency_id.name + def _get_currency(self, form): + return pooler.get_pool(self.cr.dbname).get('res.company').browse(self.cr, self.uid, form['company_id']).currency_id.name -report_sxw.report_sxw( - 'report.account.aged.trial.balance', - 'res.partner', - 'addons/account/report/aged_trial_balance.rml', - parser=aged_trial_report, header=False) -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: +report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner', + 'addons/account/report/aged_trial_balance.rml',parser=aged_trial_report,header=False) + diff --git a/addons/account/report/aged_trial_balance.rml b/addons/account/report/aged_trial_balance.rml old mode 100644 new mode 100755 index 99292838dbe..f79d0a63be0 --- a/addons/account/report/aged_trial_balance.rml +++ b/addons/account/report/aged_trial_balance.rml @@ -1,8 +1,34 @@ -