Rifakat (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/6.0-opw-16778-rha into 
lp:openobject-addons/6.0.

Requested reviews:
  Naresh(OpenERP) (nch-openerp)
  Raphael Collet (OpenERP) (rco-openerp)
  nel (nel-tinyerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/6.0-opw-16778-rha/+merge/97872

Hello,

Improved functionality for search criteria of base_report_creator module. 
Search criteria was not working and throwing errors. Improved sql query for 
filters.

Kindly review it.

Regards,
Rifakat
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/6.0-opw-16778-rha/+merge/97872
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/6.0-opw-16778-rha.
=== modified file 'audittrail/audittrail.py'
--- audittrail/audittrail.py	2011-11-28 06:54:12 +0000
+++ audittrail/audittrail.py	2012-03-16 13:15:24 +0000
@@ -324,7 +324,7 @@
                     "object_id": model.id,
                     "user_id": uid_orig,
                     "res_id": resource['id'],
-                    "name": resource['name'],
+                    "name": resource.get('name', ''),
             }
             if 'id' in resource:
                 del resource['id']
@@ -389,7 +389,7 @@
                     "object_id": model.id,
                     "user_id": uid_orig,
                     "res_id": res_id,
-                    "name" : v['name'],
+                    "name" : v.get('name', ''),
                 }
                 log_id = log_pool.create(cr, uid, vals)
                 lines = []
@@ -444,7 +444,7 @@
                         "object_id": model.id,
                         "user_id": uid_orig,
                         "res_id": resource_id,
-                        "name": resource['name'],
+                        "name": resource.get('name', ''),
                     }
 
 

=== modified file 'base_report_creator/base_report_creator.py'
--- base_report_creator/base_report_creator.py	2011-01-17 08:00:48 +0000
+++ base_report_creator/base_report_creator.py	2012-03-16 13:15:24 +0000
@@ -197,24 +197,53 @@
             for f in report.field_ids:
                 if f.field_id.model:
                     fields['field'+str(i)] = (f.field_id.model, f.field_id.name)
+                    
                     i += 1
                 else:
                     fields['column_count'] = (False, 'Count')
-            newargs = []
-            newargs2 = []
+            where_str = []
+            where_clause = ''
             for a in args:
+                param_value = ''
+                if a == '|':
+                    args.pop(args.index(a)+1)
+                if not isinstance(a, tuple):
+                    continue
                 if fields[a[0]][0]:
                     res = self.pool.get(fields[a[0]][0])._where_calc(cr, user, [[fields[a[0]][1], a[1], a[2]]], active_test = False, context = context)
-                    newargs += res[0]
-                    newargs2 += res[1]
-                else:
-                    newargs += [("count(*) " + a[1] +" " + str(a[2]))]
-            ctx = context or {}
-            ctx['getid'] = True
-            sql_query = report.sql_query
-            cr.execute(sql_query) # TODO: FILTER
-            result = cr.fetchall()
-            return map(lambda x: x[0], result)
+                    from_clause, where_clause, where_clause_params = res.get_sql()
+                    if where_clause:
+                        if where_clause_params:
+                            if isinstance(where_clause_params[0], str):
+                                param_value = "'"+where_clause_params[0]+"'"
+                            elif isinstance(where_clause_params[0], (int, float, long)):
+                                param_value = tuple(where_clause_params)
+                        if param_value:
+                            if where_str:
+                                where_str.append((where_clause) % param_value)
+                            else:
+                                where_str.append((where_clause) % param_value)
+                        else:
+                            where_str.append(where_clause)
+            query = report.sql_query.split('group by')
+            main = query and query[0].split('where')
+            if len(main)>1:
+                where_str.append(main[1])
+            where = ''
+            for domain in where_str:
+                where += domain 
+                if domain == where_str[-1]:
+                    break
+                where += ' and '
+            if where:
+                where = ' where ' + where
+            query = main[0] + where + ' group by ' +  query[1]
+            if query:
+                cr.execute(query)
+                result = cr.fetchall()
+                return map(lambda x: x[0], result)
+            else:
+                return []
 
 report_result()
 

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to