DebitTransactionHandler::getPaymentMethodAdapter()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 1
dl 0
loc 11
rs 10
c 0
b 0
f 0
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\HeidelpayRequestTransfer;
11
use Generated\Shared\Transfer\OrderTransfer;
12
use SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface;
13
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\DebitTransactionInterface;
14
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\DebitNotSupportedException;
15
use SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithDebitInterface;
16
17
class DebitTransactionHandler implements DebitTransactionHandlerInterface
18
{
19
    public const ERROR_MESSAGE_DEBIT_TRANSACTION_NOT_SUPPORTED =
20
        'Attempt to call debit transaction on payment method \'%s\' ' .
21
        'that does not support it';
22
23
    /**
24
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\DebitTransactionInterface
25
     */
26
    protected $transaction;
27
28
    /**
29
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithDebitInterface[]
30
     */
31
    protected $paymentMethodAdapterCollection;
32
33
    /**
34
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface
35
     */
36
    protected $heidelpayRequestBuilder;
37
38
    /**
39
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\DebitTransactionInterface $transaction
40
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithDebitInterface[] $paymentMethodAdapterCollection
41
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface $heidelpayRequestBuilder
42
     */
43
    public function __construct(
44
        DebitTransactionInterface $transaction,
45
        array $paymentMethodAdapterCollection,
46
        AdapterRequestFromOrderBuilderInterface $heidelpayRequestBuilder
47
    ) {
48
        $this->transaction = $transaction;
49
        $this->paymentMethodAdapterCollection = $paymentMethodAdapterCollection;
50
        $this->heidelpayRequestBuilder = $heidelpayRequestBuilder;
51
    }
52
53
    /**
54
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
55
     *
56
     * @return void
57
     */
58
    public function debit(OrderTransfer $orderTransfer): void
59
    {
60
        $debitRequestTransfer = $this->buildDebitRequest($orderTransfer);
61
        $paymentAdapter = $this->getPaymentMethodAdapter($orderTransfer);
62
        $this->transaction->executeTransaction($debitRequestTransfer, $paymentAdapter);
63
    }
64
65
    /**
66
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
67
     *
68
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
69
     */
70
    protected function buildDebitRequest(OrderTransfer $orderTransfer): HeidelpayRequestTransfer
71
    {
72
        $debitRequestTransfer = $this->heidelpayRequestBuilder->buildDebitRequestFromOrder($orderTransfer);
73
74
        return $debitRequestTransfer;
75
    }
76
77
    /**
78
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
79
     *
80
     * @throws \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\DebitNotSupportedException
81
     *
82
     * @return \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithDebitInterface
83
     */
84
    protected function getPaymentMethodAdapter(OrderTransfer $orderTransfer): PaymentWithDebitInterface
85
    {
86
        $paymentMethodCode = $this->getPaymentMethodCode($orderTransfer);
87
88
        if (!isset($this->paymentMethodAdapterCollection[$paymentMethodCode])) {
89
            throw new DebitNotSupportedException(
90
                sprintf(static::ERROR_MESSAGE_DEBIT_TRANSACTION_NOT_SUPPORTED, $paymentMethodCode)
91
            );
92
        }
93
94
        return $this->paymentMethodAdapterCollection[$paymentMethodCode];
95
    }
96
97
    /**
98
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
99
     *
100
     * @return string
101
     */
102
    protected function getPaymentMethodCode(OrderTransfer $orderTransfer): string
103
    {
104
        return $orderTransfer->getHeidelpayPayment()->getPaymentMethod();
105
    }
106
}
107