summaryrefslogtreecommitdiff
path: root/addons/google_spreadsheet
diff options
context:
space:
mode:
authorDenis Ledoux <dle@openerp.com>2013-07-22 16:30:34 +0200
committerDenis Ledoux <dle@openerp.com>2013-07-22 16:30:34 +0200
commit5a1b08bfbd9cc10e1a066dc39b1eeeaa47c3edec (patch)
tree9719f5121c449985a7c0fa2553c060ded5c77b38 /addons/google_spreadsheet
parentc8404ec9340c49fc59578dbaea9ddacb6b7a932e (diff)
[FIX]google_spreadsheet: write formula once spreadsheet opened
bzr revid: dle@openerp.com-20130722143034-4tf8mr71ocf049ma
Diffstat (limited to 'addons/google_spreadsheet')
-rw-r--r--addons/google_spreadsheet/google_spreadsheet.py62
-rw-r--r--addons/google_spreadsheet/static/src/js/search.js4
2 files changed, 64 insertions, 2 deletions
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(&quot;%s&quot;;&quot;%s&quot;;&quot;%s&quot;;&quot;%s&quot;)' % (model, fields, groupbys, domain)
+ else:
+ formula = '=oe_browse(&quot;%s&quot;;&quot;%s&quot;;&quot;%s&quot;)' % (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(&quot;%s&quot;;&quot;%s&quot;;&quot;%s&quot;;&quot;%s&quot;)' % (url, dbname, username, password)
+ request = '''<feed xmlns="http://www.w3.org/2005/Atom"
+ xmlns:batch="http://schemas.google.com/gdata/batch"
+ xmlns:gs="http://schemas.google.com/spreadsheets/2006">
+ <id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full</id>
+ <entry>
+ <batch:id>A1</batch:id>
+ <batch:operation type="update"/>
+ <id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1</id>
+ <link rel="edit" type="application/atom+xml"
+ href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1"/>
+ <gs:cell row="1" col="1" inputValue="%s"/>
+ </entry>
+ <entry>
+ <batch:id>A2</batch:id>
+ <batch:operation type="update"/>
+ <id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15</id>
+ <link rel="edit" type="application/atom+xml"
+ href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15"/>
+ <gs:cell row="60" col="15" inputValue="%s"/>
+ </entry>
+</feed>''' % (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:
diff --git a/addons/google_spreadsheet/static/src/js/search.js b/addons/google_spreadsheet/static/src/js/search.js
index beac52c4d6f..0812c12638e 100644
--- a/addons/google_spreadsheet/static/src/js/search.js
+++ b/addons/google_spreadsheet/static/src/js/search.js
@@ -34,9 +34,11 @@ 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, domain, groupbys, view_id]).done(function (url) {
+ 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]);
}
});
});