summaryrefslogtreecommitdiff
path: root/addons/base_module_record
diff options
context:
space:
mode:
authorKuldeep Joshi (OpenERP) <kjo@tinyerp.com>2012-02-02 15:57:13 +0530
committerKuldeep Joshi (OpenERP) <kjo@tinyerp.com>2012-02-02 15:57:13 +0530
commit580bd71dc7a0e1db5e9bf1a716893d637d1bbdbe (patch)
tree174a6345ce4e70dad8fde3f65889095728fa0f2d /addons/base_module_record
parentc7013988a265a966f03e555939e674e791c5559c (diff)
parent48cc23e6e1c16d5c8f37b6bfc9d406449a35587e (diff)
[FIX] base_module_record,base_module_doc_rst: change to osv.osv_memory
bzr revid: kjo@tinyerp.com-20120202102713-a0y7medo4izgrd71
Diffstat (limited to 'addons/base_module_record')
-rw-r--r--addons/base_module_record/__openerp__.py2
-rw-r--r--addons/base_module_record/base_module_record_wizard.xml39
-rw-r--r--addons/base_module_record/wizard/base_module_record_data.py282
-rw-r--r--addons/base_module_record/wizard/base_module_record_data_view.xml69
-rw-r--r--addons/base_module_record/wizard/base_module_record_object_view.xml148
-rw-r--r--addons/base_module_record/wizard/base_module_record_objects.py295
-rw-r--r--addons/base_module_record/wizard/base_module_save.py285
-rw-r--r--addons/base_module_record/wizard/base_module_save_view.xml50
8 files changed, 657 insertions, 513 deletions
diff --git a/addons/base_module_record/__openerp__.py b/addons/base_module_record/__openerp__.py
index b2a93258d5d..65b6a3f5ebd 100644
--- a/addons/base_module_record/__openerp__.py
+++ b/addons/base_module_record/__openerp__.py
@@ -47,7 +47,7 @@ Select datetime criteria of recording and objects to be recorded and Record modu
'website': 'http://www.openerp.com',
'depends': ['base'],
'init_xml': [],
- 'update_xml': ['security/ir.model.access.csv', 'base_module_record_wizard.xml'],
+ 'update_xml': ['security/ir.model.access.csv', 'wizard/base_module_record_object_view.xml', 'wizard/base_module_record_data_view.xml',],
'demo_xml': [],
'installable': True,
'certificate': '0083134865813',
diff --git a/addons/base_module_record/base_module_record_wizard.xml b/addons/base_module_record/base_module_record_wizard.xml
deleted file mode 100644
index da56814a29f..00000000000
--- a/addons/base_module_record/base_module_record_wizard.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<openerp>
- <data>
-
- <menuitem
- parent="base.menu_custom"
- name="Module Creation"
- id="menu_wizard_base_mod_rec"
- groups="base.group_extended"/>
-
- <wizard
- id="wizard_base_module_record_objects"
- string="Export Customizations As a Module"
- model="ir.module.module"
- multi="True"
- name="base_module_record.module_record_objects"/>
-
- <menuitem
- parent="menu_wizard_base_mod_rec"
- name="Export Customizations As a Module"
- type="wizard"
- action="wizard_base_module_record_objects"
- id="menu_wizard_base_module_record_objects"/>
-
- <wizard
- id="wizard_base_module_record_data"
- string="Export Customizations As Data File"
- model="ir.module.module"
- multi="True"
- name="base_module_record.module_record_data"/>
- <menuitem
- parent="menu_wizard_base_mod_rec"
- name="Export Customizations As Data File"
- type="wizard"
- action="wizard_base_module_record_data"
- id="menu_wizard_base_module_record_data"/>
-
- </data>
-</openerp>
diff --git a/addons/base_module_record/wizard/base_module_record_data.py b/addons/base_module_record/wizard/base_module_record_data.py
index d8554e0cbdb..1058effd1d2 100644
--- a/addons/base_module_record/wizard/base_module_record_data.py
+++ b/addons/base_module_record/wizard/base_module_record_data.py
@@ -20,163 +20,141 @@
#
##############################################################################
-import wizard
-import osv
-import pooler
import time
-info = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <label string="Thanks For using Module Recorder" colspan="4" align="0.0"/>
-</form>'''
+from osv import osv, fields
+import tools
+from tools.translate import _
-intro_start_form = '''<?xml version="1.0"?>
-<form string="Objects Recording">
- <field name="check_date"/>
- <newline/>
- <field name="filter_cond"/>
- <separator string="Choose objects to record" colspan="4"/>
- <field name="objects" colspan="4" nolabel="1"/>
- <group><field name="info_yaml"/></group>
-</form>'''
-
-intro_start_fields = {
- 'check_date': {'string':"Record from Date",'type':'datetime','required':True, 'default': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S')},
- 'objects':{'string': 'Objects', 'type': 'many2many', 'relation': 'ir.model', 'help': 'List of objects to be recorded'},
- 'filter_cond':{'string':'Records only', 'type':'selection','selection':[('created','Created'),('modified','Modified'),('created_modified','Created & Modified')], 'required':True, 'default': lambda *args:'created'},
- 'info_yaml': {'string':'YAML','type':'boolean'}
-}
-
-exp_form = '''<?xml version="1.0"?>
-<form string="Objects Recording">
- <separator string="Result, paste this to your module's xml" colspan="4" />
- <field name="res_text" nolabel="1" colspan="4"/>
-</form>'''
-
-exp_fields = {
- 'res_text': {'string':"Result",'type':'text', },
-}
-
-def _info_default(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.model')
- list=('ir.ui.view','ir.ui.menu','ir.model','ir.model.fields','ir.model.access',\
- 'res.partner','res.partner.address','res.partner.category','workflow',\
- 'workflow.activity','workflow.transition','ir.actions.server','ir.server.object.lines')
- data['form']['objects']=mod.search(cr,uid,[('model','in',list)])
- cr.execute('select max(create_date) from ir_model_data')
- c=(cr.fetchone())[0].split('.')[0]
- c = time.strptime(c,"%Y-%m-%d %H:%M:%S")
- sec=c.tm_sec + 1
- c=(c[0],c[1],c[2],c[3],c[4],sec,c[6],c[7],c[8])
- data['form']['check_date']=time.strftime("%Y-%m-%d %H:%M:%S",c)
- return data['form']
-
-def _record_objects(self, cr, uid, data, context):
- check_date=data['form']['check_date']
- filter=data['form']['filter_cond']
- pool = pooler.get_pool(cr.dbname)
- user=(pool.get('res.users').browse(cr,uid,uid)).login
- mod = pool.get('ir.module.record')
- mod_obj = pool.get('ir.model')
- mod.recording_data = []
-
- for id in data['form']['objects'][0][2]:
- obj_name=(mod_obj.browse(cr,uid,id)).model
- obj_pool=pool.get(obj_name)
- if filter =='created':
- search_condition =[('create_date','>',check_date)]
- elif filter =='modified':
- search_condition =[('write_date','>',check_date)]
- elif filter =='created_modified':
- search_condition =['|',('create_date','>',check_date),('write_date','>',check_date)]
- if '_log_access' in dir(obj_pool):
- if not (obj_pool._log_access):
- search_condition=[]
- if '_auto' in dir(obj_pool):
- if not obj_pool._auto:
- continue
- elif '_log_access' not in dir(obj_pool):
- search_condition = []
- search_ids=obj_pool.search(cr,uid,search_condition)
- for s_id in search_ids:
- args=(cr.dbname,uid,obj_name,'copy',s_id,{},context)
- mod.recording_data.append(('query',args, {}, s_id))
- return {'type': 'ir.actions.act_window_close'}
-
-def _check(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
- if len(mod.recording_data):
- if data['form']['info_yaml']:
- return 'save_yaml'
- else:
- return 'info'
- else:
- return 'end'
+class base_module_data(osv.osv_memory):
+ _name = 'base.module.data'
+ _description = "Base Module Data"
+
+ def default_get(self, cr, uid, fields, context=None):
+ mod = self.pool.get('ir.model')
+ res = super(base_module_data, self).default_get(cr, uid, fields, context=context)
-def _create_xml(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
- res_xml = mod.generate_xml(cr, uid)
- return { 'res_text': res_xml }
-
-def _create_yaml(self,cr,uid,data,context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
- res_xml = mod.generate_yaml(cr, uid)
- return { 'res_text': res_xml }
+ list = ('ir.ui.view', 'ir.ui.menu', 'ir.model', 'ir.model.fields', 'ir.model.access',\
+ 'res.partner', 'res.partner.address', 'res.partner.category', 'workflow',\
+ 'workflow.activity', 'workflow.transition', 'ir.actions.server', 'ir.server.object.lines')
+ if 'objects' in fields:
+ res.update({'objects': mod.search(cr, uid, [('model', 'in', list)])})
+ cr.execute('select max(create_date) from ir_model_data')
+ c = (cr.fetchone())[0].split('.')[0]
+ c = time.strptime(c, "%Y-%m-%d %H:%M:%S")
+ sec = c.tm_sec!=59 and c.tm_sec + 1
+ c = (c[0], c[1], c[2], c[3], c[4], sec, c[6], c[7], c[8])
+ if 'check_date' in fields:
+ res.update({'check_date': time.strftime("%Y-%m-%d %H:%M:%S",c)})
+ return res
-class base_module_record_objects(wizard.interface):
- states = {
- 'init': {
- 'actions': [_info_default],
- 'result': {
- 'type':'form',
- 'arch':intro_start_form,
- 'fields': intro_start_fields,
- 'state':[
- ('end', 'Cancel', 'gtk-cancel'),
- ('record', 'Record', 'gtk-ok'),
- ]
- }
- },
- 'record': {
- 'actions': [],
- 'result': {'type':'action','action':_record_objects,'state':'check'}
- },
- 'check': {
- 'actions': [],
- 'result': {'type':'choice','next_state':_check}
- },
- 'info': {
- 'actions': [ _create_xml ],
- 'result': {
- 'type':'form',
- 'arch': exp_form,
- 'fields':exp_fields,
- 'state':[
- ('end', 'End', 'gtk-cancel'),
- ]
- },
- },
- 'save_yaml': {
- 'actions': [ _create_yaml ],
- 'result': {
- 'type':'form',
- 'arch': exp_form,
- 'fields':exp_fields,
- 'state':[
- ('end', 'End', 'gtk-cancel'),
- ]
- },
- },
- 'end': {
- 'actions': [],
- 'result': {'type':'form', 'arch':info, 'fields':{}, 'state':[('end','OK')]}
- },
+ _columns = {
+ 'check_date': fields.datetime('Record from Date', required=True),
+ 'objects': fields.many2many('ir.model', 'base_module_record_object_rel', 'objects', 'model_id', 'Objects'),
+ 'filter_cond': fields.selection([('created', 'Created'), ('modified', 'Modified'), ('created_modified', 'Created & Modified')], 'Records only', required=True),
+ 'info_yaml': fields.boolean('YAML'),
}
-base_module_record_objects('base_module_record.module_record_data')
+ _defaults = {
+ 'check_date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'filter_cond': 'created',
+ }
+
+ def _create_xml(self, cr, uid, data, context=None):
+ mod = self.pool.get('ir.module.record')
+ res_xml = mod.generate_xml(cr, uid)
+ return {'res_text': res_xml }
+
+ def _create_yaml(self, cr, uid, data, context=None):
+ mod = self.pool.get('ir.module.record')
+ res_xml = mod.generate_yaml(cr, uid)
+ return { 'res_text': res_xml }
+
+ def record_objects(self, cr, uid, ids, context=None):
+ data = self.read(cr, uid, ids, [], context=context)[0]
+ check_date = data['check_date']
+ filter = data['filter_cond']
+ user = (self.pool.get('res.users').browse(cr, uid, uid)).login
+ mod = self.pool.get('ir.module.record')
+ mod_obj = self.pool.get('ir.model')
+ mod.recording_data = []
+ for id in data['objects']:
+ obj_name=(mod_obj.browse(cr, uid, id)).model
+ obj_pool=self.pool.get(obj_name)
+ if filter =='created':
+ search_condition =[('create_date','>',check_date)]
+ elif filter =='modified':
+ search_condition =[('write_date','>',check_date)]
+ elif filter =='created_modified':
+ search_condition =['|',('create_date','>',check_date),('write_date','>',check_date)]
+ if '_log_access' in dir(obj_pool):
+ if not (obj_pool._log_access):
+ search_condition=[]
+ if '_auto' in dir(obj_pool):
+ if not obj_pool._auto:
+ continue
+ search_ids=obj_pool.search(cr,uid,search_condition)
+ for s_id in search_ids:
+ args=(cr.dbname,uid,obj_name,'copy', s_id,{}, context)
+ mod.recording_data.append(('query', args, {}, s_id))
+
+ mod_obj = self.pool.get('ir.model.data')
+ if len(mod.recording_data):
+ if data['info_yaml']:
+ res=self._create_yaml(cr, uid, data, context)
+ model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'module_create_xml_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'name': _('Message'),
+ 'context': {
+ 'default_res_text': tools.ustr(res['res_text']),
+ },
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.data',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ else:
+ res=self._create_xml(cr, uid, data, context)
+ model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'module_create_xml_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'name': _('Message'),
+ 'context': {
+ 'default_res_text': tools.ustr(res['res_text']),
+ },
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.data',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'module_recording_message_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+
+ return {
+ 'name': _('Message'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+
+base_module_data()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+class base_module_record_data(osv.osv_memory):
+ _name = 'base.module.record.data'
+ _description = "Base Module Record Data"
+
+ _columns = {
+ 'res_text': fields.text('Result'),
+ }
+
+base_module_record_data()
+#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file
diff --git a/addons/base_module_record/wizard/base_module_record_data_view.xml b/addons/base_module_record/wizard/base_module_record_data_view.xml
new file mode 100644
index 00000000000..94e20d98f8b
--- /dev/null
+++ b/addons/base_module_record/wizard/base_module_record_data_view.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="base_module_record_data_view" model="ir.ui.view">
+ <field name="name">base_module_record_data</field>
+ <field name="model">base.module.data</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Data Recording">
+ <field name="check_date"/>
+ <newline/>
+ <field name="filter_cond"/>
+ <separator string="Choose objects to record" colspan="4"/>
+ <field name="objects" colspan="4" nolabel="1"/>
+ <group><field name="info_yaml"/></group>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <button icon="gtk-cancel" string="Cancel" special="cancel"/>
+ <button name="record_objects" icon="gtk-ok" string="Record" type="object"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_base_module_record_data">
+ <field name="name">Export Customizations as Data</field>
+ <field name="res_model">base.module.data</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ <field name="view_id" ref="base_module_record_data_view"/>
+ </record>
+
+
+ <menuitem
+ parent="menu_wizard_base_mod_rec"
+ name="Export Customizations As Data file"
+ action="action_base_module_record_data"
+ id="menu_wizard_base_module_record_data"/>
+
+ <act_window
+ id="act_base_module_record_data"
+ name="Export Customizations As Data File"
+ res_model="base.module.data"
+ src_model="ir.module.module"
+ view_mode="form"
+ target="new"
+ multi="True"
+ key2="client_action_multi"/>
+
+ <record id="module_create_xml_view" model="ir.ui.view">
+ <field name="name">module.create.xml.form</field>
+ <field name="model">base.module.record.data</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Data Recording">
+ <separator string="Result, paste this to your module's xml" colspan="4" />
+ <field name="res_text" nolabel="1" colspan="4"/>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <label string=""/>
+ <button icon="gtk-close" string="Close" special="cancel"/>
+ </group>
+ </form>
+ </field>
+ </record>
+ </data>
+</openerp>
diff --git a/addons/base_module_record/wizard/base_module_record_object_view.xml b/addons/base_module_record/wizard/base_module_record_object_view.xml
new file mode 100644
index 00000000000..11cec50bb50
--- /dev/null
+++ b/addons/base_module_record/wizard/base_module_record_object_view.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="base_module_record_objects_view" model="ir.ui.view">
+ <field name="name">base_module_record_objects</field>
+ <field name="model">base.module.record</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Objects Recording">
+ <field name="check_date"/>
+ <newline/>
+ <field name="filter_cond"/>
+ <separator string="Choose objects to record" colspan="4"/>
+ <field name="objects" colspan="4" nolabel="1"/>
+ <group><field name="info_yaml"/></group>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <button icon="gtk-cancel" string="Cancel" special="cancel"/>
+ <button name="record_objects" icon="gtk-ok" string="Record" type="object"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_base_module_record_objects">
+ <field name="name">Export Customizations as a Module</field>
+ <field name="res_model">base.module.record</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ <field name="view_id" ref="base_module_record_objects_view"/>
+ </record>
+
+ <menuitem
+ parent="base.menu_custom"
+ name="Module Creation"
+ id="menu_wizard_base_mod_rec"
+ groups="base.group_extended"/>
+
+ <menuitem
+ parent="menu_wizard_base_mod_rec"
+ name="Export Customizations As a Module"
+ action="action_base_module_record_objects"
+ id="menu_wizard_base_module_record_objects"/>
+
+ <act_window
+ id="act_base_module_record_objects"
+ name="Export Customizations As a Module"
+ res_model="base.module.record"
+ src_model="ir.module.module"
+ view_mode="form"
+ target="new"
+ multi="True"
+ key2="client_action_multi"/>
+
+ <record id="module_create_form_view" model="ir.ui.view">
+ <field name="name">module.create.form</field>
+ <field name="model">base.module.record.objects</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Module Recording">
+ <separator string="Module successfully created !" colspan="4"/>
+ <field name="module_filename"/>
+ <newline/>
+ <field name="module_file"/>
+ <separator string="Information" colspan="4"/>
+ <label string="If you think your module could interest other people, we'd like you to publish it on http://www.openerp.com, in the 'Modules' section. You can do it through the website or using features of the 'base_module_publish' module." colspan="4" align="0.0"/>
+ <label string="Thanks in advance for your contribution." colspan="4" align="0.0"/>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <label string=""/>
+ <button icon="gtk-close" string="Close" special="cancel"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_module_created">
+ <field name="name">Module Recording</field>
+ <field name="res_model">base.module.record.objects</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ <field name="view_id" ref="module_create_form_view"/>
+ </record>
+
+ <record id="info_start_form_view" model="ir.ui.view">
+ <field name="name">info.start.form.view</field>
+ <field name="model">base.module.record.objects</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Module Recording">
+ <separator string="Module Information" colspan="4"/>
+ <field name="name"/>
+ <field name="directory_name"/>
+ <field name="version"/>
+ <field name="author"/>
+ <field name="website" colspan="4"/>
+ <field name="category" colspan="4"/>
+ <field name="data_kind"/>
+ <newline/>
+ <field name="description" colspan="4"/>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <button icon="gtk-cancel" string="Cancel" special="cancel"/>
+ <button string="Continue" name="inter_call" type="object" icon="gtk-ok"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="module_recording_message_view" model="ir.ui.view">
+ <field name="name">module_recording_message</field>
+ <field name="model">base.module.record.objects</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Module Recording">
+ <label string="Thanks For using Module Recorder" colspan="4" align="0.0"/>
+ <separator string="" colspan="4"/>
+ <group colspan="4" col="2">
+ <label string=""/>
+ <button icon="gtk-ok" string="OK" special="cancel"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="yml_save_form_view" model="ir.ui.view">
+ <field name="name">yml.save.form</field>
+ <field name="model">base.module.record.objects</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Module Recording">
+ <separator string="YAML file successfully created !" colspan="4"/>
+ <newline/>
+ <field name="yaml_file" filename="module_filename"/>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <label string=""/>
+ <button icon="gtk-close" string="Close" special="cancel"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/base_module_record/wizard/base_module_record_objects.py b/addons/base_module_record/wizard/base_module_record_objects.py
index 065e69c171b..4411f7cd40c 100644
--- a/addons/base_module_record/wizard/base_module_record_objects.py
+++ b/addons/base_module_record/wizard/base_module_record_objects.py
@@ -19,147 +19,166 @@
#
##############################################################################
-import wizard
-import osv
-import pooler
import time
-import base_module_save
-
-info = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <label string="Thanks For using Module Recorder" colspan="4" align="0.0"/>
-</form>'''
-
-intro_start_form = '''<?xml version="1.0"?>
-<form string="Objects Recording">
- <field name="check_date"/>
- <newline/>
- <field name="filter_cond"/>
- <separator string="Choose objects to record" colspan="4"/>
- <field name="objects" colspan="4" nolabel="1"/>
- <group><field name="info_yaml"/></group>
-</form>'''
-
-intro_start_fields = {
- 'check_date': {'string':"Record from Date",'type':'datetime','required':True, 'default': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S')},
- 'objects':{'string': 'Objects', 'type': 'many2many', 'relation': 'ir.model', 'help': 'List of objects to be recorded'},
- 'filter_cond':{'string':'Records only', 'type':'selection','selection':[('created','Created'),('modified','Modified'),('created_modified','Created & Modified')], 'required':True, 'default': lambda *args:'created'},
- 'info_yaml': {'string':'YAML','type':'boolean'}
-}
-
-def _info_default(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.model')
- list=('ir.ui.view','ir.ui.menu','ir.model','ir.model.fields','ir.model.access',\
- 'res.partner','res.partner.address','res.partner.category','workflow',\
- 'workflow.activity','workflow.transition','ir.actions.server','ir.server.object.lines')
- data['form']['objects']=mod.search(cr,uid,[('model','in',list)])
- cr.execute('select max(create_date) from ir_model_data')
- c=(cr.fetchone())[0].split('.')[0]
- c = time.strptime(c,"%Y-%m-%d %H:%M:%S")
- sec=c.tm_sec!=59 and c.tm_sec + 1
- c=(c[0],c[1],c[2],c[3],c[4],sec,c[6],c[7],c[8])
- data['form']['check_date']=time.strftime("%Y-%m-%d %H:%M:%S",c)
- return data['form']
-
-def _record_objects(self, cr, uid, data, context):
- check_date=data['form']['check_date']
- filter=data['form']['filter_cond']
- pool = pooler.get_pool(cr.dbname)
- user=(pool.get('res.users').browse(cr,uid,uid)).login
- mod = pool.get('ir.module.record')
- mod_obj = pool.get('ir.model')
- mod.recording_data = []
- for id in data['form']['objects'][0][2]:
- obj_name=(mod_obj.browse(cr,uid,id)).model
- obj_pool=pool.get(obj_name)
- if filter =='created':
- search_condition =[('create_date','>',check_date)]
- elif filter =='modified':
- search_condition =[('write_date','>',check_date)]
- elif filter =='created_modified':
- search_condition =['|',('create_date','>',check_date),('write_date','>',check_date)]
- if '_log_access' in dir(obj_pool):
- if not (obj_pool._log_access):
- search_condition=[]
- if '_auto' in dir(obj_pool):
- if not obj_pool._auto:
- continue
- search_ids=obj_pool.search(cr,uid,search_condition)
- for s_id in search_ids:
- args=(cr.dbname,uid,obj_name,'copy',s_id,{},context)
- mod.recording_data.append(('query',args, {}, s_id))
- return {}
-
-def inter_call(self,cr,uid,data,context):
- res=base_module_save._create_module(self,cr, uid, data, context)
- return res
+import base_module_save
+from osv import osv, fields
+import tools
+from tools.translate import _
-def _create_yaml(self,cr,uid,data,context):
- res=base_module_save._create_yaml(self,cr, uid, data, context)
- return res
+class base_module_record(osv.osv_memory):
+ _name = 'base.module.record'
+ _description = "Base Module Record"
+
+ def default_get(self, cr, uid, fields, context=None):
+ mod = self.pool.get('ir.model')
+ res = super(base_module_record, self).default_get(cr, uid, fields, context=context)
+
+ list=('ir.ui.view', 'ir.ui.menu', 'ir.model', 'ir.model.fields', 'ir.model.access', \
+ 'res.partner', 'res.partner.address', 'res.partner.category', 'workflow', \
+ 'workflow.activity', 'workflow.transition', 'ir.actions.server', 'ir.server.object.lines')
+ if 'objects' in fields:
+ res.update({'objects': mod.search(cr, uid, [('model', 'in', list)])})
+ cr.execute('select max(create_date) from ir_model_data')
+ c=(cr.fetchone())[0].split('.')[0]
+ c = time.strptime(c, "%Y-%m-%d %H:%M:%S")
+ sec=c.tm_sec!=59 and c.tm_sec + 1
+ c=(c[0],c[1],c[2],c[3],c[4],sec,c[6],c[7],c[8])
+ if 'check_date' in fields:
+ res.update({'check_date': time.strftime("%Y-%m-%d %H:%M:%S", c)})
+ return res
-class base_module_record_objects(wizard.interface):
- states = {
- 'init': {
- 'actions': [_info_default],
- 'result': {
- 'type':'form',
- 'arch':intro_start_form,
- 'fields': intro_start_fields,
- 'state':[
- ('end', 'Cancel', 'gtk-cancel'),
- ('record', 'Record', 'gtk-ok'),
- ]
- }
- },
- 'record': {
- 'actions': [],
- 'result': {'type':'action','action':_record_objects,'state':'check'}
- },
- 'check': {
- 'actions': [],
- 'result': {'type':'choice','next_state':base_module_save._check}
- },
- 'info': {
- 'actions': [],
- 'result': {
- 'type':'form',
- 'arch':base_module_save.intro_start_form,
- 'fields':base_module_save.intro_start_fields,
- 'state':[
- ('end', 'Cancel', 'gtk-cancel'),
- ('save', 'Continue', 'gtk-ok'),
- ]
- },
- },
- 'save': {
- 'actions': [inter_call],
- 'result': {
- 'type':'form',
- 'arch':base_module_save.intro_save_form,
- 'fields': base_module_save.intro_save_fields,
- 'state':[('end', 'Close', 'gtk-ok'),]
- },
- },
- 'save_yaml': {
- 'actions': [_create_yaml],
- 'result': {
- 'type':'form',
- 'arch':base_module_save.yaml_save_form,
- 'fields': base_module_save.yaml_save_fields,
- 'state':[
- ('end', 'Close', 'gtk-ok'),
- ]
- }
- },
- 'end': {
- 'actions': [],
- 'result': {'type':'form', 'arch':info, 'fields':{}, 'state':[('end','OK')]}
- },
+ _columns = {
+ 'check_date': fields.datetime('Record from Date', required=True),
+ 'objects': fields.many2many('ir.model', 'base_module_record_object_rel', 'objects', 'model_id', 'Objects'),
+ 'filter_cond': fields.selection([('created', 'Created'), ('modified', 'Modified'), ('created_modified', 'Created & Modified')], 'Records only', required=True),
+ 'info_yaml': fields.boolean('YAML'),
}
-base_module_record_objects('base_module_record.module_record_objects')
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+ _defaults = {
+ 'check_date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'filter_cond': 'created',
+ }
+
+ def record_objects(self, cr, uid, ids, context=None):
+ data = self.read(cr, uid, ids, [], context=context)[0]
+ check_date=data['check_date']
+ filter=data['filter_cond']
+ user=(self.pool.get('res.users').browse(cr,uid,uid)).login
+ mod = self.pool.get('ir.module.record')
+ mod_obj = self.pool.get('ir.model')
+ mod.recording_data = []
+ for id in data['objects']:
+ obj_name=(mod_obj.browse(cr,uid,id)).model
+ obj_pool=self.pool.get(obj_name)
+ if filter =='created':
+ search_condition =[('create_date', '>', check_date)]
+ elif filter =='modified':
+ search_condition =[('write_date', '>', check_date)]
+ elif filter =='created_modified':
+ search_condition =['|',('create_date', '>', check_date), ('write_date', '>', check_date)]
+ if '_log_access' in dir(obj_pool):
+ if not (obj_pool._log_access):
+ search_condition=[]
+ if '_auto' in dir(obj_pool):
+ if not obj_pool._auto:
+ continue
+ search_ids = obj_pool.search(cr,uid,search_condition)
+ for s_id in search_ids:
+ args=(cr.dbname, uid,obj_name, 'copy', s_id,{},context)
+ mod.recording_data.append(('query', args, {}, s_id))
+
+ mod_obj = self.pool.get('ir.model.data')
+ if len(mod.recording_data):
+ if data['info_yaml']:
+ mod = self.pool.get('ir.module.record')
+ res=base_module_save._create_yaml(self, cr, uid, data, context)
+ model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'yml_save_form_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'name': _('Message'),
+ 'context': {
+ 'default_yaml_file': tools.ustr(res['yaml_file']),
+ },
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ else:
+ model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'info_start_form_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'name': _('Message'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'module_recording_message_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+
+ return {
+ 'name': _('Message'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+base_module_record()
+class base_module_record_objects(osv.osv_memory):
+ _name = 'base.module.record.objects'
+ _description = "Base Module Record Objects"
+
+ def inter_call(self,cr,uid,data,context=None):
+ res=base_module_save._create_module(self, cr, uid, data, context)
+ mod_obj = self.pool.get('ir.model.data')
+ model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'module_create_form_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ context.update(res)
+
+ return {
+ 'name': _('Message'),
+ 'context': {
+ 'default_module_filename': tools.ustr(res['module_filename']),
+ 'default_module_file': tools.ustr(res['module_file']),
+ },
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+
+ _columns = {
+ 'name': fields.char('Module Name', size=64, required=True),
+ 'directory_name': fields.char('Directory Name', size=32, required=True),
+ 'version': fields.char('Version', size=16, required=True),
+ 'author': fields.char('Author', size=64, required=True),
+ 'category': fields.char('Category', size=64, required=True),
+ 'website': fields.char('Documentation URL', size=64, required=True),
+ 'description': fields.text('Full Description', required=True),
+ 'data_kind': fields.selection([('demo', 'Demo Data'), ('update', 'Normal Data')], 'Type of Data', required=True),
+ 'module_file': fields.binary('Module .zip File', filename="module_filename"),
+ 'module_filename': fields.char('Filename', size=64),
+ 'yaml_file': fields.binary('Module .zip File'),
+ }
+ _defaults = {
+ 'author': 'OpenERP SA',
+ 'category': 'Vertical Modules/Parametrization',
+ 'website': 'http://www.openerp.com',
+ 'data_kind': 'update'
+ }
+
+base_module_record_objects()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file
diff --git a/addons/base_module_record/wizard/base_module_save.py b/addons/base_module_record/wizard/base_module_save.py
index b6c094c0a5c..1d54e212a28 100644
--- a/addons/base_module_record/wizard/base_module_save.py
+++ b/addons/base_module_record/wizard/base_module_save.py
@@ -19,133 +19,39 @@
#
##############################################################################
-import wizard
-import osv
-import pooler
-from tools.translate import _
-
-info = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <label string="Thanks For using Module Recorder" colspan="4" align="0.0"/>
-</form>'''
-
-info_start_form = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <separator string="Recording Information" colspan="4"/>
- <field name="info_status"/>
- <field name="info_text" colspan="4" nolabel="1"/>
- <field name="info_yaml" colspan="4"/>
-</form>'''
-
-info_start_fields = {
- 'info_text': {'string':'Information', 'type':'text', 'readonly':True},
- 'info_status': {'string':'Status','type':'selection', 'selection':[('no','Not Recording'),('record','Recording')], 'readonly':True},
- 'info_yaml': {'string':'YAML','type':'boolean'}
-}
-
-
-
-intro_start_form = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <separator string="Module Information" colspan="4"/>
- <field name="name"/>
- <field name="directory_name"/>
- <field name="version"/>
- <field name="author"/>
- <field name="website" colspan="4"/>
- <field name="category" colspan="4"/>
- <field name="data_kind"/>
- <newline/>
- <field name="description" colspan="4"/>
-</form>'''
-
-intro_start_fields = {
- 'name': {'string':'Module Name', 'type':'char', 'size':64, 'required':True},
- 'directory_name': {'string':'Directory Name', 'type':'char', 'size':32, 'required':True},
- 'version': {'string':'Version', 'type':'char', 'size':16, 'required':True},
- 'author': {'string':'Author', 'type':'char', 'size':64, 'default': lambda *args: 'OpenERP SA', 'required':True},
- 'category': {'string':'Category', 'type':'char', 'size':64, 'default': lambda *args: 'Vertical Modules/Parametrization', 'required':True},
- 'website': {'string':'Documentation URL', 'type':'char', 'size':64, 'default': lambda *args: 'http://www.openerp.com', 'required':True},
- 'description': {'string':'Full Description', 'type':'text', 'required':True},
- 'data_kind': {'string':'Type of Data', 'type':'selection', 'selection':[('demo','Demo Data'),('update','Normal Data')], 'required':True, 'default': lambda *args:'update'},
-}
-
-intro_save_form = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <separator string="Module successfully created !" colspan="4"/>
- <field name="module_filename"/>
- <newline/>
- <field name="module_file" filename="module_filename"/>
- <separator string="Information" colspan="4"/>
- <label string="If you think your module could interest other people, we'd like you to publish it on http://www.openerp.com, in the 'Modules' section. You can do it through the website or using features of the 'base_module_publish' module." colspan="4" align="0.0"/>
- <label string="Thanks in advance for your contribution." colspan="4" align="0.0"/>
-</form>'''
-
-intro_save_fields = {
- 'module_file': {'string': 'Module .zip File', 'type':'binary', 'readonly':True},
- 'module_filename': {'string': 'Filename', 'type':'char', 'size': 64, 'readonly':True},
-}
-
-yaml_save_form = '''<?xml version="1.0"?>
-<form string="Module Recording">
- <separator string="YAML file successfully created !" colspan="4"/>
- <newline/>
- <field name="yaml_file" filename="module_filename"/>
-</form>'''
-
-yaml_save_fields = {
- 'yaml_file': {'string': 'Module .zip File', 'type':'binary'},
-}
-
import zipfile
import StringIO
import base64
-def _info_default(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
- result = {}
- info = "Details of "+str(len(mod.recording_data))+" Operation(s):\n\n"
+import tools
+from tools.translate import _
+from osv import osv, fields
- for line in mod.recording_data:
- result.setdefault(line[0],{})
- result[line[0]].setdefault(line[1][3], {})
- result[line[0]][line[1][3]].setdefault(line[1][3], 0)
- result[line[0]][line[1][3]][line[1][3]]+=1
- for key1,val1 in result.items():
- info+=key1+"\n"
- for key2,val2 in val1.items():
- info+="\t"+key2+"\n"
- for key3,val3 in val2.items():
- info+="\t\t"+key3+" : "+str(val3)+"\n"
- return {'info_text': info, 'info_status':mod.recording and 'record' or 'no'}
-def _create_yaml(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
+def _create_yaml(self, cr, uid, data, context=None):
+ mod = self.pool.get('ir.module.record')
try:
res_xml = mod.generate_yaml(cr, uid)
except Exception, e:
- raise wizard.except_wizard(_('Error'),_(str(e)))
+ raise osv.except_osv(_('Error'),_(str(e)))
return {
'yaml_file': base64.encodestring(res_xml),
}
-def _create_module(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
+def _create_module(self, cr, uid, ids, context=None):
+ mod = self.pool.get('ir.module.record')
res_xml = mod.generate_xml(cr, uid)
-
- s=StringIO.StringIO()
+ data = self.read(cr, uid, ids, [], context=context)[0]
+ s = StringIO.StringIO()
zip = zipfile.ZipFile(s, 'w')
- dname = data['form']['directory_name']
- data['form']['update_name'] = ''
- data['form']['demo_name'] = ''
- if data['form']['data_kind'] =='demo':
- data['form']['demo_name'] = '"%(directory_name)s_data.xml"' % data['form']
+ dname = data['directory_name']
+ data['update_name'] = ''
+ data['demo_name'] = ''
+ if ['data_kind'] =='demo':
+ data['demo_name'] = '"%(directory_name)s_data.xml"' % data
else:
- data['form']['update_name'] = '"%(directory_name)s_data.xml"' % data['form']
- data['form']['depends'] = ','.join(map(lambda x: '"'+x+'"',mod.depends.keys()))
+ data['update_name'] = '"%(directory_name)s_data.xml"' % data
+ data['depends'] = ','.join(map(lambda x: '"'+x+'"', mod.depends.keys()))
_terp = """{
"name" : "%(name)s",
"version" : "%(version)s",
@@ -158,7 +64,7 @@ def _create_module(self, cr, uid, data, context):
"demo_xml" : [ %(demo_name)s],
"update_xml" : [%(update_name)s],
"installable": True
-} """ % data['form']
+} """ % data
filewrite = {
'__init__.py':'#\n# Generated by the OpenERP module recorder !\n#\n',
'__openerp__.py':_terp,
@@ -174,78 +80,91 @@ def _create_module(self, cr, uid, data, context):
zip.close()
return {
'module_file': base64.encodestring(s.getvalue()),
- 'module_filename': data['form']['directory_name']+'-'+data['form']['version']+'.zip'
+ 'module_filename': data['directory_name']+'-'+data['version']+'.zip'
}
-def _check(self, cr, uid, data, context):
- pool = pooler.get_pool(cr.dbname)
- mod = pool.get('ir.module.record')
- if len(mod.recording_data):
- if data['form']['info_yaml']:
- return 'save_yaml'
- else:
- return 'info'
- else:
- return 'end'
-class base_module_publish(wizard.interface):
- states = {
- 'init': {
- 'actions': [_info_default],
- 'result': {
- 'type':'form',
- 'arch':info_start_form,
- 'fields': info_start_fields,
- 'state':[
- ('end', 'Cancel', 'gtk-cancel'),
- ('check', 'Continue', 'gtk-ok'),
- ]
- }
- },
- 'check': {
- 'actions': [],
- 'result': {'type':'choice','next_state':_check}
- },
- 'info': {
- 'actions': [],
- 'result': {
- 'type':'form',
- 'arch':intro_start_form,
- 'fields': intro_start_fields,
- 'state':[
- ('end', 'Cancel', 'gtk-cancel'),
- ('save', 'Continue', 'gtk-ok'),
- ]
- }
- },
- 'save': {
- 'actions': [_create_module],
- 'result': {
- 'type':'form',
- 'arch':intro_save_form,
- 'fields': intro_save_fields,
- 'state':[
- ('end', 'Close', 'gtk-ok'),
- ]
- }
- },
- 'save_yaml': {
- 'actions': [_create_yaml],
- 'result': {
- 'type':'form',
- 'arch':yaml_save_form,
- 'fields': yaml_save_fields,
- 'state':[
- ('end', 'Close', 'gtk-ok'),
- ]
- }
- },
-
- 'end': {
- 'actions': [],
- 'result': {'type':'form', 'arch':info, 'fields':{}, 'state':[('end','OK')]}
- },
+class base_module_save(osv.osv_memory):
+ _name = 'base.module.save'
+ _description = "Base Module Save"
+
+ def default_get(self, cr, uid, fields, context=None):
+ mod = self.pool.get('ir.module.record')
+ result = {}
+ info = "Details of "+str(len(mod.recording_data))+" Operation(s):\n\n"
+ res = super(base_module_save, self).default_get(cr, uid, fields, context=context)
+ for line in mod.recording_data:
+ result.setdefault(line[0],{})
+ result[line[0]].setdefault(line[1][3], {})
+ result[line[0]][line[1][3]].setdefault(line[1][3], 0)
+ result[line[0]][line[1][3]][line[1][3]]+=1
+ for key1,val1 in result.items():
+ info+=key1+"\n"
+ for key2,val2 in val1.items():
+ info+="\t"+key2+"\n"
+ for key3,val3 in val2.items():
+ info+="\t\t"+key3+" : "+str(val3)+"\n"
+ if 'info_text' in fields:
+ res.update({'info_text': info})
+ if 'info_status' in fields:
+ info_status = mod.recording and 'record' or 'no'
+ res.update({'info_status': info_status})
+ return res
+
+ _columns = {
+ 'info_text': fields.text('Information', readonly=True),
+ 'info_status': fields.selection([('no', 'Not Recording'),('record', 'Recording')], 'Status', readonly=True),
+ 'info_yaml': fields.boolean('YAML'),
}
-base_module_publish('base_module_record.module_save')
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+ def record_save(self, cr, uid, ids, context=None):
+ data = self.read(cr, uid, ids, [], context=context)[0]
+ mod = self.pool.get('ir.module.record')
+ mod_obj = self.pool.get('ir.model.data')
+ if len(mod.recording_data):
+ if data['info_yaml']:
+ mod = self.pool.get('ir.module.record')
+ res=_create_yaml(self, cr, uid, data, context)
+ model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'yml_save_form_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'name': _('Message'),
+ 'context': {
+ 'default_yaml_file': tools.ustr(res['yaml_file']),
+ },
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ else:
+ model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'info_start_form_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'name': _('Message'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'module_recording_message_view')], context=context)
+ resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+
+ return {
+ 'name': _('Message'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'base.module.record.objects',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+
+base_module_save()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file
diff --git a/addons/base_module_record/wizard/base_module_save_view.xml b/addons/base_module_record/wizard/base_module_save_view.xml
new file mode 100644
index 00000000000..86b64220543
--- /dev/null
+++ b/addons/base_module_record/wizard/base_module_save_view.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="base_module_save_view" model="ir.ui.view">
+ <field name="name">base_module_save</field>
+ <field name="model">base.module.save</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Module Recording">
+ <separator string="Recording Information" colspan="4"/>
+ <field name="info_status"/>
+ <field name="info_text" colspan="4" nolabel="1"/>
+ <field name="info_yaml" colspan="4"/>
+ <separator colspan="4"/>
+ <group colspan="4" col="2">
+ <button icon="gtk-cancel" string="Cancel" special="cancel"/>
+ <button name="record_save" icon="gtk-ok" string="Continue" type="object"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_base_module_save">
+ <field name="name">Publish as module</field>
+ <field name="res_model">base.module.save</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ <field name="view_id" ref="base_module_save_view"/>
+ </record>
+
+ <menuitem
+ parent="menu_wizard_base_mod_rec"
+ name="Publish as Module"
+ action="action_base_module_save"
+ id="menu_wizard_base_module_save"/>
+
+ <act_window
+ id="act_base_module_save"
+ name="Publish as Module"
+ res_model="base.module.save"
+ src_model="ir.module.module"
+ view_mode="form"
+ target="new"
+ multi="True"
+ key2="client_action_multi"/>
+
+ </data>
+</openerp>