Browse Source

Jan 03: [ADD] Initial Commit 'advanced_payment_cybersource'

pull/299/head
Shijin V 1 year ago
parent
commit
26646cf0eb
  1. 45
      advanced_payment_cybersource/README.rst
  2. 35
      advanced_payment_cybersource/__init__.py
  3. 57
      advanced_payment_cybersource/__manifest__.py
  4. 23
      advanced_payment_cybersource/controllers/__init__.py
  5. 151
      advanced_payment_cybersource/controllers/advanced_payment_cybersource.py
  6. 12
      advanced_payment_cybersource/data/advanced_payment_cybersource_data.xml
  7. 7
      advanced_payment_cybersource/doc/RELEASE_NOTES.md
  8. 25
      advanced_payment_cybersource/model/__init__.py
  9. 35
      advanced_payment_cybersource/model/account_payment_method.py
  10. 38
      advanced_payment_cybersource/model/payment_provider.py
  11. 107
      advanced_payment_cybersource/model/payment_transaction.py
  12. BIN
      advanced_payment_cybersource/static/description/assets/icons/check.png
  13. BIN
      advanced_payment_cybersource/static/description/assets/icons/chevron.png
  14. BIN
      advanced_payment_cybersource/static/description/assets/icons/cogs.png
  15. BIN
      advanced_payment_cybersource/static/description/assets/icons/consultation.png
  16. BIN
      advanced_payment_cybersource/static/description/assets/icons/ecom-black.png
  17. BIN
      advanced_payment_cybersource/static/description/assets/icons/education-black.png
  18. BIN
      advanced_payment_cybersource/static/description/assets/icons/hotel-black.png
  19. BIN
      advanced_payment_cybersource/static/description/assets/icons/license.png
  20. BIN
      advanced_payment_cybersource/static/description/assets/icons/lifebuoy.png
  21. BIN
      advanced_payment_cybersource/static/description/assets/icons/manufacturing-black.png
  22. BIN
      advanced_payment_cybersource/static/description/assets/icons/pos-black.png
  23. BIN
      advanced_payment_cybersource/static/description/assets/icons/puzzle.png
  24. BIN
      advanced_payment_cybersource/static/description/assets/icons/restaurant-black.png
  25. BIN
      advanced_payment_cybersource/static/description/assets/icons/service-black.png
  26. BIN
      advanced_payment_cybersource/static/description/assets/icons/trading-black.png
  27. BIN
      advanced_payment_cybersource/static/description/assets/icons/training.png
  28. BIN
      advanced_payment_cybersource/static/description/assets/icons/update.png
  29. BIN
      advanced_payment_cybersource/static/description/assets/icons/user.png
  30. BIN
      advanced_payment_cybersource/static/description/assets/icons/wrench.png
  31. BIN
      advanced_payment_cybersource/static/description/assets/misc/categories.png
  32. BIN
      advanced_payment_cybersource/static/description/assets/misc/check-box.png
  33. BIN
      advanced_payment_cybersource/static/description/assets/misc/compass.png
  34. BIN
      advanced_payment_cybersource/static/description/assets/misc/corporate.png
  35. BIN
      advanced_payment_cybersource/static/description/assets/misc/customer-support.png
  36. BIN
      advanced_payment_cybersource/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      advanced_payment_cybersource/static/description/assets/misc/features.png
  38. BIN
      advanced_payment_cybersource/static/description/assets/misc/logo.png
  39. BIN
      advanced_payment_cybersource/static/description/assets/misc/pictures.png
  40. BIN
      advanced_payment_cybersource/static/description/assets/misc/pie-chart.png
  41. BIN
      advanced_payment_cybersource/static/description/assets/misc/right-arrow.png
  42. BIN
      advanced_payment_cybersource/static/description/assets/misc/star.png
  43. BIN
      advanced_payment_cybersource/static/description/assets/misc/support.png
  44. BIN
      advanced_payment_cybersource/static/description/assets/misc/whatsapp.png
  45. BIN
      advanced_payment_cybersource/static/description/assets/modules/1.png
  46. BIN
      advanced_payment_cybersource/static/description/assets/modules/2.png
  47. BIN
      advanced_payment_cybersource/static/description/assets/modules/3.png
  48. BIN
      advanced_payment_cybersource/static/description/assets/modules/4.jpg
  49. BIN
      advanced_payment_cybersource/static/description/assets/modules/5.png
  50. BIN
      advanced_payment_cybersource/static/description/assets/modules/6.jpg
  51. 0
      advanced_payment_cybersource/static/description/assets/modules/6.png
  52. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/hero.gif
  53. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image1.png
  54. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image10.png
  55. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image11.png
  56. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image12.png
  57. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image2.png
  58. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image3.png
  59. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image4.png
  60. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image5.png
  61. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image6.png
  62. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image7.png
  63. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image8.png
  64. BIN
      advanced_payment_cybersource/static/description/assets/screenshots/image9.png
  65. BIN
      advanced_payment_cybersource/static/description/banner.png
  66. BIN
      advanced_payment_cybersource/static/description/icon.png
  67. BIN
      advanced_payment_cybersource/static/description/images/arrows-transparent.png
  68. BIN
      advanced_payment_cybersource/static/description/images/cybro_logo.png
  69. BIN
      advanced_payment_cybersource/static/description/images/icons/ecom.png
  70. BIN
      advanced_payment_cybersource/static/description/images/icons/education.png
  71. BIN
      advanced_payment_cybersource/static/description/images/icons/hotel.png
  72. BIN
      advanced_payment_cybersource/static/description/images/icons/manufacturing.png
  73. BIN
      advanced_payment_cybersource/static/description/images/icons/pos.png
  74. BIN
      advanced_payment_cybersource/static/description/images/icons/restaurant.png
  75. BIN
      advanced_payment_cybersource/static/description/images/icons/service.png
  76. BIN
      advanced_payment_cybersource/static/description/images/icons/trading.png
  77. 729
      advanced_payment_cybersource/static/description/index.html
  78. BIN
      advanced_payment_cybersource/static/src/img/logo-cybersource.png
  79. BIN
      advanced_payment_cybersource/static/src/img/payumoney_icon.png
  80. 61
      advanced_payment_cybersource/static/src/js/payment_form.js
  81. 29
      advanced_payment_cybersource/views/payment_provider_views.xml
  82. 59
      advanced_payment_cybersource/views/payment_templates.xml
  83. 35
      advanced_payment_cybersource/views/payment_transaction_views.xml

