diff --git a/odoo_freshdesk_connector/README.rst b/odoo_freshdesk_connector/README.rst new file mode 100644 index 000000000..c1667531e --- /dev/null +++ b/odoo_freshdesk_connector/README.rst @@ -0,0 +1,46 @@ +.. 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 + +Odoo Freshdesk Connector +======================== +This module helps you to connect the tickets and contacts from the odoo to freshdesk and vice versa + +Configuration +============= +* Need to install our custom module Website Helpdesk Support Ticket Management +* Need to add the api key and domain in the settings. + +License +======= +Affero General Public License v3.0 (AGPL v3) +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +_______ +Developer : (V16) Arjun S, Contact: odoo@cybrosys.com + +Contacts +________ +* Mail Contact : odoo@cybrosys.com +* Website : http://www.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 `Our Website `__ + +Further information +___________________ +HTML Description: ``__ diff --git a/odoo_freshdesk_connector/__init__.py b/odoo_freshdesk_connector/__init__.py new file mode 100644 index 000000000..a89451085 --- /dev/null +++ b/odoo_freshdesk_connector/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Arjun S(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 models diff --git a/odoo_freshdesk_connector/__manifest__.py b/odoo_freshdesk_connector/__manifest__.py new file mode 100644 index 000000000..491108d65 --- /dev/null +++ b/odoo_freshdesk_connector/__manifest__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Arjun S(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': 'Odoo Freshdesk Connector', + 'version': '16.0.1.0.0', + 'category': 'Extra Tools', + 'summary': "With this module, you can easily connect the tickets and " + "customers in the odoo to freshdesk", + 'description': """With this module, user can connect the tickets and + the contacts in the odoo to freshdesk, which means the + tickets and contacts in the odoo can be seen in the + freshdesk also vice versa""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['odoo_website_helpdesk'], + 'data': [ + 'views/help_ticket_views.xml', + 'views/res_config_settings_views.xml', + 'views/res_partner_views.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False +} diff --git a/odoo_freshdesk_connector/doc/RELEASE_NOTES.md b/odoo_freshdesk_connector/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..3003ad3dc --- /dev/null +++ b/odoo_freshdesk_connector/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 18.11.2023 +#### Version 16.0.1.0.0 +#### ADD + +- Initial Commit for Odoo Freshdesk Connector \ No newline at end of file diff --git a/odoo_freshdesk_connector/models/__init__.py b/odoo_freshdesk_connector/models/__init__.py new file mode 100644 index 000000000..34c66adf8 --- /dev/null +++ b/odoo_freshdesk_connector/models/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Arjun S(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 help_ticket +from . import res_config_settings +from . import res_partner diff --git a/odoo_freshdesk_connector/models/help_ticket.py b/odoo_freshdesk_connector/models/help_ticket.py new file mode 100644 index 000000000..8b678784f --- /dev/null +++ b/odoo_freshdesk_connector/models/help_ticket.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Arjun S(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 odoo import fields, models + + +class HelpTicket(models.Model): + """ + Inherits the model Help Ticket to extend and add fields + """ + _inherit = 'help.ticket' + + freshdesk_id = fields.Integer(string="Freshdesk ID", + help="Unique ID of the freshdesk imported or" + " exported ticket", + readonly=True) + customer_id = fields.Many2one(required=True) diff --git a/odoo_freshdesk_connector/models/res_config_settings.py b/odoo_freshdesk_connector/models/res_config_settings.py new file mode 100644 index 000000000..de464c562 --- /dev/null +++ b/odoo_freshdesk_connector/models/res_config_settings.py @@ -0,0 +1,312 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Arjun S(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 base64 +import json +import requests +from requests import RequestException +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class ResConfigSettings(models.TransientModel): + """ + Inherits the model Res Config Settings to extend and add the fields and + methods + """ + _inherit = 'res.config.settings' + + domain = fields.Char(string='Domain', + help='Enter the domain of the freshdesk of the user', + config_parameter='odoo_freshdesk_connector.domain') + api_key = fields.Char(string='API Key', + help='Enter the API key to connect to the freshdesk', + config_parameter='odoo_freshdesk_connector.api_key') + import_contacts = fields.Boolean(string='Import Contacts', + help='Make true if you want to import ' + 'contacts', + config_parameter='odoo_freshdesk_connector.import_contacts') + import_tickets = fields.Boolean(string='Import Tickets', + help='Make true if you want to import ' + 'tickets', + config_parameter='odoo_freshdesk_connector.import_tickets') + export_tickets = fields.Boolean(string='Export Tickets', + help='Make true if you want to export ' + 'tickets', + config_parameter='odoo_freshdesk_connector.export_tickets') + + @api.onchange('import_contacts') + def _onchange_import_contacts(self): + """ + Summary: + This is the method _onchange_import_contacts which is here used to + make the import_tickets booleans if the import_contacts boolean is + True + """ + if self.import_contacts: + self.import_tickets = True + + @api.onchange('import_tickets') + def _onchange_import_tickets(self): + """ + Summary: + This is the method _onchange_import_tickets which is triggered on + the change of the field import_tickets to change the import_contacts + boolean to false if the import_tickets boolean is False + """ + if self.import_contacts and not self.import_tickets: + self.import_contacts = False + + def action_test_freshdesk_connection(self): + """ + Summary: + This is the method action_test_freshdesk_connection which is + triggered when clicked on the test, which checks whether we can + connect to the freshdesk with the given credentials as API key and + the domain. + Returns: + notification: The notification which returns the notification if + whether the connection to the freshdesk in successful or not. + """ + if self.api_key and self.domain: + api_key_base64 = base64.b64encode(self.api_key.encode()).decode() + url = self.domain + '/api/v2/tickets' + payload = {} + headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Basic {api_key_base64}', + } + try: + response = requests.request("GET", url, headers=headers, + data=payload, timeout=10) + return self.action_notify( + True) if response.status_code == 200 else self.action_notify( + False) + except RequestException as exception: + raise ValidationError(_('Invalid domain')) from exception + else: + raise ValidationError(_('Please enter the credentials')) + + def action_notify(self, success): + """ + Summary: + This is the method action_notify which is triggered from the method + action_test_freshdesk_connection to create the notification whether + the connection is successful or not. + Args: + success: True if the connection to the freshdesk is successful + else False + Returns: + notification: which returns the client action to show the + notification as successful or not to the method + action_test_freshdesk_connection + """ + notification = { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': _('Connection successful!') if success is True else _( + 'Connection not successful!'), + 'message': 'Connection to Freshdesk is successful.' if success is True else 'Connection to Freshdesk is not successful.', + 'sticky': True, + 'type': 'success' if success is True else 'danger' + } + } + return notification + + def action_execute_freshdesk_operation(self): + """ + Summary: + This is the method action_execute_freshdesk_operation which is + triggered when the button to execute the operations of importing + and exporting the data from the Freshdesk is clicked from section + of the freshdesk from the general settings. + """ + imported_tickets = 0 + exported_tickets = 0 + if self.import_tickets: + imported_tickets = self.action_import_tickets() + if self.export_tickets: + exported_tickets = self.action_export_tickets() + notification = { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': _( + 'Executed the operation successfully!'), + 'message': f'Successfully imported {imported_tickets} Tickets ' + f'and exported {exported_tickets} tickets', + 'sticky': True, + 'type': 'success' + } + } + return notification + + def action_import_tickets(self): + """ + Summary: + This is the method create_tickets which is triggered from the method + action_execute_freshdesk_operation if the import_tickets boolean is + true from the record when executing the operation. + """ + if self.api_key and self.domain: + api_key_base64 = base64.b64encode(self.api_key.encode()).decode() + ticket_url = self.domain + '/api/v2/tickets?include=description' + payload = {} + headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Basic {api_key_base64}', + } + try: + tickets_response = requests.request("GET", ticket_url, + headers=headers, + data=payload, timeout=10) + tickets_data = json.loads(tickets_response.text) + tickets_count = 0 + for ticket in tickets_data: + existing_ticket = self.env['help.ticket'].search( + [('freshdesk_id', '=', ticket.get('id'))], limit=1) + if not existing_ticket: + ticket_vals = { + 'subject': ticket.get('subject'), + 'description': ticket.get('description'), + 'freshdesk_id': ticket.get('id'), + } + if self.import_contacts: + contact = self.action_import_contact(ticket=ticket, + headers=headers, + payload=payload) + ticket_vals['customer_id'] = contact.id + self.env['help.ticket'].create(ticket_vals) + tickets_count += 1 + return tickets_count + except RequestException as exception: + raise ValidationError( + _('Invalid domain')) from exception + else: + raise ValidationError(_('Please enter the credentials')) + + def action_import_contact(self, ticket, headers, payload): + """ + Summary: + This is the method create_contact which is called from the method + create_tickets, which is here used to create the contact for the + corresponding ticket and add to that ticket if the boolean import + contact is true in the configuration of the freshdesk + Args: + ticket: The ticket which gets the contact id + headers: Headers needed for the request to get data of the contact + payload: The payload for the contact request + Returns: + contact: Checks if there is already any contact present with this + id which means that is already imported if not then a new + contact will be created and returned to the parent method. + existing_contact: Returns the existing contact if there is already + a contact with this freshdesk id. + """ + contact_url = self.domain + '/api/v2/contacts/' + str( + ticket.get('requester_id')) + contact_response = requests.request("GET", contact_url, + headers=headers, + data=payload, timeout=10) + contacts_data = json.loads(contact_response.text) + existing_contact = self.env['res.partner'].search( + [('freshdesk_id', '=', contacts_data.get('id'))], limit=1) + if not existing_contact: + contact = self.env['res.partner'].create({ + 'name': contacts_data.get('name'), + 'email': contacts_data.get('email'), + 'freshdesk_id': contacts_data.get('id'), + 'phone': contacts_data.get('phone'), + }) + return contact + return existing_contact + + def action_export_tickets(self): + """ + Summary: + This is the method action_export_tickets which is called from the + method action_execute_freshdesk_operation, this method acts the + method to export the tickets to the freshdesk that is already not + exported + """ + tickets_link = self.domain + '/api/v2/tickets' + api_key_base64 = base64.b64encode(self.api_key.encode()).decode() + ticket_count = 0 + for ticket in self.env['help.ticket'].search([]).filtered( + lambda x: not x.freshdesk_id): + headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Basic {api_key_base64}' + } + contact = self.action_export_contact(ticket=ticket, header=headers) + payload = json.dumps({ + "subject": ticket.subject, + "description": ticket.description, + "email": ticket.customer_id.email if ticket.customer_id else None, + "priority": int(ticket.priority), + 'requester_id': int(contact), + 'status': ticket.stage_id.id, + }) + try: + ticket_response = requests.post(tickets_link, headers=headers, + data=payload, timeout=10) + ticket_data = json.loads(ticket_response.text) + ticket.freshdesk_id = ticket_data.get('id') + ticket_count += 1 + except RequestException as exception: + raise ValidationError(_('Invalid domain')) from exception + return ticket_count + + def action_export_contact(self, ticket, header): + """ + Summary: + This is the method export_contact which is called from the method + action_export_tickets, which is here used to create the contact + which is present in the customer that is not imported or exported + already. + Args: + ticket: Record of the ticket that is present in the model that + should be exported. + Returns: + contact: Create contact id or if the user already has the id ie, + already imported then that already existing freshdesk id will be + returned + existing_contact: Returns the existing contact is the contact with + this freshdesk id is already imported or existing + """ + if not ticket.customer_id.freshdesk_id: + contact_link = self.domain + '/api/v2/contacts' + payload = json.dumps({ + "name": ticket.customer_id.name, + "email": ticket.customer_id.email, + "active": True, + "address": ticket.customer_id.contact_address, + "phone": ticket.customer_id.phone, + }) + create_response = requests.post(contact_link, headers=header, + data=payload, timeout=10) + contacts_data = json.loads(create_response.text) + contact = contacts_data.get('id') + ticket.customer_id.freshdesk_id = contact + return contact + existing_contact = ticket.customer_id.freshdesk_id + return existing_contact diff --git a/odoo_freshdesk_connector/models/res_partner.py b/odoo_freshdesk_connector/models/res_partner.py new file mode 100644 index 000000000..b6d2e2a31 --- /dev/null +++ b/odoo_freshdesk_connector/models/res_partner.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Arjun S(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 odoo import fields, models + + +class ResPartner(models.Model): + """ + Inherits the model Res Partner and add the field to the model + """ + _inherit = 'res.partner' + + freshdesk_id = fields.Char(string="Freshdesk ID", + help="Unique ID of the freshdesk imported or" + " exported contact", + readonly=True) diff --git a/odoo_freshdesk_connector/static/description/assets/icons/asana-pic.png b/odoo_freshdesk_connector/static/description/assets/icons/asana-pic.png new file mode 100644 index 000000000..d0ac62b6b Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/asana-pic.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/check.png b/odoo_freshdesk_connector/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/check.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/chevron.png b/odoo_freshdesk_connector/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/chevron.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/cogs.png b/odoo_freshdesk_connector/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/cogs.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/consultation.png b/odoo_freshdesk_connector/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/consultation.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/ecom-black.png b/odoo_freshdesk_connector/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/ecom-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/education-black.png b/odoo_freshdesk_connector/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/education-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/hotel-black.png b/odoo_freshdesk_connector/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/hotel-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/license.png b/odoo_freshdesk_connector/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/license.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/lifebuoy.png b/odoo_freshdesk_connector/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/lifebuoy.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/manufacturing-black.png b/odoo_freshdesk_connector/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/manufacturing-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/pos-black.png b/odoo_freshdesk_connector/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/pos-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/puzzle.png b/odoo_freshdesk_connector/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/puzzle.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/restaurant-black.png b/odoo_freshdesk_connector/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/restaurant-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/service-black.png b/odoo_freshdesk_connector/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/service-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/trading-black.png b/odoo_freshdesk_connector/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/trading-black.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/training.png b/odoo_freshdesk_connector/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/training.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/update.png b/odoo_freshdesk_connector/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/update.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/user.png b/odoo_freshdesk_connector/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/user.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/icons/wrench.png b/odoo_freshdesk_connector/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/icons/wrench.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/categories.png b/odoo_freshdesk_connector/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/categories.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/check-box.png b/odoo_freshdesk_connector/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/check-box.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/compass.png b/odoo_freshdesk_connector/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/compass.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/corporate.png b/odoo_freshdesk_connector/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/corporate.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/customer-support.png b/odoo_freshdesk_connector/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/customer-support.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/cybrosys-logo.png b/odoo_freshdesk_connector/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/cybrosys-logo.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/features.png b/odoo_freshdesk_connector/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/features.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/logo.png b/odoo_freshdesk_connector/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/logo.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/pictures.png b/odoo_freshdesk_connector/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/pictures.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/pie-chart.png b/odoo_freshdesk_connector/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/pie-chart.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/right-arrow.png b/odoo_freshdesk_connector/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/right-arrow.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/star.png b/odoo_freshdesk_connector/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/star.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/support.png b/odoo_freshdesk_connector/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/support.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/misc/whatsapp.png b/odoo_freshdesk_connector/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/misc/whatsapp.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/modules/1.png b/odoo_freshdesk_connector/static/description/assets/modules/1.png new file mode 100644 index 000000000..e90228872 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/modules/1.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/modules/2.png b/odoo_freshdesk_connector/static/description/assets/modules/2.png new file mode 100644 index 000000000..fa478cd14 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/modules/2.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/modules/3.png b/odoo_freshdesk_connector/static/description/assets/modules/3.png new file mode 100644 index 000000000..2fb947749 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/modules/3.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/modules/4.jpg b/odoo_freshdesk_connector/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..455ecf7f0 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/modules/4.jpg differ diff --git a/odoo_freshdesk_connector/static/description/assets/modules/5.png b/odoo_freshdesk_connector/static/description/assets/modules/5.png new file mode 100644 index 000000000..e4c70ded0 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/modules/5.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/modules/6.png b/odoo_freshdesk_connector/static/description/assets/modules/6.png new file mode 100644 index 000000000..0d814d2db Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/modules/6.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/1.png b/odoo_freshdesk_connector/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..0839f46a8 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/1.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/10.png b/odoo_freshdesk_connector/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..5cf17e939 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/10.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/11.png b/odoo_freshdesk_connector/static/description/assets/screenshots/11.png new file mode 100644 index 000000000..2af462156 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/11.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/12.png b/odoo_freshdesk_connector/static/description/assets/screenshots/12.png new file mode 100644 index 000000000..9369d3d9a Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/12.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/13.png b/odoo_freshdesk_connector/static/description/assets/screenshots/13.png new file mode 100644 index 000000000..bb3e36132 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/13.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/2.png b/odoo_freshdesk_connector/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..e119171de Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/2.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/3.png b/odoo_freshdesk_connector/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..f22c95ad6 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/3.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/4.png b/odoo_freshdesk_connector/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..1306bd21f Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/4.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/5.png b/odoo_freshdesk_connector/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..e249c2393 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/5.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/6.png b/odoo_freshdesk_connector/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..c207633f8 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/6.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/7.png b/odoo_freshdesk_connector/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..05f26279d Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/7.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/8.png b/odoo_freshdesk_connector/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..6ded72286 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/8.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/9.png b/odoo_freshdesk_connector/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..3bee775a0 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/9.png differ diff --git a/odoo_freshdesk_connector/static/description/assets/screenshots/hero.gif b/odoo_freshdesk_connector/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..68ce853af Binary files /dev/null and b/odoo_freshdesk_connector/static/description/assets/screenshots/hero.gif differ diff --git a/odoo_freshdesk_connector/static/description/banner.jpg b/odoo_freshdesk_connector/static/description/banner.jpg new file mode 100644 index 000000000..195a0ad19 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/banner.jpg differ diff --git a/odoo_freshdesk_connector/static/description/icon.png b/odoo_freshdesk_connector/static/description/icon.png new file mode 100644 index 000000000..f2d06add3 Binary files /dev/null and b/odoo_freshdesk_connector/static/description/icon.png differ diff --git a/odoo_freshdesk_connector/static/description/index.html b/odoo_freshdesk_connector/static/description/index.html new file mode 100644 index 000000000..ecdf6c8db --- /dev/null +++ b/odoo_freshdesk_connector/static/description/index.html @@ -0,0 +1,635 @@ +
+ +
+ +
+
+ Community +
+
+
+ +
+
+
+ +

