diff --git a/trytond/ir/module/module.py b/trytond/ir/module/module.py
index 809559e6ee..a202f8a934 100644
--- a/trytond/ir/module/module.py
+++ b/trytond/ir/module/module.py
@@ -8,6 +8,7 @@ import trytond.tools as tools
from trytond.module import ADDONS_PATH
from trytond.osv.orm import ExceptORM
from trytond.wizard import Wizard, WizardOSV
+from trytond.pooler import get_db, restart_pool
VER_REGEXP = re.compile(
"^(\\d+)((\\.\\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\\d*)*)(-r(\\d+))?$")
@@ -620,3 +621,80 @@ class ModuleUpdateList(Wizard):
}
ModuleUpdateList()
+
+
+class ModuleInstallUpgradeInit(WizardOSV):
+ _name = 'ir.module.module.install_upgrade.init'
+ _columns = {
+ 'module_info': fields.Text('Modules to update', readonly=True),
+ 'module_download': fields.Text('Modules to download', readonly=True),
+ }
+
+ModuleInstallUpgradeInit()
+
+
+class ModuleInstallUpgradeStart(WizardOSV):
+ _name = 'ir.module.module.install_upgrade.start'
+ _columns = {
+ }
+
+ModuleInstallUpgradeStart()
+
+
+class ModuleInstallUpgrade(Wizard):
+ "Install / Upgrade modules"
+ _name = 'ir.module.module.install_upgrade'
+
+ def _get_install(self, cursor, user, data, context):
+ module_obj = self.pool.get('ir.module.module')
+ module_ids = module_obj.search(cursor, user, [
+ ('state', 'in', ['to upgrade', 'to remove', 'to install']),
+ ], context=context)
+ modules = module_obj.browse(cursor, user, module_ids, context=context)
+ url = module_obj.download(cursor, user, module_ids, download=False,
+ context=context)
+ return {
+ 'module_info': '\n'.join([x.name + ': ' + x.state \
+ for x in modules]),
+ 'module_download': '\n'.join(url),
+ }
+
+ def _upgrade_module(self, cursor, user, data, context):
+ module_obj = self.pool.get('ir.module.module')
+ dbname = cursor.dbname
+ db = get_db(dbname)
+ cursor = db.cursor()
+ module_ids = module_obj.search(cursor, user, [
+ ('state', 'in', ['to upgrade', 'to remove', 'to install']),
+ ], context=context)
+ module_obj.download(cursor, user, module_ids, context=context)
+ cursor.commit()
+ cursor.close()
+ restart_pool(dbname, update_module=True)
+ return {}
+
+ states = {
+ 'init': {
+ 'actions': [_get_install],
+ 'result': {
+ 'type': 'form',
+ 'object': 'ir.module.module.install_upgrade.init',
+ 'state': [
+ ('end', 'Cancel', 'gtk-cancel'),
+ ('start', 'Start Upgrade', 'gtk-ok', True),
+ ],
+ },
+ },
+ 'start': {
+ 'actions': [_upgrade_module],
+ 'result': {
+ 'type': 'form',
+ 'object': 'ir.module.module.install_upgrade.start',
+ 'state': [
+ ('end', 'Close', 'gtk-close', True),
+ ],
+ },
+ },
+ }
+
+ModuleInstallUpgrade()
diff --git a/trytond/ir/module/module.xml b/trytond/ir/module/module.xml
index cf2ddd7a24..55369ee0ec 100644
--- a/trytond/ir/module/module.xml
+++ b/trytond/ir/module/module.xml
@@ -103,7 +103,7 @@
Update Module List
ir.module.module.update_list
-
+
ir.module.module.update_list.init.form
ir.module.module.update_list.init
form
@@ -117,7 +117,7 @@
]]>
-
+
ir.module.module.update_list.update.form
ir.module.module.update_list.update
form
@@ -134,5 +134,58 @@
action="act_module_update_list"
type="wizard"
id="menu_module_update_list"/>
+
+ Install / Upgrade Modules
+ ir.module.module.install_upgrade
+
+
+ ir.module.module.install_upgrade.init.form
+ ir.module.module.install_upgrade.init
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+ ]]>
+
+
+
+ ir.module.module.install_upgrade.start.form
+ ir.module.module.install_upgrade.start
+ form
+
+
+
+
+
+
+
+ ]]>
+
+
+