diff --git a/addons/google_drive/models/google_drive.py b/addons/google_drive/models/google_drive.py index a4dbfa2b98b..b22114cff25 100644 --- a/addons/google_drive/models/google_drive.py +++ b/addons/google_drive/models/google_drive.py @@ -56,7 +56,7 @@ class GoogleDrive(models.Model): if not google_drive_refresh_token: if user_is_admin: dummy, action_id = self.env['ir.model.data'].get_object_reference('base_setup', 'action_general_configuration') - msg = _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it .") + msg = _("There is no refresh code set for Google Drive. You can set it up from the configuration panel.") raise RedirectWarning(msg, action_id, _('Go to the configuration panel')) else: raise UserError(_("Google Drive is not yet configured. Please contact your administrator.")) diff --git a/addons/google_drive/models/res_config_settings.py b/addons/google_drive/models/res_config_settings.py index f2175d27e57..49d7ff7d86d 100644 --- a/addons/google_drive/models/res_config_settings.py +++ b/addons/google_drive/models/res_config_settings.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, fields, models +from odoo import api, fields, models, _ class ResConfigSettings(models.TransientModel): @@ -9,6 +9,7 @@ class ResConfigSettings(models.TransientModel): google_drive_authorization_code = fields.Char(string='Authorization Code', config_parameter='google_drive_authorization_code') google_drive_uri = fields.Char(compute='_compute_drive_uri', string='URI', help="The URL to generate the authorization code from Google") + is_google_drive_token_generated = fields.Boolean(string='Refresh Token Generated') @api.depends('google_drive_authorization_code') def _compute_drive_uri(self): @@ -16,12 +17,30 @@ class ResConfigSettings(models.TransientModel): for config in self: config.google_drive_uri = google_drive_uri - def set_values(self): + def get_values(self): + res = super(ResConfigSettings, self).get_values() + refresh_token = self.env['ir.config_parameter'].sudo().get_param('google_drive_refresh_token', False) + res.update(is_google_drive_token_generated=bool(refresh_token)) + return res + + @api.multi + def confirm_setup_token(self): params = self.env['ir.config_parameter'].sudo() authorization_code_before = params.get_param('google_drive_authorization_code') - super(ResConfigSettings, self).set_values() authorization_code = self.google_drive_authorization_code refresh_token = False if authorization_code and authorization_code != authorization_code_before: refresh_token = self.env['google.service'].generate_refresh_token('drive', authorization_code) params.set_param('google_drive_refresh_token', refresh_token) + + @api.multi + def action_setup_token(self): + self.ensure_one() + template = self.env.ref('google_drive.google_drive_auth_code_wizard') + return { + 'name': _('Set up refresh token'), + 'type': 'ir.actions.act_window', + 'res_model': 'res.config.settings', + 'views': [(template.id, 'form')], + 'target': 'new', + } diff --git a/addons/google_drive/views/res_config_settings_views.xml b/addons/google_drive/views/res_config_settings_views.xml index 45345d459ec..22a05e6be55 100644 --- a/addons/google_drive/views/res_config_settings_views.xml +++ b/addons/google_drive/views/res_config_settings_views.xml @@ -7,22 +7,71 @@ - - - - + + + + + + Refresh token set + + + No refresh token set + + + + Set up token + + + Reset token + - - - - - - + + + google.drive.authorization.wizard + res.config.settings + primary + 2048 + + + + Get an authorization code and set it in the field below. + + + + + + + + +