getPaymentCrefoPayOrderItemCollection()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 10
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 17
rs 9.9332
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\CrefoPay\Business\Oms\Command\Saver;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\CrefoPayOmsCommandTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...foPayOmsCommandTransfer 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...
12
use Generated\Shared\Transfer\PaymentCrefoPayOrderItemCollectionTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...rItemCollectionTransfer 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 Generated\Shared\Transfer\PaymentCrefoPayOrderItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...efoPayOrderItemTransfer 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...
14
use SprykerEco\Zed\CrefoPay\Business\Reader\CrefoPayReaderInterface;
15
use SprykerEco\Zed\CrefoPay\Business\Writer\CrefoPayWriterInterface;
16
use SprykerEco\Zed\CrefoPay\CrefoPayConfig;
17
use SprykerEco\Zed\CrefoPay\Dependency\Facade\CrefoPayToOmsFacadeInterface;
18
19
class CancelOmsCommandSaver implements CrefoPayOmsCommandSaverInterface
20
{
21
    /**
22
     * @var \SprykerEco\Zed\CrefoPay\Business\Reader\CrefoPayReaderInterface
23
     */
24
    protected $reader;
25
26
    /**
27
     * @var \SprykerEco\Zed\CrefoPay\Business\Writer\CrefoPayWriterInterface
28
     */
29
    protected $writer;
30
31
    /**
32
     * @var \SprykerEco\Zed\CrefoPay\CrefoPayConfig
33
     */
34
    protected $config;
35
36
    /**
37
     * @var \SprykerEco\Zed\CrefoPay\Dependency\Facade\CrefoPayToOmsFacadeInterface
38
     */
39
    protected $omsFacade;
40
41
    /**
42
     * @param \SprykerEco\Zed\CrefoPay\Business\Reader\CrefoPayReaderInterface $reader
43
     * @param \SprykerEco\Zed\CrefoPay\Business\Writer\CrefoPayWriterInterface $writer
44
     * @param \SprykerEco\Zed\CrefoPay\CrefoPayConfig $config
45
     * @param \SprykerEco\Zed\CrefoPay\Dependency\Facade\CrefoPayToOmsFacadeInterface $omsFacade
46
     */
47
    public function __construct(
48
        CrefoPayReaderInterface $reader,
49
        CrefoPayWriterInterface $writer,
50
        CrefoPayConfig $config,
51
        CrefoPayToOmsFacadeInterface $omsFacade
52
    ) {
53
        $this->reader = $reader;
54
        $this->writer = $writer;
55
        $this->config = $config;
56
        $this->omsFacade = $omsFacade;
57
    }
58
59
    /**
60
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
61
     *
62
     * @return void
63
     */
64
    public function savePaymentEntities(CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer): void
65
    {
66
        if ($crefoPayOmsCommandTransfer->getResponse()->getIsSuccess() === false) {
67
            return;
68
        }
69
        $paymentCrefoPayOrderItemCollection = $this->getPaymentCrefoPayOrderItemCollection($crefoPayOmsCommandTransfer);
70
        $this->writer->updatePaymentEntities(
71
            $paymentCrefoPayOrderItemCollection,
72
            null,
73
            $crefoPayOmsCommandTransfer->getResponse()->getCrefoPayApiLogId(),
74
        );
75
76
        if (!$this->isSingleOrderItemCommandExecution($crefoPayOmsCommandTransfer)) {
77
            return;
78
        }
79
80
        $affectedSalesOrderItemIds = $this->getAffectedSalesOrderItemIds(
81
            $crefoPayOmsCommandTransfer,
82
            $paymentCrefoPayOrderItemCollection,
83
        );
84
85
        $this->omsFacade->triggerEventForOrderItems(
86
            $this->config->getOmsEventCancel(),
87
            $affectedSalesOrderItemIds,
88
            [$this->config->getCrefoPayAutomaticOmsTrigger()],
89
        );
90
    }
91
92
    /**
93
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
94
     *
95
     * @return \Generated\Shared\Transfer\PaymentCrefoPayOrderItemCollectionTransfer
96
     */
97
    protected function getPaymentCrefoPayOrderItemCollection(
98
        CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
99
    ): PaymentCrefoPayOrderItemCollectionTransfer {
100
        $status = $this->config->getOmsStatusCancellationPending();
101
        $paymentCrefoPayOrderItemCollection = $this->reader
102
            ->getPaymentCrefoPayOrderItemCollectionByCrefoPayOrderId(
103
                $crefoPayOmsCommandTransfer->getPaymentCrefoPay()->getCrefoPayOrderId(),
104
            );
105
        $paymentCrefoPayOrderItems = array_map(
106
            function (PaymentCrefoPayOrderItemTransfer $paymentCrefoPayOrderItemTransfer) use ($status) {
107
                return $paymentCrefoPayOrderItemTransfer->setStatus($status);
108
            },
109
            $paymentCrefoPayOrderItemCollection->getCrefoPayOrderItems()->getArrayCopy(),
110
        );
111
112
        return $paymentCrefoPayOrderItemCollection
113
            ->setCrefoPayOrderItems(new ArrayObject($paymentCrefoPayOrderItems));
114
    }
115
116
    /**
117
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
118
     *
119
     * @return bool
120
     */
121
    protected function isSingleOrderItemCommandExecution(CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer): bool
122
    {
123
        $paymentCrefoPayOrderItemCollection = $crefoPayOmsCommandTransfer->getPaymentCrefoPayOrderItemCollection();
124
125
        return $paymentCrefoPayOrderItemCollection->getCrefoPayOrderItems()->count() === 1;
126
    }
127
128
    /**
129
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
130
     * @param \Generated\Shared\Transfer\PaymentCrefoPayOrderItemCollectionTransfer $paymentCrefoPayOrderItemCollection
131
     *
132
     * @return array<int>
133
     */
134
    protected function getAffectedSalesOrderItemIds(
135
        CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer,
136
        PaymentCrefoPayOrderItemCollectionTransfer $paymentCrefoPayOrderItemCollection
137
    ): array {
138
        $affectedSalesOrderItemIds = array_map(
139
            function (PaymentCrefoPayOrderItemTransfer $paymentCrefoPayOrderItemTransfer) {
140
                return $paymentCrefoPayOrderItemTransfer->getIdSalesOrderItem();
141
            },
142
            $paymentCrefoPayOrderItemCollection->getCrefoPayOrderItems()->getArrayCopy(),
143
        );
144
145
        /** @var \Generated\Shared\Transfer\PaymentCrefoPayOrderItemTransfer $paymentCrefoPayOrderItemTransfer */
146
        $paymentCrefoPayOrderItemTransfer = $crefoPayOmsCommandTransfer
147
            ->getPaymentCrefoPayOrderItemCollection()
148
            ->getCrefoPayOrderItems()
149
            ->offsetGet(0);
150
151
        $key = array_search($paymentCrefoPayOrderItemTransfer->getIdSalesOrderItem(), $affectedSalesOrderItemIds);
152
        if ($key !== false) {
153
            unset($affectedSalesOrderItemIds[$key]);
154
        }
155
156
        return $affectedSalesOrderItemIds;
157
    }
158
}
159