PayoneHandler   A
last analyzed

Complexity

Total Complexity 18

Size/Duplication

Total Lines 176
Duplicated Lines 0 %

Importance

Changes 3
Bugs 2 Features 0
Metric Value
wmc 18
eloc 98
c 3
b 2
f 0
dl 0
loc 176
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getPayonePaymentTransfer() 0 6 1
A setPaymentProviderAndMethod() 0 5 1
A addPaymentToQuote() 0 9 1
A setPaymentSuccessIncludePath() 0 4 1
C setPayonePayment() 0 57 14
1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Yves\Payone\Handler;
9
10
use Generated\Shared\Transfer\PaymentDetailTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PaymentDetailTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
11
use Generated\Shared\Transfer\PaymentTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PaymentTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
12
use Generated\Shared\Transfer\PayonePaymentTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PayonePaymentTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use Generated\Shared\Transfer\QuoteTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\QuoteTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use SprykerEco\Shared\Payone\PayoneApiConstants;
15
use Symfony\Component\HttpFoundation\Request;
16
17
class PayoneHandler implements PayoneHandlerInterface
18
{
19
    public const PAYMENT_PROVIDER = 'Payone';
20
    public const CHECKOUT_INCLUDE_SUMMARY_PATH = 'Payone/partial/summary';
21
    public const CHECKOUT_INCLUDE_SUCCESS_PATH = 'Payone/partial/success';
22
    protected const PAYONE_PAYMENT_REFERENCE_PREFIX = 'TX1';
23
24
    /**
25
     * @var array
26
     */
27
    protected static $paymentMethods = [
28
        PaymentTransfer::PAYONE_CREDIT_CARD => 'credit_card',
29
        PaymentTransfer::PAYONE_E_WALLET => 'e_wallet',
30
        PaymentTransfer::PAYONE_DIRECT_DEBIT => 'direct_debit',
31
        PaymentTransfer::PAYONE_INSTANT_ONLINE_TRANSFER => 'instant_online_transfer',
32
        PaymentTransfer::PAYONE_EPS_ONLINE_TRANSFER => 'eps_online_transfer',
33
        PaymentTransfer::PAYONE_GIROPAY_ONLINE_TRANSFER => 'giropay_online_transfer',
34
        PaymentTransfer::PAYONE_IDEAL_ONLINE_TRANSFER => 'ideal_online_transfer',
35
        PaymentTransfer::PAYONE_POSTFINANCE_EFINANCE_ONLINE_TRANSFER => 'postfinance_efinance_online_transfer',
36
        PaymentTransfer::PAYONE_POSTFINANCE_CARD_ONLINE_TRANSFER => 'postfinance_card_online_transfer',
37
        PaymentTransfer::PAYONE_PRZELEWY24_ONLINE_TRANSFER => 'przelewy24_online_transfer',
38
        PaymentTransfer::PAYONE_BANCONTACT_ONLINE_TRANSFER => 'bancontact_online_transfer',
39
        PaymentTransfer::PAYONE_PRE_PAYMENT => 'prepayment',
40
        PaymentTransfer::PAYONE_INVOICE => 'invoice',
41
        PaymentTransfer::PAYONE_SECURITY_INVOICE => 'securityInvoice',
42
        PaymentTransfer::PAYONE_CASH_ON_DELIVERY => 'cashOnDelivery',
43
    ];
44
45
    /**
46
     * @var array
47
     */
48
    protected static $payonePaymentMethodMapper = [
49
        PaymentTransfer::PAYONE_CREDIT_CARD => PayoneApiConstants::PAYMENT_METHOD_CREDITCARD,
50
        PaymentTransfer::PAYONE_E_WALLET => PayoneApiConstants::PAYMENT_METHOD_E_WALLET,
51
        PaymentTransfer::PAYONE_DIRECT_DEBIT => PayoneApiConstants::PAYMENT_METHOD_DIRECT_DEBIT,
52
        PaymentTransfer::PAYONE_INSTANT_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
53
        PaymentTransfer::PAYONE_EPS_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
54
        PaymentTransfer::PAYONE_GIROPAY_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
55
        PaymentTransfer::PAYONE_IDEAL_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
56
        PaymentTransfer::PAYONE_POSTFINANCE_EFINANCE_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
57
        PaymentTransfer::PAYONE_PRZELEWY24_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
58
        PaymentTransfer::PAYONE_BANCONTACT_ONLINE_TRANSFER => PayoneApiConstants::PAYMENT_METHOD_ONLINE_BANK_TRANSFER,
59
        PaymentTransfer::PAYONE_PRE_PAYMENT => PayoneApiConstants::PAYMENT_METHOD_PREPAYMENT,
60
        PaymentTransfer::PAYONE_INVOICE => PayoneApiConstants::PAYMENT_METHOD_INVOICE,
61
        PaymentTransfer::PAYONE_SECURITY_INVOICE => PayoneApiConstants::PAYMENT_METHOD_SECURITY_INVOICE,
62
        PaymentTransfer::PAYONE_CASH_ON_DELIVERY => PayoneApiConstants::PAYMENT_METHOD_CASH_ON_DELIVERY,
63
        PaymentTransfer::PAYONE_KLARNA => PayoneApiConstants::PAYMENT_METHOD_KLARNA,
64
    ];
65
66
    /**
67
     * @var array
68
     */
69
    protected static $payoneGenderMapper = [
70
        'Mr' => 'Male',
71
        'Mrs' => 'Female',
72
    ];
73
74
    /**
75
     * @param \Symfony\Component\HttpFoundation\Request $request
76
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
77
     *
78
     * @return \Generated\Shared\Transfer\QuoteTransfer
79
     */
80
    public function addPaymentToQuote(Request $request, QuoteTransfer $quoteTransfer): QuoteTransfer
81
    {
82
        $paymentSelection = $quoteTransfer->getPayment()->getPaymentSelection();
83
84
        $this->setPaymentProviderAndMethod($quoteTransfer, $paymentSelection);
85
        $this->setPayonePayment($request, $quoteTransfer, $paymentSelection);
86
        $this->setPaymentSuccessIncludePath($quoteTransfer);
87
88
        return $quoteTransfer;
89
    }
90
91
    /**
92
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
93
     * @param string $paymentSelection
94
     *
95
     * @return void
96
     */
97
    protected function setPaymentProviderAndMethod(QuoteTransfer $quoteTransfer, string $paymentSelection): void
98
    {
99
        $quoteTransfer->getPayment()
100
            ->setPaymentProvider(static::PAYMENT_PROVIDER)
101
            ->setPaymentMethod(static::$payonePaymentMethodMapper[$paymentSelection]);
102
    }
103
104
    /**
105
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
106
     *
107
     * @return void
108
     */
109
    protected function setPaymentSuccessIncludePath(QuoteTransfer $quoteTransfer): void
110
    {
111
        $quoteTransfer->requirePayment()->getPayment()->setSummaryIncludePath(self::CHECKOUT_INCLUDE_SUMMARY_PATH);
112
        $quoteTransfer->requirePayment()->getPayment()->setSuccessIncludePath(self::CHECKOUT_INCLUDE_SUCCESS_PATH);
113
    }
114
115
    /**
116
     * @param \Symfony\Component\HttpFoundation\Request $request
117
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
118
     * @param string $paymentSelection
119
     *
120
     * @return void
121
     */
122
    protected function setPayonePayment(Request $request, QuoteTransfer $quoteTransfer, string $paymentSelection): void
123
    {
124
        $payonePaymentTransfer = $this->getPayonePaymentTransfer($quoteTransfer, $paymentSelection);
125
126
        $paymentDetailTransfer = new PaymentDetailTransfer();
127
        // get it from quotaTransfer
128
        $paymentDetailTransfer->setAmount($quoteTransfer->getTotals()->getGrandTotal());
129
        $paymentDetailTransfer->setCurrency($quoteTransfer->getCurrencyOrFail()->getCodeOrFail());
130
        if ($paymentSelection === PaymentTransfer::PAYONE_CREDIT_CARD) {
131
            /** @var \Generated\Shared\Transfer\PayonePaymentCreditCardTransfer $payonePaymentTransfer */
132
            $paymentDetailTransfer->setPseudoCardPan($payonePaymentTransfer->getPseudocardpan());
133
        } elseif ($paymentSelection === PaymentTransfer::PAYONE_E_WALLET) {
134
            /** @var \Generated\Shared\Transfer\PayonePaymentEWalletTransfer $payonePaymentTransfer */
135
            $paymentDetailTransfer->setType($payonePaymentTransfer->getWallettype());
136
        } elseif ($paymentSelection === PaymentTransfer::PAYONE_DIRECT_DEBIT) {
137
            /** @var \Generated\Shared\Transfer\PayonePaymentDirectDebitTransfer $payonePaymentTransfer */
138
            $paymentDetailTransfer->setBankCountry($payonePaymentTransfer->getBankcountry());
139
            $paymentDetailTransfer->setBankAccount($payonePaymentTransfer->getBankaccount());
140
            $paymentDetailTransfer->setBankCode($payonePaymentTransfer->getBankcode());
141
            $paymentDetailTransfer->setBic($payonePaymentTransfer->getBic());
142
            $paymentDetailTransfer->setIban($payonePaymentTransfer->getIban());
143
            $paymentDetailTransfer->setMandateIdentification($payonePaymentTransfer->getMandateIdentification());
144
            $paymentDetailTransfer->setMandateText($payonePaymentTransfer->getMandateText());
145
        } elseif (
146
            $paymentSelection === PaymentTransfer::PAYONE_EPS_ONLINE_TRANSFER
147
            || $paymentSelection === PaymentTransfer::PAYONE_INSTANT_ONLINE_TRANSFER
148
            || $paymentSelection === PaymentTransfer::PAYONE_GIROPAY_ONLINE_TRANSFER
149
            || $paymentSelection === PaymentTransfer::PAYONE_IDEAL_ONLINE_TRANSFER
150
            || $paymentSelection === PaymentTransfer::PAYONE_POSTFINANCE_EFINANCE_ONLINE_TRANSFER
151
            || $paymentSelection === PaymentTransfer::PAYONE_POSTFINANCE_CARD_ONLINE_TRANSFER
152
            || $paymentSelection === PaymentTransfer::PAYONE_PRZELEWY24_ONLINE_TRANSFER
153
            || $paymentSelection === PaymentTransfer::PAYONE_BANCONTACT_ONLINE_TRANSFER
154
        ) {
155
            /** @var \Generated\Shared\Transfer\PayonePaymentOnlinetransferTransfer $payonePaymentTransfer */
156
            $paymentDetailTransfer->setType($payonePaymentTransfer->getOnlineBankTransferType());
157
            $paymentDetailTransfer->setBankCountry($payonePaymentTransfer->getBankCountry());
158
            if ($paymentSelection === PaymentTransfer::PAYONE_BANCONTACT_ONLINE_TRANSFER) {
159
                $paymentDetailTransfer->setBankCountry($quoteTransfer->getBillingAddress()->getIso2Code());
160
            }
161
            $paymentDetailTransfer->setBankAccount($payonePaymentTransfer->getBankAccount());
162
            $paymentDetailTransfer->setBankCode($payonePaymentTransfer->getBankCode());
163
            $paymentDetailTransfer->setBankBranchCode($payonePaymentTransfer->getBankBranchCode());
164
            $paymentDetailTransfer->setBankCheckDigit($payonePaymentTransfer->getBankCheckDigit());
165
            $paymentDetailTransfer->setBankGroupType($payonePaymentTransfer->getBankGroupType());
166
            $paymentDetailTransfer->setIban($payonePaymentTransfer->getIban());
167
            $paymentDetailTransfer->setBic($payonePaymentTransfer->getBic());
168
        } elseif ($paymentSelection == PaymentTransfer::PAYONE_CASH_ON_DELIVERY) {
169
            $shippingProvider = $quoteTransfer->getShipment()->getMethod()->getCarrierName();
170
            $paymentDetailTransfer->setShippingProvider($shippingProvider);
171
        }
172
173
        $payonePaymentTransfer = new PayonePaymentTransfer();
174
        $payonePaymentTransfer->setReference(uniqid(self::PAYONE_PAYMENT_REFERENCE_PREFIX));
175
        $payonePaymentTransfer->setPaymentDetail($paymentDetailTransfer);
176
        $paymentTransfer = $quoteTransfer->getPayment();
177
        $payonePaymentTransfer->setPaymentMethod($paymentTransfer->getPaymentMethod());
178
        $paymentTransfer->setPayone($payonePaymentTransfer);
179
    }
180
181
    /**
182
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
183
     * @param string $paymentSelection
184
     *
185
     * @return \Generated\Shared\Transfer\PayonePaymentTransfer
186
     */
187
    protected function getPayonePaymentTransfer(QuoteTransfer $quoteTransfer, string $paymentSelection)
188
    {
189
        $method = 'get' . ucfirst($paymentSelection);
190
        $payonePaymentTransfer = $quoteTransfer->getPayment()->$method();
191
192
        return $payonePaymentTransfer;
193
    }
194
}
195