bzr revid: dle@openerp.com-20130626095736-0ni7i86wckc6coo5
This commit is contained in:
Denis Ledoux 2013-06-26 11:57:36 +02:00
parent 2da193d242
commit 66520d9e8e
3 changed files with 38 additions and 41 deletions

View File

@ -18,9 +18,7 @@
#
##############################################################################
import logging
from datetime import datetime
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
from openerp import SUPERUSER_ID
from openerp.osv import fields, osv
from openerp.tools.translate import _
@ -32,6 +30,7 @@ import json
_logger = logging.getLogger(__name__)
class config(osv.osv):
_name = 'google.drive.config'
_description = "Google Drive templates config"
@ -48,7 +47,7 @@ class config(osv.osv):
model_name = model.name
filter_name = config.filter_id and config.filter_id.name or False
record = self.pool.get(res_model).read(cr, uid, res_id, [], context=context)
record.update({'model': model_name, 'filter':filter_name})
record.update({'model': model_name, 'filter': filter_name})
name_gdocs = config.name_template or "%(name)s_%(model)s_%(filter)s_gdrive"
try:
name_gdocs = name_gdocs % record
@ -67,7 +66,7 @@ class config(osv.osv):
return res
def copy_doc(self, cr, uid, ids, res_id, tamplate_id, name_gdocs, res_model, context=None):
ir_config = self.pool[ 'ir.config_parameter']
ir_config = self.pool['ir.config_parameter']
google_drive_client_id = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_id')
google_drive_client_secret = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_secret')
google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token')
@ -75,30 +74,30 @@ class config(osv.osv):
#For Getting New Access Token With help of old Refresh Token
headers = {"Content-type": "application/x-www-form-urlencoded"}
data = dict(client_id = google_drive_client_id,
refresh_token = google_drive_refresh_token,
client_secret = google_drive_client_secret,
grant_type = "refresh_token")
data = dict(client_id=google_drive_client_id,
refresh_token=google_drive_refresh_token,
client_secret=google_drive_client_secret,
grant_type="refresh_token")
data = urllib.urlencode(data)
resp, content = Http().request("https://accounts.google.com/o/oauth2/token", "POST", data, headers)
content = json.loads(content)
# Copy template in to drive with help of new access token
if content.has_key('access_token'):
if 'access_token' in content:
request_url = "https://www.googleapis.com/drive/v2/files/%s?fields=parents/id&access_token=%s" % (tamplate_id, content['access_token'])
resp, parents = Http().request(request_url, "GET")
parents_dict = json.loads(parents)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
record_url = "Click on link to open Record in OpenERP\n %s/?db=%s#id=%s&model=%s" %(google_web_base_url, cr.dbname, res_id, res_model )
data = {"title": name_gdocs, "description": record_url, "parents":parents_dict['parents']}
record_url = "Click on link to open Record in OpenERP\n %s/?db=%s#id=%s&model=%s" % (google_web_base_url, cr.dbname, res_id, res_model)
data = {"title": name_gdocs, "description": record_url, "parents": parents_dict['parents']}
request_url = "https://www.googleapis.com/drive/v2/files/%s/copy?access_token=%s" % (tamplate_id, content['access_token'])
resp, content = Http().request(request_url, "POST", json.dumps(data), headers)
content = json.loads(content)
res = False
if 'alternateLink' in content.keys():
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_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']
else:
@ -136,7 +135,6 @@ class config(osv.osv):
def _filter(self, cr, uid, action, action_filter, record_ids, context=None):
""" filter the list record_ids that satisfy the action filter """
records = {}
if record_ids and action_filter:
if not action.model_id == action_filter.model_id:
raise osv.except_osv(_('Warning!'), _("Something went wrong with the configuration of attachments with google drive.Please contact your Administrator to fix the problem."))
@ -158,7 +156,6 @@ class config(osv.osv):
try:
url = urlparse(template_url)
res = url.path.split('/')
resource = res[1]
if res[1] == "spreadsheet":
key = url.query.split('=')[1]
else:
@ -176,17 +173,17 @@ class config(osv.osv):
return result
_columns = {
'name' : fields.char('Template Name', required=True, size=1024),
'name': fields.char('Template Name', required=True, size=1024),
'model_id': fields.selection(_list_all_models, 'Model', required=True),
'filter_id' : fields.many2one('ir.filters', 'Filter'),
'filter_id': fields.many2one('ir.filters', 'Filter'),
'google_drive_template_url': fields.char('Template URL', required=True, size=1024),
'google_drive_resource_id' : fields.function(_resource_get, type="char" , string='Resource Id'),
'google_drive_client_id' : fields.function(_client_id_get, type="char" , string='Google Client '),
'google_drive_resource_id': fields.function(_resource_get, type="char", string='Resource Id'),
'google_drive_client_id': fields.function(_client_id_get, type="char", string='Google Client '),
'name_template': fields.char('Google Drive Name Pattern', size=64, help='Choose how the new google drive will be named, on google side. Eg. gdoc_%(field_name)s', required=True),
}
def onchange_model_id(self, cr, uid, ids, model_id, context=None):
res = {'domain':{'filter_id':[]}}
res = {'domain': {'filter_id': []}}
if model_id:
res['domain'] = {'filter_id': [('model_id', '=', model_id)]}
else: