[IMP] account: installer get list of charts from apps
authorChristophe Simonis <chs@openerp.com>
Thu, 24 Jan 2013 19:00:39 +0000 (20:00 +0100)
committerChristophe Simonis <chs@openerp.com>
Thu, 24 Jan 2013 19:00:39 +0000 (20:00 +0100)
bzr revid: chs@openerp.com-20130124190039-qhcyrnrgpue0rak5

addons/account/installer.py

index d02e719..aba8897 100644 (file)
@@ -23,10 +23,16 @@ import datetime
 from dateutil.relativedelta import relativedelta
 import logging
 from operator import itemgetter
-from os.path import join as opj
 import time
+import urllib2
+import urlparse
 
-from openerp import netsvc, tools
+try:
+    import simplejson as json
+except ImportError:
+    import json     # noqa
+
+from openerp.release import serie
 from openerp.tools.translate import _
 from openerp.osv import fields, osv
 
@@ -38,13 +44,28 @@ class account_installer(osv.osv_memory):
 
     def _get_charts(self, cr, uid, context=None):
         modules = self.pool.get('ir.module.module')
+
+        # try get the list on apps server
+        try:
+            apps_server = self.pool.get('ir.config_parameter').get_value(cr, uid, 'apps.server', 'https://apps.openerp.com')
+
+            up = urlparse.urlparse(apps_server)
+            url = '{0.scheme}://{0.netloc}/apps/charts?serie={1}'.format(up, serie)
+
+            j = urllib2.urlopen(url, timeout=3).read()
+            apps_charts = json.loads(j)
+
+            charts = dict(apps_charts)
+        except Exception:
+            charts = dict()
+
         # Looking for the module with the 'Account Charts' category
         category_name, category_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'module_category_localization_account_charts')
         ids = modules.search(cr, uid, [('category_id', '=', category_id)], context=context)
-        charts = list(
-            sorted(((m.name, m.shortdesc)
-                    for m in modules.browse(cr, uid, ids, context=context)),
-                   key=itemgetter(1)))
+        if ids:
+            charts.update((m.name, m.shortdesc) for m in modules.browse(cr, uid, ids, context=context))
+
+        charts = sorted(charts.items(), key=itemgetter(1))
         charts.insert(0, ('configurable', _('Custom')))
         return charts