466d6815cb91d5c8bcc38ec5c70ea57d09978ee4
[odoo/odoo.git] / addons / account / report / general_ledger.py
1 ##############################################################################
2 #
3 # Copyright (c) 2005-2006 TINY SPRL. (http://tiny.be) All Rights Reserved.
4 #
5 # WARNING: This program as such is intended to be used by professional
6 # programmers who take the whole responsability of assessing all potential
7 # consequences resulting from its eventual inadequacies and bugs
8 # End users who are looking for a ready-to-use solution with commercial
9 # garantees and support are strongly adviced to contract a Free Software
10 # Service Company
11 #
12 # This program is Free Software; you can redistribute it and/or
13 # modify it under the terms of the GNU General Public License
14 # as published by the Free Software Foundation; either version 2
15 # of the License, or (at your option) any later version.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with this program; if not, write to the Free Software
24 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25 #
26 ##############################################################################
27
28 import time
29 from report import report_sxw
30
31 class general_ledger(report_sxw.rml_parse):
32         def __init__(self, cr, uid, name, context):
33                 super(general_ledger, self).__init__(cr, uid, name, context)
34                 self.localcontext.update( {
35                         'time': time,
36                         'lines': self.lines,
37                         'sum_debit_account': self._sum_debit_account,
38                         'sum_credit_account': self._sum_credit_account,
39                         'sum_debit': self._sum_debit,
40                         'sum_credit': self._sum_credit,
41                 })
42                 self.context = context
43
44         def lines(self, account, form):
45                 ctx = self.context.copy()
46                 ctx['fiscalyear'] = form['fiscalyear']
47                 ctx['periods'] = form['periods'][0][2]
48                 query = self.pool.get('account.move.line')._query_get(self.cr, self.uid, context=ctx)
49                 self.cr.execute("SELECT l.date, j.code, l.ref, l.name, l.debit, l.credit "\
50                         "FROM account_move_line l, account_journal j "\
51                         "WHERE l.journal_id = j.id "\
52                                 "AND account_id = %d AND "+query+" "\
53                         "ORDER by l.id", (account.id,))
54                 res = self.cr.dictfetchall()
55                 sum = 0.0
56                 for l in res:
57                         sum += l['debit'] - l ['credit']
58                         l['progress'] = sum
59                 return res
60
61         def _sum_debit_account(self, account, form):
62                 ctx = self.context.copy()
63                 ctx['fiscalyear'] = form['fiscalyear']
64                 ctx['periods'] = form['periods'][0][2]
65                 query = self.pool.get('account.move.line')._query_get(self.cr, self.uid, context=ctx)
66                 self.cr.execute("SELECT sum(debit) "\
67                                 "FROM account_move_line l "\
68                                 "WHERE l.account_id = %d AND "+query, (account.id,))
69                 return self.cr.fetchone()[0] or 0.0
70
71         def _sum_credit_account(self, account, form):
72                 ctx = self.context.copy()
73                 ctx['fiscalyear'] = form['fiscalyear']
74                 ctx['periods'] = form['periods'][0][2]
75                 query = self.pool.get('account.move.line')._query_get(self.cr, self.uid, context=ctx)
76                 self.cr.execute("SELECT sum(credit) "\
77                                 "FROM account_move_line l "\
78                                 "WHERE l.account_id = %d AND "+query, (account.id,))
79                 return self.cr.fetchone()[0] or 0.0
80
81         def _sum_debit(self, form):
82                 if not self.ids:
83                         return 0.0
84                 ctx = self.context.copy()
85                 ctx['fiscalyear'] = form['fiscalyear']
86                 ctx['periods'] = form['periods'][0][2]
87                 query = self.pool.get('account.move.line')._query_get(self.cr, self.uid, context=ctx)
88                 self.cr.execute("SELECT sum(debit) "\
89                                 "FROM account_move_line l "\
90                                 "WHERE l.account_id in ("+','.join(map(str, self.ids))+") AND "+query)
91                 return self.cr.fetchone()[0] or 0.0
92
93         def _sum_credit(self, form):
94                 if not self.ids:
95                         return 0.0
96                 ctx = self.context.copy()
97                 ctx['fiscalyear'] = form['fiscalyear']
98                 ctx['periods'] = form['periods'][0][2]
99                 query = self.pool.get('account.move.line')._query_get(self.cr, self.uid, context=ctx)
100                 self.cr.execute("SELECT sum(credit) "\
101                                 "FROM account_move_line l "\
102                                 "WHERE l.account_id in ("+','.join(map(str, self.ids))+") AND "+query)
103                 return self.cr.fetchone()[0] or 0.0
104
105 report_sxw.report_sxw('report.account.general.ledger', 'account.account', 'addons/account/report/general_ledger.rml', parser=general_ledger, header=False)
106