[IMP]: Removed pageSize from report rml as it will be taken from company paper format;
[odoo/odoo.git] / addons / l10n_fr / report / base_report.py
index 1de6612..2c44b06 100644 (file)
 ##############################################################################
 
 import time
+
 from report import report_sxw
 
 class base_report(report_sxw.rml_parse):
-    def __init__(self, cr, uid, name, context):
+    def __init__(self, cr, uid, name, context=None):
         super(base_report, self).__init__(cr, uid, name, context=context)
-        self.localcontext.update( {
+        self.localcontext.update({
             'time': time,
             '_load': self._load,
             '_get_variable': self._get_variable,
@@ -40,53 +41,59 @@ class base_report(report_sxw.rml_parse):
         })
         self.context = context
 
-    def _load(self,name,form):
-        fiscalyear=self.pool.get('account.fiscalyear').browse(self.cr, self.uid, form['fiscalyear'])
-
-        period_query_cond=self.pool.get('account.period').search(self.cr, self.uid,[('fiscalyear_id','=',form['fiscalyear'])])
+    def _load(self, name, form):
+        fiscalyear = self.pool.get('account.fiscalyear').browse(self.cr, self.uid, form['fiscalyear_id'])
+        period_ids=self.pool.get('account.period').search(self.cr, self.uid, [('fiscalyear_id', '=', form['fiscalyear_id'])])
 
-        self.cr.execute("SELECT MIN(date_start) AS date_start, MAX(date_stop) AS date_stop FROM account_period WHERE id =ANY(%s)",(period_query_cond,))
-        dates =self.cr.dictfetchall()
-        self._set_variable('date_start', dates[0]['date_start'])
-        self._set_variable('date_stop', dates[0]['date_stop'])
+        if period_ids:
+            self.cr.execute("SELECT MIN(date_start) AS date_start, MAX(date_stop) AS date_stop FROM account_period WHERE id = ANY(%s)", (period_ids,))
+            dates = self.cr.dictfetchall()
+        else:
+            dates = False
+        if dates:
+            self._set_variable('date_start', dates[0]['date_start'])
+            self._set_variable('date_stop', dates[0]['date_stop'])
 
         self.cr.execute("SELECT l10n_fr_line.code,definition FROM l10n_fr_line LEFT JOIN l10n_fr_report ON l10n_fr_report.id=report_id WHERE l10n_fr_report.code=%s",(name,))
-        datas =self.cr.dictfetchall()
+        datas = self.cr.dictfetchall()
         for line in datas:
-            self._load_accounts(form,line['code'],eval(line['definition']),fiscalyear,period_query_cond)
+            self._load_accounts(form,line['code'],eval(line['definition']),fiscalyear,period_ids)
 
-    def _set_variable(self,variable,valeur):
-        self.localcontext.update({variable:valeur})
+    def _set_variable(self, variable, valeur):
+        self.localcontext.update({variable: valeur})
 
-    def _get_variable(self,variable):
+    def _get_variable(self, variable):
         return self.localcontext[variable]
 
-    def _load_accounts(self,form,code,definition,fiscalyear,period_query_cond):
-        #self.context.copy()
-        accounts={}
+    def _load_accounts(self, form, code, definition, fiscalyear, period_ids):
+        accounts = {}
         for x in definition['load']:
-            p=x.split(":")
-            accounts[p[1]]=[p[0],p[2]]
-        sum=0.0
-
-        if fiscalyear.state!='done' or not code.startswith('bpcheck'):
-            query_cond="("
+            p = x.split(":")
+            accounts[p[1]] = [p[0],p[2]]
+        sum = 0.0
+        if fiscalyear.state != 'done' or not code.startswith('bpcheck'):
+            query_params = []
+            query_cond = "("
             for account in accounts:
-                query_cond += "aa.code LIKE '"+account+"%' OR "
+                query_cond += "aa.code LIKE '" + account + "%%' OR "
             query_cond = query_cond[:-4]+")"
 
-            if len(definition['except'])>0:
+            if len(definition['except']) > 0:
                 query_cond = query_cond+" and ("
                 for account in definition['except']:
-                    query_cond += "aa.code NOT LIKE '"+account+"%' AND "
+                    query_cond += "aa.code NOT LIKE '"+account+"%%' AND "
                 query_cond = query_cond[:-5]+")"
 
-            closed_cond=""
-            if fiscalyear.state=='done':
-                closed_cond=" AND (aml.move_id NOT IN (SELECT account_move.id as move_id FROM account_move WHERE period_id IN "+str(tuple(period_query_cond))+" AND journal_id=(SELECT res_id FROM ir_model_data WHERE name='closing_journal' AND module='l10n_fr')) OR (aa.type != 'income' AND aa.type !='expense'))"
+            closed_cond = ""
+            if fiscalyear.state == 'done':
+                closed_cond=" AND (aml.move_id NOT IN (SELECT account_move.id as move_id FROM account_move WHERE period_id = ANY(%s) AND journal_id=(SELECT res_id FROM ir_model_data WHERE name='closing_journal' AND module='l10n_fr')) OR (aa.type != 'income' AND aa.type !='expense'))"
+                query_params.append(list(period_ids))
 
-            query = "SELECT aa.code AS code, SUM(debit) as debit, SUM(credit) as credit FROM account_move_line aml LEFT JOIN account_account aa ON aa.id=aml.account_id WHERE "+query_cond+closed_cond+" AND aml.state='valid' AND aml.period_id IN "+str(tuple(period_query_cond))+" GROUP BY code"
-            self.cr.execute(query)
+            query = "SELECT aa.code AS code, SUM(debit) as debit, SUM(credit) as credit " \
+                " FROM account_move_line aml LEFT JOIN account_account aa ON aa.id=aml.account_id "\
+                " WHERE "+query_cond+closed_cond+" AND aml.state='valid' AND aml.period_id = ANY(%s) GROUP BY code"
+            query_params.append(list(period_ids))
+            self.cr.execute(query, query_params)
 
             lines =self.cr.dictfetchall()
             for line in lines:
@@ -95,19 +102,19 @@ class base_report(report_sxw.rml_parse):
                         operator=accounts[account][0]
                         type=accounts[account][1]
                         value=0.0
-                        if(type=="S"):
+                        if(type == "S"):
                             value=line["debit"]-line["credit"]
-                        elif(type=="D"):
+                        elif(type == "D"):
                             value=line["debit"]-line["credit"]
                             if(value<0.001): value=0.0
-                        elif(type=="C"):
+                        elif(type == "C"):
                             value=line["credit"]-line["debit"]
                             if(value<0.001): value=0.0
-                        if(operator=='+'):
-                            sum+=value
+                        if(operator == '+'):
+                            sum += value
                         else:
-                            sum-=value
+                            sum -= value
                         break
         self._set_variable(code, sum)
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file