diff --git a/README.md b/README.md
new file mode 100644
index 0000000..96fe42e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,78 @@
+# SprykerB2C Payment Integration by Novalnet
+Spryker Commerce OS is a PHP-based e-commerce system for B2C. Novalnet payment module for Spryker simplifies your daily work by automating the entire payment process, from checkout till collection. This module is designed to help you increase your sales by offering various payment methods on a one-page checkout. The module which is perfectly adjusted to the Spryker shop with top-quality range of services of the payment provider.
+
+## Integration requirements
+Novalnet merchant account is required for processing all international and local payments through this Spryker payment module. The module is available for the SprykerB2C versions 202204.0 in the following languages: EN & DE
+
+## Key features
+- Easy configuration for all payment methods
+- One platform for all relevant payment types and related services
+- Complete automation of all payment processes
+- More than 50 fraud prevention modules integrated to prevent risk in real-time
+- No PCI DSS certification required when using our payment module
+- Real-time monitoring of the transaction flow from the checkout to the receivables
+- Multilevel claims management with integrated handover to collection and various export functions for the accounting
+- Automated e-mail notification function concerning payment status reports
+- Clear real-time overview and monitoring of payment status
+- Automated bookkeeping report in XML, SOAP, CSV, MT940
+- Secure SSL- encoded gateways
+- Seamless and fast integration of the payment module
+- Credit Card with 3D Secure
+- On-hold transaction configuration in the shop admin panel
+- Easy way of confirmation and cancellation of on-hold transactions (Cancel & Confirm option) for Credit/Debit Cards, Direct Debit SEPA, Direct Debit SEPA with payment guarantee, Invoice, Prepayment & PayPal.
+- Refund option for Credit/Debit Cards, Direct Debit SEPA, Direct Debit SEPA with payment guarantee, Invoice, Invoice with payment guarantee, Prepayment, Barzahlen/viacash, Sofort, iDEAL, eps, giropay, PayPal, Przelewy24, PostFinance Card, PostFinance E-Finance & Bancontact.
+- Responsive templates
+
+For detailed documentation and other technical inquiries, please send us an email at sales@novalnet.de
+
+## Integrated payment methods
+- Direct Debit SEPA
+- Credit/Debit Cards
+- Invoice
+- Prepayment
+- Invoice with payment guarantee
+- Direct Debit SEPA with payment guarantee
+- iDEAL
+- Sofort
+- giropay
+- Barzahlen/viacash
+- Przelewy24
+- eps
+- PayPal
+- PostFinance Card
+- PostFinance E-Finance
+- Bancontact
+- Multibanco
+
+## Installation via Composer
+
+#### Follow the below steps and run each command from the shop root directory
+ ##### 1. Run the below command to install the payment module
+
+ ```
+ php composer.phar require "novalnet/sprykerb2c-payment"
+ ```
+
+ ##### 2. Novalnet - General Configuration
+Configure the required settings under
+> vendor/novalnet/sprykerb2c-payment/config/config.dist.php
+
+To get the complete installation guide, contact sales@novalnet.de
+
+## License
+See our License Agreement at: https://www.novalnet.com/payment-plugins/free/license
+
+## Documentation & Support
+For more information about the Magento 2 Payment Integration by Novalnet, please get in touch with us: sales@novalnet.de or +49 89 9230683-20
+
+Novalnet AG
+Zahlungsinstitut (ZAG)
+Feringastr. 4
+85774 Unterföhring
+Deutschland
+Website: www.novalnet.de
+
+## Who is Novalnet AG?
+
Novalnet AG is a leading financial service institution offering payment gateways for processing online payments. Operating in the market as a full payment service provider Novalnet AG provides online merchants user-friendly payment integration with all major shop systems and self-programmed sites.
+
Accept, manage and monitor payments all on one platform with one single contract!
+
Our SaaS engine is PCI DSS certified and designed to enable real-time risk management, secured payments via escrow accounts, efficient receivables management, dynamic member and subscription management, customized payment solutions for various business models (e.g. marketplaces, affiliate programs etc.) etc.
diff --git a/changelog.txt b/changelog.txt
new file mode 100644
index 0000000..8796c70
--- /dev/null
+++ b/changelog.txt
@@ -0,0 +1,20 @@
+*** Changelog ***
+
+= 1.2.1 - 2022.08.29 =
+* Fix - Adjusted the payment module to proceed payment process for the guest checkout
+
+= 1.2.0 - 2022.01.05 =
+* New - Implemented Direct Debit SEPA with payment guarantee, Invoice with payment guarantee
+* Fix - Compatible for sprykerb2c version 202108.0
+* Enhanced - Callback for transactions has been optimized as per the new testcase
+
+= 1.1.0 - 2021.05.08 =
+* Fix - Optimized readme instructions in Installation guide
+* Enhanced - Adjusted payment methods state machines
+* Enhanced - Payment module updated with composer installation and adapted with new v2 API structure
+
+= 1.0.0 - 2019.08.06 =
+* - New release
+
+
+
diff --git a/composer.json b/composer.json
new file mode 100755
index 0000000..5469076
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,49 @@
+{
+ "name": "novalnet/sprykerb2c-payment",
+ "description": "Novalnet module",
+ "license": "MIT",
+ "require": {
+ "php": ">=7.2",
+ "spryker-shop/checkout-page": "^1.0.0 || ^2.0.0 || ^3.0.0",
+ "spryker/kernel": "^3.30.0",
+ "spryker/oms": "^7.0.0 || ^8.0.0 || ^10.0.0 || ^11.0.0",
+ "spryker/propel-orm": "^1.0.0",
+ "spryker/quote": "^2.0.0",
+ "spryker/sales": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^10.0.0 || ^11.0.0",
+ "spryker/refund": "^5.0.0",
+ "spryker/step-engine": "^3.0.0",
+ "spryker/symfony": "^3.0.0",
+ "spryker/zed-request": "^3.0.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "Novalnet\\": "src/Novalnet/"
+ }
+ },
+ "require-dev": {
+ "spryker/checkout": "*",
+ "spryker/payment": "*",
+ "spryker/propel": "*",
+ "spryker/router": "*",
+ "spryker-shop/shop-application": "*",
+ "spryker/silex": "*"
+ },
+ "suggest": {
+ "spryker/checkout": "CheckoutPostSaveHookInterface is used.",
+ "spryker/payment": "If you want to use payment method filtering.",
+ "spryker-shop/shop-application": "Abstract Yves controller provider is used.",
+ "spryker/silex": "Silex application is used."
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "config": {
+ "preferred-install": "dist",
+ "sort-packages": true,
+ "process-timeout": 600
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ }
+}
diff --git a/config/Zed/Oms/NovalnetBancontact01.xml b/config/Zed/Oms/NovalnetBancontact01.xml
new file mode 100755
index 0000000..1cca9ce
--- /dev/null
+++ b/config/Zed/Oms/NovalnetBancontact01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetBarzahlen01.xml b/config/Zed/Oms/NovalnetBarzahlen01.xml
new file mode 100755
index 0000000..e3b7cbb
--- /dev/null
+++ b/config/Zed/Oms/NovalnetBarzahlen01.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ waiting for payment
+ authorize
+
+
+
+
+ waiting for payment
+ waiting for payment
+
+
+
+
+ waiting for payment
+ capture
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetCreditCard01.xml b/config/Zed/Oms/NovalnetCreditCard01.xml
new file mode 100755
index 0000000..2c087f3
--- /dev/null
+++ b/config/Zed/Oms/NovalnetCreditCard01.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ paid
+ authorize
+
+
+
+
+ paid
+ capture
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetEps01.xml b/config/Zed/Oms/NovalnetEps01.xml
new file mode 100755
index 0000000..416280c
--- /dev/null
+++ b/config/Zed/Oms/NovalnetEps01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetGiropay01.xml b/config/Zed/Oms/NovalnetGiropay01.xml
new file mode 100755
index 0000000..f83cf28
--- /dev/null
+++ b/config/Zed/Oms/NovalnetGiropay01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetIdeal01.xml b/config/Zed/Oms/NovalnetIdeal01.xml
new file mode 100755
index 0000000..14eb4e1
--- /dev/null
+++ b/config/Zed/Oms/NovalnetIdeal01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetInvoice01.xml b/config/Zed/Oms/NovalnetInvoice01.xml
new file mode 100755
index 0000000..4faf33b
--- /dev/null
+++ b/config/Zed/Oms/NovalnetInvoice01.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ waiting for payment
+ authorize
+
+
+
+
+ waiting for payment
+ waiting for payment
+
+
+
+
+ waiting for payment
+ capture
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetInvoiceGuarantee01.xml b/config/Zed/Oms/NovalnetInvoiceGuarantee01.xml
new file mode 100755
index 0000000..febc64b
--- /dev/null
+++ b/config/Zed/Oms/NovalnetInvoiceGuarantee01.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ waiting for payment
+ authorize
+
+
+
+
+ paid
+ authorize
+
+
+
+
+ paid
+ capture
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetMultibanco01.xml b/config/Zed/Oms/NovalnetMultibanco01.xml
new file mode 100755
index 0000000..d1d4d7e
--- /dev/null
+++ b/config/Zed/Oms/NovalnetMultibanco01.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ waiting for payment
+ authorize
+
+
+
+
+ waiting for payment
+ waiting for payment
+
+
+
+
+ waiting for payment
+ capture
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetPaypal01.xml b/config/Zed/Oms/NovalnetPaypal01.xml
new file mode 100755
index 0000000..70f916c
--- /dev/null
+++ b/config/Zed/Oms/NovalnetPaypal01.xml
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ authorized
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ capture
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetPostfinance01.xml b/config/Zed/Oms/NovalnetPostfinance01.xml
new file mode 100755
index 0000000..2480548
--- /dev/null
+++ b/config/Zed/Oms/NovalnetPostfinance01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetPostfinanceCard01.xml b/config/Zed/Oms/NovalnetPostfinanceCard01.xml
new file mode 100755
index 0000000..4868335
--- /dev/null
+++ b/config/Zed/Oms/NovalnetPostfinanceCard01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetPrepayment01.xml b/config/Zed/Oms/NovalnetPrepayment01.xml
new file mode 100755
index 0000000..4b196fa
--- /dev/null
+++ b/config/Zed/Oms/NovalnetPrepayment01.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ waiting for payment
+ authorize
+
+
+
+
+ waiting for payment
+ waiting for payment
+
+
+
+
+ waiting for payment
+ capture
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetPrzelewy01.xml b/config/Zed/Oms/NovalnetPrzelewy01.xml
new file mode 100755
index 0000000..fa7b581
--- /dev/null
+++ b/config/Zed/Oms/NovalnetPrzelewy01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetSepa01.xml b/config/Zed/Oms/NovalnetSepa01.xml
new file mode 100755
index 0000000..31cb213
--- /dev/null
+++ b/config/Zed/Oms/NovalnetSepa01.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ paid
+ authorize
+
+
+
+
+ paid
+ capture
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetSepaGuarantee01.xml b/config/Zed/Oms/NovalnetSepaGuarantee01.xml
new file mode 100755
index 0000000..96fc7b4
--- /dev/null
+++ b/config/Zed/Oms/NovalnetSepaGuarantee01.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ authorized
+ authorize
+
+
+
+
+ canceled
+ authorize
+
+
+
+
+ paid
+ authorize
+
+
+
+
+ paid
+ capture
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ canceled
+ cancel
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/Zed/Oms/NovalnetSofort01.xml b/config/Zed/Oms/NovalnetSofort01.xml
new file mode 100755
index 0000000..6a92bd0
--- /dev/null
+++ b/config/Zed/Oms/NovalnetSofort01.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ online transfer pending
+ authorize
+
+
+
+
+ invalid
+ authorize
+
+
+
+
+ waiting for payment
+ redirect response
+
+
+
+
+ paid
+ redirect response
+
+
+
+
+ canceled
+ redirect response
+
+
+
+
+ paid
+ callback paid
+
+
+
+
+ canceled
+ callback canceled
+
+
+
+
+ shipped
+ ship
+
+
+
+
+ refunded
+ refund
+
+
+
+
+ closed
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/config.dist.php b/config/config.dist.php
new file mode 100755
index 0000000..7301064
--- /dev/null
+++ b/config/config.dist.php
@@ -0,0 +1,123 @@
+ 'NovalnetCreditCard01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_SEPA => 'NovalnetSepa01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_SEPA_GUARANTEE => 'NovalnetSepaGuarantee01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_INVOICE => 'NovalnetInvoice01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_INVOICE_GUARANTEE => 'NovalnetInvoiceGuarantee01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_PREPAYMENT => 'NovalnetPrepayment01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_IDEAL => 'NovalnetIdeal01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_SOFORT => 'NovalnetSofort01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_GIROPAY => 'NovalnetGiropay01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_BARZAHLEN => 'NovalnetBarzahlen01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_PRZELEWY => 'NovalnetPrzelewy01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_EPS => 'NovalnetEps01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_PAYPAL => 'NovalnetPaypal01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_POSTFINANCE_CARD => 'NovalnetPostfinanceCard01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_POSTFINANCE => 'NovalnetPostfinance01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_BANCONTACT => 'NovalnetBancontact01',
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_MULTIBANCO => 'NovalnetMultibanco01',
+];
+
+// ----------- Translator
+$config[TranslatorConstants::TRANSLATION_ZED_FILE_PATH_PATTERNS] = [
+ APPLICATION_ROOT_DIR . '/vendor/novalnet/sprykerb2c-payment/data/translation/Zed/[a-z][a-z]_[A-Z][A-Z].csv',
+];
+
+$config[NovalnetConstants::NOVALNET] = [
+ // ------------------ Vendor Configurations ----------------------
+ NovalnetConstants::NOVALNET_CREDENTIALS_SIGNATURE => '', // The signature is provided by Novalnet AG after the opening of a merchant account.
+ NovalnetConstants::NOVALNET_CREDENTIALS_TARIFF => '', // The tariff ID is a unique identification number for each project you have created. The merchant can create any number of tariffs in the Novalnet admin portal.
+ NovalnetConstants::NOVALNET_CREDENTIALS_ACCESS_KEY => '', // This is the secure public key for encrypting and decrypting transaction parameters. This is mandatory value for all online transfers, Credit Card-3D secure and wallet systems.
+ NovalnetConstants::NOVALNET_SANDBOX_MODE => false, // (true/false) true = The payment will be processed in the test mode therefore amount for this transaction will not be charged, false = The payment will be processed in the live mode.
+ // ------------------ Shop URL information ----------------------
+ NovalnetConstants::NOVALNET_REDIRECT_SUCCESS_URL => sprintf(
+ '%s/novalnet/payment',
+ $config[ApplicationConstants::BASE_URL_YVES]
+ ),
+ NovalnetConstants::NOVALNET_REDIRECT_ERROR_URL => sprintf(
+ '%s/novalnet/payment',
+ $config[ApplicationConstants::BASE_URL_YVES]
+ ),
+
+ // ------------------ Credit Card payment ----------------------
+ NovalnetConstants::NOVALNET_CREDIT_CARD_ONHOLD_AMOUNT_LIMIT => '', // (in minimum unit of currency. Example. enter 100 which is equal to 1.00) In case the order amount exceeds mentioned limit, the transaction will be set on hold till your confirmation of transaction.
+ NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_CLIENT_KEY => '', // A public unique key needs linked to your account. It is needed to do the client-side authentication. You can find this credential by logging into your Novalnet Admin Portal
+ NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_INLINE => true, // (true/false) true = Show Inline Credit card form form, false = Show Credit Card form in multi lines.
+ NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_STYLE_CONTAINER => '', // Customize styles of the Credit Card iframe.
+ NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_STYLE_INPUT => '', // Customize styles of the Credit Card iframe input element.
+ NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_STYLE_LABEL => '', // Customize styles of the Credit Card iframe label element.
+
+ // ------------------ Invoice payment ----------------------
+ NovalnetConstants::NOVALNET_INVOICE_DUE_DATE => '', // (in days) Enter the number of days within which the payment is to be made at Novalnet (at least 7 days). If this field is empty, 14 days will be set as the default time.
+ NovalnetConstants::NOVALNET_INVOICE_ONHOLD_AMOUNT_LIMIT => '', // (in minimum unit of currency. Example. enter 100 which is equal to 1.00) In case the order amount exceeds mentioned limit, the transaction will be set on hold till your confirmation of transaction.
+
+ // ------------------ Prepayment payment ----------------------
+ NovalnetConstants::NOVALNET_PREPAYMENT_DUE_DATE => '', // (in days) Enter the number of days within which the payment is to be made at Novalnet (at least 7 days). If this field is empty, 14 days will be set as the default time.
+
+ // ------------------ Guraranteed Invoice payment ----------------------
+ NovalnetConstants::NOVALNET_INVOICE_GUARANTEE_MINIMUM_AMOUNT_LIMIT => '', // Enter the minimum amount (in cents) for the transaction to be processed with payment guarantee. For example, enter 100 which is equal to 1,00. By default, the amount will be 9,99 EUR
+ NovalnetConstants::NOVALNET_INVOICE_GUARANTEE_ONHOLD_AMOUNT_LIMIT => '', // (in minimum unit of currency. Example. enter 100 which is equal to 1.00) In case the order amount exceeds mentioned limit, the transaction will be set on hold till your confirmation of transaction.
+
+ // ------------------ Direct Debit SEPA payment ----------------------
+ NovalnetConstants::NOVALNET_SEPA_DUE_DATE => '', // (in days) Enter the number of days after which the payment should be processed (must be between 2 and 14 days).
+ NovalnetConstants::NOVALNET_SEPA_ONHOLD_AMOUNT_LIMIT => '', // (in minimum unit of currency. Example. enter 100 which is equal to 1.00) In case the order amount exceeds mentioned limit, the transaction will be set on hold till your confirmation of transaction.
+
+ // ------------------ Guraranteed Direct Debit SEPA payment ----------------------
+ NovalnetConstants::NOVALNET_SEPA_GUARANTEE_DUE_DATE => '', // (in days) Enter the number of days after which the payment should be processed (must be between 2 and 14 days).
+ NovalnetConstants::NOVALNET_SEPA_GUARANTEE_MINIMUM_AMOUNT_LIMIT => '', // Enter the minimum amount (in cents) for the transaction to be processed with payment guarantee. For example, enter 100 which is equal to 1,00. By default, the amount will be 9,99 EUR
+ NovalnetConstants::NOVALNET_SEPA_GUARANTEE_ONHOLD_AMOUNT_LIMIT => '', // (in minimum unit of currency. Example. enter 100 which is equal to 1.00) In case the order amount exceeds mentioned limit, the transaction will be set on hold till your confirmation of transaction.
+
+ // ------------------ Barzahlen payment ----------------------
+ NovalnetConstants::NOVALNET_BARZAHLEN_SLIP_EXPIRY_DATE => '', // (in days) Enter the number of days within which your customer will pay the amount of the order in a cash partner store near him. If the ticket does not redeem and pay the payment in time, it will expire. If the field is empty, by default it is set to 14 days as the due date.
+
+ // ------------------ PayPayl payment ----------------------
+ NovalnetConstants::NOVALNET_PAYPAL_ONHOLD_AMOUNT_LIMIT => '', // (in minimum unit of currency. Example. enter 100 which is equal to 1.00) In case the order amount exceeds mentioned limit, the transaction will be set on hold till your confirmation of transaction.
+];
+
+// ------------------ Novalnet Callback Script ----------------------
+$config[NovalnetConstants::NOVALNET_CALLBACK] = [
+ NovalnetConstants::NOVALNET_CALLBACK_DEBUG_MODE => false, // (true/false) Please disable this option before setting your shop to LIVE mode, to avoid unauthorized calls from external parties (excl. Novalnet). For LIVE, set the value as false.
+ NovalnetConstants::NOVALNET_CALLBACK_EMAIL_TO_ADDRESS => '', // E-mail address of the recipient for To
+];
diff --git a/data/translation/Zed/de_DE.csv b/data/translation/Zed/de_DE.csv
new file mode 100755
index 0000000..cadc90e
--- /dev/null
+++ b/data/translation/Zed/de_DE.csv
@@ -0,0 +1,22 @@
+"Callback comments","Callback Kommentare"
+"Transaction mode","Transaktionsmodus"
+"Bank account details to transfer the amount","Bankverbindung zur Ăśberweisung des Betrages"
+"Guarantee payment pending comments","Zahlungsgarantie in Erwartung von Kommentaren"
+"Transaction ID","Transaktions-ID"
+"Payment method","Zahlungsart"
+"novalnetCreditCard","Kredit-/Debitkarte"
+"novalnetSepa","SEPA-Lastschrift"
+"novalnetInvoice","Rechnung"
+"novalnetPrepayment","Vorkasse"
+"novalnetIdeal,"iDEAL"
+"novalnetSofort","SofortĂĽberweisung"
+"novalnetGiropay","giropay"
+"novalnetBarzahlen","Barzahlen/viacash"
+"novalnetPrzelewy","Przelewy24"
+"novalnetEps","eps"
+"novalnetPaypal","PayPal"
+"novalnetPostfinanceCard","PostFinance Card"
+"novalnetPostfinance","PostFinance E-Finance"
+"novalnetBancontact","Bancontact"
+"novalnetMultibanco","Multibanco"
+
diff --git a/data/translation/Zed/en_US.csv b/data/translation/Zed/en_US.csv
new file mode 100755
index 0000000..d2e758b
--- /dev/null
+++ b/data/translation/Zed/en_US.csv
@@ -0,0 +1,22 @@
+"Callback comments","Callback comments"
+"Transaction mode","Transaction mode"
+"Bank account details to transfer the amount","Bank account details to transfer the amount"
+"Guarantee payment pending comments","Guarantee payment pending comments"
+"Transaction ID","Transaction ID"
+"Payment method","Payment method"
+"novalnetCreditCard","Credit/Debit Cards"
+"novalnetSepa","Direct Debit SEPA"
+"novalnetInvoice","Invoice"
+"novalnetPrepayment","Prepayment"
+"novalnetIdeal,"iDEAL"
+"novalnetSofort","Sofort"
+"novalnetGiropay","giropay"
+"novalnetBarzahlen","Barzahlen/viacash"
+"novalnetPrzelewy","Przelewy24"
+"novalnetEps","eps"
+"novalnetPaypal","PayPal"
+"novalnetPostfinanceCard","PostFinance Card"
+"novalnetPostfinance","PostFinance E-Finance"
+"novalnetBancontact","Bancontact"
+"novalnetMultibanco","Multibanco"
+
diff --git a/src/Novalnet/Client/NovalnetPayment/Dependency/Client/NovalnetPaymentToZedRequestClientBridge.php b/src/Novalnet/Client/NovalnetPayment/Dependency/Client/NovalnetPaymentToZedRequestClientBridge.php
new file mode 100755
index 0000000..f4f5e96
--- /dev/null
+++ b/src/Novalnet/Client/NovalnetPayment/Dependency/Client/NovalnetPaymentToZedRequestClientBridge.php
@@ -0,0 +1,33 @@
+zedRequestClient = $zedRequestClient;
+ }
+
+ /**
+ * @param string $url
+ * @param \Spryker\Shared\Kernel\Transfer\TransferInterface $object
+ * @param array|int|null $requestOptions
+ *
+ * @return \Spryker\Shared\Kernel\Transfer\TransferInterface
+ */
+ public function call($url, TransferInterface $object, $requestOptions = null): TransferInterface
+ {
+ return $this->zedRequestClient->call($url, $object, $requestOptions);
+ }
+}
diff --git a/src/Novalnet/Client/NovalnetPayment/Dependency/Client/NovalnetPaymentToZedRequestClientInterface.php b/src/Novalnet/Client/NovalnetPayment/Dependency/Client/NovalnetPaymentToZedRequestClientInterface.php
new file mode 100755
index 0000000..17f297a
--- /dev/null
+++ b/src/Novalnet/Client/NovalnetPayment/Dependency/Client/NovalnetPaymentToZedRequestClientInterface.php
@@ -0,0 +1,17 @@
+getFactory()
+ ->createZedNovalnetPaymentStub()
+ ->processRedirectPaymentResponse($redirectResponseTransfer);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @api
+ *
+ * @param \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer $callbackResponseTransfer
+ *
+ * @return \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer
+ */
+ public function processCallbackResponse(NovalnetCallbackResponseTransfer $callbackResponseTransfer): NovalnetCallbackResponseTransfer
+ {
+ return $this
+ ->getFactory()
+ ->createZedNovalnetPaymentStub()
+ ->processCallbackResponse($callbackResponseTransfer);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @api
+ *
+ * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
+ *
+ * @return \Generated\Shared\Transfer\OrderTransfer
+ */
+ public function getTransactionDetails(OrderTransfer $orderTransfer): OrderTransfer
+ {
+ return $this
+ ->getFactory()
+ ->createZedNovalnetPaymentStub()
+ ->getTransactionDetails($orderTransfer);
+ }
+}
diff --git a/src/Novalnet/Client/NovalnetPayment/NovalnetPaymentClientInterface.php b/src/Novalnet/Client/NovalnetPayment/NovalnetPaymentClientInterface.php
new file mode 100755
index 0000000..b83da7f
--- /dev/null
+++ b/src/Novalnet/Client/NovalnetPayment/NovalnetPaymentClientInterface.php
@@ -0,0 +1,49 @@
+addServiceZed($container);
+
+ return $container;
+ }
+
+ /**
+ * @param \Spryker\Client\Kernel\Container $container
+ *
+ * @return \Spryker\Client\Kernel\Container
+ */
+ protected function addServiceZed(Container $container): Container
+ {
+ $container[self::CLIENT_ZED_REQUEST] = function (Container $container) {
+ return new NovalnetPaymentToZedRequestClientBridge($container->getLocator()->zedRequest()->client());
+ };
+
+ return $container;
+ }
+}
diff --git a/src/Novalnet/Client/NovalnetPayment/NovalnetPaymentFactory.php b/src/Novalnet/Client/NovalnetPayment/NovalnetPaymentFactory.php
new file mode 100755
index 0000000..ae4ef34
--- /dev/null
+++ b/src/Novalnet/Client/NovalnetPayment/NovalnetPaymentFactory.php
@@ -0,0 +1,27 @@
+getZedRequestClient());
+ }
+
+ /**
+ * @return \Novalnet\Client\NovalnetPayment\Dependency\Client\NovalnetPaymentToZedRequestClientInterface
+ */
+ public function getZedRequestClient(): NovalnetPaymentToZedRequestClientInterface
+ {
+ return $this->getProvidedDependency(NovalnetPaymentDependencyProvider::CLIENT_ZED_REQUEST);
+ }
+}
diff --git a/src/Novalnet/Client/NovalnetPayment/Zed/NovalnetPaymentStub.php b/src/Novalnet/Client/NovalnetPayment/Zed/NovalnetPaymentStub.php
new file mode 100755
index 0000000..de1d46e
--- /dev/null
+++ b/src/Novalnet/Client/NovalnetPayment/Zed/NovalnetPaymentStub.php
@@ -0,0 +1,63 @@
+zedRequestClient = $zedRequestClient;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\NovalnetRedirectResponseTransfer $redirectResponseTransfer
+ *
+ * @return \Generated\Shared\Transfer\NovalnetRedirectResponseTransfer
+ */
+ public function processRedirectPaymentResponse(NovalnetRedirectResponseTransfer $redirectResponseTransfer): NovalnetRedirectResponseTransfer
+ {
+ /** @var \Generated\Shared\Transfer\NovalnetRedirectResponseTransfer $redirectResponseTransfer */
+ $redirectResponseTransfer = $this->zedRequestClient->call('/novalnet-payment/gateway/process-redirect-payment-response', $redirectResponseTransfer);
+
+ return $redirectResponseTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer $callbackResponseTransfer
+ *
+ * @return \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer
+ */
+ public function processCallbackResponse(NovalnetCallbackResponseTransfer $callbackResponseTransfer): NovalnetCallbackResponseTransfer
+ {
+ /** @var \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer $callbackResponseTransfer */
+ $callbackResponseTransfer = $this->zedRequestClient->call('/novalnet-payment/gateway/process-callback-response', $callbackResponseTransfer);
+
+ return $callbackResponseTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
+ *
+ * @return \Generated\Shared\Transfer\OrderTransfer
+ */
+ public function getTransactionDetails(OrderTransfer $orderTransfer): OrderTransfer
+ {
+ /** @var \Generated\Shared\Transfer\OrderTransfer $orderTransfer */
+ $orderTransfer = $this->zedRequestClient->call('/novalnet-payment/gateway/transaction-details', $orderTransfer);
+
+ return $orderTransfer;
+ }
+}
diff --git a/src/Novalnet/Client/NovalnetPayment/Zed/NovalnetPaymentStubInterface.php b/src/Novalnet/Client/NovalnetPayment/Zed/NovalnetPaymentStubInterface.php
new file mode 100755
index 0000000..debd65a
--- /dev/null
+++ b/src/Novalnet/Client/NovalnetPayment/Zed/NovalnetPaymentStubInterface.php
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Novalnet/Yves/NovalnetPayment/Controller/NovalnetController.php b/src/Novalnet/Yves/NovalnetPayment/Controller/NovalnetController.php
new file mode 100755
index 0000000..c49d2a7
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Controller/NovalnetController.php
@@ -0,0 +1,145 @@
+getUrldecodedRequestBody($request);
+
+ $redirectResponseTransfer = new NovalnetRedirectResponseTransfer();
+ $redirectResponseTransfer->setStatusMessage(!empty($request['status_text']) ? $request['status_text'] : '');
+ $redirectResponseTransfer->setPaymentResponse($request);
+ $redirectResponseTransfer = $this->processPaymentResponse($redirectResponseTransfer);
+
+ return $this->handleRedirectFromNovalnet($redirectResponseTransfer);
+ }
+
+ /**
+ * @param \Symfony\Component\HttpFoundation\Request $request
+ *
+ * @return array
+ */
+ protected function getUrldecodedRequestBody(Request $request): array
+ {
+ $allRequestParameters = $request->query->all();
+
+ foreach ($allRequestParameters as $key => $value) {
+ if (is_string($value)) {
+ $allRequestParameters[$key] = urldecode($value);
+ }
+ }
+
+ return $allRequestParameters;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\NovalnetRedirectResponseTransfer $redirectResponseTransfer
+ *
+ * @return \Generated\Shared\Transfer\NovalnetRedirectResponseTransfer
+ */
+ protected function processPaymentResponse(NovalnetRedirectResponseTransfer $redirectResponseTransfer): NovalnetRedirectResponseTransfer
+ {
+ return $this
+ ->getClient()
+ ->processRedirectPaymentResponse($redirectResponseTransfer);
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\NovalnetRedirectResponseTransfer $responseTransfer
+ *
+ * @return \Symfony\Component\HttpFoundation\RedirectResponse
+ */
+ protected function handleRedirectFromNovalnet(NovalnetRedirectResponseTransfer $responseTransfer): RedirectResponse
+ {
+ if ($responseTransfer->getIsSuccess()) {
+ $this->addSuccessMessage($responseTransfer->getStatusMessage()); // Add payport status message
+
+ return $this->redirectResponseInternal(static::ROUTE_CHECKOUT_SUCCESS);
+ } else {
+ $this->addErrorMessage($responseTransfer->getStatusMessage()); // Add payport status message
+
+ return $this->redirectResponseInternal(static::CHECKOUT_ERROR);
+ }
+ }
+
+ /**
+ * @param callable|null $callback
+ * @param int $status
+ * @param array $headers
+ *
+ * @return \Symfony\Component\HttpFoundation\StreamedResponse
+ */
+ protected function streamedResponse($callback = null, $status = 200, $headers = []): StreamedResponse
+ {
+ $streamedResponse = new StreamedResponse($callback, $status, $headers);
+ $streamedResponse->send();
+
+ return $streamedResponse;
+ }
+
+ /**
+ * @param \Symfony\Component\HttpFoundation\Request $request
+ *
+ * @return \Symfony\Component\HttpFoundation\StreamedResponse
+ */
+ public function callbackAction(Request $request): StreamedResponse
+ {
+ $clientIp = $request->getClientIp(); // Get the client IP address
+ $requestJson = $request->getContent();
+ $request = json_decode($requestJson, true);
+
+ $callbackResponseTransfer = new NovalnetCallbackResponseTransfer();
+
+ if (!empty($request['transaction']['order_no'])) {
+ $callbackResponseTransfer->setOrderNo($request['transaction']['order_no']);
+ }
+
+ if (!empty($request['transaction']['payment_type'])) {
+ $callbackResponseTransfer->setPaymentType($request['transaction']['payment_type']);
+ }
+
+ $callbackResponseTransfer->setClientIp($clientIp);
+ $callbackResponseTransfer->setCallbackResponse($request);
+
+ $response = $this->processCallbackResponse($callbackResponseTransfer);
+
+ $callback = function () use ($response) {
+ echo $response->getStatusMessage();
+ };
+
+ return $this->streamedResponse($callback);
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer $callbackResponseTransfer
+ *
+ * @return \Generated\Shared\Transfer\NovalnetCallbackResponseTransfer
+ */
+ protected function processCallbackResponse(NovalnetCallbackResponseTransfer $callbackResponseTransfer): NovalnetCallbackResponseTransfer
+ {
+ return $this
+ ->getClient()
+ ->processCallbackResponse($callbackResponseTransfer);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Exception/PaymentMethodNotFoundException.php b/src/Novalnet/Yves/NovalnetPayment/Exception/PaymentMethodNotFoundException.php
new file mode 100755
index 0000000..6ea4d18
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Exception/PaymentMethodNotFoundException.php
@@ -0,0 +1,9 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/BarzahlenSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/BarzahlenSubForm.php
new file mode 100755
index 0000000..ff1083c
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/BarzahlenSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/CreditCardSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/CreditCardSubForm.php
new file mode 100755
index 0000000..66ee0d3
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/CreditCardSubForm.php
@@ -0,0 +1,317 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return void
+ */
+ public function buildForm(FormBuilderInterface $builder, array $options): void
+ {
+ $builder->add(
+ self::OPTION_PAN_HASH,
+ HiddenType::class,
+ ['label' => false]
+ );
+
+ $builder->add(
+ self::OPTION_UNIQUE_ID,
+ HiddenType::class,
+ ['label' => false]
+ );
+
+ $builder->add(
+ self::OPTION_DO_REDIRECT,
+ HiddenType::class,
+ ['label' => false]
+ );
+ // Add iFrame data (clientKey, iFrame form customization inputs)
+ $this->addFrameData($builder, $options);
+ // Add transaction data (amount, currency, etc.,)
+ $this->addTransactionData($builder, $options);
+ // Add customer data (firstname, lastname, etc.,)
+ $this->addCustomerData($builder, $options);
+ // Add custom data (language)
+ $this->addCustomData($builder, $options);
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return $this
+ */
+ protected function addFrameData(FormBuilderInterface $builder, array $options)
+ {
+ $builder->add(
+ self::OPTION_FORM_CLIENT_KEY,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_FORM_CLIENT_KEY],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_FORM_INLINE,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_FORM_INLINE],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_FORM_STYLE_CONTAINER,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_FORM_STYLE_CONTAINER],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_FORM_STYLE_INPUT,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_FORM_STYLE_INPUT],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_FORM_STYLE_LABEL,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_FORM_STYLE_LABEL],
+ ]
+ );
+
+ return $this;
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return $this
+ */
+ protected function addTransactionData(FormBuilderInterface $builder, array $options)
+ {
+ $builder->add(
+ self::OPTION_AMOUNT,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_AMOUNT],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_CURRENCY,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_CURRENCY],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_TEST_MODE,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_TEST_MODE],
+ ]
+ );
+
+ return $this;
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return $this
+ */
+ protected function addCustomerData(FormBuilderInterface $builder, array $options)
+ {
+ $builder->add(
+ self::OPTION_FIRST_NAME,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_FIRST_NAME],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_LAST_NAME,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_LAST_NAME],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_EMAIL,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_EMAIL],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_STREET,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_STREET],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_HOUSE_NO,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_HOUSE_NO],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_CITY,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_CITY],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_ZIP,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_ZIP],
+ ]
+ );
+
+ $builder->add(
+ self::OPTION_COUNTRY_CODE,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_COUNTRY_CODE],
+ ]
+ );
+
+ return $this;
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return $this
+ */
+ protected function addCustomData(FormBuilderInterface $builder, array $options)
+ {
+ $builder->add(
+ self::OPTION_LANG,
+ HiddenType::class,
+ [
+ 'label' => false,
+ 'data' => $options[self::OPTIONS_FIELD_NAME][self::OPTION_LANG],
+ ]
+ );
+
+ return $this;
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/BancontactFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/BancontactFormDataProvider.php
new file mode 100755
index 0000000..e2ffba4
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/BancontactFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetBancontact(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/BarzahlenFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/BarzahlenFormDataProvider.php
new file mode 100755
index 0000000..502fb7f
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/BarzahlenFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetBarzahlen(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/CreditCardFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/CreditCardFormDataProvider.php
new file mode 100755
index 0000000..87a4ad1
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/CreditCardFormDataProvider.php
@@ -0,0 +1,71 @@
+config = $config;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return \Generated\Shared\Transfer\QuoteTransfer
+ */
+ public function getData(AbstractTransfer $quoteTransfer)
+ {
+ if ($quoteTransfer->getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetCreditCard(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [
+ CreditCardSubForm::OPTION_FIRST_NAME => $quoteTransfer->getBillingAddress()->getFirstName(),
+ CreditCardSubForm::OPTION_LAST_NAME => $quoteTransfer->getBillingAddress()->getLastName(),
+ CreditCardSubForm::OPTION_EMAIL => $quoteTransfer->getCustomer()->getEmail(),
+ CreditCardSubForm::OPTION_STREET => $quoteTransfer->getBillingAddress()->getAddress1(),
+ CreditCardSubForm::OPTION_HOUSE_NO => $quoteTransfer->getBillingAddress()->getAddress2(),
+ CreditCardSubForm::OPTION_CITY => $quoteTransfer->getBillingAddress()->getCity(),
+ CreditCardSubForm::OPTION_ZIP => $quoteTransfer->getBillingAddress()->getZipCode(),
+ CreditCardSubForm::OPTION_COUNTRY_CODE => $quoteTransfer->getBillingAddress()->getIso2Code(),
+ CreditCardSubForm::OPTION_AMOUNT => $quoteTransfer->getTotals()->getGrandTotal(),
+ CreditCardSubForm::OPTION_CURRENCY => $this->config->getCurrency(),
+ CreditCardSubForm::OPTION_TEST_MODE => ($this->config->getTestMode() === true ? 1 : 0),
+ CreditCardSubForm::OPTION_LANG => $this->config->getLanguage(),
+ CreditCardSubForm::OPTION_FORM_CLIENT_KEY => $this->config->getCreditCardClientKey(),
+ CreditCardSubForm::OPTION_FORM_INLINE => ($this->config->getCreditCardInline() === true ? 1 : 0),
+ CreditCardSubForm::OPTION_FORM_STYLE_CONTAINER => $this->config->getCreditCardStyleContainer(),
+ CreditCardSubForm::OPTION_FORM_STYLE_INPUT => $this->config->getCreditCardStyleInput(),
+ CreditCardSubForm::OPTION_FORM_STYLE_LABEL => $this->config->getCreditCardStyleLabel(),
+ ];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/EpsFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/EpsFormDataProvider.php
new file mode 100755
index 0000000..62284d6
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/EpsFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetEps(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/GiropayFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/GiropayFormDataProvider.php
new file mode 100755
index 0000000..1b361a5
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/GiropayFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetGiropay(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/IdealFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/IdealFormDataProvider.php
new file mode 100755
index 0000000..97b0857
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/IdealFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetIdeal(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/InvoiceFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/InvoiceFormDataProvider.php
new file mode 100755
index 0000000..6368ba9
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/InvoiceFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetInvoice(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/InvoiceGuaranteeFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/InvoiceGuaranteeFormDataProvider.php
new file mode 100755
index 0000000..1ccd9d5
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/InvoiceGuaranteeFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetInvoiceGuarantee(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/MultibancoFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/MultibancoFormDataProvider.php
new file mode 100755
index 0000000..ff02463
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/MultibancoFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetMultibanco(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PaypalFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PaypalFormDataProvider.php
new file mode 100755
index 0000000..8c763a1
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PaypalFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetPaypal(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PostfinanceCardFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PostfinanceCardFormDataProvider.php
new file mode 100755
index 0000000..c2e65b2
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PostfinanceCardFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetPostfinanceCard(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PostfinanceFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PostfinanceFormDataProvider.php
new file mode 100755
index 0000000..1e75b2e
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PostfinanceFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetPostfinance(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PrepaymentFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PrepaymentFormDataProvider.php
new file mode 100755
index 0000000..866c664
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PrepaymentFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetPrepayment(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PrzelewyFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PrzelewyFormDataProvider.php
new file mode 100755
index 0000000..16bcf19
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/PrzelewyFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetPrzelewy(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SepaFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SepaFormDataProvider.php
new file mode 100755
index 0000000..e50e706
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SepaFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetSepa(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SepaGuaranteeFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SepaGuaranteeFormDataProvider.php
new file mode 100755
index 0000000..88b2242
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SepaGuaranteeFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetSepaGuarantee(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SofortFormDataProvider.php b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SofortFormDataProvider.php
new file mode 100755
index 0000000..24fa89a
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/DataProvider/SofortFormDataProvider.php
@@ -0,0 +1,38 @@
+getPayment() === null) {
+ $paymentTransfer = new PaymentTransfer();
+ $paymentTransfer->setNovalnetSofort(new NovalnetTransfer());
+
+ $quoteTransfer->setPayment($paymentTransfer);
+ }
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return array
+ */
+ public function getOptions(AbstractTransfer $quoteTransfer)
+ {
+ return [];
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/EpsSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/EpsSubForm.php
new file mode 100755
index 0000000..4fac4d1
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/EpsSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/GriopaySubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/GriopaySubForm.php
new file mode 100755
index 0000000..a1db3c6
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/GriopaySubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/IdealSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/IdealSubForm.php
new file mode 100755
index 0000000..58a5526
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/IdealSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/InvoiceGuaranteeSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/InvoiceGuaranteeSubForm.php
new file mode 100755
index 0000000..f18a517
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/InvoiceGuaranteeSubForm.php
@@ -0,0 +1,87 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return void
+ */
+ public function buildForm(FormBuilderInterface $builder, array $options): void
+ {
+ parent::buildForm($builder, $options);
+
+ $builder->add(
+ self::FIELD_DOB,
+ TextType::class,
+ [
+ 'label' => static::DOB_LABEL,
+ 'required' => true,
+ ]
+ );
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/InvoiceSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/InvoiceSubForm.php
new file mode 100755
index 0000000..aff2f17
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/InvoiceSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/MultibancoSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/MultibancoSubForm.php
new file mode 100755
index 0000000..900c023
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/MultibancoSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/PaypalSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/PaypalSubForm.php
new file mode 100755
index 0000000..70239ee
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/PaypalSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/PostfinanceCardSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/PostfinanceCardSubForm.php
new file mode 100755
index 0000000..0da4a90
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/PostfinanceCardSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/PostfinanceSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/PostfinanceSubForm.php
new file mode 100755
index 0000000..59bc246
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/PostfinanceSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/PrepaymentSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/PrepaymentSubForm.php
new file mode 100755
index 0000000..acf89cb
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/PrepaymentSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/PrzelewySubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/PrzelewySubForm.php
new file mode 100755
index 0000000..490b469
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/PrzelewySubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/SepaGuaranteeSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/SepaGuaranteeSubForm.php
new file mode 100755
index 0000000..b697875
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/SepaGuaranteeSubForm.php
@@ -0,0 +1,154 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return void
+ */
+ public function buildForm(FormBuilderInterface $builder, array $options): void
+ {
+ parent::buildForm($builder, $options);
+ $this->addIBAN($builder);
+
+ $builder->add(
+ self::FIELD_DOB,
+ TextType::class,
+ [
+ 'label' => static::DOB_LABEL,
+ 'required' => true,
+ ]
+ );
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormView $view The view
+ * @param \Symfony\Component\Form\FormInterface $form The form
+ * @param array $options The options
+ *
+ * @return void
+ */
+ public function buildView(FormView $view, FormInterface $form, array $options): void
+ {
+ parent::buildView($view, $form, $options);
+ $selectedOptions = $options[static::OPTIONS_FIELD_NAME];
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ *
+ * @return $this
+ */
+ protected function addIBAN(FormBuilderInterface $builder)
+ {
+ $builder->add(
+ self::FIELD_IBAN,
+ TextType::class,
+ [
+ 'label' => static::IBAN_LABEL,
+ 'required' => true,
+ 'constraints' => [
+ $this->createNotBlankConstraint(),
+ $this->createIbanValidationConstraint(),
+ ],
+ ]
+ );
+
+ return $this;
+ }
+
+ /**
+ * @return \Symfony\Component\Validator\Constraint
+ */
+ protected function createNotBlankConstraint()
+ {
+ return new NotBlank(['groups' => $this->getPropertyPath()]);
+ }
+
+ /**
+ * @return \Symfony\Component\Validator\Constraint
+ */
+ protected function createIbanValidationConstraint()
+ {
+ return new Regex([
+ 'pattern' => '/^(?:[a-z]{2}[0-9]+$)/i',
+ 'message' => static::VALIDATION_IBAN_MESSAGE,
+ 'groups' => $this->getPropertyPath(),
+ ]);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/SepaSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/SepaSubForm.php
new file mode 100755
index 0000000..58c5189
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/SepaSubForm.php
@@ -0,0 +1,110 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ * @param array $options
+ *
+ * @return void
+ */
+ public function buildForm(FormBuilderInterface $builder, array $options): void
+ {
+ parent::buildForm($builder, $options);
+ $this->addIBAN($builder);
+ }
+
+ /**
+ * @param \Symfony\Component\Form\FormBuilderInterface $builder
+ *
+ * @return $this
+ */
+ protected function addIBAN(FormBuilderInterface $builder)
+ {
+ $builder->add(
+ self::FIELD_IBAN,
+ TextType::class,
+ [
+ 'label' => static::IBAN_LABEL,
+ 'required' => true,
+ 'constraints' => [
+ $this->createNotBlankConstraint(),
+ ],
+ ]
+ );
+
+ return $this;
+ }
+
+ /**
+ * @return \Symfony\Component\Validator\Constraint
+ */
+ protected function createNotBlankConstraint()
+ {
+ return new NotBlank(['groups' => $this->getPropertyPath()]);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Form/SofortSubForm.php b/src/Novalnet/Yves/NovalnetPayment/Form/SofortSubForm.php
new file mode 100755
index 0000000..f8a2021
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Form/SofortSubForm.php
@@ -0,0 +1,61 @@
+configureOptions($resolver);
+ }
+
+ /**
+ * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
+ *
+ * @return void
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'data_class' => NovalnetTransfer::class,
+ ])->setRequired(self::OPTIONS_FIELD_NAME);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Handler/NovalnetHandler.php b/src/Novalnet/Yves/NovalnetPayment/Handler/NovalnetHandler.php
new file mode 100755
index 0000000..7a6dbac
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Handler/NovalnetHandler.php
@@ -0,0 +1,100 @@
+ NovalnetConfig::NOVALNET_PAYMENT_METHOD_CC,
+ PaymentTransfer::NOVALNET_SEPA => NovalnetConfig::NOVALNET_PAYMENT_METHOD_SEPA,
+ PaymentTransfer::NOVALNET_SEPA_GUARANTEE => NovalnetConfig::NOVALNET_PAYMENT_METHOD_SEPA_GUARANTEE,
+ PaymentTransfer::NOVALNET_INVOICE => NovalnetConfig::NOVALNET_PAYMENT_METHOD_INVOICE,
+ PaymentTransfer::NOVALNET_INVOICE_GUARANTEE => NovalnetConfig::NOVALNET_PAYMENT_METHOD_INVOICE_GUARANTEE,
+ PaymentTransfer::NOVALNET_PREPAYMENT => NovalnetConfig::NOVALNET_PAYMENT_METHOD_PREPAYMENT,
+ PaymentTransfer::NOVALNET_IDEAL => NovalnetConfig::NOVALNET_PAYMENT_METHOD_IDEAL,
+ PaymentTransfer::NOVALNET_SOFORT => NovalnetConfig::NOVALNET_PAYMENT_METHOD_SOFORT,
+ PaymentTransfer::NOVALNET_GIROPAY => NovalnetConfig::NOVALNET_PAYMENT_METHOD_GIROPAY,
+ PaymentTransfer::NOVALNET_BARZAHLEN => NovalnetConfig::NOVALNET_PAYMENT_METHOD_BARZAHLEN,
+ PaymentTransfer::NOVALNET_PRZELEWY => NovalnetConfig::NOVALNET_PAYMENT_METHOD_PRZELEWY,
+ PaymentTransfer::NOVALNET_EPS => NovalnetConfig::NOVALNET_PAYMENT_METHOD_EPS,
+ PaymentTransfer::NOVALNET_PAYPAL => NovalnetConfig::NOVALNET_PAYMENT_METHOD_PAYPAL,
+ PaymentTransfer::NOVALNET_POSTFINANCE_CARD => NovalnetConfig::NOVALNET_PAYMENT_METHOD_POSTFINANCE_CARD,
+ PaymentTransfer::NOVALNET_POSTFINANCE => NovalnetConfig::NOVALNET_PAYMENT_METHOD_POSTFINANCE,
+ PaymentTransfer::NOVALNET_BANCONTACT => NovalnetConfig::NOVALNET_PAYMENT_METHOD_BANCONTACT,
+ PaymentTransfer::NOVALNET_MULTIBANCO => NovalnetConfig::NOVALNET_PAYMENT_METHOD_MULTIBANCO,
+ ];
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ *
+ * @return \Generated\Shared\Transfer\QuoteTransfer
+ */
+ public function addPaymentToQuote(QuoteTransfer $quoteTransfer)
+ {
+ $paymentSelection = $quoteTransfer->getPayment()->getPaymentSelection();
+
+ $this->setPaymentProviderAndMethod($quoteTransfer, $paymentSelection);
+ $this->setNovalnetPayment($quoteTransfer, $paymentSelection);
+
+ return $quoteTransfer;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ * @param string $paymentSelection
+ *
+ * @return void
+ */
+ protected function setPaymentProviderAndMethod(QuoteTransfer $quoteTransfer, $paymentSelection)
+ {
+ $quoteTransfer->getPayment()
+ ->setPaymentSelection($paymentSelection)
+ ->setPaymentProvider(self::PAYMENT_PROVIDER)
+ ->setPaymentMethod(self::$paymentMethods[$paymentSelection]);
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ * @param string $paymentSelection
+ *
+ * @return void
+ */
+ protected function setNovalnetPayment(QuoteTransfer $quoteTransfer, $paymentSelection)
+ {
+ $novalnetPaymentTransfer = $this->getNovalnetPaymentTransfer($quoteTransfer, $paymentSelection);
+ $method = 'set' . ucfirst($paymentSelection);
+ $quoteTransfer->getPayment()->$method(clone $novalnetPaymentTransfer);
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
+ * @param string $paymentSelection
+ *
+ * @throws \Novalnet\Yves\NovalnetPayment\Exception\PaymentMethodNotFoundException
+ *
+ * @return \Generated\Shared\Transfer\NovalnetTransfer
+ */
+ protected function getNovalnetPaymentTransfer(QuoteTransfer $quoteTransfer, $paymentSelection)
+ {
+ $paymentMethod = ucfirst($paymentSelection);
+ $method = 'get' . $paymentMethod;
+ $paymentTransfer = $quoteTransfer->getPayment();
+
+ if (!method_exists($paymentTransfer, $method) || ($quoteTransfer->getPayment()->$method() === null)) {
+ throw new PaymentMethodNotFoundException(sprintf('Selected payment method "%s" not found in PaymentTransfer', $paymentMethod));
+ }
+ $novalnetPaymentTransfer = $quoteTransfer->getPayment()->$method();
+
+ return $novalnetPaymentTransfer;
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/NovalnetPaymentConfig.php b/src/Novalnet/Yves/NovalnetPayment/NovalnetPaymentConfig.php
new file mode 100755
index 0000000..1bccebf
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/NovalnetPaymentConfig.php
@@ -0,0 +1,86 @@
+get(NovalnetConstants::NOVALNET);
+
+ return $settings[NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_CLIENT_KEY];
+ }
+
+ /**
+ * @return bool
+ */
+ public function getCreditCardInline()
+ {
+ $settings = $this->get(NovalnetConstants::NOVALNET);
+
+ return $settings[NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_INLINE];
+ }
+
+ /**
+ * @return string
+ */
+ public function getCreditCardStyleContainer()
+ {
+ $settings = $this->get(NovalnetConstants::NOVALNET);
+
+ return $settings[NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_STYLE_CONTAINER];
+ }
+
+ /**
+ * @return string
+ */
+ public function getCreditCardStyleInput()
+ {
+ $settings = $this->get(NovalnetConstants::NOVALNET);
+
+ return $settings[NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_STYLE_INPUT];
+ }
+
+ /**
+ * @return string
+ */
+ public function getCreditCardStyleLabel()
+ {
+ $settings = $this->get(NovalnetConstants::NOVALNET);
+
+ return $settings[NovalnetConstants::NOVALNET_CREDIT_CARD_FORM_STYLE_LABEL];
+ }
+
+ /**
+ * @return bool
+ */
+ public function getTestMode()
+ {
+ $settings = $this->get(NovalnetConstants::NOVALNET);
+
+ return $settings[NovalnetConstants::NOVALNET_SANDBOX_MODE];
+ }
+
+ /**
+ * @return string
+ */
+ public function getCurrency()
+ {
+ return Store::getInstance()->getCurrencyIsoCode();
+ }
+
+ /**
+ * @return string
+ */
+ public function getLanguage()
+ {
+ return Store::getInstance()->getCurrentLanguage();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/NovalnetPaymentDependencyProvider.php b/src/Novalnet/Yves/NovalnetPayment/NovalnetPaymentDependencyProvider.php
new file mode 100755
index 0000000..447e8df
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/NovalnetPaymentDependencyProvider.php
@@ -0,0 +1,9 @@
+getConfig());
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\SepaSubForm
+ */
+ public function createSepaForm()
+ {
+ return new SepaSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\SepaFormDataProvider
+ */
+ public function createSepaFormDataProvider()
+ {
+ return new SepaFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\SepaGuaranteeSubForm
+ */
+ public function createSepaGuaranteeForm()
+ {
+ return new SepaGuaranteeSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\SepaGuaranteeFormDataProvider
+ */
+ public function createSepaGuaranteeFormDataProvider()
+ {
+ return new SepaGuaranteeFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\InvoiceSubForm
+ */
+ public function createInvoiceForm()
+ {
+ return new InvoiceSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\InvoiceFormDataProvider
+ */
+ public function createInvoiceFormDataProvider()
+ {
+ return new InvoiceFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\InvoiceGuaranteeSubForm
+ */
+ public function createInvoiceGuaranteeForm()
+ {
+ return new InvoiceGuaranteeSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\InvoiceGuaranteeFormDataProvider
+ */
+ public function createInvoiceGuaranteeFormDataProvider()
+ {
+ return new InvoiceGuaranteeFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\PrepaymentSubForm
+ */
+ public function createPrepaymentForm()
+ {
+ return new PrepaymentSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\PrepaymentFormDataProvider
+ */
+ public function createPrepaymentFormDataProvider()
+ {
+ return new PrepaymentFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\IdealSubForm
+ */
+ public function createIdealForm()
+ {
+ return new IdealSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\IdealFormDataProvider
+ */
+ public function createIdealFormDataProvider()
+ {
+ return new IdealFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\SofortSubForm
+ */
+ public function createSofortForm()
+ {
+ return new SofortSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\SofortFormDataProvider
+ */
+ public function createSofortFormDataProvider()
+ {
+ return new SofortFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\GriopaySubForm
+ */
+ public function createGiropayForm()
+ {
+ return new GriopaySubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\GiropayFormDataProvider
+ */
+ public function createGiropayFormDataProvider()
+ {
+ return new GiropayFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\BarzahlenSubForm
+ */
+ public function createBarzahlenForm()
+ {
+ return new BarzahlenSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\BarzahlenFormDataProvider
+ */
+ public function createBarzahlenFormDataProvider()
+ {
+ return new BarzahlenFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\PrzelewySubForm
+ */
+ public function createPrzelewyForm()
+ {
+ return new PrzelewySubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\PrzelewyFormDataProvider
+ */
+ public function createPrzelewyFormDataProvider()
+ {
+ return new PrzelewyFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\EpsSubForm
+ */
+ public function createEpsForm()
+ {
+ return new EpsSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\EpsFormDataProvider
+ */
+ public function createEpsFormDataProvider()
+ {
+ return new EpsFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\PaypalSubForm
+ */
+ public function createPaypalForm()
+ {
+ return new PaypalSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\PaypalFormDataProvider
+ */
+ public function createPaypalFormDataProvider()
+ {
+ return new PaypalFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\PostfinanceCardSubForm
+ */
+ public function createPostfinanceCardForm()
+ {
+ return new PostfinanceCardSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\PostfinanceCardFormDataProvider
+ */
+ public function createPostfinanceCardFormDataProvider()
+ {
+ return new PostfinanceCardFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\PostfinanceSubForm
+ */
+ public function createPostfinanceForm()
+ {
+ return new PostfinanceSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\PostfinanceFormDataProvider
+ */
+ public function createPostfinanceFormDataProvider()
+ {
+ return new PostfinanceFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\BancontactSubForm
+ */
+ public function createBancontactForm()
+ {
+ return new BancontactSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\BancontactFormDataProvider
+ */
+ public function createBancontactFormDataProvider()
+ {
+ return new BancontactFormDataProvider();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\MultibancoSubForm
+ */
+ public function createMultibancoForm()
+ {
+ return new MultibancoSubForm();
+ }
+
+ /**
+ * @return \Novalnet\Yves\NovalnetPayment\Form\DataProvider\MultibancoFormDataProvider
+ */
+ public function createMultibancoFormDataProvider()
+ {
+ return new MultibancoFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/BancontactSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/BancontactSubFormPlugin.php
new file mode 100755
index 0000000..27976ef
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/BancontactSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createBancontactForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createBancontactFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/BarzahlenSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/BarzahlenSubFormPlugin.php
new file mode 100755
index 0000000..d0b43de
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/BarzahlenSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createBarzahlenForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createBarzahlenFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/CreditCardSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/CreditCardSubFormPlugin.php
new file mode 100755
index 0000000..9c8c907
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/CreditCardSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createCreditCardForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createCreditCardFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/EpsSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/EpsSubFormPlugin.php
new file mode 100755
index 0000000..8d44a2a
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/EpsSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createEpsForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createEpsFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/GiropaySubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/GiropaySubFormPlugin.php
new file mode 100755
index 0000000..c500f6a
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/GiropaySubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createGiropayForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createGiropayFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/IdealSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/IdealSubFormPlugin.php
new file mode 100755
index 0000000..c23e1af
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/IdealSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createIdealForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createIdealFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/InvoiceGuaranteeSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/InvoiceGuaranteeSubFormPlugin.php
new file mode 100755
index 0000000..562b06f
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/InvoiceGuaranteeSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createInvoiceGuaranteeForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createInvoiceGuaranteeFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/InvoiceSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/InvoiceSubFormPlugin.php
new file mode 100755
index 0000000..240224f
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/InvoiceSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createInvoiceForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createInvoiceFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/MultibancoSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/MultibancoSubFormPlugin.php
new file mode 100755
index 0000000..3fd0d98
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/MultibancoSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createMultibancoForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createMultibancoFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/NovalnetHandlerPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/NovalnetHandlerPlugin.php
new file mode 100755
index 0000000..e7b7b13
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/NovalnetHandlerPlugin.php
@@ -0,0 +1,25 @@
+getFactory()->createNovalnetHandler()->addPaymentToQuote($quoteTransfer);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/PaypalSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/PaypalSubFormPlugin.php
new file mode 100755
index 0000000..d57f5b0
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/PaypalSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createPaypalForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createPaypalFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/PostfinanceCardSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/PostfinanceCardSubFormPlugin.php
new file mode 100755
index 0000000..69a6116
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/PostfinanceCardSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createPostfinanceCardForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createPostfinanceCardFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/PostfinanceSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/PostfinanceSubFormPlugin.php
new file mode 100755
index 0000000..bc5cdf0
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/PostfinanceSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createPostfinanceForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createPostfinanceFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/PrepaymentSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/PrepaymentSubFormPlugin.php
new file mode 100755
index 0000000..3ac60d8
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/PrepaymentSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createPrepaymentForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createPrepaymentFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/PrzelewySubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/PrzelewySubFormPlugin.php
new file mode 100755
index 0000000..c0794ca
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/PrzelewySubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createPrzelewyForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createPrzelewyFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/Router/NovalnetRouteProviderPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/Router/NovalnetRouteProviderPlugin.php
new file mode 100755
index 0000000..e139abd
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/Router/NovalnetRouteProviderPlugin.php
@@ -0,0 +1,59 @@
+addNovalnetIndexRoute($routeCollection);
+ $routeCollection = $this->addNovalnetCallbackRoute($routeCollection);
+
+ return $routeCollection;
+ }
+
+ /**
+ * @param \Spryker\Yves\Router\Route\RouteCollection $routeCollection
+ *
+ * @return \Spryker\Yves\Router\Route\RouteCollection
+ */
+ protected function addNovalnetIndexRoute(RouteCollection $routeCollection): RouteCollection
+ {
+ $route = $this->buildRoute('/novalnet/payment', 'NovalnetPayment', 'Novalnet', 'paymentAction');
+ $route = $route->setMethods(['GET', 'POST']);
+ $routeCollection->add(static::NOVALNET_PAYMENT, $route);
+
+ return $routeCollection;
+ }
+
+ /**
+ * @param \Spryker\Yves\Router\Route\RouteCollection $routeCollection
+ *
+ * @return \Spryker\Yves\Router\Route\RouteCollection
+ */
+ protected function addNovalnetCallbackRoute(RouteCollection $routeCollection): RouteCollection
+ {
+ $route = $this->buildRoute('/novalnet/callback', 'NovalnetPayment', 'Novalnet', 'callbackAction');
+ $route = $route->setMethods(['GET', 'POST']);
+ $routeCollection->add(static::NOVALNET_CALLBACK, $route);
+
+ return $routeCollection;
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/SepaGuaranteeSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/SepaGuaranteeSubFormPlugin.php
new file mode 100755
index 0000000..dc8d1fd
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/SepaGuaranteeSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createSepaGuaranteeForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createSepaGuaranteeFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/SepaSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/SepaSubFormPlugin.php
new file mode 100755
index 0000000..a322443
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/SepaSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createSepaForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createSepaFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Plugin/SofortSubFormPlugin.php b/src/Novalnet/Yves/NovalnetPayment/Plugin/SofortSubFormPlugin.php
new file mode 100755
index 0000000..0ed3fe5
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Plugin/SofortSubFormPlugin.php
@@ -0,0 +1,28 @@
+getFactory()->createSofortForm();
+ }
+
+ /**
+ * @return \Spryker\Yves\StepEngine\Dependency\Form\StepEngineFormDataProviderInterface
+ */
+ public function createSubFormDataProvider()
+ {
+ return $this->getFactory()->createSofortFormDataProvider();
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Resources/glossary.csv b/src/Novalnet/Yves/NovalnetPayment/Resources/glossary.csv
new file mode 100755
index 0000000..45e410a
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Resources/glossary.csv
@@ -0,0 +1,116 @@
+"novalnetCreditCard","Credit/Debit Cards",en_US
+"novalnetCreditCard","Kredit-/Debitkarte",de_DE
+"novalnetSepa","Direct Debit SEPA",en_US
+"novalnetSepa","SEPA-Lastschrift",de_DE
+"novalnetSepaGuarantee","Direct Debit SEPA with payment guarantee",en_US
+"novalnetSepaGuarantee","SEPA-Lastschrift mit Zahlungsgarantie",de_DE
+"novalnetInvoice","Invoice",en_US
+"novalnetInvoice","Rechnung",de_DE
+"novalnetInvoiceGuarantee","Invoice with payment guarantee",en_US
+"novalnetInvoiceGuarantee","Rechnung mit Zahlungsgarantie",de_DE
+"novalnetPrepayment","Prepayment",en_US
+"novalnetPrepayment","Vorkasse",de_DE
+"novalnetIdeal","iDEAL",en_US
+"novalnetIdeal","iDEAL",de_DE
+"novalnetSofort","Sofort",en_US
+"novalnetSofort","SofortĂĽberweisung",de_DE
+"novalnetGiropay","giropay",en_US
+"novalnetGiropay","giropay",de_DE
+"novalnetBarzahlen","Barzahlen/viacash",en_US
+"novalnetBarzahlen","Barzahlen/viacash",de_DE
+"novalnetPrzelewy","Przelewy24",en_US
+"novalnetPrzelewy","Przelewy24",de_DE
+"novalnetEps","eps",en_US
+"novalnetEps","eps",de_DE
+"novalnetPaypal","PayPal",en_US
+"novalnetPaypal","PayPal",de_DE
+"novalnetPostfinanceCard","PostFinance Card",en_US
+"novalnetPostfinanceCard","PostFinance Card",de_DE
+"novalnetPostfinance","PostFinance E-Finance",en_US
+"novalnetPostfinance","PostFinance E-Finance",de_DE
+"novalnetBancontact","Bancontact",en_US
+"novalnetBancontact","Bancontact",de_DE
+"novalnetMultibanco","Multibanco",en_US
+"novalnetMultibanco","Multibanco",de_DE
+"novalnet.sepa-iban","IBAN",en_US
+"novalnet.sepa-iban","IBAN",de_DE
+"novalnet.sepa-payment-description","The amount will be debited from your account by Novalnet",en_US
+"novalnet.sepa-payment-description","Der Betrag wird durch Novalnet von Ihrem Konto abgebucht",de_DE
+"novalnet.credit-card-payment-description","The amount will be debited from your credit/debit card",en_US
+"novalnet.credit-card-payment-description","Der Betrag wird Ihrer Kredit-/Debitkarte belastet",de_DE
+"novalnet.invoice-payments-description","You will receive an e-mail with the Novalnet account details to complete the payment",en_US
+"novalnet.invoice-payments-description","Sie erhalten eine E-Mail mit den Bankdaten von Novalnet, um die Zahlung abzuschlieĂźen",de_DE
+"novalnet.sofort-payment-description","You will be redirected to Sofort. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.sofort-payment-description","Sie werden zu Sofortüberweisung weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.giropay-payment-description","You will be redirected to giropay. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.giropay-payment-description","Sie werden zu giropay weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.przelewy-payment-description","You will be redirected to Przelewy24. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.przelewy-payment-description","Sie werden zu Przelewy24 weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.eps-payment-description","You will be redirected to eps. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.eps-payment-description","Sie werden zu eps weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.paypal-payment-description","You will be redirected to PayPal. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.paypal-payment-description","Sie werden zu PayPal weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.postfinance-payment-description","You will be redirected to PostFinance. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.postfinance-payment-description","Sie werden zu PostFinance weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.bancontact-payment-description","You will be redirected to Bancontact. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.bancontact-payment-description","Sie werden zu Bancontact weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.ideal-payment-description","You will be redirected to iDEAL. Please don’t close or refresh the browser until the payment is completed",en_US
+"novalnet.ideal-payment-description","Sie werden zu iDEAL weitergeleitet. Um eine erfolgreiche Zahlung zu gewährleisten, darf die Seite nicht geschlossen oder neu geladen werden, bis die Bezahlung abgeschlossen ist.",de_DE
+"novalnet.multibanco-payment-description","On successful checkout, you will receive a payment reference. Using this payment reference, you can either pay in the Multibanco ATM or through your online bank account",en_US
+"novalnet.multibanco-payment-description","Nach erfolgreichem Bestellabschluss erhalten Sie eine Zahlungsreferenz. Damit können Sie entweder an einem Multibanco-Geldautomaten oder im Onlinebanking bezahlen.",de_DE
+"novalnet.barzahlen-payment-description","On successful checkout, you will receive a payment slip/SMS to pay your online purchase at one of our retail partners (e.g. supermarket)",en_US
+"novalnet.barzahlen-payment-description","Nach erfolgreichem Bestellabschluss erhalten Sie einen Zahlschein bzw. eine SMS. Damit können Sie Ihre Online-Bestellung bei einem unserer Partner im Einzelhandel (z.B. Drogerie, Supermarkt etc.) bezahlen",de_DE
+"novalnet.payment-confirmed","The transaction has been confirmed on %confirmed%",en_US
+"novalnet.payment-confirmed","Die Buchung wurde am %confirmed% bestätigt.",de_DE
+"novalnet.payment-void","The transaction has been canceled on %cancelled%",en_US
+"novalnet.payment-void","Die Transaktion wurde am %cancelled%" Uhr storniert,de_DE
+"novalnet.payment-partial-refund","Refund has been initiated for the TID: %parentTid% with the amount of %amount%. New TID: %referenceTid% for the refunded amount.",en_US
+"novalnet.payment-partial-refund","Die RĂĽckerstattung fĂĽr die TID %parentTid% mit dem Betrag %amount% wurde veranlasst. Die neue TID fĂĽr den erstatteten Betrag lautet: %referenceTid%",de_DE
+"novalnet.payment-full-refund","Refund has been initiated for the TID: %parentTid% with the amount of %amount%.",en_US
+"novalnet.payment-full-refund","Die RĂĽckerstattung fĂĽr die TID %parentTid% mit dem Betrag %amount% wurde veranlasst.",de_DE
+"novalnet.invoice-bank-note-transfer-text-with-due-date","Please transfer the amount of %amount% to the following account on or before %due_date%",en_US
+"novalnet.invoice-bank-note-transfer-text-with-due-date","Bitte überweisen Sie den Betrag von %amount% spätestens bis zum %due_date% auf das folgende Konto",de_DE
+"novalnet.invoice-bank-note-transfer-text","Please transfer the amount of %amount% %currency% to the following account",en_US
+"novalnet.invoice-bank-note-transfer-text","Bitte ĂĽberweisen Sie den Betrag %amount% %currency% auf das folgende Konto.",de_DE
+"novalnet.invoice-bank-note-account-holder","Account holder: %holder%",en_US
+"novalnet.invoice-bank-note-account-holder","Kontoinhaber: %holder%",de_DE
+"novalnet.invoice-bank-note-iban","IBAN: %iban%",en_US
+"novalnet.invoice-bank-note-iban","IBAN: %iban%",de_DE
+"novalnet.invoice-bank-note-bic","BIC: %bic%",en_US
+"novalnet.invoice-bank-note-bic","BIC: %bic%",de_DE
+"novalnet.invoice-bank-note-bank","Bank: %bank% %place%",en_US
+"novalnet.invoice-bank-note-bank","Bank: %bank% %place%",de_DE
+"novalnet.invoice-bank-note-amount","Amount: %amount% %currency%",en_US
+"novalnet.invoice-bank-note-amount","Betrag: %amount% %currency%",de_DE
+"novalnet.invoice-bank-note-reference-text","Please use any one of the following references as the payment reference, as only through this way your payment is matched and assigned to the order:",en_US
+"novalnet.invoice-bank-note-reference-text","Bitte verwenden Sie einen der unten angegebenen Verwendungszwecke fĂĽr die Ăśberweisung, da nur so Ihr Geldeingang zugeordnet werden kann:",de_DE
+"novalnet.invoice-bank-note-reference-one","Payment Reference 1: TID %ref1%",en_US
+"novalnet.invoice-bank-note-reference-one","Verwendungszweck 1: TID %ref1%",de_DE
+"novalnet.invoice-bank-note-reference-two","Payment Reference 2: %ref2%",en_US
+"novalnet.invoice-bank-note-reference-two","Verwendungszweck 2: %ref2%",de_DE
+"novalnet.cashpayment-slip-expiry-date","Slip expiry date: %date%",en_US
+"novalnet.cashpayment-slip-expiry-date","Verfallsdatum des Zahlscheins: %date%",de_DE
+"novalnet.multibanco-reference-note","Please use the following payment reference details to pay the amount of %amount% %currency% at a Multibanco ATM or through your internet banking.",en_US
+"novalnet.multibanco-reference-note","Bitte verwenden Sie die folgende Zahlungsreferenz, um den Betrag von %amount% %currency% an einem Multibanco-Geldautomaten oder ĂĽber Ihr Onlinebanking zu",de_DE
+"novalnet.multibanco-reference-comment","Payment reference: %ref%",en_US
+"novalnet.multibanco-reference-comment","Verwendungszweck: %ref%",de_DE
+"novalnet.cashpayment-stores-near-you","Store(s) near you:",en_US
+"novalnet.cashpayment-stores-near-you","Barzahlen-Partnerfiliale in Ihrer Nähe:",de_DE
+"novalnet.payment-test-mode-description","The payment will be processed in the test mode therefore amount for this transaction will not be charged",en_US
+"novalnet.payment-test-mode-description","Die Zahlung wird im Testmodus durchgefĂĽhrt, daher wird der Betrag fĂĽr diese Transaktion nicht eingezogen.",de_DE
+"novalnet.transaction-mode","Transaction Mode: Test",en_US
+"novalnet.transaction-mode","Transaktion modus: Test",de_DE
+"novalnet.transaction-id","Novalnet Transaction ID: %tid%",en_US
+"novalnet.transaction-id","Novalnet Transaktions-ID: %tid%",de_DE
+"novalnet.guarantee-sepa-pending-text","Your order is under verification and we will soon update you with the order status. Please note that this may take upto 24 hours.",en_US
+"novalnet.guarantee-sepa-pending-text","Ihre Bestellung wird derzeit ĂĽberprĂĽft. Wir werden Sie in KĂĽrze ĂĽber den Bestellstatus informieren. Bitte beachten Sie, dass dies bis zu 24 Stunden dauern kann.",de_DE
+"novalnet.guarantee-invoice-pending-text","Your order is being verified. Once confirmed, we will send you our bank details to which the order amount should be transferred. Please note that this may take up to 24 hours",en_US
+"novalnet.guarantee-invoice-pending-text","Ihre Bestellung wird überprüft. Nach der Bestätigung senden wir Ihnen unsere Bankverbindung, an die Sie bitte den Gesamtbetrag der Bestellung überweisen. Bitte beachten Sie, dass dies bis zu 24 Stunden dauern kann",de_DE
+"novalnet.guarantee-payment-dob","Your date of birth",en_US
+"novalnet.guarantee-payment-dob","Ihr Geburtsdatum",de_DE
+"novalnet.guarantee-bithdate-missing","Please enter your date of birth",en_US
+"novalnet.guarantee-bithdate-missing","Geben Sie bitte Ihr Geburtsdatum ein",de_DE
+"novalnet.guarantee-bithdate-invalid","Please enter valid birth date",en_US
+"novalnet.guarantee-bithdate-invalid","Geben Sie ein gĂĽltiges Geburtsdatum ein",de_DE
+"novalnet.guarantee-birth_date","DD.MM.YYYY",en_US
+"novalnet.guarantee-birth_date","TT.MM.JJJJ",de_DE
diff --git a/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.scss b/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.scss
new file mode 100755
index 0000000..59a2c1b
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.scss
@@ -0,0 +1,12 @@
+.novalnet-challenge-window-overlay {
+ position: fixed;
+ width: 100%;
+ height: 100% ! important;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0,0,0,0.5);
+ z-index: 9999;
+ cursor: pointer;
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.ts b/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.ts
new file mode 100755
index 0000000..f94c12e
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.ts
@@ -0,0 +1,95 @@
+import Component from 'ShopUi/models/component';
+
+export default class CreditCard extends Component {
+ form: HTMLFormElement;
+
+ protected submitButton: HTMLButtonElement[];
+
+ protected readyCallback(): void {}
+
+ init() {
+ const element = document.getElementsByName('paymentForm');
+
+ element[0].addEventListener('submit', event => {
+ var checkedValue = null;
+ var inputElements = document.getElementsByName("paymentForm[paymentSelection]");
+ for (var i = 0; inputElements[i]; ++i) {
+ if (inputElements[i].checked) {
+ checkedValue = inputElements[i].value;
+ break;
+ }
+ }
+ if (checkedValue == 'novalnetCreditCard' && document.getElementById("paymentForm_novalnetCreditCard_panHash").value == '') {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ NovalnetUtility.getPanHash();
+ }
+ });
+ document.getElementById("paymentForm_novalnetCreditCard_panHash").value = '';
+ this.initiateIframe();
+ }
+
+ /**Initiate Iframe */
+ initiateIframe() {
+ var iframe = document.getElementById('novalnet_cc_iframe').contentWindow;
+ if (document.getElementById("paymentForm_novalnetCreditCard_formClientKey").value === undefined ||
+ document.getElementById("paymentForm_novalnetCreditCard_formClientKey").value == '') {
+ return false;
+ }
+ NovalnetUtility.setClientKey(document.getElementById("paymentForm_novalnetCreditCard_formClientKey").value);
+ var request_object = {
+ callback: {
+ on_success: function(data) {
+ document.getElementById("paymentForm_novalnetCreditCard_panHash").value = data['hash'];
+ document.getElementById("paymentForm_novalnetCreditCard_uniqueId").value = data['unique_id'];
+ document.getElementById("paymentForm_novalnetCreditCard_doRedirect").value = data['do_redirect'];
+ document.paymentForm.submit();
+ },
+ on_error: function on_error(data) {
+ alert(data['error_message']);
+ document.getElementById("nn_overlay").classList.remove("novalnet-challenge-window-overlay");
+ document.getElementById("novalnet_cc_iframe").classList.remove("novalnet-challenge-window-overlay");
+ },
+ on_show_overlay: function on_show_overlay() {
+ document.getElementById('novalnet_cc_iframe').classList.add("novalnet-challenge-window-overlay");
+ },
+ on_hide_overlay: function on_hide_overlay() {
+ document.getElementById("novalnet_cc_iframe").classList.remove("novalnet-challenge-window-overlay");
+ document.getElementById("nn_overlay").classList.add("novalnet-challenge-window-overlay");
+ },
+ on_show_captcha: function on_show_captcha() {
+ window.scrollTo(0, 200);
+ }
+ },
+ iframe: {
+ id: 'novalnet_cc_iframe',
+ inline: document.getElementById("paymentForm_novalnetCreditCard_formInline").value,
+ style: {
+ container: document.getElementById("paymentForm_novalnetCreditCard_formStyleContainer").value,
+ input: document.getElementById("paymentForm_novalnetCreditCard_formStyleInput").value,
+ label: document.getElementById("paymentForm_novalnetCreditCard_formStyleLabel").value,
+ }
+ },
+ customer: {
+ first_name: document.getElementById("paymentForm_novalnetCreditCard_firstName").value,
+ last_name: document.getElementById("paymentForm_novalnetCreditCard_lastName").value,
+ email: document.getElementById("paymentForm_novalnetCreditCard_email").value,
+ billing: {
+ street: document.getElementById("paymentForm_novalnetCreditCard_street").value + ',' + document.getElementById("paymentForm_novalnetCreditCard_houseNo").value,
+ city: document.getElementById("paymentForm_novalnetCreditCard_city").value,
+ zip: document.getElementById("paymentForm_novalnetCreditCard_zip").value,
+ country_code: document.getElementById("paymentForm_novalnetCreditCard_countryCode").value,
+ },
+ },
+ transaction: {
+ amount: document.getElementById("paymentForm_novalnetCreditCard_amount").value,
+ currency: document.getElementById("paymentForm_novalnetCreditCard_currency").value,
+ test_mode: document.getElementById("paymentForm_novalnetCreditCard_testMode").value,
+ },
+ custom: {
+ lang: document.getElementById("paymentForm_novalnetCreditCard_lang").value
+ }
+ };
+ NovalnetUtility.createCreditCardForm(request_object);
+ }
+}
diff --git a/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.twig b/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.twig
new file mode 100755
index 0000000..71469eb
--- /dev/null
+++ b/src/Novalnet/Yves/NovalnetPayment/Theme/default/components/molecules/credit-card/credit-card.twig
@@ -0,0 +1,18 @@
+{% extends model('component') %}
+
+{% define config = {
+ name: 'credit-card',
+ tag: 'credit-card'
+} %}
+
+{% block body %}
+
+
+
{{ 'novalnet.credit-card-payment-description' | trans }}