diff --git a/odoo_google_tasks_integration/README.rst b/odoo_google_tasks_integration/README.rst new file mode 100644 index 000000000..291f10332 --- /dev/null +++ b/odoo_google_tasks_integration/README.rst @@ -0,0 +1,51 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Sync Google Task In Odoo Project Task +====================================== +Google Task Integration for Project Tasks odoo app helps users to sync project tasks with google task. + +Installation +============ +- www.odoo.com/documentation/15.0/setup/install.html +- Install our custom addon + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +General Public License, Version 3 (AGPL v3). +( https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +Developer: (V15) Jumana Jabin MP , Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: ``__ diff --git a/odoo_google_tasks_integration/__init__.py b/odoo_google_tasks_integration/__init__.py new file mode 100644 index 000000000..8abfe6938 --- /dev/null +++ b/odoo_google_tasks_integration/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import controllers +from . import models +from . import wizard diff --git a/odoo_google_tasks_integration/__manifest__.py b/odoo_google_tasks_integration/__manifest__.py new file mode 100644 index 000000000..1764bc004 --- /dev/null +++ b/odoo_google_tasks_integration/__manifest__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +######################################################################### +{ + 'name': "Sync Google Task With Odoo Project Task", + 'version': '15.0.1.0.0', + 'category': 'Project', + 'summary': """Sync Google Task With Odoo Project Task""", + 'description': """Sync Google Task With Odoo Project Task""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['base', 'project', 'google_calendar', 'mail'], + 'data': [ + 'security/ir.model.access.csv', + 'data/project_credential_data.xml', + 'views/project_credential_views.xml', + 'views/project_task_views.xml', + 'wizard/project_google_task_import_views.xml', + ], + 'images': [ + 'static/description/banner.jpg' + ], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/odoo_google_tasks_integration/controllers/__init__.py b/odoo_google_tasks_integration/controllers/__init__.py new file mode 100644 index 000000000..7a7c869b6 --- /dev/null +++ b/odoo_google_tasks_integration/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import odoo_google_tasks_integration diff --git a/odoo_google_tasks_integration/controllers/odoo_google_tasks_integration.py b/odoo_google_tasks_integration/controllers/odoo_google_tasks_integration.py new file mode 100644 index 000000000..a6d5f9d22 --- /dev/null +++ b/odoo_google_tasks_integration/controllers/odoo_google_tasks_integration.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import datetime +import requests +from odoo import http, _ +from odoo.exceptions import UserError + + +class GoogleTaskAuth(http.Controller): + """Controller for Google Task Authentication""" + @http.route('/google_task_authentication', type="http", auth="public", + website=True) + def get_auth_code(self, **kw): + """Get the authentication code from Google and save access tokens. + This method is responsible for retrieving an authentication code from + Google,exchanging it for access tokens, and storing these tokens along + with associated information in the project credential model.""" + project_cred = http.request.env.ref( + 'odoo_google_tasks_integration.project_google_credential_data') + if kw.get('code'): + project_cred.write( + {'hangout_company_authorization_code': kw.get('code')}) + data = { + 'code': kw.get('code'), + 'client_id': project_cred.hangout_client, + 'client_secret': project_cred.hangout_client_secret, + 'redirect_uri': project_cred.hangout_redirect_uri, + 'grant_type': 'authorization_code' + } + response = requests.post( + 'https://accounts.google.com/o/oauth2/token', + data=data, + headers={'content-type': 'application/x-www-form-urlencoded'}) + if response.json() and response.json().get('access_token'): + project_cred.write({ + 'hangout_company_access_token': response.json().get( + 'access_token'), + 'hangout_company_access_token_expiry': + datetime.datetime.now() + datetime.timedelta( + seconds=response.json().get('expires_in')), + 'hangout_company_refresh_token': response.json().get( + 'access_token'), + }) + return "Authentication Success. You can close this window." + else: + raise UserError( + _('Something went wrong during the token generation.' + 'Maybe your Authorization Code is invalid') + ) diff --git a/odoo_google_tasks_integration/data/project_credential_data.xml b/odoo_google_tasks_integration/data/project_credential_data.xml new file mode 100644 index 000000000..b96f6234e --- /dev/null +++ b/odoo_google_tasks_integration/data/project_credential_data.xml @@ -0,0 +1,10 @@ + + + + + + 184758045259-cpj2j5rc7i4oldb21k39kv72tvelpg07.apps.googleusercontent.com + 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4d2Tmi4s_TSzFQ2BsrRBCTrvj-k48rFWWE3 + + + diff --git a/odoo_google_tasks_integration/doc/RELEASE_NOTES.md b/odoo_google_tasks_integration/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..594212ce8 --- /dev/null +++ b/odoo_google_tasks_integration/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 16.01.2024 +#### Version 15.0.1.0.0 +#### ADD +- Initial commit for Sync Google Task In Odoo Project Task diff --git a/odoo_google_tasks_integration/models/__init__.py b/odoo_google_tasks_integration/models/__init__.py new file mode 100644 index 000000000..c389cbfcd --- /dev/null +++ b/odoo_google_tasks_integration/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import project_credential +from . import project_task diff --git a/odoo_google_tasks_integration/models/project_credential.py b/odoo_google_tasks_integration/models/project_credential.py new file mode 100644 index 000000000..6ecceb1c8 --- /dev/null +++ b/odoo_google_tasks_integration/models/project_credential.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import requests +from odoo import fields, models, _ +from odoo.exceptions import UserError, ValidationError + +TIMEOUT = 20 + + +class ProjectCredential(models.Model): + """Model for Project Credentials for sync Google Tasks""" + _name = "project.credential" + _description = "Google Task Credentials" + + hangout_client = fields.Char(string="Client ID", + help='Google Developer Console Client ID',) + hangout_client_secret = fields.Char(string="Client Secret", + help='Google Developer Console ' + 'Client Secret') + hangout_redirect_uri = fields.Char(string="Authorized redirect URIs", + help='Google Authorized redirect URIs') + hangout_company_access_token = fields.Char(string='Access Token', + copy=False, + help='Access token for Google' + ' Tasks API') + hangout_company_access_token_expiry = fields.Datetime( + string='Token expiry', + help='Expiry date and time of the access token') + hangout_company_refresh_token = fields.Char(string='Refresh Token', + copy=False, + help='Refresh token for Google' + 'Tasks API') + hangout_company_authorization_code = fields.Char( + string="Authorization Code", + help='Authorization code for authentication') + hangout_company_api_key = fields.Char(string="Enter API Key", + help='API key for Google Tasks API') + name = fields.Char(string="Name", default="Credentials", + help='Name of the credentials') + + def action_google_task_company_authenticate(self): + """Authenticate the company with Google Tasks API . This method + generates a URL that the user can open to initiate the authentication + process with Google Tasks API. It constructs the necessary URL + parameters such as client ID, redirect URI, and required scopes.""" + if not self.hangout_client: + raise ValidationError("Please Enter Client ID") + client_id = self.hangout_client + if not self.hangout_redirect_uri: + raise ValidationError("Please Enter Client Secret") + redirect_url = self.hangout_redirect_uri + calendar_scope = 'https://www.googleapis.com/auth/calendar' + google_task_scope = 'https://www.googleapis.com/auth/tasks' + url = ( + "https://accounts.google.com/o/oauth2/v2/auth?response_type=code" + "&access_type=offline&client_id={}&redirect_uri={}&scope={}+{}" + ).format(client_id, redirect_url, calendar_scope, google_task_scope) + return { + "type": 'ir.actions.act_url', + "url": url, + "target": "new" + } + + def action_google_task_company_refresh_token(self): + """Refresh the access token for Google Tasks API. This method refreshes + the access token for accessing the Google Tasks API using the + provided refresh token. It sends a request to Google's token endpoint + to obtain a new access token.""" + if not self.hangout_client: + raise UserError(_('Client ID is not yet configured.')) + client_id = self.hangout_client + if not self.hangout_client_secret: + raise UserError(_('Client Secret is not yet configured.')) + client_secret = self.hangout_client_secret + if not self.hangout_company_refresh_token: + raise UserError(_('Refresh Token is not yet configured.')) + refresh_token = self.hangout_company_refresh_token + data = { + 'client_id': client_id, + 'client_secret': client_secret, + 'refresh_token': refresh_token, + 'grant_type': 'refresh_token', + } + response = requests.post( + 'https://accounts.google.com/o/oauth2/token', + data=data, + headers={'content-type': 'application/x-www-form-urlencoded'}, + timeout=TIMEOUT) + if response.json() and response.json().get('access_token'): + self.write({ + 'hangout_company_access_token': response.json().get( + 'access_token'), + }) + else: + raise UserError( + _('Something went wrong during the token generation. ' + 'Please request again an authorization code.')) diff --git a/odoo_google_tasks_integration/models/project_task.py b/odoo_google_tasks_integration/models/project_task.py new file mode 100644 index 000000000..ef3887d7e --- /dev/null +++ b/odoo_google_tasks_integration/models/project_task.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Jumana Jabin MP (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import requests +from bs4 import BeautifulSoup +from datetime import datetime +from odoo import api, fields, models + + +class ProjectTask(models.Model): + """ Model for Project Task to add in google task """ + _inherit = 'project.task' + + is_add_in_gtask = fields.Boolean(string="Add In Google Task", + help='Whether to add the task in Google' + ' Task') + google_task = fields.Char(string="Exported to Google Task", + help='ID of the task exported to Google Task') + is_imported = fields.Boolean(string='Imported From Google Task', + help='Whether the task is imported from ' + 'Google Task') + task_id = fields.Many2one('project.task', string='Task', + help='Select a task from the list.') + + @api.model + def create(self, vals): + """Create method override to sync task with Google Task when created""" + task = super().create(vals) + if task.is_add_in_gtask: + self.action_sync_task_to_google(task) + return task + + def write(self, vals): + """Write method override to sync task with Google Task when updated""" + res = super(ProjectTask, self).write(vals) + for task in self: + if task.is_add_in_gtask in vals: + self.action_sync_task_to_google(task) + return res + + def action_sync_task_to_google(self): + """Sync the task to Google Task""" + if not self.description: + self.description = "New Task added to Google Task" + self.is_add_in_gtask = True + company_id = self.env.ref( + 'odoo_google_tasks_integration.project_google_credential_data') + url = f"https://tasks.googleapis.com/tasks/v1/lists/@default/tasks?" \ + f"key={company_id.hangout_company_api_key}" + headers = { + "Authorization": f"Bearer " + f"{company_id.hangout_company_access_token}", + 'Content-Type': 'application/json', + "Accept": "application/json" + } + soup = BeautifulSoup(self.description, 'html.parser') + note = soup.get_text() + datetime_obj = fields.datetime.combine( + self.date_deadline or fields.Date.today(), datetime.min.time()) + main_task_data = { + 'title': self.name, + 'due': datetime_obj.strftime("%Y-%m-%dT%H:%M:%SZ"), + 'notes': note if self.description else None, + } + if self.google_task: + main_task_url = f"https://tasks.googleapis.com/tasks/v1/lists/" \ + f"@default/tasks/{self.google_task}" + response = requests.patch(main_task_url, headers=headers, + json=main_task_data) + else: + response = requests.post(url, headers=headers, json=main_task_data) + if response.status_code == 200: + main_task_id = response.json().get('id') + if self.google_task != main_task_id: + self.google_task = main_task_id + message = f'(Main task created/updated: {main_task_id})' + self.message_post(body=message) + # Update the corresponding Google task for the current task + google_task = self.env['project.task'].search( + [('task_id', '=', self.id)], limit=1) + if google_task and google_task.google_task != main_task_id: + google_task.google_task = main_task_id + # Process subtasks + for subtask in self.child_ids: + subtask_data = { + 'title': subtask.name, + 'status': 'needsAction', + } + if subtask.google_task: + subtask_url = f"https://tasks.googleapis.com/tasks/v1/" \ + f"lists/@default/tasks/{subtask.google_task}" + response = requests.patch(subtask_url, headers=headers, + json=subtask_data) + else: + response = requests.post(url, headers=headers, + json=subtask_data) + if response.status_code == 200: + subtask_id = response.json().get('id') + if subtask.google_task != subtask_id: + subtask.google_task = subtask_id + message = f'(Subtask created/updated: {subtask_id})' + self.message_post(body=message) + # Move the subtask under the main task + move_url = f"https://tasks.googleapis.com/tasks/v1/lists/" \ + f"@default/tasks/{subtask_id}/move" + move_data = { + 'parent': main_task_id + } + move_response = requests.post(move_url, headers=headers, + json=move_data) + return move_response diff --git a/odoo_google_tasks_integration/security/ir.model.access.csv b/odoo_google_tasks_integration/security/ir.model.access.csv new file mode 100644 index 000000000..46e3370d5 --- /dev/null +++ b/odoo_google_tasks_integration/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_project_google_task_import,access.project.google.task.import,model_project_google_task_import,base.group_user,1,1,1,1 +access_project_credential,access.project.credential,model_project_credential,base.group_user,1,1,0,0 diff --git a/odoo_google_tasks_integration/static/description/assets/icons/check.png b/odoo_google_tasks_integration/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/check.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/chevron.png b/odoo_google_tasks_integration/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/chevron.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/cogs.png b/odoo_google_tasks_integration/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/cogs.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/consultation.png b/odoo_google_tasks_integration/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/consultation.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/ecom-black.png b/odoo_google_tasks_integration/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/ecom-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/education-black.png b/odoo_google_tasks_integration/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/education-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/hotel-black.png b/odoo_google_tasks_integration/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/hotel-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/license.png b/odoo_google_tasks_integration/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/license.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/lifebuoy.png b/odoo_google_tasks_integration/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/lifebuoy.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/manufacturing-black.png b/odoo_google_tasks_integration/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/manufacturing-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/pos-black.png b/odoo_google_tasks_integration/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/pos-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/puzzle.png b/odoo_google_tasks_integration/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/puzzle.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/restaurant-black.png b/odoo_google_tasks_integration/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/restaurant-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/service-black.png b/odoo_google_tasks_integration/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/service-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/trading-black.png b/odoo_google_tasks_integration/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/trading-black.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/training.png b/odoo_google_tasks_integration/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/training.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/update.png b/odoo_google_tasks_integration/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/update.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/user.png b/odoo_google_tasks_integration/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/user.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/icons/wrench.png b/odoo_google_tasks_integration/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/icons/wrench.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/categories.png b/odoo_google_tasks_integration/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/categories.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/check-box.png b/odoo_google_tasks_integration/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/check-box.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/compass.png b/odoo_google_tasks_integration/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/compass.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/corporate.png b/odoo_google_tasks_integration/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/corporate.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/customer-support.png b/odoo_google_tasks_integration/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/customer-support.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/cybrosys-logo.png b/odoo_google_tasks_integration/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/cybrosys-logo.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/features.png b/odoo_google_tasks_integration/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/features.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/logo.png b/odoo_google_tasks_integration/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/logo.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/pictures.png b/odoo_google_tasks_integration/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/pictures.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/pie-chart.png b/odoo_google_tasks_integration/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/pie-chart.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/right-arrow.png b/odoo_google_tasks_integration/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/right-arrow.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/star.png b/odoo_google_tasks_integration/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/star.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/support.png b/odoo_google_tasks_integration/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/support.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/misc/whatsapp.png b/odoo_google_tasks_integration/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/misc/whatsapp.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/modules/1.png b/odoo_google_tasks_integration/static/description/assets/modules/1.png new file mode 100644 index 000000000..a0969fcb5 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/modules/1.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/modules/live_chat.png b/odoo_google_tasks_integration/static/description/assets/modules/live_chat.png new file mode 100644 index 000000000..3664700f5 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/modules/live_chat.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/modules/slack.png b/odoo_google_tasks_integration/static/description/assets/modules/slack.png new file mode 100644 index 000000000..92ae36dc5 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/modules/slack.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/modules/twitter.png b/odoo_google_tasks_integration/static/description/assets/modules/twitter.png new file mode 100644 index 000000000..ee4fa9abd Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/modules/twitter.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/modules/whatsapp.gif b/odoo_google_tasks_integration/static/description/assets/modules/whatsapp.gif new file mode 100644 index 000000000..c51b9eb07 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/modules/whatsapp.gif differ diff --git a/odoo_google_tasks_integration/static/description/assets/modules/zoom_meet.jpg b/odoo_google_tasks_integration/static/description/assets/modules/zoom_meet.jpg new file mode 100644 index 000000000..ae7760bd2 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/modules/zoom_meet.jpg differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/1.png b/odoo_google_tasks_integration/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..d0b23de98 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/1.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/10.png b/odoo_google_tasks_integration/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..247ea2ea7 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/10.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/11.png b/odoo_google_tasks_integration/static/description/assets/screenshots/11.png new file mode 100644 index 000000000..aef009e12 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/11.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/12.png b/odoo_google_tasks_integration/static/description/assets/screenshots/12.png new file mode 100644 index 000000000..fda54f2f5 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/12.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/13.png b/odoo_google_tasks_integration/static/description/assets/screenshots/13.png new file mode 100644 index 000000000..7f5334e61 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/13.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/14.png b/odoo_google_tasks_integration/static/description/assets/screenshots/14.png new file mode 100644 index 000000000..3b6e3ad77 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/14.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/15.png b/odoo_google_tasks_integration/static/description/assets/screenshots/15.png new file mode 100644 index 000000000..3bc08d3ca Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/15.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/16.png b/odoo_google_tasks_integration/static/description/assets/screenshots/16.png new file mode 100644 index 000000000..66cc4cb9a Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/16.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/17.png b/odoo_google_tasks_integration/static/description/assets/screenshots/17.png new file mode 100644 index 000000000..bb3f59055 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/17.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/2.png b/odoo_google_tasks_integration/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..207fe5516 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/2.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/3.png b/odoo_google_tasks_integration/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..22d9a7b07 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/3.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/4.png b/odoo_google_tasks_integration/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..b591a0759 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/4.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/6.png b/odoo_google_tasks_integration/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..1aae9f2e8 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/6.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/7.png b/odoo_google_tasks_integration/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..e97e1e3fd Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/7.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/8.png b/odoo_google_tasks_integration/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..2023ddb21 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/8.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/9.png b/odoo_google_tasks_integration/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..55cd2ae3c Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/9.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a1.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a1.png new file mode 100644 index 000000000..1991e013c Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a1.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a2.2.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a2.2.png new file mode 100644 index 000000000..002e478dd Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a2.2.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a2.3.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a2.3.png new file mode 100644 index 000000000..a730e9d4b Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a2.3.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a2.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a2.png new file mode 100644 index 000000000..df4c54d4b Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a2.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a3.3.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a3.3.png new file mode 100644 index 000000000..e82b4b957 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a3.3.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a3.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a3.png new file mode 100644 index 000000000..cfdd18ff8 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a3.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a4.4.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a4.4.png new file mode 100644 index 000000000..5ba0fe6a1 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a4.4.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a4.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a4.png new file mode 100644 index 000000000..9979e97f7 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a4.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a5.5.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a5.5.png new file mode 100644 index 000000000..c8cd1ccd9 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a5.5.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a6.5.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a6.5.png new file mode 100644 index 000000000..42fd93229 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a6.5.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a66.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a66.png new file mode 100644 index 000000000..cd8009f22 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a66.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a7.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a7.png new file mode 100644 index 000000000..1e0d580ae Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a7.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a77.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a77.png new file mode 100644 index 000000000..cdd04171f Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a77.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a78.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a78.png new file mode 100644 index 000000000..99aa2c473 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a78.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/a8.png b/odoo_google_tasks_integration/static/description/assets/screenshots/a8.png new file mode 100644 index 000000000..04613cff2 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/a8.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/ap.png b/odoo_google_tasks_integration/static/description/assets/screenshots/ap.png new file mode 100644 index 000000000..45281103f Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/ap.png differ diff --git a/odoo_google_tasks_integration/static/description/assets/screenshots/hero.gif b/odoo_google_tasks_integration/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..e8435e820 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/assets/screenshots/hero.gif differ diff --git a/odoo_google_tasks_integration/static/description/banner.jpg b/odoo_google_tasks_integration/static/description/banner.jpg new file mode 100644 index 000000000..a14a74f09 Binary files /dev/null and b/odoo_google_tasks_integration/static/description/banner.jpg differ diff --git a/odoo_google_tasks_integration/static/description/icon.png b/odoo_google_tasks_integration/static/description/icon.png new file mode 100644 index 000000000..9c07a1f6d Binary files /dev/null and b/odoo_google_tasks_integration/static/description/icon.png differ diff --git a/odoo_google_tasks_integration/static/description/index.html b/odoo_google_tasks_integration/static/description/index.html new file mode 100644 index 000000000..94f3d8558 --- /dev/null +++ b/odoo_google_tasks_integration/static/description/index.html @@ -0,0 +1,910 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+
+
+
+ +

+ Sync Google Task In Odoo Project Task +

+

+ Google Tasks Synchronization With Project And Tasks In + Odoo

+ + +
+
+
+
+ +
+
+ +
+

+ Explore This Module

+
+ + + + + +
+
+

+ Overview +

+
+ +
+

+ Google Tasks Integration for Project and Tasks odoo app + helps users to sync project tasks with Google + Tasks. Users have the option to sync tasks with Google or + if a user updates a task then google Tasks also + get updated. Import / Export task from Odoo to Google Task and + vice versa +

+
+ +
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Sync Project Task with Google Tasks

+
+
+ +
+
+ +
+
+

+ Auto Update Task with Google Tasks

+
+
+ +
+
+ +
+
+

+ Import / Export Task from Odoo to Google Task and Vice + Versa

+
+
+ +
+ +
+
+

+ Screenshots +

+
+
+

+ Google Tasks Client Credential and API Configuration +

+

+ User have to create a NEW PROJECT from Google Cloud + Platform .

+ https://console.cloud.google.com/ +

+ Check out the link , If you are a new user.

+
+ +

+ Add a Project name and click on "CREATE" button

+
+ +

+ User have to navigate to "APIs and services" and click on + "Enabled APIs and services". +

+
+ +

+ Then click on "ENABLE APIS AND SERVICES". +

+ +
+
+

+ Search For Google Tasks API +

+ +
+ +
+

+ Enable Google Tasks API +

+

+ Search for "Google Tasks API", Open and click "ENABLE" + to + use. + +

+ +
+
+

+ CREATE CREDENTIALS +

+ +
+ +
+

+ Create Credentials for Google Task API

+

+ Select "Google Task API" as API and "User data" as data + accessing and click "NEXT" +

+ +

+ Create App Information. + +

+ +

+ Skip the Scopes +

+ +

+ Select "Web application" as Application type and enter + Name, + Click "Add URL" under "Authorized redirect + URIs" and enter your URI. + +

+ +

+ Authorized redirect URl is "http://localhost:8015".User + need to + change "http://localhost:8015" by + his/her odoo instance. and give /google_task_authentication + at last of the Authorized redirect URl. +

+ +
+
+

+ Google Tasks API Credential + +

+

+ On clicking "CREATE" button user will get "Client ID" and + "Client secret" key for Google Tasks Api. + + +

+ +
+
+

+ Create API KEY +

+

+ On clicking "CREATE CREDENTIALS" button , Select API Key. +

+ +
+
+

+ Publish App +

+

+ On clicking "OAUTH Consent Screen" button , Click PUBLISH APP +

+ +
+ +
+

+ Task Synchronization +

+

+ Under Configuration > Google Task Credentials , add Client + ID + ,Redirect URI and Client Secret then Click "AUTHENTICATE" + button. + +

+ + + + +

+ After authentication , This message will be shown +

+ +

+ Add API Key

+ + +

+ Then Select a Task and click the button "EXPORT TO GOOGLE TASK" +

+ +

+ Also add subtask , If you need +

+ +

+ On successful exportation user can see all details are + updated + in chatter.

+ +

+ Then Check Google Tasks.

+ +

+ Then goto Project Module > Google Tasks > Tasks , we can + see the + details of imported and exported Task .

+ +

+ Next create a task from Google Task .

+ +

+ Then goto Project Module > Google Tasks > Import / Export + Google + Task .

+ +

+ A wizard will shown , click the IMPORT TASKS Button .

+ +

+ Then goto Google Tasks > Tasks , we can see the details of + imported and exported Task .

+ +

+ Then goto Project Module > Google Tasks > Import / Export + Google + Task and click EXPORT TASK Button.

+ +

+ Then goto Google Tasks > Tasks , we can see the details of + imported and exported Task .

+ +

+ Then Check Google Tasks.

+ +
+
+ +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ diff --git a/odoo_google_tasks_integration/views/project_credential_views.xml b/odoo_google_tasks_integration/views/project_credential_views.xml new file mode 100644 index 000000000..52ebe16bd --- /dev/null +++ b/odoo_google_tasks_integration/views/project_credential_views.xml @@ -0,0 +1,50 @@ + + + + + + project.credential.view.form + project.credential + +
+ + + + + + + + +