[IMP] base_report_creator
authorMod2 (OpenERP) <>
Thu, 8 Jul 2010 06:26:09 +0000 (11:56 +0530)
committerHarry (OpenERP) <hmo@tinyerp.com>
Thu, 8 Jul 2010 06:26:09 +0000 (11:56 +0530)
bzr revid: hmo@tinyerp.com-20100708062609-o4g2rsn46w3jfj0x

addons/base_report_creator/__openerp__.py
addons/base_report_creator/base_report_creator.py
addons/base_report_creator/base_report_creator_demo.xml
addons/base_report_creator/base_report_creator_view.xml
addons/base_report_creator/base_report_creator_wizard.xml
addons/base_report_creator/wizard/__init__.py
addons/base_report_creator/wizard/base_report_creator_open.py [deleted file]
addons/base_report_creator/wizard/report_menu_create.py
addons/base_report_creator/wizard/report_open.py [deleted file]
addons/base_report_creator/wizard/report_open_view.xml [deleted file]

index 22d7adf..8e1ba70 100644 (file)
@@ -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'
     ],
index 764753f..3ba79ba 100644 (file)
@@ -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 = '<?xml version="1.0" encoding="utf-8"?>\n'
+        arch = '<?xml version="1.0"?>'
         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 name="%s" select="1"/>' % ('field' + str(i),)
+                    arch += '<field name="%s"/>' % ('field' + str(i),)
                     i += 1
                 else:
-                    arch += '<field name="%s" select="1"/>' % ('column_count',)
+                    arch += '<field name="%s"/>' % ('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:
index da44979..3ec5cfb 100644 (file)
@@ -10,7 +10,6 @@
                        <field eval="&quot;tree&quot;" name="view_type1"/>
                        <field eval="&quot;list&quot;" name="type"/>
                        <field eval="&quot;horz&quot;" name="view_graph_orientation"/>
-                       <field eval="&quot;valid&quot;" name="state"/>
                </record>
                <record id="base_report_creator_report_fields_0" model="base_report_creator.report.fields">
                        <field name="report_id" ref="base_report_creator_report_salesanalysis0"/>
index 021bcbb..d211617 100644 (file)
@@ -23,7 +23,6 @@
             <tree string="Report Creator">
                 <field name="name"/>
                 <field name="type"/>
-                <field name="state"/>
             </tree>
         </field>
     </record>
                 <notebook colspan="4">
                 <page string="General Configuration">
                     <field name="model_ids" colspan="4"
-                        context="{'model_ids':model_ids}" />
-                    <separator string="State"  colspan="4"/>
-                    <field name="state"/>
-                    <button string="Create Menu"
-                        name="%(action_report_menu_create)d" type="action"
-                        colspan="2" icon="gtk-justify-fill" />
+                        context="{'model_ids':model_ids}" nolabel="1" />
+                    <separator string=""  colspan="4"/>
+                    <group colspan="4" col="4">
+                        <group colspan="2">
+                            <field name="menu_id"/>
+                        </group>
+                        <group colspan="2">
+                            <button string="Create Menu"
+                                name="%(action_report_menu_create)d" type="action"
+                                icon="gtk-justify-fill" attrs="{'invisible':[('menu_id','!=',False)]}"/>
+                            <button string="Open Report"
+                                name="open_report" type="object"
+                                icon="gtk-open" />
+                        </group>
+                    </group>
                 </page><page string="View parameters">
                     <separator string="Used View" colspan="4"/>
                     <field name="view_type1"/>
         </field>
     </record>
 
+    <record id="view_report_filter" model="ir.ui.view">
+        <field name="name">Report Name</field>
+        <field name="model">base_report_creator.report</field>
+        <field name="type">search</field>
+        <field name="arch" type="xml">
+        <search string="Report">
+            <field name="name"></field>
+            <newline/>
+            <group expand="0" string="Group By...">
+                <filter string="Report Name" icon="terp-personal" domain="[]"
+                            context="{'group_by':'name'}" />
+            </group>
+        </search>
+        </field>
+    </record>
+
  <!-- Action for Report creator form -->
 
     <record model="ir.actions.act_window" id="base_report_creator_action">
         <field name="res_model">base_report_creator.report</field>
         <field name="view_type">form</field>
         <field name="view_mode">tree,form</field>
+        <field name="search_view_id" ref="view_report_filter"/>
     </record>
 
     <menuitem
         id="menu_base_report_creator_action"
         action="base_report_creator_action_tree"/>
 
-    <act_window id="action_report_open"
-            key2="client_action_multi" name="Open Report"
-            res_model="report.open" src_model="base_report_creator.report"
-            view_mode="form" target="new" view_type="form" />
-
-
     </data>
 </openerp>
index a8dad6f..68ab122 100644 (file)
@@ -3,6 +3,5 @@
        <data>
                <wizard id="wizard_set_filter_fields" string="Set Filter Fields"
                        name="base_report_creator.report_filter.fields" />
-
        </data>
 </openerp>
index d2ff1dc..5616c82 100644 (file)
@@ -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 (file)
index be7420c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#    
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-#    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 <http://www.gnu.org/licenses/>.     
-#
-##############################################################################
-
-
-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:
-
index 06e48b2..84b952f 100644 (file)
@@ -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 (file)
index 4476c9d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#    
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-#    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 <http://www.gnu.org/licenses/>.     
-#
-##############################################################################
-
-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 (file)
index 941bcf7..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
-    <data>
-    
-    <!-- Report Open wizard -->
-    
-               <record id="view_report_open" model="ir.ui.view">
-            <field name="name">report.open.form</field>
-            <field name="model">report.open</field>
-            <field name="type">form</field>
-            <field name="arch" type="xml">
-                <form string="Report open">
-                       <separator string="" colspan="4" />
-                    <group colspan="4" col="6">
-                       <button icon="gtk-cancel" special="cancel"
-                               string="Cancel" />
-                       <button icon="gtk-open" string="Open Report"
-                               name="open_report" type="object" />
-                    </group>
-                </form>
-            </field>
-               </record>
-               
-        <record id="action_report_open" model="ir.actions.act_window">
-            <field name="name">Open Report</field>
-            <field name="res_model">report.open</field>
-            <field name="view_type">form</field>
-            <field name="view_mode">tree,form</field>
-            <field name="view_id" ref="view_report_open"/> 
-            <field name="target">new</field>
-        </record>
-        
-    </data>
-</openerp>