| @ -0,0 +1,44 @@ | |||||
|  | .. image:: https://img.shields.io/badge/license-LGPL--3-green.svg | ||||
|  |     :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html | ||||
|  |     :alt: License: LGPL-3 | ||||
|  | 
 | ||||
|  | Odoo CyberSource Payment Gateway | ||||
|  | ================================ | ||||
|  | * Odoo CyberSource Payment Gateway for Odoo 15 , This module is used to a safe payment with cybersource. | ||||
|  | 
 | ||||
|  | Configuration | ||||
|  | ============= | ||||
|  | No additional configuration required | ||||
|  | 
 | ||||
|  | License | ||||
|  | ------- | ||||
|  | General Public License, Version 3 (LGPL v3). | ||||
|  | (https://www.gnu.org/licenses/lgpl-3.0-standalone.html) | ||||
|  | 
 | ||||
|  | Company | ||||
|  | ------- | ||||
|  | * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | Credits | ||||
|  | ------- | ||||
|  | * Developer:  (V15) Mufeeda Shirin, | ||||
|  | * Contact:    odoo@cybrosys.com | ||||
|  | 
 | ||||
|  | Contacts | ||||
|  | -------- | ||||
|  | * Mail Contact : odoo@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 | ||||
|  | 
 | ||||
|  | For support and more information, please visit https://www.cybrosys.com | ||||
|  | 
 | ||||
|  | Further information | ||||
|  | =================== | ||||
|  | HTML Description: `<static/description/index.html>`__ | ||||
| @ -0,0 +1,24 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from . import controllers | ||||
|  | from . import models | ||||
|  | 
 | ||||
| @ -0,0 +1,55 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | { | ||||
|  |     'name': 'Odoo CyberSource Payment Gateway', | ||||
|  |     'version': '15.0.1.0.0', | ||||
|  |     'category': 'Website,eCommerce ', | ||||
|  |     'summary': """cybersource payment gateway as a payment provider in which | ||||
|  |      is used pay the order through website.""", | ||||
|  |     'description': """cybersource payment gateway as a payment provider in which  | ||||
|  |      is used pay the order through website.It provides an easy and fast payment  | ||||
|  |      processing through cybersource.""", | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'maintainer': 'Cybrosys Techno Solutions', | ||||
|  |     'website': 'https://www.cybrosys.com', | ||||
|  |     'depends': ['payment', 'website_sale'], | ||||
|  |     'data': [ | ||||
|  |         'views/payment_templates.xml', | ||||
|  |         'data/advanced_payment_cybersource_data.xml', | ||||
|  |         'views/payment_provider_views.xml', | ||||
|  |         'views/payment_transaction_views.xml', | ||||
|  |     ], | ||||
|  |     'assets': { | ||||
|  |         'web.assets_frontend': [ | ||||
|  |             '/advanced_payment_cybersource/static/src/js/payment_form.js', | ||||
|  |         ], | ||||
|  |     }, | ||||
|  |     'external_dependencies': { | ||||
|  |         'python': ['cybersource-rest-client-python'] | ||||
|  |     }, | ||||
|  |     'images': ['static/description/banner.png'], | ||||
|  |     'license': 'LGPL-3', | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'application': False, | ||||
|  | } | ||||
| @ -0,0 +1,22 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from . import advanced_payment_cybersource | ||||
| @ -0,0 +1,153 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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 json | ||||
|  | import os | ||||
|  | from CyberSource import * | ||||
|  | from CyberSource.logging.log_configuration import LogConfiguration | ||||
|  | from odoo import http, _ | ||||
|  | from odoo.exceptions import ValidationError | ||||
|  | from odoo.http import request | ||||
|  | import logging | ||||
|  | 
 | ||||
|  | _logger = logging.getLogger(__name__) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class WebsiteSaleFormCyberSource(http.Controller): | ||||
|  |     """This class is used to do the payment""" | ||||
|  | 
 | ||||
|  |     @http.route('/payment/cybersource/simulate_payment', type='json', | ||||
|  |                 auth='public') | ||||
|  |     def payment_with_flex_token(self, **post): | ||||
|  |         """This is used for payment processing using the flex token""" | ||||
|  |         address = request.env['res.partner'].browse( | ||||
|  |             post.get('values')['partner']) | ||||
|  |         client_reference_information = Ptsv2paymentsClientReferenceInformation( | ||||
|  |             code=post.get('reference')) | ||||
|  |         processing_information_capture = bool(post) | ||||
|  |         processing_information = Ptsv2paymentsProcessingInformation( | ||||
|  |             capture=processing_information_capture, | ||||
|  |             commerce_indicator="vbv" | ||||
|  |         ) | ||||
|  |         payment_information_tokenized_card = Ptsv2paymentsPaymentInformationTokenizedCard( | ||||
|  |             number=post.get('customer_input')['card_num'], | ||||
|  |             expiration_month=post.get('customer_input')['exp_month'], | ||||
|  |             expiration_year=post.get('customer_input')['exp_year'], | ||||
|  |             transaction_type="1" | ||||
|  |         ) | ||||
|  |         payment_information = Ptsv2paymentsPaymentInformation( | ||||
|  |             tokenized_card=payment_information_tokenized_card.__dict__) | ||||
|  |         order_information_amount_details = Ptsv2paymentsOrderInformationAmountDetails( | ||||
|  |             total_amount=post.get('values')['amount'], | ||||
|  |             currency=request.env['res.currency'].browse( | ||||
|  |                 post.get('values')['currency']).name | ||||
|  |         ) | ||||
|  |         order_information_bill_to = Ptsv2paymentsOrderInformationBillTo( | ||||
|  |             first_name=address.name.split(' ')[0] if len( | ||||
|  |                 address.name.split(' ')) > 0 else address.name, | ||||
|  |             last_name=address.name.split(' ')[1] if len( | ||||
|  |                 address.name.split(' ')) > 1 else address.name, | ||||
|  |             address1=address.state_id.name or False, | ||||
|  |             locality=address.city or False, | ||||
|  |             administrative_area="CA", | ||||
|  |             postal_code=address.zip or False, | ||||
|  |             country=address.country_id.name or False, | ||||
|  |             email=address.email, | ||||
|  |             phone_number=address.phone | ||||
|  |         ) | ||||
|  |         order_information = Ptsv2paymentsOrderInformation( | ||||
|  |             amount_details=order_information_amount_details.__dict__, | ||||
|  |             bill_to=order_information_bill_to.__dict__ | ||||
|  |         ) | ||||
|  |         consumer_authentication_information = Ptsv2paymentsConsumerAuthenticationInformation( | ||||
|  |             cavv="AAABCSIIAAAAAAACcwgAEMCoNh+=", | ||||
|  |             xid="T1Y0OVcxMVJJdkI0WFlBcXptUzE=" | ||||
|  |         ) | ||||
|  |         request_obj = CreatePaymentRequest( | ||||
|  |             client_reference_information=client_reference_information.__dict__, | ||||
|  |             processing_information=processing_information.__dict__, | ||||
|  |             payment_information=payment_information.__dict__, | ||||
|  |             order_information=order_information.__dict__, | ||||
|  |             consumer_authentication_information=consumer_authentication_information.__dict__ | ||||
|  |         ) | ||||
|  |         request_obj = self.del_none(request_obj.__dict__) | ||||
|  |         request_obj = json.dumps(request_obj) | ||||
|  |         try: | ||||
|  |             client_config = self.get_configuration() | ||||
|  |             api_instance = PaymentsApi(client_config) | ||||
|  |             return_data, status, body = api_instance.create_payment(request_obj) | ||||
|  |             status_data = { | ||||
|  |                 'reference': post.get('reference'), | ||||
|  |                 'payment_details': post.get('customer_input')['card_num'], | ||||
|  |                 'simulated_state': 'done' | ||||
|  |             } | ||||
|  |             if status == 201: | ||||
|  |                 tx = request.env[ | ||||
|  |                     'payment.transaction'].sudo()._get_tx_from_feedback_data( | ||||
|  |                     'cybersource', status_data) | ||||
|  |                 tx._handle_feedback_data('cybersource', status_data) | ||||
|  |             else: | ||||
|  |                 raise ValidationError(_("Your Payment has not been processed")) | ||||
|  |             return return_data | ||||
|  |         except Exception as e: | ||||
|  |             _logger.info( | ||||
|  |                 "\nException when calling PaymentsApi->create_payment: %s\n" % e) | ||||
|  | 
 | ||||
|  |     def get_configuration(self): | ||||
|  |         """This is used for Payment provider configuration""" | ||||
|  |         record = request.env['payment.acquirer'].sudo().search( | ||||
|  |             [('provider', '=', 'cybersource')]) | ||||
|  |         configuration_dictionary = { | ||||
|  |             "authentication_type": "http_signature", | ||||
|  |             "merchantid": record.cyber_merchant, | ||||
|  |             "run_environment": "apitest.cybersource.com", | ||||
|  |             "request_json_path": "", | ||||
|  |             "key_alias": "testrest", | ||||
|  |             "key_password": "testrest", | ||||
|  |             "key_file_name": "testrest", | ||||
|  |             "keys_directory": os.path.join(os.getcwd(), "resources"), | ||||
|  |             "merchant_keyid": record.cyber_key, | ||||
|  |             "merchant_secretkey": record.cyber_secret_key, | ||||
|  |             "use_metakey": False, | ||||
|  |             "portfolio_id": "", | ||||
|  |             "timeout": 1000, | ||||
|  |         } | ||||
|  |         log_config = LogConfiguration() | ||||
|  |         log_config.set_enable_log(True) | ||||
|  |         log_config.set_log_directory(os.path.join(os.getcwd(), "Logs")) | ||||
|  |         log_config.set_log_file_name("cybs") | ||||
|  |         log_config.set_log_maximum_size(10487560) | ||||
|  |         log_config.set_log_level("Debug") | ||||
|  |         log_config.set_enable_masking(False) | ||||
|  |         log_config.set_log_format( | ||||
|  |             "%(asctime)s - %(name)s - %(levelname)s - %(message)s") | ||||
|  |         log_config.set_log_date_format("%Y-%m-%d %H:%M:%S") | ||||
|  |         configuration_dictionary["log_config"] = log_config | ||||
|  |         return configuration_dictionary | ||||
|  | 
 | ||||
|  |     def del_none(self, data): | ||||
|  |         """This is used to check and remove any value having null""" | ||||
|  |         for key, value in list(data.items()): | ||||
|  |             if value is None: | ||||
|  |                 del data[key] | ||||
|  |             elif isinstance(value, dict): | ||||
|  |                 self.del_none(value) | ||||
|  |         return data | ||||
| @ -0,0 +1,24 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <data noupdate="1"> | ||||
|  |         <!--    New Payment acquirer is added in payment.acquirer model--> | ||||
|  |         <record id="payment_acquirer_cybersource" model="payment.acquirer"> | ||||
|  |             <field name="provider">cybersource</field> | ||||
|  |             <field name="name">Cybersource Payment</field> | ||||
|  |             <field name="inline_form_view_id" ref="inline_form"/> | ||||
|  |             <field name="image_128" type="base64" | ||||
|  |                    file="advanced_payment_cybersource/static/src/img/logo-cybersource.png"/> | ||||
|  |             <field name="support_authorization">False</field> | ||||
|  |             <field name="support_fees_computation">False</field> | ||||
|  |             <field name="support_refund">partial</field> | ||||
|  |             <field name="support_tokenization">True</field> | ||||
|  |             <field name="allow_tokenization">True</field> | ||||
|  |         </record> | ||||
|  |         <!--Added cybersource in Payment Method--> | ||||
|  |         <record id="payment_method_cc_avenue" model="account.payment.method"> | ||||
|  |             <field name="name">Cybersource</field> | ||||
|  |             <field name="code">cybersource</field> | ||||
|  |             <field name="payment_type">inbound</field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,7 @@ | |||||
|  | ## Module <advanced_payment_cybersource> | ||||
|  | 
 | ||||
|  | #### 12.08.2024 | ||||
|  | #### Version 15.0.1.0.0 | ||||
|  | ##### ADD | ||||
|  | 
 | ||||
|  | - Initial Commit for Odoo CyberSource Payment Gateway | ||||
| @ -0,0 +1,24 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from . import account_payment_method | ||||
|  | from . import payment_provider | ||||
|  | from . import payment_transaction | ||||
| @ -0,0 +1,35 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from odoo import api, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class AccountPaymentMethod(models.Model): | ||||
|  |     """"This is the class for Payment method""" | ||||
|  |     _inherit = 'account.payment.method' | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def _get_payment_method_information(self): | ||||
|  |         """Payment method for cybersource""" | ||||
|  |         res = super()._get_payment_method_information() | ||||
|  |         res['cybersource'] = {'mode': 'multi', | ||||
|  |                               'domain': [('type', '=', 'bank')]} | ||||
|  |         return res | ||||
| @ -0,0 +1,39 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from odoo import fields, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class PaymentProvider(models.Model): | ||||
|  |     """Adding payment provider""" | ||||
|  |     _inherit = 'payment.acquirer' | ||||
|  | 
 | ||||
|  |     provider = fields.Selection(selection_add=[('cybersource', 'Cybersource')], | ||||
|  |                                 ondelete={'cybersource': 'set default'}, | ||||
|  |                                 string='Provider', | ||||
|  |                                 help='Identifying the payment method in payment' | ||||
|  |                                      ' methods') | ||||
|  |     cyber_merchant = fields.Char(string='Merchant ID', | ||||
|  |                                  help='Cybersource merchant id') | ||||
|  |     cyber_secret_key = fields.Char(string='Secret Key', | ||||
|  |                                    help='Cybersource secret key for the payment') | ||||
|  |     cyber_key = fields.Char(string='Secret Key', | ||||
|  |                             help='Cyber key for the payment') | ||||
| @ -0,0 +1,106 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2024-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 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/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from odoo import api, fields, models, _ | ||||
|  | from odoo.exceptions import ValidationError | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class PaymentTransaction(models.Model): | ||||
|  |     """Inheriting payment.transaction""" | ||||
|  |     _inherit = 'payment.transaction' | ||||
|  | 
 | ||||
|  |     capture_manually = fields.Boolean(related='acquirer_id.capture_manually', | ||||
|  |                                       string="Capture Manually", | ||||
|  |                                       help='Enable manual capturing for the payment transaction') | ||||
|  | 
 | ||||
|  |     def action_cybersource_set_done(self): | ||||
|  |         """ Set the state of the demo transaction to 'done'.""" | ||||
|  |         self.handle_notification() | ||||
|  | 
 | ||||
|  |     def action_cybersource_set_canceled(self): | ||||
|  |         """Set the state of the demo transaction to 'cancel'""" | ||||
|  |         self.handle_notification() | ||||
|  | 
 | ||||
|  |     def action_cybersource_set_error(self): | ||||
|  |         """Set the state of the demo transaction to 'error'""" | ||||
|  |         self.handle_notification() | ||||
|  | 
 | ||||
|  |     def handle_notification(self): | ||||
|  |         """This is used to handle the notification""" | ||||
|  |         self.ensure_one() | ||||
|  |         if self.provider != 'cybersource': | ||||
|  |             return | ||||
|  |         notification_data = {'reference': self.reference, | ||||
|  |                              'simulated_state': 'error'} | ||||
|  |         self._handle_feedback_data('cybersource', notification_data) | ||||
|  | 
 | ||||
|  |     def _handle_feedback_data(self, provider, notification_data): | ||||
|  |         """Handle notification data and execute callback""" | ||||
|  |         received_tx = self._get_tx_from_feedback_data(provider, | ||||
|  |                                                       notification_data) | ||||
|  |         received_tx._process_feedback_data(notification_data) | ||||
|  |         received_tx._execute_callback() | ||||
|  |         return received_tx | ||||
|  | 
 | ||||
|  |     def _process_feedback_data(self, notification_data): | ||||
|  |         """Process the notification data.""" | ||||
|  |         super()._process_feedback_data(notification_data) | ||||
|  |         if self.provider != 'cybersource': | ||||
|  |             return | ||||
|  |         self.acquirer_reference = f'cybersource-{self.reference}' | ||||
|  |         state = notification_data['simulated_state'] | ||||
|  |         if state == 'pending': | ||||
|  |             self._set_pending() | ||||
|  |         elif state == 'done': | ||||
|  |             if self.capture_manually and not notification_data.get( | ||||
|  |                     'manual_capture'): | ||||
|  |                 self._set_authorized() | ||||
|  |             else: | ||||
|  |                 self._set_done() | ||||
|  |                 # Immediately post-process the transaction if it is a refund, as | ||||
|  |                 # the post-processing | ||||
|  |                 # will not be triggered by a customer browsing the transaction | ||||
|  |                 # from the portal. | ||||
|  |                 if self.operation == 'refund': | ||||
|  |                     self.env.ref( | ||||
|  |                         'payment.cron_post_process_payment_tx')._trigger() | ||||
|  |         elif state == 'cancel': | ||||
|  |             self._set_canceled() | ||||
|  |         else:  # Simulate an error state. | ||||
|  |             self._set_error( | ||||
|  |                 _("You selected the following demo payment status: %s", state)) | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def _get_tx_from_feedback_data(self, provider_code, data): | ||||
|  |         """ Find the transaction based on the notification data.""" | ||||
|  |         tx = super()._get_tx_from_feedback_data(provider_code, data) | ||||
|  |         if provider_code != 'cybersource': | ||||
|  |             return tx | ||||
|  |         reference = data.get('reference') | ||||
|  |         tx = self.search( | ||||
|  |             [('reference', '=', reference), | ||||
|  |              ('provider', '=', 'cybersource')]) | ||||
|  |         if not tx: | ||||
|  |             raise ValidationError( | ||||
|  |                 "Cyber Source " + ( | ||||
|  |                     "No transaction found matching reference %s.", reference) | ||||
|  |             ) | ||||
|  |         return tx | ||||
| After Width: | Height: | Size: 5.8 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 967 B | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 59 KiB | 
| After Width: | Height: | Size: 106 KiB | 
| After Width: | Height: | Size: 100 KiB | 
| After Width: | Height: | Size: 59 KiB | 
| After Width: | Height: | Size: 60 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| After Width: | Height: | Size: 122 KiB | 
| After Width: | Height: | Size: 52 KiB | 
| After Width: | Height: | Size: 122 KiB | 
| After Width: | Height: | Size: 102 KiB | 
| After Width: | Height: | Size: 194 KiB | 
| After Width: | Height: | Size: 63 KiB | 
| After Width: | Height: | Size: 78 KiB | 
| After Width: | Height: | Size: 193 KiB | 
| After Width: | Height: | Size: 81 KiB | 
| After Width: | Height: | Size: 136 KiB | 
| After Width: | Height: | Size: 74 KiB | 
| After Width: | Height: | Size: 191 KiB | 
| After Width: | Height: | Size: 371 KiB | 
| After Width: | Height: | Size: 49 KiB | 
| After Width: | Height: | Size: 8.0 KiB | 
| @ -0,0 +1,729 @@ | |||||
|  | <div class="container" | ||||
|  |      style="padding: 1rem !important; margin-bottom: 1rem !important;"> | ||||
|  |     <div class="row"> | ||||
|  |         <div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between" | ||||
|  |              style="border-bottom: 1px solid #d5d5d5;"> | ||||
|  |             <div class="my-3"> | ||||
|  |                 <img src="./assets/icons/logo.png" | ||||
|  |                      style="width: auto !important; height: 40px !important;"> | ||||
|  |             </div> | ||||
|  |             <div class="my-3 d-flex align-items-center"> | ||||
|  |                 <div | ||||
|  |                         style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> | ||||
|  |                     <i class="fa fa-check mr-1"></i>Community | ||||
|  |                 </div> | ||||
|  |                 <div style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> | ||||
|  |                     <i class="fa fa-check mr-1"></i>Enterprise | ||||
|  |                 </div> | ||||
|  |                 <div | ||||
|  |                         style="background-color: #017E84 !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> | ||||
|  |                     <i class="fa fa-check mr-1"></i>Odoo.sh | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </div> | ||||
|  | 
 | ||||
|  | <div class="container" style="padding: 0rem 1.5rem 4rem !important"> | ||||
|  |     <div class="row" style="height: 900px !important;"> | ||||
|  |         <div class="col-sm-12 col-md-12 col-lg-12" | ||||
|  |              style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;"> | ||||
|  |             <h1 | ||||
|  |                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important;  font-size: 3.5rem !important; text-align: center !important;"> | ||||
|  |                 Odoo CyberSource Payment Gateway</h1> | ||||
|  |             <p | ||||
|  |                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important;  font-size: 1.4rem !important; text-align: center !important;"> | ||||
|  |                 Pay Online For Website Orders Through CyberSource Payment | ||||
|  |                 Gateway | ||||
|  |             </p> | ||||
|  |             <img src="./assets/screenshots/hero.gif" class="img-responsive" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="row"> | ||||
|  |         <div class="col-md-12" | ||||
|  |              style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important"> | ||||
|  |             <h2 | ||||
|  |                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | ||||
|  |                 <i class="fa fa-compass mr-2"></i>Explore this module | ||||
|  |             </h2> | ||||
|  |         </div> | ||||
|  |         <div class="col-md-6"> | ||||
|  |             <a href="#overview" style="text-decoration: none !important;"> | ||||
|  |                 <div class="row" | ||||
|  |                      style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> | ||||
|  |                     <div class="col-8"> | ||||
|  |                         <h3 | ||||
|  |                                 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> | ||||
|  |                             Overview</h3> | ||||
|  |                         <p | ||||
|  |                                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> | ||||
|  |                             Learn more about this module</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="col-4 text-right d-flex justify-content-end align-items-center"> | ||||
|  |                         <i class="fa fa-chevron-right" | ||||
|  |                            style="color: #714B67 !important;"></i> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </a> | ||||
|  |         </div> | ||||
|  |         <div class="col-md-6"> | ||||
|  |             <a href="#features" style="text-decoration: none !important;"> | ||||
|  |                 <div class="row" | ||||
|  |                      style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> | ||||
|  |                     <div class="col-8"> | ||||
|  |                         <h3 | ||||
|  |                                 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> | ||||
|  |                             Features</h3> | ||||
|  |                         <p | ||||
|  |                                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> | ||||
|  |                             View features of this module</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="col-4 text-right d-flex justify-content-end align-items-center"> | ||||
|  |                         <i class="fa fa-chevron-right" | ||||
|  |                            style="color: #714B67 !important;"></i> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </a> | ||||
|  |         </div> | ||||
|  |         <div class="col-md-6"> | ||||
|  |             <a href="#screenshots" style="text-decoration: none !important;"> | ||||
|  |                 <div class="row" | ||||
|  |                      style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> | ||||
|  |                     <div class="col-8"> | ||||
|  |                         <h3 | ||||
|  |                                 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> | ||||
|  |                             Screenshots</h3> | ||||
|  |                         <p | ||||
|  |                                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> | ||||
|  |                             See key screenshots of this module</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="col-4 text-right d-flex justify-content-end align-items-center"> | ||||
|  |                         <i class="fa fa-chevron-right" | ||||
|  |                            style="color: #714B67 !important;"></i> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </a> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |     <div class="row" id="overview"> | ||||
|  |         <div class="col-md-12" | ||||
|  |              style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> | ||||
|  |             <h2 | ||||
|  |                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | ||||
|  |                 <i class="fa fa-pie-chart mr-2"></i>Overview | ||||
|  |             </h2> | ||||
|  |         </div> | ||||
|  | 
 | ||||
|  |         <div class="col-mg-12 pl-3"> | ||||
|  |             <p | ||||
|  |                     style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;"> | ||||
|  |                 This module helps users to pay online through CyberSource | ||||
|  |                 payment gateway from Odoo Website. | ||||
|  |             </p> | ||||
|  | 
 | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="d-flex align-items-center" | ||||
|  |          style="border-bottom: 2px solid #714B67; padding: 15px 0px;" | ||||
|  |          id="features"> | ||||
|  |         <div class="d-flex justify-content-center align-items-center mr-2" | ||||
|  |              style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | ||||
|  |             <img src="assets/misc/features.png"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="mt-2" | ||||
|  |             style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | ||||
|  |             Features | ||||
|  |         </h2> | ||||
|  |     </div> | ||||
|  |     <div class="row" | ||||
|  |          style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | ||||
|  |         <div class="col-sm-12 col-md-6"> | ||||
|  |             <div class="d-flex align-items-center" | ||||
|  |                  style="margin-top: 40px; margin-bottom: 40px"> | ||||
|  |                 <img src="assets/misc/check-box.png" class="mr-2"/> | ||||
|  |                 <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Available in Odoo 15.0 Community, Enterprise and Odoo.sh </span> | ||||
|  |             </div> | ||||
|  |             <div class="d-flex align-items-center" | ||||
|  |                  style="margin-top: 30px; margin-bottom: 30px"> | ||||
|  |                 <img src="assets/misc/check-box.png" class="mr-2"/> | ||||
|  |                 <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Cybersource can process payments in more than 190 countries and 40 different currencies.</span> | ||||
|  |             </div> | ||||
|  |             <div class="d-flex align-items-center" | ||||
|  |                  style="margin-top: 30px; margin-bottom: 30px"> | ||||
|  |                 <img src="assets/misc/check-box.png" class="mr-2"/> | ||||
|  |                 <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">It accept a variety of different cards and payment types.</span> | ||||
|  |             </div> | ||||
|  |             <div class="d-flex align-items-center" | ||||
|  |                  style="margin-top: 30px; margin-bottom: 30px"> | ||||
|  |                 <img src="assets/misc/check-box.png" class="mr-2"/> | ||||
|  |                 <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | ||||
|  |                     Able to connect to around 100 acquirers/processors worldwide. | ||||
|  | </span> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="row" id="screenshots"> | ||||
|  |         <div class="col-md-12" | ||||
|  |              style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> | ||||
|  |             <h2 | ||||
|  |                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | ||||
|  |                 <i class="fa fa-image mr-2"></i>Screenshots | ||||
|  |             </h2> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-2"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Account Set Up</h4> | ||||
|  |             <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; | ||||
|  |             font-size: 14px;"> | ||||
|  |                 Create a test account | ||||
|  |                 in the cybersource sandbox.</p> | ||||
|  |             <a href="https://developer.cybersource.com/hello-world/sandbox.html">Cybersource | ||||
|  |                 Account Link</a> | ||||
|  |             <img src="assets/screenshots/cybersource01.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |             </h4> | ||||
|  |             <img src="assets/screenshots/cybersource02.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Key And Secret Key</h4> | ||||
|  |             <p> After Creating The Test Account They Will provide You The Key | ||||
|  |                 And Shared Secret. | ||||
|  |                 <img src="assets/screenshots/cybersource03.png" | ||||
|  |                      class="img-responsive img-thumbnail border" | ||||
|  |                      width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Merchant Id</h4> | ||||
|  |             <p> | ||||
|  |                 After generation of the account we can get the merchant id. | ||||
|  |             </p> | ||||
|  |             <img src="assets/screenshots/cybersource04.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 The payment gateway.</h4> | ||||
|  |             <p>Cybersource Payment Gateway in Payment Acquirers</p> | ||||
|  |             <img src="assets/screenshots/cybersource05.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Credentials</h4> | ||||
|  |             <p>Give the appropriate credentials for the payment provider</p> | ||||
|  |             <img src="assets/screenshots/cybersource06.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Payment Journal.</h4> | ||||
|  |             <p> | ||||
|  |                 Add the journal to your provider | ||||
|  |             </p> | ||||
|  |             <img src="assets/screenshots/cybersource07.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Publish it in the website.</h4> | ||||
|  |             <img src="assets/screenshots/cybersource08.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Payment</h4> | ||||
|  |             <p>Select the payment provider and fill the card details | ||||
|  |             </p> | ||||
|  |             <img src="assets/screenshots/cybersource09.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 The payment status</h4> | ||||
|  |             <img src="assets/screenshots/cybersource10.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Corresponding Payment Transaction in the backend | ||||
|  |             </h4> | ||||
|  |             <img src="assets/screenshots/cybersource11.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 my-3"> | ||||
|  |             <h4 class="mt-2" | ||||
|  |                 style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | ||||
|  |                 Corresponding sale order from website</h4> | ||||
|  |             <p> | ||||
|  |                 you can create invoice from the sale order. | ||||
|  |             </p> | ||||
|  |             <img src="assets/screenshots/cybersource12.png" | ||||
|  |                  class="img-responsive img-thumbnail border" | ||||
|  |                  width="100%" height="auto"/> | ||||
|  |         </div> | ||||
|  | 
 | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |     <!-- SUGGESTED PRODUCTS --> | ||||
|  |     <div class="row"> | ||||
|  |         <div class="col-lg-12 d-flex flex-column justify-content-center" | ||||
|  |              style="text-align: center; padding: 2.5rem 1rem !important;"> | ||||
|  |             <h2 style="color: #212529 !important;">Suggested Products</h2> | ||||
|  |             <hr | ||||
|  |                     style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  | 
 | ||||
|  |             <div id="demo1" class="row carousel slide" data-ride="carousel"> | ||||
|  |                 <!-- The slideshow --> | ||||
|  |                 <div class="carousel-inner"> | ||||
|  |                     <div class="carousel-item active" style="min-height:0px"> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | ||||
|  |                              style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/15.0/account_payment_approval/" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                          src="./assets/modules/1.png"> | ||||
|  |                                 </div> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | ||||
|  |                              style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/15.0/multiple_payment_for_outstanding_dues/" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                          src="./assets/modules/2.png"> | ||||
|  |                                 </div> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | ||||
|  |                              style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/15.0/payment_details_invoice_report/#" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                          src="./assets/modules/3.png"> | ||||
|  |                                 </div> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div class="carousel-item" style="min-height:0px"> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | ||||
|  |                              style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/15.0/account_payment_instalment/" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                          src="./assets/modules/4.png"> | ||||
|  |                                 </div> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | ||||
|  |                              style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/15.0/total_payable_receivable/" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                          src="./assets/modules/5.png"> | ||||
|  |                                 </div> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | ||||
|  |                              style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/15.0/account_partner_ledger_filter/" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                          src="./assets/modules/6.png"> | ||||
|  |                                 </div> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <!-- Left and right controls --> | ||||
|  |                 <a class="carousel-control-prev" href="#demo1" data-slide="prev" | ||||
|  |                    style="width:35px; color:#000"> | ||||
|  |                 <span | ||||
|  |                         class="carousel-control-prev-icon"> | ||||
|  |                     <i | ||||
|  |                             class="fa fa-chevron-left" | ||||
|  |                             style="font-size:24px"></i> | ||||
|  |                 </span> | ||||
|  |                 </a> | ||||
|  |                 <a class="carousel-control-next" href="#demo1" | ||||
|  |                    data-slide="next" style="width:35px; color:#000"> | ||||
|  |                 <span class="carousel-control-next-icon"> | ||||
|  |                     <i | ||||
|  |                             class="fa fa-chevron-right" | ||||
|  |                             style="font-size:24px"></i> | ||||
|  |                 </span> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <!-- END OF SUGGESTED PRODUCTS --> | ||||
|  | 
 | ||||
|  |     <!-- OUR SERVICES --> | ||||
|  |     <section class="container" style="margin-top: 6rem !important;"> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <h2 style="color: #212529 !important;">Our Services</h2> | ||||
|  |                 <hr | ||||
|  |                         style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/cogs.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Customization</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/wrench.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Implementation</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/lifebuoy.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Support</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/user.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Hire | ||||
|  |                     Odoo | ||||
|  |                     Developer</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #54a0ff  !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/puzzle.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Integration</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/update.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Migration</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/consultation.png" | ||||
|  |                          class="img-responsive" height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Consultancy</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/training.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Implementation</h6> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                      style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                     <img src="assets/icons/license.png" class="img-responsive" | ||||
|  |                          height="48px" width="48px"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="text-center" | ||||
|  |                     style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | ||||
|  |                     Odoo | ||||
|  |                     Licensing Consultancy</h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </section> | ||||
|  |     <!-- END OF OUR SERVICES --> | ||||
|  | 
 | ||||
|  |     <!-- OUR INDUSTRIES --> | ||||
|  |     <section class="container" style="margin-top: 6rem !important;"> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <h2 style="color: #212529 !important;">Our Industries</h2> | ||||
|  |                 <hr | ||||
|  |                         style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/trading-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         Trading | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Easily procure | ||||
|  |                         and | ||||
|  |                         sell your products</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/pos-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         POS | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Easy | ||||
|  |                         configuration | ||||
|  |                         and convivial experience</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/education-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" | ||||
|  |                          width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         Education | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         A platform for | ||||
|  |                         educational management</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/manufacturing-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" | ||||
|  |                          width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         Manufacturing | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Plan, track and | ||||
|  |                         schedule your operations</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/ecom-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         E-commerce & Website | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Mobile | ||||
|  |                         friendly, | ||||
|  |                         awe-inspiring product pages</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/service-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         Service Management | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Keep track of | ||||
|  |                         services and invoice</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/restaurant-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" | ||||
|  |                          width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         Restaurant | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Run your bar or | ||||
|  |                         restaurant methodically</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/hotel-black.png" | ||||
|  |                          class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         Hotel Management | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         An | ||||
|  |                         all-inclusive | ||||
|  |                         hotel management application</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |         </div> | ||||
|  |     </section> | ||||
|  | 
 | ||||
|  |     <!-- END OF OUR INDUSTRIES --> | ||||
|  | 
 | ||||
|  |     <!-- FOOTER --> | ||||
|  |     <!-- Footer Section --> | ||||
|  |     <section class="container" style="margin: 5rem auto 2rem;"> | ||||
|  |         <div class="row" style="max-width:1540px;"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <h2 style="color: #212529 !important;">Need Help?</h2> | ||||
|  |                 <hr | ||||
|  |                         style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  | 
 | ||||
|  |         <!-- Contact Cards --> | ||||
|  |         <div class="row d-flex justify-content-center align-items-center" | ||||
|  |              style="max-width:1540px; margin: 0 auto 2rem auto;"> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-12" | ||||
|  |                  style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> | ||||
|  | 
 | ||||
|  |                 <div class="row mt-4"> | ||||
|  |                     <div class="col-lg-6"> | ||||
|  |                         <a href="mailto:odoo@cybrosys.com" target="_blank" | ||||
|  |                            class="btn btn-block mb-2 deep_hover" | ||||
|  |                            style="text-decoration: none;  background-color: #4d4d4d; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                                 class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> | ||||
|  |                     </div> | ||||
|  |                     <div class="col-lg-6"> | ||||
|  |                         <a href="https://api.whatsapp.com/send?phone=918606827707" | ||||
|  |                            target="_blank" | ||||
|  |                            class="btn btn-block mb-2 deep_hover" | ||||
|  |                            style="text-decoration: none;  background-color: #25D366; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                                 class="fa fa-whatsapp mr-2"></i>WhatsApp</a> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |         </div> | ||||
|  |         <!-- End of Contact Cards --> | ||||
|  |     </section> | ||||
|  |     <!-- Footer --> | ||||
|  |     <section class="oe_container" style="padding: 2rem 3rem 1rem;"> | ||||
|  |         <div class="row" | ||||
|  |              style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> | ||||
|  |             <!-- Logo --> | ||||
|  |             <div class="col-lg-12 d-flex justify-content-center align-items-center" | ||||
|  |                  style="margin-top: 3rem;"> | ||||
|  |                 <img src="https://www.cybrosys.com/images/logo.png" | ||||
|  |                      width="200px" height="auto"/> | ||||
|  |             </div> | ||||
|  |             <!-- End of Logo --> | ||||
|  |             <div class="col-lg-12"> | ||||
|  |                 <hr | ||||
|  |                         style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> | ||||
|  |                 <!-- End of Footer Section --> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </section> | ||||
|  |     <!-- END OF FOOTER --> | ||||
|  | 
 | ||||
|  | </div> | ||||
| After Width: | Height: | Size: 45 KiB | 
| @ -0,0 +1,62 @@ | |||||
|  | /** @odoo-module */ | ||||
|  | 
 | ||||
|  | import core from "web.core"; | ||||
|  | import checkoutForm from 'payment.checkout_form'; | ||||
|  | import manageForm from 'payment.manage_form'; | ||||
|  | const _t = core._t; | ||||
|  | //Payment process with cybersource
 | ||||
|  | const acceptCyberSourceMixin = { | ||||
|  |     _processRedirectPayment: function (code, providerId, processingValues) { | ||||
|  |         if (code !== 'cybersource') { | ||||
|  |             return this._super(...arguments); | ||||
|  |         } | ||||
|  |         var customerInputNumber = parseInt($('#customer_input_number').val()); | ||||
|  |         const customerInputName = $('#customer_input_name').val(); | ||||
|  |         const expMonth = $('#customer_input_month').val(); | ||||
|  |         const expYear = $('#customer_input_year').val(); | ||||
|  |         var self = this; | ||||
|  |         if(customerInputNumber == "") | ||||
|  |         { | ||||
|  |             self._displayError( | ||||
|  |                 _t("Server Error"), | ||||
|  |                 _t("We are not able to process your payment Card Number not entered") | ||||
|  |             ); | ||||
|  |         } | ||||
|  |         else if(expYear <= 2022) | ||||
|  |         { | ||||
|  |             self._displayError( | ||||
|  |                 _t("Server Error"), | ||||
|  |                 _t("We are not able to process your payment Expiry year is not valid") | ||||
|  |             ); | ||||
|  |         } | ||||
|  |         else if(expMonth == 0) | ||||
|  |         { | ||||
|  |             self._displayError( | ||||
|  |                 _t("Server Error"), | ||||
|  |                 _t("We are not able to process your payment Expiry month not valid.") | ||||
|  |             ); | ||||
|  |         } | ||||
|  |         else { | ||||
|  |            return this._rpc({ | ||||
|  |               route: '/payment/cybersource/simulate_payment', | ||||
|  |               params: { | ||||
|  |                   'reference': processingValues.reference, | ||||
|  |                   'customer_input': {'exp_year': expYear, | ||||
|  |                                         'exp_month': expMonth, | ||||
|  |                                         'name':customerInputName, | ||||
|  |                                         'card_num':customerInputNumber, | ||||
|  |                                      }, | ||||
|  |                   'values':{'amount': processingValues.amount, | ||||
|  |                                'currency': processingValues.currency_id, | ||||
|  |                                'partner': processingValues.partner_id, | ||||
|  |                                'order': processingValues.reference | ||||
|  |                   }, | ||||
|  |               }, | ||||
|  |            }) | ||||
|  |                .then(() => window.location = '/payment/status'); | ||||
|  |         } | ||||
|  |     }, | ||||
|  | }; | ||||
|  | checkoutForm.include(acceptCyberSourceMixin); | ||||
|  | manageForm.include(acceptCyberSourceMixin); | ||||
|  | 
 | ||||
| @ -0,0 +1,29 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <!--Inheriting providers to add cybersource provider fields--> | ||||
|  |     <record id="payment_provider_form" model="ir.ui.view"> | ||||
|  |         <field name="name"> | ||||
|  |             payment.provider.view.form.inherit.advanced.payment.cybersource | ||||
|  |         </field> | ||||
|  |         <field name="model">payment.acquirer</field> | ||||
|  |         <field name="inherit_id" ref="payment.payment_acquirer_form"/> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <xpath expr='//group[@name="acquirer"]' position='inside'> | ||||
|  |                 <group attrs="{'invisible': [('provider', '!=', 'cybersource')]}"> | ||||
|  |                     <field name="cyber_merchant" | ||||
|  |                            string="Merchant ID" | ||||
|  |                            attrs="{'required': [('provider', '=', 'cybersource'), | ||||
|  |                            ('state', '!=', 'disabled')]}"/> | ||||
|  |                     <field name="cyber_key" | ||||
|  |                            string="key" password="1" | ||||
|  |                            attrs="{'required': [('provider', '=', 'cybersource'), | ||||
|  |                            ('state', '!=', 'disabled')]}"/> | ||||
|  |                     <field name="cyber_secret_key" | ||||
|  |                            string="Secret key" password="1" | ||||
|  |                            attrs="{'required': [('provider', '=', 'cybersource'), | ||||
|  |                            ('state', '!=', 'disabled')]}"/> | ||||
|  |                 </group> | ||||
|  |             </xpath> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,59 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <!--Inline template for the payment provider--> | ||||
|  |     <template id="inline_form"> | ||||
|  |         <div t-attf-id="demo-container-{{provider_id}}"> | ||||
|  |             <div id="card_details"> | ||||
|  |                 <div class="mb-3"> | ||||
|  |                     <input name="provider_id" type="hidden" id="provider_id" | ||||
|  |                            t-att-value="id"/> | ||||
|  |                     <input name="partner_id" type="hidden" | ||||
|  |                            t-att-value="partner_id"/> | ||||
|  |                 </div> | ||||
|  |                 <div class="col mt-0 mb-0"> | ||||
|  |                     <input type="text" t-ref="input_card_number" | ||||
|  |                            name="customer_input" | ||||
|  |                            id="customer_input_number" | ||||
|  |                            class="form-control" | ||||
|  |                            placeholder="XXXX XXXX XXXX XXXX" | ||||
|  |                            required="required"/> | ||||
|  |                 </div> | ||||
|  |                 <br/> | ||||
|  |                 <div class="col mt-0 mb-0"> | ||||
|  |                     <input type="text" | ||||
|  |                            name="customer_input" | ||||
|  |                            id="customer_input_name" | ||||
|  |                            class="form-control" | ||||
|  |                            placeholder="Card Holder Name" | ||||
|  |                            required="required"/> | ||||
|  |                 </div> | ||||
|  |                 <br/> | ||||
|  |                 <div class="row"> | ||||
|  |                     <div class="col mt-0 mb-0" style="padding-left: 26px;"> | ||||
|  |                         <input type="text" t-ref="input" | ||||
|  |                                name="customer_input" | ||||
|  |                                id="customer_input_month" | ||||
|  |                                placeholder="Month" | ||||
|  |                                class="form-control customer_input_month" | ||||
|  |                                required="required"/> | ||||
|  |                     </div> | ||||
|  |                     <div class="col mt-0 mb-0" style="padding-right: 26px;"> | ||||
|  |                         <input type="text" | ||||
|  |                                name="customer_input" | ||||
|  |                                id="customer_input_year" | ||||
|  |                                class="form-control" | ||||
|  |                                placeholder="Year" | ||||
|  |                                required="required"/> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <br/> | ||||
|  |                 <div class="col mt-0 mb-0" id="card-cvv"> | ||||
|  |                     <input type="password" | ||||
|  |                            name="customer_input" | ||||
|  |                            id="customer_input_cvv" | ||||
|  |                            class="form-control"/> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </template> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,35 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <!--Payment transaction view--> | ||||
|  |     <record id="payment_transaction_form" model="ir.ui.view"> | ||||
|  |         <field name="name"> | ||||
|  |             payment.transaction.view.form.inherit.advanced.payment.cybersource | ||||
|  |         </field> | ||||
|  |         <field name="model">payment.transaction</field> | ||||
|  |         <field name="inherit_id" ref="payment.payment_transaction_form"/> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <header position="inside"> | ||||
|  |                 <field name="capture_manually" invisible="1"/> | ||||
|  |                 <button string="Authorize" | ||||
|  |                         type="object" | ||||
|  |                         name="action_cybersource_set_done" | ||||
|  |                         class="oe_highlight" | ||||
|  |                         attrs="{'invisible': ['|', ('provider', '!=', 'cybersource'), | ||||
|  |                         ('state', '!=', 'pending')]}"/> | ||||
|  |                 <button string="Confirm" | ||||
|  |                         type="object" | ||||
|  |                         name="action_cybersource_set_done" | ||||
|  |                         class="oe_highlight" | ||||
|  |                         attrs="{'invisible': ['|', ('provider', '!=', 'cybersource'), ('state', '!=', 'pending')]}"/> | ||||
|  |                 <button string="Cancel" | ||||
|  |                         type="object" | ||||
|  |                         name="action_cybersource_set_canceled" | ||||
|  |                         attrs="{'invisible': ['|', ('provider', '!=', 'cybersource'), ('state', '!=', 'pending')]}"/> | ||||
|  |                 <button string="Set to Error" | ||||
|  |                         type="object" | ||||
|  |                         name="action_cybersource_set_error" | ||||
|  |                         attrs="{'invisible': ['|', ('provider', '!=', 'demo'), ('state', '!=', 'pending')]}"/> | ||||
|  |             </header> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | </odoo> | ||||