Completed
Push — master ( 24e2fb...716e2b )
by Oleksandr
16s queued 14s
created

executeReservation()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
nc 2
nop 1
dl 0
loc 20
rs 9.8666
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\OrderTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\OrderTransfer 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 SprykerEco\Zed\Heidelpay\Business\Payment\PaymentWriterInterface;
12
use SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface;
13
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\ReservationNotSupportedException;
14
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\ReservationTransactionInterface;
15
16
class ReservationTransactionHandler implements ReservationTransactionHandlerInterface
17
{
18
    public const ERROR_MESSAGE_RESERVATION_TRANSACTION_NOT_SUPPORTED =
19
        'Attempt to call reservation transaction on payment method \'%s\' ' .
20
        'that does not support it';
21
22
    /**
23
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\ReservationTransactionInterface
24
     */
25
    protected $transaction;
26
27
    /**
28
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithReservationInterface[]
29
     */
30
    protected $paymentMethodAdapterCollection;
31
32
    /**
33
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface
34
     */
35
    protected $heidelpayRequestBuilder;
36
37
    /**
38
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\PaymentWriterInterface
39
     */
40
    protected $paymentWriter;
41
42
    /**
43
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\ReservationTransactionInterface $transaction
44
     * @param array $paymentMethodAdapterCollection
45
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface $heidelpayRequestBuilder
46
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\PaymentWriterInterface $paymentWriter
47
     */
48
    public function __construct(
49
        ReservationTransactionInterface $transaction,
50
        array $paymentMethodAdapterCollection,
51
        AdapterRequestFromOrderBuilderInterface $heidelpayRequestBuilder,
52
        PaymentWriterInterface $paymentWriter
53
    ) {
54
        $this->transaction = $transaction;
55
        $this->paymentMethodAdapterCollection = $paymentMethodAdapterCollection;
56
        $this->heidelpayRequestBuilder = $heidelpayRequestBuilder;
57
        $this->paymentWriter = $paymentWriter;
58
    }
59
60
    /**
61
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
62
     *
63
     * @return void
64
     */
65
    public function executeReservation(OrderTransfer $orderTransfer)
66
    {
67
        $reservationRequestTransfer = $this->buildReservationRequest($orderTransfer);
68
        $paymentAdapter = $this->getPaymentMethodAdapter($orderTransfer);
69
70
        $reservationResponseTransfer = $this->transaction->executeTransaction(
71
            $reservationRequestTransfer,
72
            $paymentAdapter
73
        );
74
75
        if ($reservationResponseTransfer->getIdTransactionUnique() === null) {
76
            return;
77
        }
78
79
        $this->paymentWriter->updatePaymentReferenceByIdSalesOrder(
80
            $reservationResponseTransfer->getIdTransactionUnique(),
81
            $orderTransfer->getIdSalesOrder()
82
        );
83
        $orderTransfer->getHeidelpayPayment()->setIdPaymentReference(
84
            $reservationResponseTransfer->getIdTransactionUnique()
85
        );
86
    }
87
88
    /**
89
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
90
     *
91
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\HeidelpayRequestTransfer 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...
92
     */
93
    protected function buildReservationRequest(OrderTransfer $orderTransfer)
94
    {
95
        $reservationRequestTransfer = $this->heidelpayRequestBuilder->buildReservationRequestFromOrder($orderTransfer);
96
97
        return $reservationRequestTransfer;
98
    }
99
100
    /**
101
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
102
     *
103
     * @throws \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\ReservationNotSupportedException
104
     *
105
     * @return \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithReservationInterface
106
     */
107
    protected function getPaymentMethodAdapter(OrderTransfer $orderTransfer)
108
    {
109
        $paymentMethodCode = $this->getPaymentMethodCode($orderTransfer);
110
111
        if (!isset($this->paymentMethodAdapterCollection[$paymentMethodCode])) {
112
            throw new ReservationNotSupportedException(
113
                sprintf(static::ERROR_MESSAGE_RESERVATION_TRANSACTION_NOT_SUPPORTED, $paymentMethodCode)
114
            );
115
        }
116
117
        return $this->paymentMethodAdapterCollection[$paymentMethodCode];
118
    }
119
120
    /**
121
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
122
     *
123
     * @return string
124
     */
125
    protected function getPaymentMethodCode(OrderTransfer $orderTransfer)
126
    {
127
        return $orderTransfer->getHeidelpayPayment()->getPaymentMethod();
128
    }
129
}
130