prototype of configuration wizard

bzr revid: hmo@tinyerp.com-d9d10212c9d6bbb5902436d3bb6fc85005825691
This commit is contained in:
Harshad Modi 2008-06-20 11:49:23 +00:00
parent 584a0f0d33
commit 24c3169bd7
6 changed files with 287 additions and 19 deletions

View File

@ -168,5 +168,60 @@
</field>
</record>
<record model="ir.ui.view" id="view_users_configuration_form">
<field name="name">res.users.form</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Configure User">
<separator string="Configure User"/>
<newline/>
<notebook>
<page string="User">
<field name="name" select="1"/>
<field name="active" select="1"/>
<field name="login" select="1"/>
<field name="password"/>
<field name="address_id"/>
<field name="company_id" required="1"/>
<field name="action_id" required="True"/>
<field name="menu_id" domain="[('usage','=','menu')]" required="True"/>
<field name="signature" colspan="4"/>
<group colspan="4" col="4">
<button special="cancel" string="Cancel" />
<button name="action_create" type='object' string="Create" />
</group>
</page>
<page string="Security">
<field name="groups_id" colspan="4"/>
<field name="roles_id" colspan="4"/>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_config_user_form">
<field name="name">Configure User</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.users</field>
<field name="view_type">form</field>
<field name="target">new</field>
</record>
<!-- register on configuratuion -->
<record model="ir.module.module.configuration.step"
id="config_wizard_step_user">
<field name="name">Configure User</field>
<field name="action_id" ref="action_config_user_form"></field>
<field name="state">open</field>
</record>
</data>
</terp>

View File