+ Odoo Freshdesk Connector

+

+ This module will help to connect the tickets and contacts + in the odoo to freshdesk also vice versa

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

+ Explore This Module

+
+ + + + + +
+
+ +
+

+ Overview

+
+ +
+
This module helps to connect the odoo and + freshdesk which will helps you to import and export the tickets and + contacts from the + odoo to freshdesk. +
+
+ + + +
+
+ +
+

+ Features

+
+ +
+
+
+ + Easy to import tickets from freshdesk to odoo +
+
+ + Easy to export tickets from odoo to freshdesk +
+
+ + Easy to import contacts according to tickets from freshdesk to odoo +
+
+ + Easy to export contacts according to tickets from odoo to freshdesk +
+
+
+ + + +
+
+ +
+

+ Screenshots

+
+ +
+
+
+

+ Go to the Settings page. +

+ +
+
+

+ Go to the Freshdesk settings section. +

+ +
+
+

+ In the Freshdesk settings configuration section you can provide + your domain in the Domain field. You can get your freshdesk account from here +

+ +
+
+

+ In your Freshdesk account, you'll notice that each user has + their own unique domain. Simply copy and paste this domain into + the Freshdesk configuration section.

+ +
+
+

+ In the Freshdesk settings configuration section you can provide + your API Key. +

