diff options
| author | Roberto López López (OpenERP) <rlo@openerp.com> | 2012-02-24 11:52:15 +0100 |
|---|---|---|
| committer | Roberto López López (OpenERP) <rlo@openerp.com> | 2012-02-24 11:52:15 +0100 |
| commit | fefd25861a820d489feeb85f665c79d88b017c24 (patch) | |
| tree | cecda15d0848e08c4be1c2bef03cf8443f8f1279 /addons/google_docs | |
| parent | 7675f273fd9e4e11ea8518fc1d9e68c447b83614 (diff) | |
[IMP] new module google_docs
bzr revid: rlo@openerp.com-20120224105215-clev3ip7n8zhb3kt
Diffstat (limited to 'addons/google_docs')
| -rw-r--r-- | addons/google_docs/__init__.py | 1 | ||||
| -rw-r--r-- | addons/google_docs/__openerp__.py | 6 | ||||
| -rw-r--r-- | addons/google_docs/google_docs.py | 119 |
3 files changed, 126 insertions, 0 deletions
diff --git a/addons/google_docs/__init__.py b/addons/google_docs/__init__.py new file mode 100644 index 00000000000..dd6285502c0 --- /dev/null +++ b/addons/google_docs/__init__.py @@ -0,0 +1 @@ +import google_docs diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py new file mode 100644 index 00000000000..991a3e07e2c --- /dev/null +++ b/addons/google_docs/__openerp__.py @@ -0,0 +1,6 @@ +{ + 'name': 'Wiki', + 'version': '0.1', + 'depends': ['google_base_account'], + 'description': 'Module to attach a google document to any model.' +} diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py new file mode 100644 index 00000000000..a2693ac95a7 --- /dev/null +++ b/addons/google_docs/google_docs.py @@ -0,0 +1,119 @@ +from osv import osv, fields +import gdata.docs.data +import gdata.docs.client +from gdata.client import RequestError + +class google_docs(osv.osv): + _name = 'google.docs' + + _table = 'google_docs_templates' + _columns = { + 'id': fields.integer('ID', readonly=True), + 'model': fields.many2one('ir.model', 'Model'), + 'gdocs_res_id': fields.char('Google resource ID', size=64, translate=False) + } + + edit_url_template = 'https://docs.google.com/Edit?docid=%s' + prefix_gdoc_id_res = 'document:' + + def copy_gdoc(self, cr, uid, model, context=None): + '''Associate a copy of the gdoc identified by 'gdocs_res_id' to the current entity. + @param cr: the current row from the database cursor. + @param uid: the current user ID, for security checks. + @param model: the current model name. + @param context: a standard dictionary for contextual values. + @return the url of the copy itself. + @return -1 if the template hasn't been assigned yet. + @return -2 if the google_base_account hasn't been configured yet.''' + + if context==None: + context={} + + # check template for the current model + model_obj = self.pool.get(model) + res_gdocs_obj = self.pool.get('google.docs') + domain = [('model' , '=', model_obj)] + gdoc = res_gdocs_obj.search(cr,uid,domain,context=context) + if not gdoc: + return -1 + + # check google_base_account + users_obj = self.pool.get('res.users') + user = users_obj.browse(cr, uid, [uid])[0] + if not user.gmail_user or not user.gmail_password: + return -2 + + # copy the document + client = gdata.docs.client.DocsClient(source='openerp.com') + client.ssl = True + client.http_client.debug = False + client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely') + resource = client.get_resource_by_id(gdoc.gdocs_res_id) + copied_resource = client.copy_resource(entry=resource, title=resource.title.text + ' (generated from OpenERP)') + + return self.edit_url_template % (copied_resource.resource_id.text,) + + def get_documents_list(self, cr, uid, context=None): + '''Return the list of google documents available at the user's account. + @param cr: the current row from the database cursor. + @param uid: the current user ID, for security checks. + @param context: a standard dictionary for contextual values. + @return a list with information about the documents in form of tuples (document_name, document_resource_id). + @return -2 if the google_base_account hasn't been configured yet.''' + + if context == None: + context = {} + + # check google_base_account + users_obj = self.pool.get('res.users') + user = users_obj.browse(cr, uid, [uid])[0] + if not user.gmail_user or not user.gmail_password: + return -2 + + # get the documents list + client = gdata.docs.client.DocsClient(source='openerp.com') + client.ssl = True + client.http_client.debug = False + client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely') + + return map(lambda doc: (doc.title.text, doc.resource_id.text[len(prefix_gdoc_id_res):]), filter(lambda r: r.resource_id.text.startswith('document:'), client.get_all_resources())) + + + def set_model_document_template(self, cr, uid, model, resource_id, context=None): + '''Set the default document template for the specified model. This template doesn't have to be a google documents template itself, but just a document. + @param cr: current row for the database cursor. + @param uid: the current user ID, for security checks. + @param model: the current model name. + @param resource_id: resource_id associated to the chosen document. + @param context: a standard dictionary for contextual values. + @return 0 on successful execution. + @return -2 if the google_base_account hasn't been configured yet. + @retrurn -3 if the given resource_id doesn't exist in the user's google docs account. + ''' + + if context == None: + context = {} + + # check google_base_account + users_obj = self.pool.get('res.users') + user = users_obj.browse(cr, uid, [uid])[0] + if not user.gmail_user or not user.gmail_password: + return -2 + + # check resource_id + client = gdata.docs.client.DocsClient(source='openerp.com') + client.ssl = True + client.http_client.debug = False + client.ClientLogin(user.gmail_user, user.gmail_password, client.source, service='writely') + try: + client.get_resource_by_id(resource_id) + except RequestError: + return -3 + + # set the model document template + model_template_id = self.create(cr, uid, + { 'model': self.pool.get(model), + 'gdocs_res_id': resource_id + }) + + return 0 |
