Passed
Pull Request — feature/eco-2295/master (#7)
by Aleksey
09:07 queued 04:40
created

triggerRemainingOrderItems()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 11
nc 2
nop 1
dl 0
loc 19
rs 9.9
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\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 Generated\Shared\Transfer\PaymentCrefoPayTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PaymentCrefoPayTransfer 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...
15
use SprykerEco\Zed\CrefoPay\Business\Mapper\OmsStatus\CrefoPayOmsStatusMapperInterface;
16
use SprykerEco\Zed\CrefoPay\Business\Reader\CrefoPayReaderInterface;
17
use SprykerEco\Zed\CrefoPay\Business\Writer\CrefoPayWriterInterface;
18
use SprykerEco\Zed\CrefoPay\CrefoPayConfig;
19
use SprykerEco\Zed\CrefoPay\Dependency\Facade\CrefoPayToOmsFacadeInterface;
20
21
class CaptureOmsCommandSaver implements CrefoPayOmsCommandSaverInterface
22
{
23
    /**
24
     * @var \SprykerEco\Zed\CrefoPay\Business\Reader\CrefoPayReaderInterface
25
     */
26
    protected $reader;
27
28
    /**
29
     * @var \SprykerEco\Zed\CrefoPay\Business\Writer\CrefoPayWriterInterface
30
     */
31
    protected $writer;
32
33
    /**
34
     * @var \SprykerEco\Zed\CrefoPay\CrefoPayConfig
35
     */
36
    protected $config;
37
38
    /**
39
     * @var \SprykerEco\Zed\CrefoPay\Dependency\Facade\CrefoPayToOmsFacadeInterface
40
     */
41
    protected $omsFacade;
42
43
    /**
44
     * @var \SprykerEco\Zed\CrefoPay\Business\Mapper\OmsStatus\CrefoPayOmsStatusMapperInterface
45
     */
46
    protected $statusMapper;
47
48
    /**
49
     * @param \SprykerEco\Zed\CrefoPay\Business\Reader\CrefoPayReaderInterface $reader
50
     * @param \SprykerEco\Zed\CrefoPay\Business\Writer\CrefoPayWriterInterface $writer
51
     * @param \SprykerEco\Zed\CrefoPay\CrefoPayConfig $config
52
     * @param \SprykerEco\Zed\CrefoPay\Dependency\Facade\CrefoPayToOmsFacadeInterface $omsFacade
53
     * @param \SprykerEco\Zed\CrefoPay\Business\Mapper\OmsStatus\CrefoPayOmsStatusMapperInterface $statusMapper
54
     */
55
    public function __construct(
56
        CrefoPayReaderInterface $reader,
57
        CrefoPayWriterInterface $writer,
58
        CrefoPayConfig $config,
59
        CrefoPayToOmsFacadeInterface $omsFacade,
60
        CrefoPayOmsStatusMapperInterface $statusMapper
61
    ) {
62
        $this->reader = $reader;
63
        $this->writer = $writer;
64
        $this->config = $config;
65
        $this->omsFacade = $omsFacade;
66
        $this->statusMapper = $statusMapper;
67
    }
68
69
    /**
70
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
71
     *
72
     * @return void
73
     */
74
    public function savePaymentEntities(CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer): void
75
    {
76
        if ($crefoPayOmsCommandTransfer->getResponse()->getIsSuccess() === false) {
77
            return;
78
        }
79
80
        $this->writer->updatePaymentEntities(
81
            $this->getPaymentCrefoPayOrderItemsToCapture($crefoPayOmsCommandTransfer),
82
            $this->getPaymentCrefoPayTransfer($crefoPayOmsCommandTransfer),
83
            $crefoPayOmsCommandTransfer->getResponse()->getCrefoPayApiLogId()
84
        );
85
86
        $this->triggerRemainingOrderItems($crefoPayOmsCommandTransfer);
87
    }
88
89
    /**
90
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
91
     *
92
     * @return \Generated\Shared\Transfer\PaymentCrefoPayOrderItemCollectionTransfer
93
     */
94
    protected function getPaymentCrefoPayOrderItemsToCapture(
95
        CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
96
    ): PaymentCrefoPayOrderItemCollectionTransfer {
97
98
        $status = $this->statusMapper
99
            ->mapNotificationOrderStatusToOmsStatus(
100
                $crefoPayOmsCommandTransfer->getResponse()->getCaptureResponse()->getStatus()
101
            );
102
        $captureId = $crefoPayOmsCommandTransfer->getRequest()->getCaptureRequest()->getCaptureID();
103
104
        $paymentCrefoPayOrderItems = array_map(
105
            function (PaymentCrefoPayOrderItemTransfer $paymentCrefoPayOrderItemTransfer) use ($status, $captureId) {
106
                return $paymentCrefoPayOrderItemTransfer
107
                    ->setStatus($status)
108
                    ->setCaptureId($captureId);
109
            },
110
            $crefoPayOmsCommandTransfer
111
                ->getPaymentCrefoPayOrderItemCollection()
112
                ->getCrefoPayOrderItems()
113
                ->getArrayCopy()
114
        );
115
116
        return $crefoPayOmsCommandTransfer
117
            ->getPaymentCrefoPayOrderItemCollection()
118
            ->setCrefoPayOrderItems(
119
                new ArrayObject($paymentCrefoPayOrderItems)
120
            );
121
    }
122
123
    /**
124
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
125
     *
126
     * @return \Generated\Shared\Transfer\PaymentCrefoPayTransfer
127
     */
128
    protected function getPaymentCrefoPayTransfer(CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer): PaymentCrefoPayTransfer
129
    {
130
        $paymentCrefoPayTransfer = $crefoPayOmsCommandTransfer->getPaymentCrefoPay();
131
        $capturedAmount = $paymentCrefoPayTransfer->getCapturedAmount();
132
        $capturedAmount += $crefoPayOmsCommandTransfer->getRequest()->getCaptureRequest()->getAmount()->getAmount();
133
134
        if ($crefoPayOmsCommandTransfer->getExpensesResponse() && $crefoPayOmsCommandTransfer->getExpensesResponse()->getIsSuccess()) {
135
            $capturedAmount += $crefoPayOmsCommandTransfer->getExpensesRequest()->getCaptureRequest()->getAmount()->getAmount();
136
        }
137
138
        return $paymentCrefoPayTransfer
139
            ->setCapturedAmount($capturedAmount);
140
    }
141
142
    /**
143
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
144
     *
145
     * @return void
146
     */
147
    protected function triggerRemainingOrderItems(CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer): void
148
    {
149
        $remainingOrderItems = $this->getRemainingOrderItems($crefoPayOmsCommandTransfer);
150
151
        if (count($remainingOrderItems) === 0) {
152
            return;
153
        }
154
155
        $affectedSalesOrderItemIds = array_map(
156
            function (PaymentCrefoPayOrderItemTransfer $paymentCrefoPayOrderItemTransfer) {
157
                return $paymentCrefoPayOrderItemTransfer->getFkSalesOrderItem();
158
            },
159
            $remainingOrderItems
160
        );
161
162
        $this->omsFacade->triggerEventForOrderItems(
163
            $this->config->getOmsEventNoCancellation(),
164
            $affectedSalesOrderItemIds,
165
            [$this->config->getCrefoPayAutomaticOmsTrigger()]
166
        );
167
    }
168
169
    /**
170
     * @param \Generated\Shared\Transfer\CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer
171
     *
172
     * @return \Generated\Shared\Transfer\PaymentCrefoPayOrderItemTransfer[]
173
     */
174
    protected function getRemainingOrderItems(CrefoPayOmsCommandTransfer $crefoPayOmsCommandTransfer): array
175
    {
176
        $paymentCrefoPayOrderItemCollection = $this->reader
177
            ->findPaymentCrefoPayOrderItemsByCrefoPayOrderId(
178
                $crefoPayOmsCommandTransfer->getPaymentCrefoPay()->getCrefoPayOrderId()
179
            );
180
181
        return array_filter(
182
            $paymentCrefoPayOrderItemCollection->getCrefoPayOrderItems()->getArrayCopy(),
183
            function (PaymentCrefoPayOrderItemTransfer $paymentCrefoPayOrderItemTransfer) {
184
                return $paymentCrefoPayOrderItemTransfer->getStatus() === $this->config->getOmsStatusWaitingForCapture();
185
            }
186
        );
187
    }
188
}
189