From 43690eb21f88759f76f591247f43cf6aa548e611 Mon Sep 17 00:00:00 2001 From: "aag (OpenERP)" Date: Tue, 1 Mar 2011 12:52:41 +0530 Subject: [PATCH 01/18] [IMP] REWORK-SERVERSIDE :Improvement Config wiz , ON SERVER SIDE bzr revid: aag@tinyerp.co.in-20110301072241-a8s1iialq6xeot23 --- openerp/addons/base/ir/ir.xml | 2 +- openerp/addons/base/ir/ir_actions.py | 4 +-- .../wizard/base_module_configuration_view.xml | 2 +- .../addons/base/res/partner/partner_view.xml | 4 ++- openerp/addons/base/res/res_config.py | 31 +------------------ 5 files changed, 8 insertions(+), 35 deletions(-) diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index a7e9922331b..d1917a4a52f 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -1908,7 +1908,7 @@ search - + diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index 7a07ca40ef8..1d73ad70171 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -794,14 +794,14 @@ class ir_actions_todo(osv.osv): 'sequence': fields.integer('Sequence'), 'state': fields.selection(TODO_STATES, string='State', required=True), 'name':fields.char('Name', size=64), - 'restart': fields.selection([('onskip','On Skip'),('always','Always'),('never','Never')],'Restart',required=True), + 'restart': fields.selection([('on_trigger','On Trigger'),('always','Always'),('never','Never')],'Restart',required=True), 'groups_id':fields.many2many('res.groups', 'res_groups_action_rel', 'uid', 'gid', 'Groups'), 'note':fields.text('Text', translate=True), } _defaults={ 'state': 'open', 'sequence': 10, - 'restart': 'onskip', + 'restart': 'on_trigger', } _order="sequence,name,id" diff --git a/openerp/addons/base/module/wizard/base_module_configuration_view.xml b/openerp/addons/base/module/wizard/base_module_configuration_view.xml index f8abf1e2732..be86145a156 100644 --- a/openerp/addons/base/module/wizard/base_module_configuration_view.xml +++ b/openerp/addons/base/module/wizard/base_module_configuration_view.xml @@ -24,7 +24,7 @@ action = obj.start() - diff --git a/openerp/addons/base/res/partner/partner_view.xml b/openerp/addons/base/res/partner/partner_view.xml index 9d46404132c..e32e73deedb 100644 --- a/openerp/addons/base/res/partner/partner_view.xml +++ b/openerp/addons/base/res/partner/partner_view.xml @@ -3,7 +3,9 @@ + web_icon_hover="data/sales-hover.png" + groups="base.group_sale_salesman,base.group_sale_salesman"/> + diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 3f8c6f20b8d..2f0b5c44509 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -120,7 +120,7 @@ class res_config_configurable(osv.osv_memory): def start(self, cr, uid, ids, context=None): ids2 = self.pool.get('ir.actions.todo').search(cr, uid, [], context=context) for todo in self.pool.get('ir.actions.todo').browse(cr, uid, ids2, context=context): - if (todo.restart=='always') or (todo.restart=='onskip' and (todo.state in ('skip','cancel'))): + if (todo.restart=='always') or (todo.restart=='on_trigger' and (todo.state in ('skip','cancel'))): todo.write({'state':'open'}) return self.next(cr, uid, ids, context) @@ -355,35 +355,6 @@ class res_config_installer(osv.osv_memory): return (base | hooks_results | additionals) - set( map(attrgetter('name'), self._already_installed(cr, uid, context))) - def default_get(self, cr, uid, fields_list, context=None): - ''' If an addon is already installed, check it by default - ''' - defaults = super(res_config_installer, self).default_get( - cr, uid, fields_list, context=context) - - return dict(defaults, - **dict.fromkeys( - map(attrgetter('name'), - self._already_installed(cr, uid, context=context)), - True)) - - def fields_get(self, cr, uid, fields=None, context=None, write_access=True): - """ If an addon is already installed, set it to readonly as - res.config.installer doesn't handle uninstallations of already - installed addons - """ - fields = super(res_config_installer, self).fields_get( - cr, uid, fields, context, write_access) - - for module in self._already_installed(cr, uid, context=context): - if module.name not in fields: - continue - fields[module.name].update( - readonly=True, - help= ustr(fields[module.name].get('help', '')) + - _('\n\nThis addon is already installed on your system')) - return fields - def execute(self, cr, uid, ids, context=None): modules = self.pool.get('ir.module.module') to_install = list(self.modules_to_install( From 73378da514dd636ddafcd6ca4d552ae9db637efe Mon Sep 17 00:00:00 2001 From: sus Date: Tue, 1 Mar 2011 13:10:35 +0530 Subject: [PATCH 02/18] [IMP] : Improvement in server(module.py file) bzr revid: sus@sus-desktop-20110301074035-7fx0v3gv8889slbb --- openerp/addons/__init__.py | 2 +- openerp/addons/base/module/module.py | 58 ++++++++++++++----- openerp/addons/base/module/module_view.xml | 2 +- .../base/module/wizard/base_module_upgrade.py | 31 ---------- .../wizard/base_module_upgrade_view.xml | 16 ++--- openerp/addons/base/res/res_user.py | 1 - 6 files changed, 50 insertions(+), 60 deletions(-) diff --git a/openerp/addons/__init__.py b/openerp/addons/__init__.py index af080724136..ee6cd5eba49 100644 --- a/openerp/addons/__init__.py +++ b/openerp/addons/__init__.py @@ -843,7 +843,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False): if 'base' in tools.config['update'] or 'all' in tools.config['update']: cr.execute("update ir_module_module set state=%s where name=%s and state=%s", ('to upgrade', 'base', 'installed')) - # STEP 1: LOAD BASE (must be done before module dependencies can be computed for later steps) + # STEP 1: LOAD BASE (must be done before module dependencies can be computed for later steps) graph = create_graph(cr, ['base'], force) if not graph: logger.notifyChannel('init', netsvc.LOG_CRITICAL, 'module base cannot be loaded! (hint: verify addons-path)') diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index 2e276433e63..fd701ba353e 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -200,6 +200,7 @@ class module(osv.osv): def _name_uniq_msg(self, cr, uid, ids, context=None): return _('The name of the module must be unique !') + def _certificate_uniq_msg(self, cr, uid, ids, context=None): return _('The certificate ID of the module must be unique !') @@ -285,8 +286,41 @@ class module(osv.osv): demo = demo or mdemo return demo + def upgrade(self, cr, uid, ids, context=None): + mod_obj = self.pool.get('ir.module.module') + ids = mod_obj.search(cr, uid, [('state', 'in', ['to upgrade', 'to remove', 'to install'])]) + unmet_packages = [] + mod_dep_obj = self.pool.get('ir.module.module.dependency') + for mod in mod_obj.browse(cr, uid, ids, context=context): + depends_mod_ids = mod_dep_obj.search(cr, uid, [('module_id', '=', mod.id)], context=context) + for dep_mod in mod_dep_obj.browse(cr, uid, depends_mod_ids): + if dep_mod.state in ('unknown','uninstalled'): + unmet_packages.append(dep_mod.name) + if len(unmet_packages): + raise osv.except_osv(_('Unmet dependency !'), _('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages))) + mod_obj.download(cr, uid, ids, context=context) + cr.commit() + _db, pool = pooler.restart_pool(cr.dbname, update_module=True) + return True + def button_install(self, cr, uid, ids, context=None): - return self.state_update(cr, uid, ids, 'to install', ['uninstalled'], context) + self.state_update(cr, uid, ids, 'to install', ['uninstalled'], context) + self.upgrade(cr, uid, ids, context=context) + data_obj = self.pool.get('ir.model.data') + id2 = data_obj._get_id(cr, uid, 'base', 'view_base_module_upgrade_install') + if id2: + id2 = data_obj.browse(cr, uid, id2, context=context).res_id + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'base.module.upgrade', + 'views': [(id2, 'form')], + 'view_id': False, + 'type': 'ir.actions.act_window', + 'target': 'new', + 'nodestroy':True, + } + def button_install_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state': 'uninstalled', 'demo':False}) @@ -305,49 +339,41 @@ class module(osv.osv): res = cr.fetchall() if res: raise orm.except_orm(_('Error'), _('Some installed modules depend on the module you plan to Uninstall :\n %s') % '\n'.join(map(lambda x: '\t%s: %s' % (x[0], x[1]), res))) + self.write(cr, uid, ids, {'state': 'to remove'}) + self.upgrade(cr, uid, ids, context=context) return True def button_uninstall_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state': 'installed'}) return True + def button_upgrade(self, cr, uid, ids, context=None): depobj = self.pool.get('ir.module.module.dependency') todo = self.browse(cr, uid, ids, context=context) self.update_list(cr, uid) - i = 0 while i -