+ +
+
+

+ For the API key you need to go to your Profile settings in + freshdesk. +

+ +
+
+

+ To obtain your Freshdesk API key, click the 'View API Key' + button after verifying your credentials. Then, copy this API Key + and paste it into the API Key field within the Freshdesk + configuration settings in Odoo. + +

+ +
+
+

+ To test the connection from the odoo to freshdesk you have the + option to test the connection by clicking on the TEST button. +

+ +
+
+

+ If the connection is successful then you can see the + notification + as the connection is successful else it will be shown as the + connection failed. +

+ +
+
+

+ In the configuration section you can mention that what all + things + you can import and export from odoo to freshdesk also vice + versa. +

+ +
+
+

+ By clicking on the button EXECUTE OPERATION(S) you can execute the + operations as given in the configurations. +

+ +
+
+

+ After the execution you can see the tickets and contacts of freshdesk in odoo +

+ +
+
+

+ After the execution also you can see the tickets and contacts of odoo in freshdesk +

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

+ Related 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

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

+ Support

+
+ +
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 27707

+
+
+
+
+
+
+
+ +
+
+
+ diff --git a/odoo_freshdesk_connector/views/help_ticket_views.xml b/odoo_freshdesk_connector/views/help_ticket_views.xml new file mode 100644 index 000000000..2332d7baf --- /dev/null +++ b/odoo_freshdesk_connector/views/help_ticket_views.xml @@ -0,0 +1,23 @@ + + + + + + help.ticket.view.form.inherit.odoo.freshdesk.connector + + help.ticket + + + + + + + + + + + + + + diff --git a/odoo_freshdesk_connector/views/res_config_settings_views.xml b/odoo_freshdesk_connector/views/res_config_settings_views.xml new file mode 100644 index 000000000..05e078fda --- /dev/null +++ b/odoo_freshdesk_connector/views/res_config_settings_views.xml @@ -0,0 +1,97 @@ + + + + + + res.config.settings.view.form.inherit.odoo.freshdesk.connector + + res.config.settings + + + +
+

Authentication

+
+
+
+
+ Domain +
+ +
+
+
+ API Key +
+ +
+
+
+
+
+
+

Configuration

+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ + + + diff --git a/odoo_freshdesk_connector/views/res_partner_views.xml b/odoo_freshdesk_connector/views/res_partner_views.xml new file mode 100644 index 000000000..c2adc1555 --- /dev/null +++ b/odoo_freshdesk_connector/views/res_partner_views.xml @@ -0,0 +1,23 @@ + + + + + + res.partner.view.form.inherit.odoo.freshdesk.connector + + res.partner + + + + + + + + + + + + + +