CaptureCommandPlugin::run()   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 3
dl 0
loc 11
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Apache OSL-2
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\AmazonPay\Communication\Plugin\Oms\Command;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\AmazonpayCallTransfer;
12
use Orm\Zed\Sales\Persistence\SpySalesOrder;
13
use Spryker\Zed\Oms\Business\Util\ReadOnlyArrayObject;
14
use SprykerEco\Shared\AmazonPay\AmazonPayConfig;
15
16
/**
17
 * @method \SprykerEco\Zed\AmazonPay\Business\AmazonPayFacadeInterface getFacade()
18
 */
19
class CaptureCommandPlugin extends AbstractAmazonpayCommandPlugin
20
{
21
    /**
22
     * @api
23
     *
24
     * @param array $salesOrderItems
25
     * @param \Orm\Zed\Sales\Persistence\SpySalesOrder $orderEntity
26
     * @param \Spryker\Zed\Oms\Business\Util\ReadOnlyArrayObject $data
27
     *
28
     * @return array
29
     */
30
    public function run(array $salesOrderItems, SpySalesOrder $orderEntity, ReadOnlyArrayObject $data)
31
    {
32
        $amazonpayCallTransfers = $this->groupSalesOrderItemsByAuthId($salesOrderItems);
33
34
        $wasSuccessful = $this->captureGroupedOrderItems($amazonpayCallTransfers, $orderEntity);
35
36
        if ($wasSuccessful) {
37
            $this->updateOrdersStatus($orderEntity);
38
        }
39
40
        return [];
41
    }
42
43
    /**
44
     * @param array $amazonpayCallTransfers
45
     * @param \Orm\Zed\Sales\Persistence\SpySalesOrder $orderEntity
46
     *
47
     * @return bool
48
     */
49
    protected function captureGroupedOrderItems(array $amazonpayCallTransfers, SpySalesOrder $orderEntity)
50
    {
51
        $wasSuccessful = false;
52
53
        foreach ($amazonpayCallTransfers as $amazonpayCallTransfer) {
54
            $amazonpayCallTransfer->setRequestedAmount(
55
                $this->getRequestedAmountByOrderAndItems($orderEntity, $amazonpayCallTransfer->getItems())
56
            );
57
            $result = $this->getFacade()->captureOrder($amazonpayCallTransfer);
58
59
            if ($this->isPaymentSuccess($result)) {
60
                $wasSuccessful = true;
61
            }
62
        }
63
64
        return $wasSuccessful;
65
    }
66
67
    /**
68
     * @param \Orm\Zed\Sales\Persistence\SpySalesOrder $orderEntity
69
     *
70
     * @return void
71
     */
72
    protected function updateOrdersStatus(SpySalesOrder $orderEntity)
73
    {
74
        $items = new ArrayObject();
75
76
        foreach ($orderEntity->getItems() as $salesOrderItem) {
77
            if ($salesOrderItem->getState()->getName() === AmazonPayConfig::OMS_STATUS_AUTH_OPEN) {
78
                $items[] = $salesOrderItem;
79
            }
80
        }
81
82
        $this->setOrderItemsStatus($items, AmazonPayConfig::OMS_STATUS_AUTH_OPEN_WITHOUT_CANCEL);
83
    }
84
85
    /**
86
     * @return string
87
     */
88
    protected function getAffectingRequestedAmountItemsStateFlag()
89
    {
90
        return AmazonPayConfig::OMS_FLAG_NOT_CAPTURED;
91
    }
92
93
    /**
94
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $payment
95
     *
96
     * @return bool
97
     */
98
    protected function isPaymentSuccess(AmazonpayCallTransfer $payment)
99
    {
100
        return $payment->getAmazonpayPayment() &&
101
            $payment->getAmazonpayPayment()->getResponseHeader() &&
102
            $payment->getAmazonpayPayment()->getResponseHeader()->getIsSuccess();
103
    }
104
}
105