InitializeTransactionHandler::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
c 1
b 0
f 0
dl 0
loc 10
rs 10
cc 1
nc 1
nop 4
1
<?php
2
3
/**
4
 * MIT License
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
namespace SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Handler;
9
10
use Generated\Shared\Transfer\HeidelpayResponseTransfer;
11
use Generated\Shared\Transfer\QuoteTransfer;
12
use SprykerEco\Zed\Heidelpay\Business\Basket\BasketCreatorInterface;
13
use SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromQuoteBuilderInterface;
14
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\InitializeNotSupportedException;
15
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\InitializeTransactionInterface;
16
17
class InitializeTransactionHandler implements InitializeTransactionHandlerInterface
18
{
19
    public const ERROR_MESSAGE_INITIALIZE_TRANSACTION_NOT_SUPPORTED =
20
        'Attempt to call initialize transaction on payment method \'%s\' ' .
21
        'that does not support it';
22
23
    /**
24
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\InitializeTransactionInterface
25
     */
26
    protected $transaction;
27
28
    /**
29
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithInitializeInterface[]
30
     */
31
    protected $paymentMethodAdapterCollection;
32
33
    /**
34
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromQuoteBuilderInterface
35
     */
36
    protected $heidelpayRequestBuilder;
37
38
    /**
39
     * @var \SprykerEco\Zed\Heidelpay\Business\Basket\BasketCreatorInterface
40
     */
41
    protected $basketCreator;
42
43
    /**
44
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\InitializeTransactionInterface $transaction
45
     * @param array $paymentMethodAdapterCollection
46
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromQuoteBuilderInterface $heidelpayRequestBuilder
47
     * @param \SprykerEco\Zed\Heidelpay\Business\Basket\BasketCreatorInterface $basketCreator
48
     */
49
    public function __construct(
50
        InitializeTransactionInterface $transaction,
51
        array $paymentMethodAdapterCollection,
52
        AdapterRequestFromQuoteBuilderInterface $heidelpayRequestBuilder,
53
        BasketCreatorInterface $basketCreator
54
    ) {
55
        $this->transaction = $transaction;
56
        $this->paymentMethodAdapterCollection = $paymentMethodAdapterCollection;
57
        $this->heidelpayRequestBuilder = $heidelpayRequestBuilder;
58
        $this->basketCreator = $basketCreator;
59
    }
60
61
    /**
62
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
63
     *
64
     * @return \Generated\Shared\Transfer\HeidelpayResponseTransfer
65
     */
66
    public function initialize(QuoteTransfer $quoteTransfer): HeidelpayResponseTransfer
67
    {
68
        $initializeRequestTransfer = $this->buildInitializeRequest($quoteTransfer);
69
        $paymentAdapter = $this->getPaymentMethodAdapter($quoteTransfer);
70
71
        return $this->transaction->executeTransaction($initializeRequestTransfer, $paymentAdapter);
72
    }
73
74
    /**
75
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
76
     *
77
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
78
     */
79
    protected function buildInitializeRequest(QuoteTransfer $quoteTransfer)
80
    {
81
        $initializeRequestTransfer = $this->heidelpayRequestBuilder->buildEasyCreditRequest($quoteTransfer);
82
        $heidelpayBasketResponseTransfer = $this->basketCreator->createBasket($quoteTransfer);
83
        $initializeRequestTransfer->setIdBasket($heidelpayBasketResponseTransfer->getIdBasket());
84
85
        return $initializeRequestTransfer;
86
    }
87
88
    /**
89
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
90
     *
91
     * @throws \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\InitializeNotSupportedException
92
     *
93
     * @return \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithInitializeInterface
94
     */
95
    protected function getPaymentMethodAdapter(QuoteTransfer $quoteTransfer)
96
    {
97
        $paymentMethodCode = $this->getPaymentMethodCode($quoteTransfer);
98
99
        if (!isset($this->paymentMethodAdapterCollection[$paymentMethodCode])) {
100
            throw new InitializeNotSupportedException(
101
                sprintf(static::ERROR_MESSAGE_INITIALIZE_TRANSACTION_NOT_SUPPORTED, $paymentMethodCode)
102
            );
103
        }
104
105
        return $this->paymentMethodAdapterCollection[$paymentMethodCode];
106
    }
107
108
    /**
109
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
110
     *
111
     * @return string
112
     */
113
    protected function getPaymentMethodCode(QuoteTransfer $quoteTransfer)
114
    {
115
        return $quoteTransfer->getPayment()->getPaymentMethod();
116
    }
117
}
118