From: Mod2 (OpenERP) <>
Date: Thu, 8 Jul 2010 06:26:09 +0000 (+0530)
Subject: [IMP] base_report_creator
X-Git-Tag: 6.0.0-rc1-addons~607^2~19
X-Git-Url: http://git.inspyration.org/?a=commitdiff_plain;h=ae36086b0f6d4b99210ff8b301f8461dae868fc7;p=odoo%2Fodoo.git
[IMP] base_report_creator
bzr revid: hmo@tinyerp.com-20100708062609-o4g2rsn46w3jfj0x
---
diff --git a/addons/base_report_creator/__openerp__.py b/addons/base_report_creator/__openerp__.py
index 22d7adf..8e1ba70 100644
--- a/addons/base_report_creator/__openerp__.py
+++ b/addons/base_report_creator/__openerp__.py
@@ -38,7 +38,6 @@ the "Dashboard" menu.
'update_xml': [
'security/ir.model.access.csv',
'wizard/report_menu_create_view.xml',
- 'wizard/report_open_view.xml',
'base_report_creator_wizard.xml',
'base_report_creator_view.xml'
],
diff --git a/addons/base_report_creator/base_report_creator.py b/addons/base_report_creator/base_report_creator.py
index 764753f..3ba79ba 100644
--- a/addons/base_report_creator/base_report_creator.py
+++ b/addons/base_report_creator/base_report_creator.py
@@ -98,7 +98,7 @@ class report_creator(osv.osv):
if context is None:
context = {}
- data = context and context.get('report_id', False) or False
+ data = context and context.get('report_id', False) or False
if (not context) or 'report_id' not in context:
return super(report_creator, self).fields_view_get(cr, user, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
report = self.browse(cr, user, data)
@@ -114,7 +114,7 @@ class report_creator(osv.osv):
else:
fields['column_count'] = {'readonly': True, 'type': 'integer', 'string': 'Count', 'size': 64, 'name': 'column_count'}
- arch = '\n'
+ arch = ''
if view_type == 'graph':
orientation_eval = {'horz':'horizontal','vert' :'vertical'}
orientation = eval(report.view_graph_orientation,orientation_eval)
@@ -163,14 +163,14 @@ class report_creator(osv.osv):
arch += '''>'''
arch += ''.join(temp_list)
else:
- arch += '<%s string="%s">\n' % (view_type, report.name)
+ arch += '<%s string="%s">' % (view_type, report.name)
i = 0
for f in report.field_ids:
if f.field_id.model:
- arch += '' % ('field' + str(i),)
+ arch += '' % ('field' + str(i),)
i += 1
else:
- arch += '' % ('column_count',)
+ arch += '' % ('column_count',)
arch += '%s>' % (view_type,)
result = {
'arch': arch,
@@ -181,7 +181,6 @@ class report_creator(osv.osv):
'action': [],
'relate': []
}
-
return result
def read(self, cr, user, ids, fields = None, context = None, load = '_classic_read'):
@@ -406,55 +405,85 @@ class report_creator(osv.osv):
return result
_columns = {
- 'name': fields.char('Report Name', size=64, required=True),
+ 'name': fields.char('Report Name', size=64, required=True),
'type': fields.selection([('list', 'Rows And Columns Report'), ], 'Report Type', required=True), #('sum','Summation Report')
- 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the report without removing it."),
- 'view_type1': fields.selection([('form', 'Form'),
- ('tree', 'Tree'),
- ('graph', 'Graph'),
- ('calendar', 'Calendar')], 'First View', required=True),
- 'view_type2': fields.selection([('', '/'),
- ('form', 'Form'),
- ('tree', 'Tree'),
- ('graph', 'Graph'),
- ('calendar', 'Calendar')], 'Second View'),
- 'view_type3': fields.selection([('', '/'),
- ('form', 'Form'),
- ('tree', 'Tree'),
- ('graph', 'Graph'),
- ('calendar', 'Calendar')], 'Third View'),
- 'view_graph_type': fields.selection([('pie', 'Pie Chart'),
- ('bar', 'Bar Chart')], 'Graph Type', required=True),
- 'view_graph_orientation': fields.selection([('horz', 'Horizontal'),
- ('vert', 'Vertical')], 'Graph Orientation', required=True),
- 'model_ids': fields.many2many('ir.model', 'base_report_creator_report_model_rel', 'report_id', 'model_id', 'Reported Objects'),
- 'field_ids': fields.one2many('base_report_creator.report.fields', 'report_id', 'Fields to Display'),
- 'filter_ids': fields.one2many('base_report_creator.report.filter', 'report_id', 'Filters'),
- 'state': fields.selection([
- ('draft', 'Draft'),
- ('valid', 'Valid')],
- 'State', required=True,
- help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed custom report. \
- \n* The \'Valid\' state is used when user validates the custom report.'),
- 'sql_query': fields.function(_sql_query_get, method=True, type="text", string='SQL Query', store=True),
- 'group_ids': fields.many2many('res.groups', 'base_report_creator_group_rel', 'report_id', 'group_id', 'Authorized Groups'),
+ 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the report without removing it."),
+ 'view_type1': fields.selection([('form', 'Form'),
+ ('tree', 'Tree'),
+ ('graph', 'Graph'),
+ ('calendar', 'Calendar')], 'First View', required=True),
+ 'view_type2': fields.selection([('', '/'),
+ ('form', 'Form'),
+ ('tree', 'Tree'),
+ ('graph', 'Graph'),
+ ('calendar', 'Calendar')], 'Second View'),
+ 'view_type3': fields.selection([('', '/'),
+ ('form', 'Form'),
+ ('tree', 'Tree'),
+ ('graph', 'Graph'),
+ ('calendar', 'Calendar')], 'Third View'),
+ 'view_graph_type': fields.selection([('pie', 'Pie Chart'),
+ ('bar', 'Bar Chart')], 'Graph Type', required=True),
+ 'view_graph_orientation': fields.selection([('horz', 'Horizontal'),
+ ('vert', 'Vertical')], 'Graph Orientation', required=True),
+ 'model_ids': fields.many2many('ir.model', 'base_report_creator_report_model_rel', 'report_id', 'model_id', 'Reported Objects'),
+ 'field_ids': fields.one2many('base_report_creator.report.fields', 'report_id', 'Fields to Display'),
+ 'filter_ids': fields.one2many('base_report_creator.report.filter', 'report_id', 'Filters'),
+ 'sql_query': fields.function(_sql_query_get, method=True, type="text", string='SQL Query', store=True),
+ 'group_ids': fields.many2many('res.groups', 'base_report_creator_group_rel', 'report_id', 'group_id', 'Authorized Groups'),
+ 'menu_id': fields.many2one('ir.ui.menu', "Menu", readonly=True),
}
_defaults = {
- 'type': lambda *args: 'list',
- 'state': lambda *args: 'draft',
- 'active': lambda *args: True,
- 'view_type1': lambda *args: 'tree',
- 'view_type2': lambda *args: 'graph',
- 'view_graph_type': lambda *args: 'bar',
- 'view_graph_orientation': lambda *args: 'horz',
+ 'type': lambda *args: 'list',
+ 'active': lambda *args: True,
+ 'view_type1': lambda *args: 'tree',
+ 'view_type2': lambda *args: 'graph',
+ 'view_graph_type': lambda *args: 'bar',
+ 'view_graph_orientation': lambda *args: 'horz',
}
+
+ def open_report(self, cr, uid, ids, context=None):
+ """
+ This Function opens base creator report view
+ @param self: The object pointer
+ @param cr: the current row, from the database cursor,
+ @param uid: the current userâs ID for security checks,
+ @param ids: List of report open's IDs
+ @param context: A standard dictionary for contextual values
+ @return : Dictionary value for base creator report form
+ """
+ if not context:
+ context = {}
+
+ rep = self.browse(cr, uid, ids, context=context)
+ if not rep:
+ return False
+
+ rep = rep[0]
+ view_mode = rep.view_type1
+ if rep.view_type2:
+ view_mode += ',' + rep.view_type2
+ if rep.view_type3:
+ view_mode += ',' + rep.view_type3
+ value = {
+ 'name': rep.name,
+ 'view_type': 'form',
+ 'view_mode': view_mode,
+ 'res_model': 'base_report_creator.report',
+ 'type': 'ir.actions.act_window',
+ 'context': "{'report_id':%d}" % (rep.id,),
+ 'nodestroy': True,
+ }
+
+ return value
+
def _function_field(self, cr, uid, ids):
"""
- constraints function which specify that
+ constraints function which specify that
not display field which are not stored in Database.
@param cr: the current row, from the database cursor,
@param uid: the current userâs ID for security checks,
- @param ids: List of Report creator's id.
+ @param ids: List of Report creator's id.
@return: True if display field which are stored in database.
or false if display field which are not store in dtabase.
"""
@@ -514,10 +543,11 @@ class report_creator(osv.osv):
return False
return True
+
_constraints = [
- (_function_field, 'You can not display field which are not stored in Database.', ['field_ids']),
- (_aggregation_error, 'You can apply aggregate function to the non calculated field.', ['field_ids']),
- (_calander_view_error, "You must have to give calendar view's color,start date and delay.", ['field_ids']),
+ (_function_field, 'You can not display field which are not stored in Database.', ['field_ids']),
+ (_aggregation_error, 'You can apply aggregate function to the non calculated field.', ['field_ids']),
+ (_calander_view_error, "You must have to give calendar view's color,start date and delay.", ['field_ids']),
]
report_creator()
@@ -531,25 +561,25 @@ class report_creator_field(osv.osv):
_rec_name = 'field_id'
_order = "sequence,id"
_columns = {
- 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of fields."),
- 'field_id': fields.many2one('ir.model.fields', 'Field'),
- 'report_id': fields.many2one('base_report_creator.report', 'Report', on_delete='cascade'),
- 'group_method': fields.selection([('group', 'Grouped'),
- ('sum', 'Sum'),
- ('min', 'Minimum'),
- ('count', 'Count'),
- ('max', 'Maximum'),
- ('avg', 'Average')], 'Grouping Method', required=True),
- 'graph_mode': fields.selection([('', '/'),
- ('x', 'X Axis'),
- ('y', 'Y Axis')], 'Graph Mode'),
- 'calendar_mode': fields.selection([('', '/'),
- ('date_start', 'Starting Date'),
- ('date_end', 'Ending Date'), ('date_delay', 'Delay'), ('date_stop', 'End Date'), ('color', 'Unique Colors')], 'Calendar Mode'),
+ 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of fields."),
+ 'field_id': fields.many2one('ir.model.fields', 'Field'),
+ 'report_id': fields.many2one('base_report_creator.report', 'Report', on_delete='cascade'),
+ 'group_method': fields.selection([('group', 'Grouped'),
+ ('sum', 'Sum'),
+ ('min', 'Minimum'),
+ ('count', 'Count'),
+ ('max', 'Maximum'),
+ ('avg', 'Average')], 'Grouping Method', required=True),
+ 'graph_mode': fields.selection([('', '/'),
+ ('x', 'X Axis'),
+ ('y', 'Y Axis')], 'Graph Mode'),
+ 'calendar_mode': fields.selection([('', '/'),
+ ('date_start', 'Starting Date'),
+ ('date_end', 'Ending Date'), ('date_delay', 'Delay'), ('date_stop', 'End Date'), ('color', 'Unique Colors')], 'Calendar Mode'),
}
_defaults = {
- 'group_method': lambda *args: 'group',
- 'graph_mode': lambda *args: '',
+ 'group_method': lambda *args: 'group',
+ 'graph_mode': lambda *args: '',
}
report_creator_field()
@@ -561,14 +591,14 @@ class report_creator_filter(osv.osv):
_name = "base_report_creator.report.filter"
_description = "Report Filters"
_columns = {
- 'name': fields.char('Filter Name', size=64, required=True),
- 'expression': fields.text('Value', required=True, help='Provide an expression for the field based on which you want to filter the records.\n e.g. res_partner.id=3'),
- 'report_id': fields.many2one('base_report_creator.report', 'Report', on_delete='cascade'),
- 'condition': fields.selection([('and', 'AND'),
+ 'name': fields.char('Filter Name', size=64, required=True),
+ 'expression': fields.text('Value', required=True, help='Provide an expression for the field based on which you want to filter the records.\n e.g. res_partner.id=3'),
+ 'report_id': fields.many2one('base_report_creator.report', 'Report', on_delete='cascade'),
+ 'condition': fields.selection([('and', 'AND'),
('or', 'OR')], 'Condition')
}
_defaults = {
- 'condition': lambda *args: 'and',
+ 'condition': lambda *args: 'and',
}
report_creator_filter()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_report_creator/base_report_creator_demo.xml b/addons/base_report_creator/base_report_creator_demo.xml
index da44979..3ec5cfb 100644
--- a/addons/base_report_creator/base_report_creator_demo.xml
+++ b/addons/base_report_creator/base_report_creator_demo.xml
@@ -10,7 +10,6 @@
-
diff --git a/addons/base_report_creator/base_report_creator_view.xml b/addons/base_report_creator/base_report_creator_view.xml
index 021bcbb..d211617 100644
--- a/addons/base_report_creator/base_report_creator_view.xml
+++ b/addons/base_report_creator/base_report_creator_view.xml
@@ -23,7 +23,6 @@
-
@@ -42,12 +41,21 @@
-
-
-
+ context="{'model_ids':model_ids}" nolabel="1" />
+
+
+
+
+
+
+
+
+
+
@@ -112,6 +120,22 @@
+
+ Report Name
+ base_report_creator.report
+ search
+
+
+
+
+
+
+
+
+
+
+
@@ -119,6 +143,7 @@
base_report_creator.report
form
tree,form
+
-
-
-
diff --git a/addons/base_report_creator/base_report_creator_wizard.xml b/addons/base_report_creator/base_report_creator_wizard.xml
index a8dad6f..68ab122 100644
--- a/addons/base_report_creator/base_report_creator_wizard.xml
+++ b/addons/base_report_creator/base_report_creator_wizard.xml
@@ -3,6 +3,5 @@
-
diff --git a/addons/base_report_creator/wizard/__init__.py b/addons/base_report_creator/wizard/__init__.py
index d2ff1dc..5616c82 100644
--- a/addons/base_report_creator/wizard/__init__.py
+++ b/addons/base_report_creator/wizard/__init__.py
@@ -21,6 +21,5 @@
import wiz_set_filter_fields
import report_menu_create
-import report_open
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_report_creator/wizard/base_report_creator_open.py b/addons/base_report_creator/wizard/base_report_creator_open.py
deleted file mode 100644
index be7420c..0000000
--- a/addons/base_report_creator/wizard/base_report_creator_open.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-
-import wizard
-import netsvc
-import time
-import pooler
-from osv import osv
-from tools.translate import _
-
-
-
-class report_creator_open(wizard.interface):
- def _open_report(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- if context.get('report_id',False):
- raise wizard.except_wizard(_('UserError'),_('No Wizards available for this object!'))
- rep = pool.get('base_report_creator.report').browse(cr, uid, data['id'], context)
- view_mode = rep.view_type1
- if rep.view_type2:
- view_mode += ','+rep.view_type2
- if rep.view_type3:
- view_mode += ','+rep.view_type3
- value = {
- 'name': rep.name,
- 'view_type': 'form',
- 'view_mode': view_mode,
- 'res_model': 'base_report_creator.report',
- 'context': {'report_id': data['id']},
- 'view_id': False,
- 'type': 'ir.actions.act_window'
- }
- return value
-
- states = {
- 'init' : {
- 'actions' : [],
- 'result' : {'type':'action', 'action':_open_report, 'state':'end'}
- }
- }
-report_creator_open('base_report_creator.report.open')
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/base_report_creator/wizard/report_menu_create.py b/addons/base_report_creator/wizard/report_menu_create.py
index 06e48b2..84b952f 100644
--- a/addons/base_report_creator/wizard/report_menu_create.py
+++ b/addons/base_report_creator/wizard/report_menu_create.py
@@ -43,31 +43,41 @@ class report_menu_create(osv.osv_memory):
if not context:
context = {}
context_id = context and context.get('active_id', False) or False
+ obj_menu = self.pool.get('ir.ui.menu')
+ data_obj = self.pool.get('ir.model.data')
+ obj_board = self.pool.get('base_report_creator.report')
if context_id:
- board = self.pool.get('base_report_creator.report').browse(cr, uid, context_id)
+ data = self.browse(cr, uid, ids, context=context)
+ if not data:
+ return {}
+ data = data[0]
+
+ board = obj_board.browse(cr, uid, context_id)
view = board.view_type1
if board.view_type2:
view += ',' + board.view_type2
if board.view_type3:
view += ',' + board.view_type3
+
+ result = data_obj._get_id(cr, uid, 'base_report_creator', 'view_report_filter')
+ res = data_obj.read(cr, uid, result, ['res_id'])
action_id = self.pool.get('ir.actions.act_window').create(cr, uid, {
'name': board.name,
'view_type':'form',
'view_mode':view,
'context': "{'report_id':%d}" % (board.id,),
- 'res_model': 'base_report_creator.report'
- })
- obj_menu = self.pool.get('ir.ui.menu')
- #start Loop
- for data in self.read(cr, uid, ids):
- obj_menu.create(cr, uid, {
- 'name': data.get('menu_name'),
- 'parent_id': data.get('menu_parent_id'),
+ 'res_model': 'base_report_creator.report',
+ 'search_view_id': res['res_id']
+ })
+
+ menu_id = obj_menu.create(cr, uid, {
+ 'name': data.menu_name,
+ 'parent_id': data.menu_parent_id.id,
'icon': 'STOCK_SELECT_COLOR',
'action': 'ir.actions.act_window, ' + str(action_id)
}, context=context)
- return {}
- #End Loop
+ obj_board.write(cr, uid, context_id, {'menu_id': menu_id})
+ return {}
report_menu_create()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_report_creator/wizard/report_open.py b/addons/base_report_creator/wizard/report_open.py
deleted file mode 100644
index 4476c9d..0000000
--- a/addons/base_report_creator/wizard/report_open.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields, osv
-
-class report_open(osv.osv_memory):
- """
- Open report
- """
- _name = "report.open"
- _description = __doc__
-
- def open_report(self, cr, uid, ids, context=None):
- """
- This Function opens base creator report view
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current userâs ID for security checks,
- @param ids: List of report open's IDs
- @param context: A standard dictionary for contextual values
- @return : Dictionary value for base creator report form
- """
-
- if not context:
- context = {}
-
- context_id = context and context.get('active_id', False) or False
-
- if context.get('report_id', False):
- raise osv.except_osv(_('UserError'), _('No Wizards available for this object!'))
-
- rep = self.pool.get('base_report_creator.report').browse(cr, uid, context_id, context)
- view_mode = rep.view_type1
-
- if rep.view_type2:
- view_mode += ',' + rep.view_type2
- if rep.view_type3:
- view_mode += ',' + rep.view_type3
- value = {
- 'name': rep.name,
- 'view_type': 'form',
- 'view_mode': view_mode,
- 'res_model': 'base_report_creator.report',
- 'context': {'report_id': context_id},
- 'view_id': False,
- 'type': 'ir.actions.act_window'
- }
-
- return value
-
-report_open()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_report_creator/wizard/report_open_view.xml b/addons/base_report_creator/wizard/report_open_view.xml
deleted file mode 100644
index 941bcf7..0000000
--- a/addons/base_report_creator/wizard/report_open_view.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
- report.open.form
- report.open
- form
-
-
-
-
-
-
- Open Report
- report.open
- form
- tree,form
-
- new
-
-
-
-