Passed
Branch feature/ECO-573-per-item-proce... (fe5bf4)
by Andrey
04:56
created

UpdateAuthorizationStatusCommandPlugin   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 56
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
B triggerEventForRelatedItems() 0 25 2
A run() 0 17 3
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 Generated\Shared\Transfer\ItemTransfer;
12
use Orm\Zed\Sales\Persistence\SpySalesOrder;
1 ignored issue
show
Bug introduced by
The type Orm\Zed\Sales\Persistence\SpySalesOrder 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...
13
use Spryker\Zed\Oms\Business\Util\ReadOnlyArrayObject;
14
use SprykerEco\Shared\Amazonpay\AmazonpayConstants;
15
16
/**
17
 * @method \SprykerEco\Zed\Amazonpay\Persistence\AmazonpayQueryContainerInterface getQueryContainer()
18
 */
19
class UpdateAuthorizationStatusCommandPlugin extends AbstractAmazonpayCommandPlugin
20
{
21
22
    /**
23
     * @inheritdoc
24
     */
25
    public function run(array $salesOrderItems, SpySalesOrder $orderEntity, ReadOnlyArrayObject $data)
26
    {
27
        $amazonpayCallTransfers = $this->groupSalesOrderItemsByAuthId($salesOrderItems);
28
29
        foreach ($amazonpayCallTransfers as $amazonpayCallTransfer) {
30
            $amazonpayCallTransfer->setShippingAddress($this->buildAddressTransfer($orderEntity->getShippingAddress()))
31
                ->setBillingAddress($this->buildAddressTransfer($orderEntity->getBillingAddress()));
32
            $updatedStatus = $this->getFacade()->updateAuthorizationStatus($amazonpayCallTransfer);
0 ignored issues
show
Bug introduced by
The method updateAuthorizationStatus() does not exist on SprykerEco\Zed\Amazonpay...payCommunicationFactory. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

32
            $updatedStatus = $this->getFacade()->/** @scrutinizer ignore-call */ updateAuthorizationStatus($amazonpayCallTransfer);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
33
34
            if ($updatedStatus->getAmazonpayPayment()->getAuthorizationDetails()->getAuthorizationStatus()->getIsClosed()) {
35
                $this->getFacade()->authorizeOrderItems($amazonpayCallTransfer);
0 ignored issues
show
Bug introduced by
The method authorizeOrderItems() does not exist on SprykerEco\Zed\Amazonpay...payCommunicationFactory. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

35
                $this->getFacade()->/** @scrutinizer ignore-call */ authorizeOrderItems($amazonpayCallTransfer);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
36
            }
37
38
            $this->triggerEventForRelatedItems($amazonpayCallTransfer, $data->getArrayCopy());
39
        }
40
41
        return [];
42
    }
43
44
    /**
45
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonpayCallTransfer
46
     * @param array $alreadyAffectedItems
47
     *
48
     * @return void
49
     */
50
    protected function triggerEventForRelatedItems(AmazonpayCallTransfer $amazonpayCallTransfer, array $alreadyAffectedItems)
51
    {
52
        $affectedItems = array_map(
53
            function (ItemTransfer $item) {
54
                return $item->getIdSalesOrderItem();
55
            },
56
            $amazonpayCallTransfer->getItems()->getArrayCopy()
57
        );
58
        $affectedItems = array_merge($affectedItems, $alreadyAffectedItems);
59
60
        $toBeUpdatedItems = $this->getQueryContainer()
61
            ->querySalesOrderItemsByPaymentReferenceId(
62
                $amazonpayCallTransfer->getAmazonpayPayment()->getAuthorizationDetails()->getAuthorizationReferenceId(),
63
                $affectedItems
64
            )
65
            ->find();
66
67
        if ($toBeUpdatedItems->count() > 0) {
68
            $this->getFactory()
69
                ->getOmsFacade()
70
                ->triggerEvent(
71
                    AmazonpayConstants::OMS_EVENT_UPDATE_AUTH_STATUS,
72
                    $toBeUpdatedItems,
73
                    [],
74
                    $affectedItems
75
                );
76
        }
77
    }
78
79
}
80