From aa28839fb1818db22ce58606cc2a831ee39546ef Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 27 Jun 2013 19:11:37 +0200 Subject: [ADD]google_spreadsheet bzr revid: dle@openerp.com-20130627171137-5r1gyciz92c8abbr --- addons/google_spreadsheet/google_spreadsheet.py | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 addons/google_spreadsheet/google_spreadsheet.py (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py new file mode 100644 index 00000000000..08a8fa8d2cd --- /dev/null +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -0,0 +1,34 @@ +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2012 OpenERP SA (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import osv + + +class config(osv.osv): + _inherit = 'google.drive.config' + + 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) + return res -- cgit v1.2.3 From 5a1b08bfbd9cc10e1a066dc39b1eeeaa47c3edec Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 22 Jul 2013 16:30:34 +0200 Subject: [FIX]google_spreadsheet: write formula once spreadsheet opened bzr revid: dle@openerp.com-20130722143034-4tf8mr71ocf049ma --- addons/google_spreadsheet/google_spreadsheet.py | 62 ++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index 08a8fa8d2cd..4f0471eae19 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -18,13 +18,73 @@ # ############################################################################## +import simplejson +from lxml import etree +import requests + from openerp.osv import osv +class base_config_settings(osv.osv): + _inherit = "base.config.settings" + + def _get_google_scope(self): + return 'https://www.googleapis.com/auth/drive https://spreadsheets.google.com/feeds' + + class config(osv.osv): _inherit = 'google.drive.config' - def set_spreadsheet(self, cr, uid, model, domain, groupbys, view_id, context=None): + def write_config_formula(self, cr, uid, 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') + doc = etree.XML(fields.get('arch')) + display_fields = [] + for node in doc.xpath("//field"): + if node.get('modifiers'): + modifiers = simplejson.loads(node.get('modifiers')) + if not modifiers.get('invisible') and not modifiers.get('tree_invisible'): + display_fields.append(node.get('name')) + fields = " ".join(display_fields) + domain = domain.replace("'", r"\'").replace('"', "'") + if groupbys: + fields = "%s %s" % (groupbys, fields) + formula = '=oe_read_group("%s";"%s";"%s";"%s")' % (model, fields, groupbys, domain) + else: + 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) + request = ''' + https://spreadsheets.google.com/feeds/cells/%s/od6/private/full + + A1 + + https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1 + + + + + A2 + + https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15 + + + +''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula, spreadsheet_key, spreadsheet_key, config_formula) + + 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': '*'}) + return True + + def set_spreadsheet(self, cr, uid, model, context=None): try: config_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'google_spreadsheet', 'google_spreadsheet_template')[1] except ValueError: -- cgit v1.2.3 From 8fe619095bb4f4b5ddd1a379e1194bcb95a8bb5c Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 22 Jul 2013 18:45:08 +0200 Subject: [ADD]google_spreadsheet: view (ir.attachement) in reporting, formula used in description of attachement bzr revid: dle@openerp.com-20130722164508-1849vgrr6j0j6yhk --- addons/google_spreadsheet/google_spreadsheet.py | 28 ++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') 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 -- cgit v1.2.3 From 9ae6b18ded02771591c83e74807c1e4447a8d14f Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Tue, 23 Jul 2013 15:04:53 +0200 Subject: [FIX]google_spreadsheet: add active field on google drive template and handle when auth_crypt is installed bzr revid: dle@openerp.com-20130723130453-0vns37b89v622kh0 --- addons/google_spreadsheet/google_spreadsheet.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index 17de4a37e1b..28e4ca8f880 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -24,6 +24,7 @@ import re import requests from openerp.osv import osv +from openerp import SUPERUSER_ID class base_config_settings(osv.osv): @@ -59,7 +60,10 @@ class config(osv.osv): 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) + if self.pool['ir.module.module'].search_count(cr, SUPERUSER_ID, ['&', ('name', '=', 'auth_crypt'), ('state', '=', 'installed')]) == 1: + config_formula = '=oe_settings("%s";"%s")' % (url, dbname) + else: + config_formula = '=oe_settings("%s";"%s";"%s";"%s")' % (url, dbname, username, password) request = ''' -- cgit v1.2.3 From 605a84efc7615455ac5eaa25b0c5dc763962a9f3 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Tue, 23 Jul 2013 16:10:09 +0200 Subject: [FIX]google_spreadsheet: attach spreadsheet to its template bzr revid: dle@openerp.com-20130723141009-1b301rk5txiihstl --- addons/google_spreadsheet/google_spreadsheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index 28e4ca8f880..bfc5d822817 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -102,7 +102,7 @@ class config(osv.osv): raise config = self.browse(cr, uid, config_id, context=context) title = 'Spreadsheet %s' % model - res = self.copy_doc(cr, uid, 1, config.google_drive_resource_id, title, model, context=context) + res = self.copy_doc(cr, uid, config.id, config.google_drive_resource_id, title, 'google.drive.config', context=context) mo = re.search("(key=|/d/)([A-Za-z0-9-_]+)", res['url']) if mo: -- cgit v1.2.3 From 54de4095ae4a3a0adeb437ed787b7cff34063399 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 24 Jul 2013 15:05:34 +0200 Subject: [FIX]google_drive, google_spreadsheet: go to configuration panel only for group settings, spreadsheet attached to model without res_id bzr revid: dle@openerp.com-20130724130534-axyvc0u0g1um07fg --- addons/google_spreadsheet/google_spreadsheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index bfc5d822817..62961ee9989 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -102,7 +102,7 @@ class config(osv.osv): raise config = self.browse(cr, uid, config_id, context=context) title = 'Spreadsheet %s' % model - res = self.copy_doc(cr, uid, config.id, config.google_drive_resource_id, title, 'google.drive.config', context=context) + res = self.copy_doc(cr, uid, False, config.google_drive_resource_id, title, model, context=context) mo = re.search("(key=|/d/)([A-Za-z0-9-_]+)", res['url']) if mo: -- cgit v1.2.3 From f3e189698d7401e3d4602e028fa2bb5c93f22919 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 24 Jul 2013 17:37:54 +0200 Subject: [FIX]google_drive, google_spreadsheet: move of get_google_scope in google objects instead of config bzr revid: dle@openerp.com-20130724153754-thj2l0b1t4lw136j --- addons/google_spreadsheet/google_spreadsheet.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index 62961ee9989..2333adf6751 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -27,16 +27,13 @@ from openerp.osv import osv from openerp import SUPERUSER_ID -class base_config_settings(osv.osv): - _inherit = "base.config.settings" - - def _get_google_scope(self): - return 'https://www.googleapis.com/auth/drive https://spreadsheets.google.com/feeds' - - class config(osv.osv): _inherit = 'google.drive.config' + def get_google_scope(self): + scope = super(config, self).get_google_scope() + return '%s https://spreadsheets.google.com/feeds' % scope + 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) -- cgit v1.2.3 From 329bd7d5f34d412da958a2258e0479f4796adf2f Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Fri, 2 Aug 2013 15:03:49 +0200 Subject: [FIX]google_spreadsheet: not using requests anymore bzr revid: dle@openerp.com-20130802130349-206ms4c5s5dnzbti --- addons/google_spreadsheet/google_spreadsheet.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'addons/google_spreadsheet/google_spreadsheet.py') diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index 2333adf6751..693300904d0 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -19,13 +19,16 @@ ############################################################################## import simplejson +import logging from lxml import etree import re -import requests +import urllib +import urllib2 from openerp.osv import osv from openerp import SUPERUSER_ID +_logger = logging.getLogger(__name__) class config(osv.osv): _inherit = 'google.drive.config' @@ -83,7 +86,14 @@ class config(osv.osv): ''' % (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': '*'}) + try: + req = urllib2.Request( + 'https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/batch?%s' % (spreadsheet_key, urllib.urlencode({'v': 3, 'access_token': access_token})), + data=request, + headers={'content-type': 'application/atom+xml', 'If-Match': '*'}) + urllib2.urlopen(req) + except (urllib2.HTTPError, urllib2.URLError): + _logger.warning("An error occured while writting the formula on the Google Spreadsheet.") description = ''' formula: %s -- cgit v1.2.3