diff --git a/addons/google_drive/google_drive.py b/addons/google_drive/google_drive.py index e7622595afd..fa697372901 100644 --- a/addons/google_drive/google_drive.py +++ b/addons/google_drive/google_drive.py @@ -54,7 +54,7 @@ class config(osv.osv): attachment = attach_pool.browse(cr, uid, attach_ids[0], context) url = attachment.url else: - url = self.copy_doc(cr, uid, res_id, template_id, name_gdocs, model.model, context) + url = self.copy_doc(cr, uid, res_id, template_id, name_gdocs, model.model, context).get('url') return url def get_access_token(self, cr, uid, scope=None, context=None): @@ -105,12 +105,12 @@ class config(osv.osv): req = urllib2.Request(request_url, data_json, headers) content = urllib2.urlopen(req).read() content = json.loads(content) - res = False - if 'alternateLink' in content.keys(): + res = {} + if content.get('alternateLink'): attach_pool = self.pool.get("ir.attachment") attach_vals = {'res_model': res_model, 'name': name_gdocs, 'res_id': res_id, 'type': 'url', 'url': content['alternateLink']} - attach_pool.create(cr, uid, attach_vals) - res = content['alternateLink'] + res['id'] = attach_pool.create(cr, uid, attach_vals) + res['url'] = content['alternateLink'] return res def get_google_drive_config(self, cr, uid, res_model, res_id, context=None): diff --git a/addons/google_spreadsheet/__openerp__.py b/addons/google_spreadsheet/__openerp__.py index 10a9a28de76..1ae2d48d349 100644 --- a/addons/google_spreadsheet/__openerp__.py +++ b/addons/google_spreadsheet/__openerp__.py @@ -35,7 +35,7 @@ The module adds the possibility to display data from OpenERP in Google Spreadshe 'static/src/js/search.js', ], 'qweb': ['static/src/xml/*.xml'], - 'data': ['google_spreadsheet_data.xml'], + 'data': ['google_spreadsheet_view.xml', 'google_spreadsheet_data.xml'], 'demo': [], 'installable': True, 'auto_install': False, diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index 4f0471eae19..17de4a37e1b 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -20,6 +20,7 @@ import simplejson from lxml import etree +import re import requests from openerp.osv import osv @@ -35,7 +36,7 @@ class base_config_settings(osv.osv): class config(osv.osv): _inherit = 'google.drive.config' - def write_config_formula(self, cr, uid, spreadsheet_key, model, domain, groupbys, view_id, context=None): + def write_config_formula(self, cr, uid, attachment_id, spreadsheet_key, model, domain, groupbys, view_id, context=None): access_token = self.get_access_token(cr, uid, scope='https://spreadsheets.google.com/feeds', context=context) fields = self.pool.get(model).fields_view_get(cr, uid, view_id=view_id, view_type='tree') @@ -50,15 +51,15 @@ class config(osv.osv): domain = domain.replace("'", r"\'").replace('"', "'") if groupbys: fields = "%s %s" % (groupbys, fields) - formula = '=oe_read_group("%s";"%s";"%s";"%s")' % (model, fields, groupbys, domain) + formula = '=oe_read_group("%s";"%s";"%s";"%s")' % (model, fields, groupbys, domain) else: - formula = '=oe_browse("%s";"%s";"%s")' % (model, fields, domain) + formula = '=oe_browse("%s";"%s";"%s")' % (model, fields, domain) url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') dbname = cr.dbname user = self.pool['res.users'].read(cr, uid, uid, ['login', 'password'], context=context) username = user['login'] password = user['password'] - config_formula = '=oe_settings("%s";"%s";"%s";"%s")' % (url, dbname, username, password) + config_formula = '=oe_settings("%s";"%s";"%s";"%s")' % (url, dbname, username, password) request = ''' @@ -79,16 +80,29 @@ class config(osv.osv): href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15"/> -''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula, spreadsheet_key, spreadsheet_key, config_formula) +''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula.replace('"', '"'), spreadsheet_key, spreadsheet_key, config_formula.replace('"', '"')) requests.post('https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/batch?v=3&access_token=%s' % (spreadsheet_key, access_token), data=request, headers={'content-type': 'application/atom+xml', 'If-Match': '*'}) + + description = ''' + formula: %s + ''' % formula + if attachment_id: + self.pool['ir.attachment'].write(cr, uid, attachment_id, {'description': description}, context=context) return True - def set_spreadsheet(self, cr, uid, model, context=None): + def set_spreadsheet(self, cr, uid, model, domain, groupbys, view_id, context=None): try: config_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'google_spreadsheet', 'google_spreadsheet_template')[1] except ValueError: raise config = self.browse(cr, uid, config_id, context=context) - res = self.copy_doc(cr, uid, 1, config.google_drive_resource_id, 'Spreadsheet %s' % model, model, context=context) + title = 'Spreadsheet %s' % model + res = self.copy_doc(cr, uid, 1, config.google_drive_resource_id, title, model, context=context) + + mo = re.search("(key=|/d/)([A-Za-z0-9-_]+)", res['url']) + if mo: + key = mo.group(2) + + self.write_config_formula(cr, uid, res.get('id'), key, model, domain, groupbys, view_id, context=context) return res diff --git a/addons/google_spreadsheet/static/src/js/search.js b/addons/google_spreadsheet/static/src/js/search.js index 0812c12638e..c46ec615792 100644 --- a/addons/google_spreadsheet/static/src/js/search.js +++ b/addons/google_spreadsheet/static/src/js/search.js @@ -34,11 +34,9 @@ openerp.google_spreadsheet = function(instance) { var groupbys = instance.web.pyeval.eval('groupbys', data.groupbys).join(" "); var view_id = view_id; var ds = new instance.web.DataSet(self, 'google.drive.config'); - ds.call('set_spreadsheet', [model]).done(function (url) { - if (url){ - window.open(url, '_blank'); - var key = url.match("(key=|/d/)([A-Za-z0-9-_]+)")[2] - ds.call('write_config_formula', [key, model, domain, groupbys, view_id]); + ds.call('set_spreadsheet', [model, domain, groupbys, view_id]).done(function (res) { + if (res['url']){ + window.open(res['url'], '_blank'); } }); });