You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							88 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							88 lines
						
					
					
						
							3.6 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################### | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ############################################################################### | |
| import logging | |
| import requests | |
| 
 | |
| from odoo import api, fields, models, _ | |
| from odoo.exceptions import ValidationError | |
| 
 | |
| _logger = logging.getLogger(__name__) | |
| 
 | |
| 
 | |
| class PaymentProvider(models.Model): | |
|     """    Inherit Payment Provider to add new payment into the Payment Provider | |
|      page. | |
|      Methods: | |
|          _get_payment_method_information: Override to add PayTabs payment | |
|          method information to the existing methods. | |
|          _paytabs_make_request: Create a request to PayTabs | |
|          """ | |
|     _inherit = 'payment.provider' | |
| 
 | |
|     code = fields.Selection(selection_add=[('paytabs', 'paytabs')], | |
|                             ondelete={'paytabs': 'set default'}, | |
|                             help="The technical code of this payment provider", | |
|                             string="Code") | |
|     profile_key = fields.Char(string='Profile ID', groups='base.group_user', | |
|                               help="PayTabs profile id of the user") | |
|     api_key = fields.Char(string='Api Key', required_if_provider='paytabs', | |
|                           groups='base.group_user', help="PayTabs Server key") | |
|     domain = fields.Char(string='Api endpoint', help='API endpoint of Paytabs') | |
| 
 | |
|     @api.model | |
|     def _get_payment_method_information(self): | |
|         """Override to add PayTabs payment method information to the | |
|         existing methods. | |
|         """ | |
|         res = super()._get_payment_method_information() | |
|         res['paytabs'] = {'mode': 'unique', 'domain': [('type', '=', 'bank')]} | |
|         return res | |
| 
 | |
|     def _paytabs_make_request(self, url, data=None, method='POST'): | |
|         """Create a request to PayTabs | |
|  | |
|         :param url: The URL for the request. | |
|         :param data: The data to be sent with the request. | |
|         :param method: The HTTP method for the request (default is 'POST'). | |
|         :return: The response content.""" | |
|         self.ensure_one() | |
|         data.pop('api_url') | |
|         try: | |
|             response = requests.request( | |
|                 method, url, json=data, | |
|                 headers={ | |
|                     "Authorization": self.api_key, | |
|                     "Content-Type": "application/json", | |
|                 }, | |
|                 timeout=60) | |
|             response_content = response.json() | |
|             if 'code' in response_content and response_content['code'] == 1: | |
|                 raise ValidationError( | |
|                     _("PayTabs: Check profile ID and Api Key")) | |
|             if 'code' in response_content and response_content['code'] == 206: | |
|                 raise ValidationError(_("PayTabs: Currency not available.")) | |
|             return response_content | |
|         except requests.exceptions.RequestException: | |
|             _logger.exception("Unable to communicate with Paytabs: %s", url) | |
|             raise ValidationError( | |
|                 _("PayTabs: Could not establish a connection to the API.")) | |
| 
 | |
| 
 |