@ -0,0 +1,45 @@ | 
				
			|||||
 | 
					.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg | 
				
			||||
 | 
					    :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | 
				
			||||
 | 
					    :alt: License: AGPL-3 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Odoo ChatGPT Connector | 
				
			||||
 | 
					====================== | 
				
			||||
 | 
					This module allow to connect Odoo to ChatGPT. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Company | 
				
			||||
 | 
					------- | 
				
			||||
 | 
					* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					License | 
				
			||||
 | 
					------- | 
				
			||||
 | 
					General Public License, Version 3 (AGPL v3). | 
				
			||||
 | 
					(https://www.gnu.org/licenses/agpl-3.0-standalone.html) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Credits | 
				
			||||
 | 
					------- | 
				
			||||
 | 
					Developer: (V16) Ammu , | 
				
			||||
 | 
					           (V17) Safa Faheem PE , | 
				
			||||
 | 
					           (V18) Nivedhya T | 
				
			||||
 | 
					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 `Our Website <https://cybrosys.com/>`__ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Further information | 
				
			||||
 | 
					=================== | 
				
			||||
 | 
					HTML Description: `<static/description/index.html>`__ | 
				
			||||
@ -0,0 +1,23 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    Author:  Cybrosys Techno Solutions(<https://www.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 <http://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					from . import controllers | 
				
			||||
 | 
					from . import models | 
				
			||||
@ -0,0 +1,50 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    Author:  Cybrosys Techno Solutions(<https://www.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 <http://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    'name': 'Odoo ChatGPT Connector', | 
				
			||||
 | 
					    'version': '18.0.1.0.0', | 
				
			||||
 | 
					    'category': 'Extra Tools', | 
				
			||||
 | 
					    'summary': 'Connect Odoo  with ChatGPT', | 
				
			||||
 | 
					    'description': """Module allows the application to leverage the capabilities  | 
				
			||||
 | 
					     of the GPT language model to generate human-like responses. """, | 
				
			||||
 | 
					    'author': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'company': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'maintainer': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'website': 'https://www.cybrosys.com', | 
				
			||||
 | 
					    'depends': ['website'], | 
				
			||||
 | 
					    'data': [ | 
				
			||||
 | 
					        'views/odoo_chatgpt_connector_menus.xml', | 
				
			||||
 | 
					        'views/res_config_setting_views.xml', | 
				
			||||
 | 
					        'views/website_templates.xml', | 
				
			||||
 | 
					    ], | 
				
			||||
 | 
					    'assets': { | 
				
			||||
 | 
					        'web.assets_frontend': [ | 
				
			||||
 | 
					            'odoo_chatgpt_connector/static/src/js/submit_request.js', | 
				
			||||
 | 
					            'odoo_chatgpt_connector/static/src/css/container.css' | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    'images': ['static/description/banner.jpg'], | 
				
			||||
 | 
					    'license': 'AGPL-3', | 
				
			||||
 | 
					    'installable': True, | 
				
			||||
 | 
					    'application': False, | 
				
			||||
 | 
					    'auto_install': False, | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,22 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    Author:  Cybrosys Techno Solutions(<https://www.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 <http://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					from . import odoo_chatgpt_connector | 
				
			||||
@ -0,0 +1,33 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    Author:  Cybrosys Techno Solutions(<https://www.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 <http://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					from odoo import http | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ChatgptConnector(http.Controller): | 
				
			||||
 | 
					    """ This class defines the HTTP routes and methods for ChatGPT interaction. | 
				
			||||
 | 
					        It provides functionality to render the ChatGPT template for user | 
				
			||||
 | 
					        interaction.""" | 
				
			||||
 | 
					    @http.route(['/chatgpt_form'], type='http', auth="public", csrf=False, | 
				
			||||
 | 
					                website=True) | 
				
			||||
 | 
					    def question_submit(self): | 
				
			||||
 | 
					        """Rendering the template of ChatGPT""" | 
				
			||||
 | 
					        return http.request.render('odoo_chatgpt_connector.connector') | 
				
			||||
@ -0,0 +1,6 @@ | 
				
			|||||
 | 
					## Module <odoo_chatgpt_connector> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#### 04.06.2025 | 
				
			||||
 | 
					#### Version 18.0.1.0.0 | 
				
			||||
 | 
					#### ADD | 
				
			||||
 | 
					- Initial commit for Odoo ChatGPT Connector | 
				
			||||
@ -0,0 +1,22 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    Author:  Cybrosys Techno Solutions(<https://www.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 <http://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					from . import res_config_settings | 
				
			||||
@ -0,0 +1,96 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    Author:  Cybrosys Techno Solutions(<https://www.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 <http://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################### | 
				
			||||
 | 
					from odoo import fields, models, _ | 
				
			||||
 | 
					import requests | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					def notification_response(title, notification_type, message): | 
				
			||||
 | 
					    """Method notification_response returns the notification data according | 
				
			||||
 | 
					    to each conditions while checking the connection to ChatGPT.""" | 
				
			||||
 | 
					    notification_data = { | 
				
			||||
 | 
					        'type': 'ir.actions.client', | 
				
			||||
 | 
					        'tag': 'display_notification', | 
				
			||||
 | 
					        'params': { | 
				
			||||
 | 
					            'title': _(title), | 
				
			||||
 | 
					            'type': notification_type, | 
				
			||||
 | 
					            'message': message, | 
				
			||||
 | 
					            'sticky': False, | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    return notification_data | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class ResConfigSettings(models.TransientModel): | 
				
			||||
 | 
					    """This class extends the base 'res.config.settings' model to include | 
				
			||||
 | 
					        additional fields for configuring ChatGPT integration settings.""" | 
				
			||||
 | 
					    _inherit = "res.config.settings" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    api_key = fields.Char(string="API Key", help="Provide the API key here", | 
				
			||||
 | 
					                          config_parameter="odoo_chatgpt_connector.api_key") | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    def action_test_api(self): | 
				
			||||
 | 
					        """Method action_test_api to test the connection from Odoo to ChatGPT""" | 
				
			||||
 | 
					        url = "https://api.openai.com/v1/chat/completions" | 
				
			||||
 | 
					        payload = { | 
				
			||||
 | 
					            'model': 'gpt-3.5-turbo', | 
				
			||||
 | 
					            'messages': [ | 
				
			||||
 | 
					                {"role": "user", "content": ""} | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        api_key = self.env['ir.config_parameter'].sudo().get_param( | 
				
			||||
 | 
					            'odoo_chatgpt_connector.api_key') | 
				
			||||
 | 
					        if not api_key: | 
				
			||||
 | 
					            notification = notification_response( | 
				
			||||
 | 
					                title="No API key!", | 
				
			||||
 | 
					                notification_type="danger", | 
				
			||||
 | 
					                message="Please provide an API Key" | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					            return notification | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        headers = { | 
				
			||||
 | 
					            'Authorization': f"Bearer {api_key}", | 
				
			||||
 | 
					            'Content-Type': "application/json" | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        try: | 
				
			||||
 | 
					            response = requests.post(url, headers=headers, json=payload, timeout=10) | 
				
			||||
 | 
					            response.raise_for_status()  # Raise error for bad HTTP status | 
				
			||||
 | 
					            notification = notification_response( | 
				
			||||
 | 
					                title="Connection Successful!", | 
				
			||||
 | 
					                notification_type="success", | 
				
			||||
 | 
					                message="Successfully connected to ChatGPT" | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					            return notification | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        except requests.exceptions.Timeout: | 
				
			||||
 | 
					            return notification_response( | 
				
			||||
 | 
					                title="Connection Timeout!", | 
				
			||||
 | 
					                notification_type="danger", | 
				
			||||
 | 
					                message="The request to ChatGPT timed out" | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        except requests.exceptions.RequestException as e: | 
				
			||||
 | 
					            return notification_response( | 
				
			||||
 | 
					                title="Connection Error!", | 
				
			||||
 | 
					                notification_type="danger", | 
				
			||||
 | 
					                message="Error connecting to ChatGPT: API Key may be invalid" | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					
 | 
				
			||||
| 
		 After Width: | Height: | Size: 2.2 KiB  | 
| 
		 After Width: | Height: | Size: 28 KiB  | 
| 
		 After Width: | Height: | Size: 628 KiB  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 210 KiB  | 
| 
		 After Width: | Height: | Size: 209 KiB  | 
| 
		 After Width: | Height: | Size: 109 KiB  | 
| 
		 After Width: | Height: | Size: 495 B  | 
| 
		 After Width: | Height: | Size: 1.0 KiB  | 
| 
		 After Width: | Height: | Size: 624 B  | 
| 
		 After Width: | Height: | Size: 136 KiB  | 
| 
		 After Width: | Height: | Size: 214 KiB  | 
| 
		 After Width: | Height: | Size: 36 KiB  | 
| 
		 After Width: | Height: | Size: 3.6 KiB  | 
| 
		 After Width: | Height: | Size: 310 B  | 
| 
		 After Width: | Height: | Size: 929 B  | 
| 
		 After Width: | Height: | Size: 1.3 KiB  | 
| 
		 After Width: | Height: | Size: 3.3 KiB  | 
| 
		 After Width: | Height: | Size: 1.4 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
| 
		 After Width: | Height: | Size: 542 B  | 
| 
		 After Width: | Height: | Size: 576 B  | 
| 
		 After Width: | Height: | Size: 733 B  | 
| 
		 After Width: | Height: | Size: 4.3 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 4.0 KiB  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 383 KiB  | 
| 
		 After Width: | Height: | Size: 2.2 KiB  | 
| 
		 After Width: | Height: | Size: 911 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 600 B  | 
| 
		 After Width: | Height: | Size: 673 B  | 
| 
		 After Width: | Height: | Size: 2.0 KiB  | 
| 
		 After Width: | Height: | Size: 462 B  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 After Width: | Height: | Size: 926 B  | 
| 
		 After Width: | Height: | Size: 9.0 KiB  | 
| 
		 After Width: | Height: | Size: 23 KiB  | 
| 
		 After Width: | Height: | Size: 7.0 KiB  | 
| 
		 After Width: | Height: | Size: 878 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 653 B  | 
| 
		 After Width: | Height: | Size: 800 B  | 
| 
		 After Width: | Height: | Size: 905 B  | 
| 
		 After Width: | Height: | Size: 189 KiB  | 
| 
		 After Width: | Height: | Size: 4.3 KiB  | 
| 
		 After Width: | Height: | Size: 839 B  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 5.9 KiB  | 
| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 After Width: | Height: | Size: 34 KiB  | 
| 
		 After Width: | Height: | Size: 26 KiB  | 
| 
		 After Width: | Height: | Size: 3.8 KiB  | 
| 
		 After Width: | Height: | Size: 23 KiB  | 
| 
		 After Width: | Height: | Size: 1.9 KiB  | 
| 
		 After Width: | Height: | Size: 2.3 KiB  | 
| 
		 After Width: | Height: | Size: 427 B  | 
| 
		 After Width: | Height: | Size: 627 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 988 B  | 
| 
		 After Width: | Height: | Size: 3.7 KiB  | 
| 
		 After Width: | Height: | Size: 5.0 KiB  | 
| 
		 After Width: | Height: | Size: 875 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 1.0 MiB  | 
| 
		 After Width: | Height: | Size: 89 KiB  | 
| 
		 After Width: | Height: | Size: 544 KiB  | 
| 
		 After Width: | Height: | Size: 1.0 MiB  | 
| 
		 After Width: | Height: | Size: 94 KiB  | 
| 
		 After Width: | Height: | Size: 91 KiB  | 
| 
		 After Width: | Height: | Size: 1.4 MiB  | 
| 
		 After Width: | Height: | Size: 114 KiB  | 
| 
		 After Width: | Height: | Size: 102 KiB  | 
| 
		 After Width: | Height: | Size: 116 KiB  | 
| 
		 After Width: | Height: | Size: 109 KiB  | 
| 
		 After Width: | Height: | Size: 54 KiB  | 
| 
		 After Width: | Height: | Size: 84 KiB  | 
| 
		 After Width: | Height: | Size: 87 KiB  | 
| 
		 After Width: | Height: | Size: 880 KiB  | 
| 
		 After Width: | Height: | Size: 753 KiB  | 
| 
		 After Width: | Height: | Size: 57 KiB  | 
@ -0,0 +1,325 @@ | 
				
			|||||
 | 
					
 | 
				
			||||
 | 
					#result_area{ | 
				
			||||
 | 
					  overflow:auto; | 
				
			||||
 | 
					  width:1023px !important; | 
				
			||||
 | 
					  font-size:14px; | 
				
			||||
 | 
					  height: 300px !important; | 
				
			||||
 | 
					  margin:0px ; | 
				
			||||
 | 
					  display:block; | 
				
			||||
 | 
					  border-radius:10px; | 
				
			||||
 | 
					  margin-bottom: 40px !important; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					} | 
				
			||||
 | 
					background:#eee; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.padding { | 
				
			||||
 | 
					    padding: 50px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/* GRID */ | 
				
			||||
 | 
					.col-md-9{ | 
				
			||||
 | 
					width: 106%; | 
				
			||||
 | 
					padding: 129px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.col { | 
				
			||||
 | 
					    padding: 10px 20px; | 
				
			||||
 | 
						margin-bottom: 10px; | 
				
			||||
 | 
						background: #fff; | 
				
			||||
 | 
						color: #666666; | 
				
			||||
 | 
						text-align: center; | 
				
			||||
 | 
						font-weight: 400; | 
				
			||||
 | 
						box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.1); | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.row h3 { | 
				
			||||
 | 
						color: #666666; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.row.grid { | 
				
			||||
 | 
						margin-left: 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid { | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						width: 100%; | 
				
			||||
 | 
						background: #fff; | 
				
			||||
 | 
						color: #666666; | 
				
			||||
 | 
						border-radius: 2px; | 
				
			||||
 | 
						margin-bottom: 25px; | 
				
			||||
 | 
						box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.1); | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header { | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						border-bottom: 1px solid #ddd; | 
				
			||||
 | 
						padding: 15px 10px 10px 20px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header:before, | 
				
			||||
 | 
					.grid .grid-header:after { | 
				
			||||
 | 
						display: table; | 
				
			||||
 | 
						content: " "; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header:after { | 
				
			||||
 | 
						clear: both; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header span, | 
				
			||||
 | 
					.grid .grid-header > .fa { | 
				
			||||
 | 
						display: inline-block; | 
				
			||||
 | 
						margin: 0; | 
				
			||||
 | 
						font-weight: 300; | 
				
			||||
 | 
						font-size: 1.5em; | 
				
			||||
 | 
						float: left; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header span { | 
				
			||||
 | 
						padding: 0 5px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header > .fa { | 
				
			||||
 | 
						padding: 5px 10px 0 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header > .grid-tools { | 
				
			||||
 | 
						padding: 4px 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header > .grid-tools a { | 
				
			||||
 | 
						color: #999999; | 
				
			||||
 | 
						padding-left: 10px; | 
				
			||||
 | 
						cursor: pointer; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-header > .grid-tools a:hover { | 
				
			||||
 | 
						color: #666666; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .grid-body { | 
				
			||||
 | 
						padding: 15px 20px 15px 20px; | 
				
			||||
 | 
						font-size: 0.9em; | 
				
			||||
 | 
						line-height: 1.9em; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .full { | 
				
			||||
 | 
						padding: 0 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid .transparent { | 
				
			||||
 | 
						box-shadow: none !important; | 
				
			||||
 | 
						margin: 0px !important; | 
				
			||||
 | 
						border-radius: 0px !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top.black > .grid-header { | 
				
			||||
 | 
						border-top-color: #000000 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom.black > .grid-body { | 
				
			||||
 | 
						border-bottom-color: #000000 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top.blue > .grid-header { | 
				
			||||
 | 
						border-top-color: #007be9 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom.blue > .grid-body { | 
				
			||||
 | 
						border-bottom-color: #007be9 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top.green > .grid-header { | 
				
			||||
 | 
						border-top-color: #00c273 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom.green > .grid-body { | 
				
			||||
 | 
						border-bottom-color: #00c273 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top.purple > .grid-header { | 
				
			||||
 | 
						border-top-color: #a700d3 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom.purple > .grid-body { | 
				
			||||
 | 
						border-bottom-color: #a700d3 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top.red > .grid-header { | 
				
			||||
 | 
						border-top-color: #dc1200 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom.red > .grid-body { | 
				
			||||
 | 
						border-bottom-color: #dc1200 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top.orange > .grid-header { | 
				
			||||
 | 
						border-top-color: #f46100 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom.orange > .grid-body { | 
				
			||||
 | 
						border-bottom-color: #f46100 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.no-border > .grid-header { | 
				
			||||
 | 
						border-bottom: 0px !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.top > .grid-header { | 
				
			||||
 | 
						border-top-width: 4px !important; | 
				
			||||
 | 
						border-top-style: solid !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.grid.bottom > .grid-body { | 
				
			||||
 | 
						border-bottom-width: 4px !important; | 
				
			||||
 | 
						border-bottom-style: solid !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/* SUPPORT TICKET */ | 
				
			||||
 | 
					.support ul { | 
				
			||||
 | 
					    list-style: none; | 
				
			||||
 | 
						padding: 0px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support ul li { | 
				
			||||
 | 
						padding: 8px 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support ul li a { | 
				
			||||
 | 
						color: #999; | 
				
			||||
 | 
						display: block; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support ul li a:hover { | 
				
			||||
 | 
						color: #666; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support ul li.active { | 
				
			||||
 | 
						background: #0073b7; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support ul li.active a { | 
				
			||||
 | 
						color: #fff; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support ul.support-label li { | 
				
			||||
 | 
						padding: 2px 0px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support h2, | 
				
			||||
 | 
					.support-content h2 { | 
				
			||||
 | 
						margin-top: 5px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .list-group li { | 
				
			||||
 | 
						padding: 15px 20px 12px 20px; | 
				
			||||
 | 
						cursor: pointer; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .list-group li:hover { | 
				
			||||
 | 
						background: #eee; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .fa-padding .fa { | 
				
			||||
 | 
						padding-top: 5px; | 
				
			||||
 | 
						width: 1.5em; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .info { | 
				
			||||
 | 
						color: #777; | 
				
			||||
 | 
						margin: 0px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content a { | 
				
			||||
 | 
						color: #111; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .info a:hover { | 
				
			||||
 | 
						text-decoration: underline; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .info .fa { | 
				
			||||
 | 
						width: 1.5em; | 
				
			||||
 | 
						text-align: center; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .number { | 
				
			||||
 | 
						color: #777; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content img { | 
				
			||||
 | 
						margin: 0 auto; | 
				
			||||
 | 
						display: block; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content .modal-body { | 
				
			||||
 | 
						padding-bottom: 0px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.support-content-comment { | 
				
			||||
 | 
						padding: 10px 10px 10px 30px; | 
				
			||||
 | 
						background: #eee; | 
				
			||||
 | 
						border-top: 1px solid #ccc; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/* BACKGROUND COLORS */ | 
				
			||||
 | 
					.bg-red, .bg-yellow, .bg-aqua, .bg-blue, .bg-light-blue, .bg-green, .bg-navy, .bg-teal, .bg-olive, .bg-lime, .bg-orange, .bg-fuchsia, .bg-purple, .bg-maroon, bg-gray, bg-black, .bg-red a, .bg-yellow a, .bg-aqua a, .bg-blue a, .bg-light-blue a, .bg-green a, .bg-navy a, .bg-teal a, .bg-olive a, .bg-lime a, .bg-orange a, .bg-fuchsia a, .bg-purple a, .bg-maroon a, bg-gray a, .bg-black a { | 
				
			||||
 | 
					    color: #f9f9f9 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-white, .bg-white a { | 
				
			||||
 | 
						color: #999999 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-red { | 
				
			||||
 | 
						background-color: #f56954 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-yellow { | 
				
			||||
 | 
						background-color: #f39c12 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-aqua { | 
				
			||||
 | 
						background-color: #00c0ef !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-blue { | 
				
			||||
 | 
						background-color: #0073b7 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-light-blue { | 
				
			||||
 | 
						background-color: #3c8dbc !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-green { | 
				
			||||
 | 
						background-color: #00a65a !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-navy { | 
				
			||||
 | 
						background-color: #001f3f !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-teal { | 
				
			||||
 | 
						background-color: #39cccc !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-olive { | 
				
			||||
 | 
						background-color: #3d9970 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-lime { | 
				
			||||
 | 
						background-color: #01ff70 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-orange { | 
				
			||||
 | 
						background-color: #ff851b !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-fuchsia { | 
				
			||||
 | 
						background-color: #f012be !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-purple { | 
				
			||||
 | 
						background-color: #932ab6 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-maroon { | 
				
			||||
 | 
						background-color: #85144b !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-gray { | 
				
			||||
 | 
						background-color: #eaeaec !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.bg-black { | 
				
			||||
 | 
						background-color: #222222 !important; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.btn-default{ | 
				
			||||
 | 
					    left: 1600%; | 
				
			||||
 | 
					    border: #8e7d6c; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,85 @@ | 
				
			|||||
 | 
					/** @odoo-module **/ | 
				
			||||
 | 
					import publicWidget from '@web/legacy/js/public/public_widget'; | 
				
			||||
 | 
					import { _t } from "@web/core/l10n/translation"; | 
				
			||||
 | 
					publicWidget.registry.QuestionInput = publicWidget.Widget.extend({ | 
				
			||||
 | 
					    selector: "#main_layout", | 
				
			||||
 | 
					    events: { | 
				
			||||
 | 
					        'click #send_button': 'get_answer', | 
				
			||||
 | 
					        'click #copy_content': 'copy', | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * @constructor | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    init: function() { | 
				
			||||
 | 
					        this._super(...arguments); | 
				
			||||
 | 
					        this.orm = this.bindService("orm"); | 
				
			||||
 | 
					        this.notification = this.bindService("notification"); | 
				
			||||
 | 
					        this.api_key = ""; | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    /* For getting the Answer of submitted question */ | 
				
			||||
 | 
					    get_answer: async function(event) { | 
				
			||||
 | 
					        $(event.currentTarget).prop("disabled", true); | 
				
			||||
 | 
					        $('#result_area').val(''); | 
				
			||||
 | 
					        $('#result_area')[0].placeholder = "Loading....."; | 
				
			||||
 | 
					        if (!this.api_key) { | 
				
			||||
 | 
					            await this.orm.call( | 
				
			||||
 | 
					                "ir.config_parameter", "get_param", ["odoo_chatgpt_connector.api_key"] | 
				
			||||
 | 
					            ).then(result => { | 
				
			||||
 | 
					                this.api_key = result; | 
				
			||||
 | 
					            }); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        var question = $('#question_input').val(); | 
				
			||||
 | 
					        if (!question) { | 
				
			||||
 | 
					            $('#result_area')[0].placeholder = "Please drop your question"; | 
				
			||||
 | 
					            this.notification.add( | 
				
			||||
 | 
					                _t("Please drop your question"), | 
				
			||||
 | 
					                { type: 'danger', sticky: false }, | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					            $(event.currentTarget).prop("disabled", false); | 
				
			||||
 | 
					            return; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        var myHeaders = new Headers(); | 
				
			||||
 | 
					        myHeaders.append("Content-Type", "application/json"); | 
				
			||||
 | 
					        myHeaders.append("Authorization", "Bearer " + this.api_key); | 
				
			||||
 | 
					        var raw = JSON.stringify({ | 
				
			||||
 | 
					            "model": "gpt-3.5-turbo-instruct", | 
				
			||||
 | 
					            "prompt": question, | 
				
			||||
 | 
					            "temperature": 0, | 
				
			||||
 | 
					            "max_tokens": 1000, | 
				
			||||
 | 
					            "top_p": 1, | 
				
			||||
 | 
					            "frequency_penalty": 0, | 
				
			||||
 | 
					            "presence_penalty": 0, | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        var requestOptions = { | 
				
			||||
 | 
					            method: 'POST', | 
				
			||||
 | 
					            headers: myHeaders, | 
				
			||||
 | 
					            body: raw, | 
				
			||||
 | 
					            redirect: 'follow' | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					        fetch("https://api.openai.com/v1/completions", requestOptions) | 
				
			||||
 | 
					            .then(response => response.json()) | 
				
			||||
 | 
					            .then(result => { | 
				
			||||
 | 
					                let area = result.choices[0].text; | 
				
			||||
 | 
					                $('#result_area').val(area.trim()); | 
				
			||||
 | 
					                $(event.currentTarget).prop("disabled", false); | 
				
			||||
 | 
					            }) | 
				
			||||
 | 
					            .catch(error => { | 
				
			||||
 | 
					                $('#result_area')[0].placeholder = "Couldn't fetch"; | 
				
			||||
 | 
					                this.notification.add( | 
				
			||||
 | 
					                _t("Couldn't connect to OpenAI server please check your Credentials"), | 
				
			||||
 | 
					                { type: 'danger', sticky: false }, | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					                $(event.currentTarget).prop("disabled", false); | 
				
			||||
 | 
					            }); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    /* For copying the Answer to the clipboard */ | 
				
			||||
 | 
					    copy: function(event) { | 
				
			||||
 | 
					        var textToCopy = $("#result_area").val(); | 
				
			||||
 | 
					        var tempTextarea = $('<textarea>'); | 
				
			||||
 | 
					        $('body').append(tempTextarea); | 
				
			||||
 | 
					        tempTextarea.val(textToCopy).select(); | 
				
			||||
 | 
					        document.execCommand('copy'); | 
				
			||||
 | 
					        tempTextarea.remove(); | 
				
			||||
 | 
					        $("#copy_feedback").fadeIn().delay(1000).fadeOut(); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					}); | 
				
			||||
@ -0,0 +1,10 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					<!--    menu for chatgpt form in website--> | 
				
			||||
 | 
					    <record id="menu_chatgpt" model="website.menu"> | 
				
			||||
 | 
					        <field name="name">ChatGPT</field> | 
				
			||||
 | 
					        <field name="url">/chatgpt_form</field> | 
				
			||||
 | 
					        <field name="parent_id" ref="website.main_menu"/> | 
				
			||||
 | 
					        <field name="sequence" type="int">63</field> | 
				
			||||
 | 
					    </record> | 
				
			||||
 | 
					</odoo> | 
				
			||||
@ -0,0 +1,34 @@ | 
				
			|||||
 | 
					<?xml version="1.0"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					<!--    inherit website settings--> | 
				
			||||
 | 
					    <record id="res_config_settings_view_form" model="ir.ui.view"> | 
				
			||||
 | 
					        <field name="name">res.config.settings.view.form.inherit.odoo.chatgpt.connector</field> | 
				
			||||
 | 
					        <field name="model">res.config.settings</field> | 
				
			||||
 | 
					        <field name="priority" eval="20"/> | 
				
			||||
 | 
					        <field name="inherit_id" ref="website.res_config_settings_view_form"/> | 
				
			||||
 | 
					        <field name="arch" type="xml"> | 
				
			||||
 | 
					            <xpath expr="//block[@id='website_info_settings']" position="after"> | 
				
			||||
 | 
					                <h2>ChatGPT Connection</h2> | 
				
			||||
 | 
					                <div class="col-xs-12 row o_settings_container" | 
				
			||||
 | 
					                     id="website_info_settings"> | 
				
			||||
 | 
					                    <div class="col-xs-12 col-md-6 o_setting_box"> | 
				
			||||
 | 
					                        <div class="o_setting_right_pane border-start-0"> | 
				
			||||
 | 
					                            <div class="content-group"> | 
				
			||||
 | 
					                                <div class="row mt8"> | 
				
			||||
 | 
					                                    <label class="col-lg-3" string="API Key" | 
				
			||||
 | 
					                                           for="api_key"/> | 
				
			||||
 | 
					                                    <field name="api_key" password="True" | 
				
			||||
 | 
					                                           title="Provide the API key here"/> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                            </div> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="o_setting_right_pane"> | 
				
			||||
 | 
					                            <button class="btn btn-primary" type="object" | 
				
			||||
 | 
					                                    name="action_test_api" string="Test Connection"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </xpath> | 
				
			||||
 | 
					        </field> | 
				
			||||
 | 
					    </record> | 
				
			||||
 | 
					</odoo> | 
				
			||||
@ -0,0 +1,55 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					<!--    template in website for chatgpt interaction--> | 
				
			||||
 | 
					    <template id="connector"> | 
				
			||||
 | 
					        <t t-call="website.layout"> | 
				
			||||
 | 
					            <div id="snippetContent"> | 
				
			||||
 | 
					                <div class="container" id="main_layout"> | 
				
			||||
 | 
					                    <section class="content"> | 
				
			||||
 | 
					                        <div class="row"> | 
				
			||||
 | 
					                            <div class="col-md-9"> | 
				
			||||
 | 
					                                <div class="grid support-content"> | 
				
			||||
 | 
					                                    <div class="grid-body"> | 
				
			||||
 | 
					                                        <h2>Drop Your Questions</h2> | 
				
			||||
 | 
					                                        <div> | 
				
			||||
 | 
					                                            <input type="text" | 
				
			||||
 | 
					                                                   id="question_input" | 
				
			||||
 | 
					                                                   class="form-control o_website_form_input" | 
				
			||||
 | 
					                                                   name="question" | 
				
			||||
 | 
					                                                   style="border-radius: 15px 15px 15px 15px;margin-bottom:30px;"/> | 
				
			||||
 | 
					                                            <button type="button" | 
				
			||||
 | 
					                                                    id="send_button" | 
				
			||||
 | 
					                                                    class="btn btn-success pull-right" | 
				
			||||
 | 
					                                                    data-toggle="modal" | 
				
			||||
 | 
					                                                    data-target="#newIssue" | 
				
			||||
 | 
					                                                    style="border-radius: 15px 15px 15px 15px;margin-top: -22px;">Generate Response | 
				
			||||
 | 
					                                            </button> | 
				
			||||
 | 
					                                        </div> | 
				
			||||
 | 
					                                        <div class="row"> | 
				
			||||
 | 
					                                            <div class="col-md-12"> | 
				
			||||
 | 
					                                                <textarea readonly="readonly" id="result_area" | 
				
			||||
 | 
					                                                          class="list-group fa-padding" | 
				
			||||
 | 
					                                                          name="answer" rows='1' | 
				
			||||
 | 
					                                                          contenteditable="false" | 
				
			||||
 | 
					                                                          style="padding-right: 10px; padding-left: 10px; padding-top: 20px;"/> | 
				
			||||
 | 
					                                                <div class="btn-group"> | 
				
			||||
 | 
					                                                    <button type="button" | 
				
			||||
 | 
					                                                            class="btn btn-outline-dark" | 
				
			||||
 | 
					                                                            id="copy_content">copy | 
				
			||||
 | 
					                                                    </button> | 
				
			||||
 | 
					                                                </div> | 
				
			||||
 | 
					                                                <div id="copy_feedback" class="mt-2" style="display: none; position: relative;"> | 
				
			||||
 | 
					                                                        <p>Copied to clipboard!</p> | 
				
			||||
 | 
					                                                </div> | 
				
			||||
 | 
					                                            </div> | 
				
			||||
 | 
					                                        </div> | 
				
			||||
 | 
					                                    </div> | 
				
			||||
 | 
					                                </div> | 
				
			||||
 | 
					                            </div> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                    </section> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </t> | 
				
			||||
 | 
					    </template> | 
				
			||||
 | 
					</odoo> | 
				
			||||