isOrderClosed()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 2
eloc 8
c 1
b 1
f 0
nc 2
nop 1
dl 0
loc 10
rs 10
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 Generated\Shared\Transfer\AmazonpayCallTransfer;
11
use Orm\Zed\Sales\Persistence\SpySalesOrder;
12
use Spryker\Zed\Oms\Business\Util\ReadOnlyArrayObject;
13
use SprykerEco\Shared\AmazonPay\AmazonPayConfig;
14
15
/**
16
 * @method \SprykerEco\Zed\AmazonPay\Persistence\AmazonPayQueryContainerInterface getQueryContainer()
17
 * @method \SprykerEco\Zed\AmazonPay\Business\AmazonPayFacadeInterface getFacade()
18
 */
19
class UpdateAuthorizationStatusCommandPlugin 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
        foreach ($amazonpayCallTransfers as $amazonpayCallTransfer) {
35
            $this->addAddresses($amazonpayCallTransfer, $orderEntity);
36
            $updatedAmazonpayTransfer = $this->getFacade()->updateAuthorizationStatus($amazonpayCallTransfer);
37
38
            if ($this->isOrderClosed($updatedAmazonpayTransfer)) {
39
                $this->getFacade()->authorizeOrderItems($amazonpayCallTransfer);
40
            }
41
42
            $this->getFacade()->triggerEventForRelatedItems(
43
                $amazonpayCallTransfer,
44
                $data->getArrayCopy(),
45
                AmazonPayConfig::OMS_EVENT_UPDATE_AUTH_STATUS
46
            );
47
        }
48
49
        return [];
50
    }
51
52
    /**
53
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonpayCallTransfer
54
     *
55
     * @return bool
56
     */
57
    protected function isOrderClosed(AmazonpayCallTransfer $amazonpayCallTransfer)
58
    {
59
        return $amazonpayCallTransfer->getAmazonpayPayment()
60
            ->getAuthorizationDetails()
61
            ->getAuthorizationStatus()
62
            ->getState() === AmazonPayConfig::STATUS_CLOSED
63
            &&
64
            !$amazonpayCallTransfer->getAmazonpayPayment()
65
            ->getAuthorizationDetails()
66
            ->getCaptureNow();
67
    }
68
69
    /**
70
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonpayCallTransfer
71
     * @param \Orm\Zed\Sales\Persistence\SpySalesOrder $orderEntity
72
     *
73
     * @return void
74
     */
75
    protected function addAddresses(AmazonpayCallTransfer $amazonpayCallTransfer, SpySalesOrder $orderEntity)
76
    {
77
        $amazonpayCallTransfer->setShippingAddress($this->buildAddressTransfer($orderEntity->getShippingAddress()))
78
            ->setBillingAddress($this->buildAddressTransfer($orderEntity->getBillingAddress()));
79
    }
80
}
81