@ -37,6 +37,11 @@ import zipfile
import release
import zipimport
import wizard
ver_regexp = re.compile("^(\\d+)((\\.\\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\\d*)*)(-r(\\d+))?$")
suffix_regexp = re.compile("^(alpha|beta|rc|pre|p)(\\d*)$")
@ -169,7 +174,7 @@ module_repository()
class module_category(osv.osv):
_name = "ir.module.category"
_description = "Module Category"
def _module_nbr(self,cr,uid, ids, prop, unknow_none,context):
cr.execute('select category_id,count(*) from ir_module_module where category_id in ('+','.join(map(str,ids))+') or category_id in (select id from ir_module_category where parent_id in ('+','.join(map(str,ids))+')) group by category_id')
result = dict(cr.fetchall())
@ -178,7 +183,7 @@ class module_category(osv.osv):
childs = [c for c, in cr.fetchall()]
result[id] = reduce(lambda x,y:x+y, [result.get(c, 0) for c in childs], result.get(id, 0))
return result
_columns = {
'name': fields.char("Name", size=128, required=True),
'parent_id': fields.many2one('ir.module.category', 'Parent Category', select=True),
@ -240,7 +245,7 @@ class module(osv.osv):
('Other proprietary', 'Other proprietary')], string='License',
readonly=True),
}
_defaults = {
'state': lambda *a: 'uninstalled',
'demo': lambda *a: False,
@ -307,8 +312,8 @@ class module(osv.osv):
for module in self.browse(cr, uid, ids):
cr.execute('''select m.state,m.name
from
ir_module_module_dependency d
join
ir_module_module_dependency d
join
ir_module_module m on (d.module_id=m.id)
where
d.name=%s and
@ -331,7 +336,7 @@ class module(osv.osv):
cr.execute('select code from res_lang where translatable=TRUE')
langs = [l[0] for l in cr.fetchall()]
modules = self.read(cr, uid, ids, ['name'])
for module in modules:
for module in modules:
files = self.get_module_info(module['name']).get('translations', {})
for lang in langs:
if files.has_key(lang):
@ -563,3 +568,78 @@ class module_dependency(osv.osv):
}
module_dependency()
class module_config_wizard_step(osv.osv):
_name = 'ir.module.module.configuration.step'
_columns={
'name':fields.char('Name', size=64, required=True, select=True),
'action_id':fields.many2one('ir.actions.act_window', 'Action', select=True,required=True, ondelete='cascade'),
'sequence':fields.integer('Sequence'),
'state':fields.selection([('open', 'Open'),('done', 'Done'),('skip','Skip')], string='State', required=True)
}
_defaults={
'state': lambda *a: 'open',
'sequence': lambda *a: 10,
}
_order="sequence"
module_config_wizard_step()
class module_configuration(osv.osv_memory):
_name='ir.module.module.configuration.wizard'
def _get_wizard(self, cr, uid, context={}):
item_obj = self.pool.get('ir.module.module.configuration.step')
item_ids = item_obj.search(cr, uid, [
('state', '=', 'open'),
], limit=1, context=context)
if item_ids:
item = item_obj.browse(cr, uid, item_ids[0], context=context)
return item.id
return False
_columns = {
'name': fields.char('Next Wizard', size=64,readonly=True),
'item_id':fields.many2one('ir.module.module.configuration.step', 'Next Configuration Wizard', readonly=True,required=True),
}
_defaults={
'item_id':_get_wizard
}
def button_skip(self,cr,uid,ids,context=None):
item_obj = self.pool.get('ir.module.module.configuration.step')
item_id=self.read(cr,uid,ids)[0]['item_id']
if item_id:
item = item_obj.browse(cr, uid, item_id, context=context)
item_obj.write(cr, uid, item.id, {
'state': 'skip',
}, context=context)
return{
'view_type': 'form',
'res_model': 'ir.module.module.configuration.wizard',
'type': 'ir.actions.act_window',
'target':'new',
}
return {}
def button_continue(self, cr, uid, ids, context=None):
item_obj = self.pool.get('ir.module.module.configuration.step')
item_id=self.read(cr,uid,ids)[0]['item_id']
if item_id:
item = item_obj.browse(cr, uid, item_id, context=context)
item_obj.write(cr, uid, item.id, {
'state': 'done',
}, context=context)
return{
'view_type': item.action_id.view_type,
'view_id':item.action_id.view_id and [item.action_id.view_id.id] or False,
'res_model': item.action_id.res_model,
'type': item.action_id.type,
'target':item.action_id.target,
}
return {}
module_configuration()

View File

@ -200,5 +200,83 @@
id="menu_module_repository_tree"
/>
<record model="ir.ui.view" id="config_wizard_step_view_tree">
<field name="model">ir.module.module.configuration.step</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Config Wizard Steps" editable="bottom">
<field name="name" select="1"/>
<field name="action_id" select="1"/>
<field name="sequence"/>
<field name="state"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="act_config_wizard_step_form">
<field name="name">Config Wizard Steps</field>
<field name="res_model">ir.module.module.configuration.step</field>
<field name="view_id" ref="config_wizard_step_view_tree"/>
<field name="view_type">form</field>
</record>
<menuitem name="Administration/Modules Management/Config wizard Step"
action="act_config_wizard_step_form"
id="menu_config_wizard_step_form"/>
<record model="ir.ui.view" id="view_config_wizard_form">
<field name="name">Main Configuration wizard</field>
<field name="model">ir.module.module.configuration.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Main Configuration wizard">
<separator string="Main Configuration wizard"/>
<newline/>
<field name="item_id" select="1"/>
<group colspan="4" col="4">
<button special="cancel" string="Cancel" />
<button name="button_skip" type='object' string="Skip" />
<button name="button_continue" type='object' string="Continue"/>
</group>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_config_wizard_form">
<field name="name">Main Configuration Window</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.module.module.configuration.wizard</field>
<field name="view_type">form</field>
<field name="target">new</field>
</record>
<menuitem
name="Administration/Modules Management/Module Configuration"
action="action_config_wizard_form" id="menu_config_module"/>
<!--<record model="ir.module.module.configuration.step"
id="config_wizard_item_module">
<field name="name">ir.module.module.config</field>
<field name="action_id" ref=""/>
<field name="sequence" eval="10000"/>
<field name="state">open</field>
</record>-->
</data>
</terp>

View File

@ -55,7 +55,7 @@ view_form = """<?xml version="1.0"?>
class wizard_lang_install(wizard.interface):
def _lang_install(self, cr, uid, data, context):
lang = data['form']['lang']
if lang and lang != 'en_EN':
if lang and lang != 'en_US':
filename = tools.config["root_path"] + "/i18n/" + lang + ".csv"
tools.trans_load(cr.dbname, filename, lang)
return {}
@ -70,7 +70,7 @@ class wizard_lang_install(wizard.interface):
states = {
'init': {
'actions': [],
'actions': [],
'result': {'type': 'form', 'arch': view_form, 'fields': fields_form,
'state': [
('end', 'Cancel', 'gtk-cancel'),

View File

@ -30,6 +30,7 @@
import wizard
import pooler
from wizard import wizard_osv
view_form_end = """<?xml version="1.0"?>
<form string="System upgrade done">
@ -59,6 +60,11 @@ view_field = {
'readonly': True},
}
class module_install_upgrade_start(wizard_osv):
_name = 'ir.module.module.install_upgrade.start'
module_install_upgrade_start()
class wizard_info_get(wizard.interface):
def _get_install(self, cr, uid, data, context):
pool=pooler.get_pool(cr.dbname)
@ -81,9 +87,16 @@ class wizard_info_get(wizard.interface):
db, pool = pooler.restart_pool(cr.dbname, update_module=True)
return {}
def _config(self, cr, uid, data, context=None):
return {
'view_type': 'form',
'res_model': 'ir.module.module.configuration.wizard',
'type': 'ir.actions.act_window',
}
states = {
'init': {
'actions': [_get_install],
'actions': [_get_install],
'result': {'type':'form', 'arch':view_form, 'fields': view_field,
'state':[
('end', 'Cancel', 'gtk-cancel'),
@ -92,13 +105,47 @@ class wizard_info_get(wizard.interface):
}
},
'start': {
'actions': [_upgrade_module],
'result': {'type':'form', 'arch':view_form_end, 'fields': {},
'state':[
('end', 'Close', 'gtk-close', True)
]
}
},
}
'actions': [_upgrade_module],
'result': {
'type': 'form',
'object': 'ir.module.module.install_upgrade.start',
'state': [
('config', 'Ok', 'tryton-ok', True),
],
},
},
'config': {
'result': {
'type': 'action',
'action': _config,
'state': 'end',
},
},
}
wizard_info_get('module.upgrade')
class module_config(wizard.interface):
def _action_open(self, cr, uid, datas, context=None):
pool=pooler.get_pool(cr.dbname)
model_data_obj = pool.get('ir.model.data')
act_window_obj = pool.get('ir.actions.act_window')
model_data_ids = model_data_obj.search(cr, uid, [
('name', '=', 'open_module_tree'),
('module', '=', 'base'),
], limit=1, context=context)
model_data = model_data_obj.browse(cr, uid, model_data_ids[0],
context=context)
res = act_window_obj.read(cr, uid, model_data.res_id, context=context)
return res
states = {
'init': {
'result': {
'type': 'action',
'action': _action_open,
'state': 'end',
},
},
}
module_config('ir.module.module.config')

View File

@ -150,7 +150,7 @@ class users(osv.osv):
if 1 in ids:
raise osv.except_osv('Can not remove root user !', 'You can not remove the root user as it is used internally for resources created by Tiny ERP (updates, module installation, ...)')
return super(users, self).unlink(cr, uid, ids)
def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=80):
if not args:
args=[]
@ -162,7 +162,7 @@ class users(osv.osv):
if not ids:
ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
return self.name_get(cr, user, ids)
def copy(self, cr, uid, id, default=None, context={}):
login = self.read(cr, uid, [id], ['login'])[0]['login']
default.update({'login': login+' (copy)'})
@ -180,6 +180,14 @@ class users(osv.osv):
dataobj = self.pool.get('ir.model.data')
data_id = dataobj._get_id(cr, 1, 'base', 'action_res_users_my')
return dataobj.browse(cr, uid, data_id, context).res_id
def action_create(self,cr,uid,ids,context={}):
return {
'view_type': 'form',
'res_model': 'ir.module.module.configuration.wizard',
'type': 'ir.actions.act_window',
'target':'new',
}
users()
class groups2(osv.osv):