45
advanced_payment_cybersource/README.rst

@ -0,0 +1,45 @@
.. 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 16 , This module is used to a safe payment with cybersource.
Configuration
=============
- www.odoo.com/documentation/16.0/setup/install.html
- Install our custom addon
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: (V16) Gayathri V, 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>`__

35
advanced_payment_cybersource/__init__.py

@ -0,0 +1,35 @@
"""Cybersource"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
from . import controllers
from . import model
from odoo.addons.payment import setup_provider, reset_payment_provider
def post_init_hook(cr, registry):
""" Create `account.payment.method` records for the installed payment providers. """
setup_provider(cr, registry, 'cybersource')
def uninstall_hook(cr, registry):
""" Delete `account.payment.method` records created for the installed payment providers. """
reset_payment_provider(cr, registry, 'cybersource')

57
advanced_payment_cybersource/__manifest__.py

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
{
'name': 'Odoo CyberSource Payment Gateway',
'version': '16.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']
},
'post_init_hook': 'post_init_hook',
'uninstall_hook': 'uninstall_hook',
'images': ['static/description/banner.png'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

23
advanced_payment_cybersource/controllers/__init__.py

@ -0,0 +1,23 @@
"""Cybersource"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
from . import advanced_payment_cybersource

151
advanced_payment_cybersource/controllers/advanced_payment_cybersource.py

@ -0,0 +1,151 @@
"""Cybersource payment"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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 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 to 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 = False
if post:
processing_information_capture = True
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] or address.name,
last_name=address.name.split(' ')[
1] or 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:
request.env[
'payment.transaction'].sudo()._handle_notification_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)
if __name__ == "__main__":
"""This is used to Payment processing using the flex token"""
payment_with_flex_token()
def get_configuration(self):
"""This is used to Payment provider configuration"""
record = request.env['payment.provider'].sudo().search(
[('code', '=', '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 checks 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

12
advanced_payment_cybersource/data/advanced_payment_cybersource_data.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This is used to add the Cybersource inline form-->
<record id="payment_provider_cybersource" model="payment.provider">
<field name="name">Cybersource Payment</field>
<field name="image_128" type="base64"
file="advanced_payment_cybersource/static/src/img/logo-cybersource.png"/>
<field name="code">cybersource</field>
<field name="module_id" ref="base.module_advanced_payment_cybersource"/>
<field name="inline_form_view_id" ref="inline_form"/>
</record>
</odoo>

7
advanced_payment_cybersource/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <advanced_payment_cybersource>
#### 03.01.2024
#### Version 16.0.1.0.0
##### ADD
- Initial Commit for Odoo CyberSource Payment Gateway

25
advanced_payment_cybersource/model/__init__.py

@ -0,0 +1,25 @@
"""Cybersource payment gateway"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
from . import account_payment_method
from . import payment_provider
from . import payment_transaction

35
advanced_payment_cybersource/model/account_payment_method.py

@ -0,0 +1,35 @@
"""Cybersource"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
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

38
advanced_payment_cybersource/model/payment_provider.py

@ -0,0 +1,38 @@
"""Cyber source payment gateway"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
from odoo import fields, models
class PaymentProvider(models.Model):
"""Adding payment provider"""
_inherit = 'payment.provider'
code = fields.Selection(selection_add=[('cybersource', 'Cybersource')],
ondelete={'cybersource': 'set default'},
string='Code',
help='Identifying the payment method')
cyber_merchant = fields.Char(string='Merchant ID',
help='Cybersource merchant id')
cyber_secret_key = fields.Char(string='Secret Key',
help='Cybersource secret key')
cyber_key = fields.Char(string='Secret Key', help='Cyber key')

107
advanced_payment_cybersource/model/payment_transaction.py

@ -0,0 +1,107 @@
"""Payment transaction"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
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='provider_id.capture_manually',
string="Capture Manually",
help='Enable manual capturing')
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_code != 'cybersource':
return
notification_data = {'reference': self.reference,
'simulated_state': 'error'}
self._handle_notification_data('cybersource', notification_data)
@api.model
def _get_tx_from_notification_data(self, provider_code, data):
""" Find the transaction based on the notification data."""
tx = super()._get_tx_from_notification_data(provider_code, data)
if provider_code != 'cybersource':
return tx
reference = data.get('reference')
tx = self.search(
[('reference', '=', reference),
('provider_code', '=', 'cybersource')])
if not tx:
raise ValidationError(
"Cyber Source " + (
"No transaction found matching reference %s.", reference)
)
return tx
def _process_notification_data(self, notification_data):
""" Update the transaction state and the provider reference based on the
notification data.
This method should usually not be called directly. The correct method to
call upon receiving
notification data is :meth:`_handle_notification_data`.
For a provider to handle transaction processing, it must overwrite this
method and process
the notification data.
"""
super()._process_notification_data(notification_data)
if self.provider_code != 'cybersource':
return
self.provider_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))

BIN
advanced_payment_cybersource/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
advanced_payment_cybersource/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
advanced_payment_cybersource/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
advanced_payment_cybersource/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
advanced_payment_cybersource/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
advanced_payment_cybersource/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
advanced_payment_cybersource/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
advanced_payment_cybersource/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
advanced_payment_cybersource/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
advanced_payment_cybersource/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
advanced_payment_cybersource/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
advanced_payment_cybersource/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
advanced_payment_cybersource/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
advanced_payment_cybersource/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
advanced_payment_cybersource/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
advanced_payment_cybersource/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
advanced_payment_cybersource/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
advanced_payment_cybersource/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
advanced_payment_cybersource/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
advanced_payment_cybersource/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
advanced_payment_cybersource/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
advanced_payment_cybersource/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
advanced_payment_cybersource/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
advanced_payment_cybersource/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
advanced_payment_cybersource/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
advanced_payment_cybersource/static/description/assets/modules/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
advanced_payment_cybersource/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
advanced_payment_cybersource/static/description/assets/modules/6.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

0
advanced_payment_cybersource/static/description/assets/modules/6.png

BIN
advanced_payment_cybersource/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
advanced_payment_cybersource/static/description/assets/screenshots/image9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
advanced_payment_cybersource/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
advanced_payment_cybersource/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
advanced_payment_cybersource/static/description/images/arrows-transparent.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
advanced_payment_cybersource/static/description/images/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/ecom.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/education.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/hotel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/manufacturing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/pos.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/restaurant.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/service.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
advanced_payment_cybersource/static/description/images/icons/trading.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

729
advanced_payment_cybersource/static/description/index.html

@ -0,0 +1,729 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Odoo CyberSource Payment Gateway</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
</p>
<img src="assets/screenshots/hero.gif"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/>
</div>
</div>
</div>
<!-- END OF APP HERO -->
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<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/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<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/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</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 py-4">
Odoo CyberSource Payment Gateway enables your customers
to make a safe and secure online payment.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<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;">Easy to install</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>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<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/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Account Set Up
</h3>
<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/image9.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/image10.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Key And Secret Key
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After Creating The Test Account They Will provide You The Key
And Shared Secret.</p>
<img src="assets/screenshots/image12.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Merchant Id
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After generation of the
account we can get the merchant id</p>
<img src="assets/screenshots/image11.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
The payment gateway
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Cybersource Payment
Gateway.</p>
<img src="assets/screenshots/image1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Credentials
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Give the appropriate
credentials for the payment provider</p>
<img src="assets/screenshots/image2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Payment Journal
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Add the journal to your
provider</p>
<img src="assets/screenshots/image3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Publish it in the website
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/image4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Payment
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Select the payment
provider and fill the card details</p>
<img src="assets/screenshots/image5.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
The payment status
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
</p>
<img src="assets/screenshots/image6.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Corresponding sale order from website
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
</p>
<img src="assets/screenshots/image7.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Create Invoice
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
We can create invoice for the sale order</p>
<img src="assets/screenshots/image8.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<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/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/odoo_icecat_connector/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
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/16.0/featured_brand_snippet/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
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/16.0/geoip_website_redirect/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/3.png"></div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/website_repeat_sale/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/4.jpg"></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/16.0/website_hide_variants/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
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/16.0/website_pre_loader_style/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/6.jpg"></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 RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<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/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<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>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<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/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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 &amp; 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: 0px; 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: 0px; 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: 0px; 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>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<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/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

BIN
advanced_payment_cybersource/static/src/img/logo-cybersource.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
advanced_payment_cybersource/static/src/img/payumoney_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

61
advanced_payment_cybersource/static/src/js/payment_form.js

@ -0,0 +1,61 @@
/** @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);

29
advanced_payment_cybersource/views/payment_provider_views.xml

@ -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.provider</field>
<field name="inherit_id" ref="payment.payment_provider_form"/>
<field name="arch" type="xml">
<group name="provider_credentials" position='inside'>
<group attrs="{'invisible': [('code', '!=', 'cybersource')]}">
<field name="cyber_merchant"
string="Merchant ID"
attrs="{'required': [('code', '=', 'cybersource'),
('state', '!=', 'disabled')]}"/>
<field name="cyber_key"
string="key" password="1"
attrs="{'required': [('code', '=', 'cybersource'),
('state', '!=', 'disabled')]}"/>
<field name="cyber_secret_key"
string="Secret key" password="1"
attrs="{'required': [('code', '=', 'cybersource'),
('state', '!=', 'disabled')]}"/>
</group>
</group>
</field>
</record>
</odoo>

59
advanced_payment_cybersource/views/payment_templates.xml

@ -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">
<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">
<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>

35
advanced_payment_cybersource/views/payment_transaction_views.xml

@ -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_code', '!=', 'cybersource'),
('capture_manually', '=', False), ('state', '!=', 'pending')]}"/>
<button string="Confirm"
type="object"
name="action_cybersource_set_done"
class="oe_highlight"
attrs="{'invisible': ['|', '|', ('provider_code', '!=', 'cybersource'), ('capture_manually', '=', True), ('state', '!=', 'pending')]}"/>
<button string="Cancel"
type="object"
name="action_cybersource_set_canceled"
attrs="{'invisible': ['|', ('provider_code', '!=', 'cybersource'), ('state', '!=', 'pending')]}"/>
<button string="Set to Error"
type="object"
name="action_cybersource_set_error"
attrs="{'invisible': ['|', ('provider_code', '!=', 'demo'), ('state', '!=', 'pending')]}"/>
</header>
</field>
</record>
</odoo>
Loading…
Cancel
Save