Passed
Pull Request — master (#67)
by
unknown
09:59
created

PayoneRepository::getPayonePaymentByOrder()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
c 0
b 0
f 0
dl 0
loc 8
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\Payone\Persistence;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\OrderTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\OrderTransfer 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\PaymentDetailTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PaymentDetailTransfer 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\PaymentPayoneOrderItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...PayoneOrderItemTransfer 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\PayoneApiLogTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PayoneApiLogTransfer 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 Generated\Shared\Transfer\PayoneOrderItemFilterTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...OrderItemFilterTransfer 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...
16
use Generated\Shared\Transfer\PayonePaymentLogCollectionTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...ntLogCollectionTransfer 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...
17
use Generated\Shared\Transfer\PayonePaymentLogTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PayonePaymentLogTransfer 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...
18
use Generated\Shared\Transfer\PayonePaymentTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\PayonePaymentTransfer 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...
19
use Orm\Zed\Payone\Persistence\SpyPaymentPayoneApiLogQuery;
0 ignored issues
show
Bug introduced by
The type Orm\Zed\Payone\Persisten...aymentPayoneApiLogQuery 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...
20
use Orm\Zed\Payone\Persistence\SpyPaymentPayoneOrderItemQuery;
0 ignored issues
show
Bug introduced by
The type Orm\Zed\Payone\Persisten...entPayoneOrderItemQuery 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...
21
use Orm\Zed\Payone\Persistence\SpyPaymentPayoneQuery;
0 ignored issues
show
Bug introduced by
The type Orm\Zed\Payone\Persistence\SpyPaymentPayoneQuery 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...
22
use Orm\Zed\Payone\Persistence\SpyPaymentPayoneTransactionStatusLogQuery;
0 ignored issues
show
Bug introduced by
The type Orm\Zed\Payone\Persisten...ansactionStatusLogQuery 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...
23
use Propel\Runtime\ActiveQuery\Criteria;
24
use Spryker\Zed\Kernel\Persistence\AbstractRepository;
25
26
/**
27
 * @method \SprykerEco\Zed\Payone\Persistence\PayonePersistenceFactory getFactory()
28
 */
29
class PayoneRepository extends AbstractRepository implements PayoneRepositoryInterface
30
{
31
    protected const LOG_TYPE_API_LOG = 'SpyPaymentPayoneApiLog';
32
    protected const LOG_TYPE_TRANSACTION_STATUS_LOG = 'SpyPaymentPayoneTransactionStatusLog';
33
34
    /**
35
     * @param \Generated\Shared\Transfer\PayoneOrderItemFilterTransfer $payoneOrderItemFilerTransfer
36
     *
37
     * @return \Generated\Shared\Transfer\PaymentPayoneOrderItemTransfer[]
38
     */
39
    public function findPaymentPayoneOrderItemByFilter(PayoneOrderItemFilterTransfer $payoneOrderItemFilerTransfer): array
40
    {
41
        $paymentPayoneOrderItemQuery = $this->getFactory()->createPaymentPayoneOrderItemQuery();
42
        $paymentPayoneOrderItemQuery = $this->setPayoneOrderItemFilters(
43
            $paymentPayoneOrderItemQuery,
44
            $payoneOrderItemFilerTransfer
45
        );
46
47
        $paymentPayoneOrderItemEntities = $paymentPayoneOrderItemQuery->find();
48
        $paymentPayoneOrderItemTransfers = [];
49
50
        foreach ($paymentPayoneOrderItemEntities as $paymentPayoneOrderItemEntity) {
51
            $paymentPayoneOrderItemTransfers[] = $this->getFactory()
52
                ->createPayonePersistenceMapper()
53
                ->mapEntityToPaymentPayoneOrderItemTransfer($paymentPayoneOrderItemEntity, new PaymentPayoneOrderItemTransfer());
54
        }
55
56
        return $paymentPayoneOrderItemTransfers;
57
    }
58
59
    /**
60
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
61
     *
62
     * @return \Generated\Shared\Transfer\PayonePaymentTransfer
63
     */
64
    public function getPayonePaymentByOrder(OrderTransfer $orderTransfer): PayonePaymentTransfer
65
    {
66
        $paymentPayoneEntity = $this->createPaymentPayoneQueryByOrderId($orderTransfer->getIdSalesOrder())->findOne();
67
68
        return $this
69
            ->getFactory()
70
            ->createPayonePersistenceMapper()
71
            ->mapPaymentPayoneEntityToPayonePaymentTransfer($paymentPayoneEntity, new PayonePaymentTransfer());
72
    }
73
74
    /**
75
     * @param int $idOrder
76
     *
77
     * @return \Generated\Shared\Transfer\PaymentDetailTransfer
78
     */
79
    public function getPaymentDetail(int $idOrder): PaymentDetailTransfer
80
    {
81
        $paymentPayoneEntity = $this->createPaymentPayoneQueryByOrderId($idOrder)->findOne();
82
        $paymentPayoneDetailEntity = $paymentPayoneEntity->getSpyPaymentPayoneDetail();
83
84
        return $this->getFactory()->createPayonePersistenceMapper()->mapPaymentPayoneDetailToPaymentDetailTransfer($paymentPayoneDetailEntity);
85
    }
86
87
    /**
88
     * Gets payment logs (both api and transaction status) for specific orders in chronological order.
89
     *
90
     * @param \ArrayObject|\Generated\Shared\Transfer\OrderTransfer[] $orderTransfers
91
     *
92
     * @return \Generated\Shared\Transfer\PayonePaymentLogCollectionTransfer
93
     */
94
    public function getPaymentLogs(ArrayObject $orderTransfers): PayonePaymentLogCollectionTransfer
95
    {
96
        $paymentPayoneApiLogEntityCollection = $this->createPaymentPayoneApiLogQueryByOrderIds($orderTransfers)->find()->getData();
97
98
        $paymentPayoneTransactionStatusLogEntityCollection = $this->createPaymentPayoneTransactionStatusLogQueryByOrderIds($orderTransfers)->find()->getData();
99
100
        $payonePaymentLogTransferList = [];
101
        /** @var \Orm\Zed\Payone\Persistence\SpyPaymentPayoneApiLog $paymentPayoneApiLogEntity */
102
        foreach ($paymentPayoneApiLogEntityCollection as $paymentPayoneApiLogEntity) {
103
            /** @var \DateTime $apiLogCreatedAtDateTime */
104
            $apiLogCreatedAtDateTime = $paymentPayoneApiLogEntity->getCreatedAt();
105
            $key = $apiLogCreatedAtDateTime->format('Y-m-d\TH:i:s\Z') . 'a' . $paymentPayoneApiLogEntity->getIdPaymentPayoneApiLog();
106
            $payonePaymentLogTransfer = new PayonePaymentLogTransfer();
107
            $payonePaymentLogTransfer->fromArray($paymentPayoneApiLogEntity->toArray(), true);
108
            $payonePaymentLogTransfer->setLogType(static::LOG_TYPE_API_LOG);
109
            $payonePaymentLogTransferList[$key] = $payonePaymentLogTransfer;
110
        }
111
        /** @var \Orm\Zed\Payone\Persistence\SpyPaymentPayoneTransactionStatusLog $paymentPayoneTransactionStatusLogEntity */
112
        foreach ($paymentPayoneTransactionStatusLogEntityCollection as $paymentPayoneTransactionStatusLogEntity) {
113
            /** @var \DateTime $transactionStatusLogDateTime */
114
            $transactionStatusLogDateTime = $paymentPayoneTransactionStatusLogEntity->getCreatedAt();
115
            $key = $transactionStatusLogDateTime->format('Y-m-d\TH:i:s\Z') . 't' . $paymentPayoneTransactionStatusLogEntity->getIdPaymentPayoneTransactionStatusLog();
116
            $payonePaymentLogTransfer = new PayonePaymentLogTransfer();
117
            $payonePaymentLogTransfer->fromArray($paymentPayoneTransactionStatusLogEntity->toArray(), true);
118
            $payonePaymentLogTransfer->setLogType(static::LOG_TYPE_TRANSACTION_STATUS_LOG);
119
            $payonePaymentLogTransferList[$key] = $payonePaymentLogTransfer;
120
        }
121
122
        ksort($payonePaymentLogTransferList);
123
124
        $payonePaymentLogCollectionTransfer = new PayonePaymentLogCollectionTransfer();
125
126
        foreach ($payonePaymentLogTransferList as $payonePaymentLogTransfer) {
127
            $payonePaymentLogCollectionTransfer->addPaymentLog($payonePaymentLogTransfer);
128
        }
129
130
        return $payonePaymentLogCollectionTransfer;
131
    }
132
133
    /**
134
     * @param int $idSalesOrder
135
     *
136
     * @return \Generated\Shared\Transfer\PayoneApiLogTransfer|null
137
     */
138
    public function findLastApiLogByOrderId(int $idSalesOrder): ?PayoneApiLogTransfer
139
    {
140
        $paymentPayoneApiLogEntity = $this->getFactory()->createPaymentPayoneApiLogQuery()
141
            ->useSpyPaymentPayoneQuery()
142
                ->filterByFkSalesOrder($idSalesOrder)
143
            ->endUse()
144
            ->orderByCreatedAt(Criteria::DESC)
145
            ->orderByIdPaymentPayoneApiLog(Criteria::DESC)
146
            ->findOne();
147
148
        if (!$paymentPayoneApiLogEntity) {
149
            return null;
150
        }
151
152
        $apiLogTransfer = new PayoneApiLogTransfer();
153
        $apiLogTransfer->fromArray($paymentPayoneApiLogEntity->toArray(), true);
154
155
        return $apiLogTransfer;
156
    }
157
158
    /**
159
     * @param int $idOrder
160
     *
161
     * @return \Orm\Zed\Payone\Persistence\SpyPaymentPayoneQuery
162
     */
163
    public function createPaymentPayoneQueryByOrderId(int $idOrder): SpyPaymentPayoneQuery
164
    {
165
        $query = $this->getFactory()->createPaymentPayoneQuery();
166
        $query->findByFkSalesOrder($idOrder);
167
168
        return $query;
169
    }
170
171
    /**
172
     * @param \Orm\Zed\Payone\Persistence\SpyPaymentPayoneOrderItemQuery $paymentPayoneOrderItemQuery
173
     * @param \Generated\Shared\Transfer\PayoneOrderItemFilterTransfer $payoneOrderItemFilerTransfer
174
     *
175
     * @return \Orm\Zed\Payone\Persistence\SpyPaymentPayoneOrderItemQuery
176
     */
177
    protected function setPayoneOrderItemFilters(
178
        SpyPaymentPayoneOrderItemQuery $paymentPayoneOrderItemQuery,
179
        PayoneOrderItemFilterTransfer $payoneOrderItemFilerTransfer
180
    ): SpyPaymentPayoneOrderItemQuery {
181
        if ($payoneOrderItemFilerTransfer->getIdSalesOrder()) {
182
            $paymentPayoneOrderItemQuery
183
                ->useSpyPaymentPayoneQuery()
184
                    ->filterByFkSalesOrder($payoneOrderItemFilerTransfer->getIdSalesOrder())
185
                ->endUse();
186
        }
187
188
        if (count($payoneOrderItemFilerTransfer->getSalesOrderItemIds())) {
189
            $paymentPayoneOrderItemQuery->filterByFkSalesOrderItem_In(
190
                $payoneOrderItemFilerTransfer->getSalesOrderItemIds()
191
            );
192
        }
193
194
        return $paymentPayoneOrderItemQuery;
195
    }
196
197
    /**
198
     * @param \ArrayObject|\Generated\Shared\Transfer\OrderTransfer[] $orderTransfers
199
     *
200
     * @return \Orm\Zed\Payone\Persistence\SpyPaymentPayoneApiLogQuery
201
     */
202
    protected function createPaymentPayoneApiLogQueryByOrderIds($orderTransfers): SpyPaymentPayoneApiLogQuery
203
    {
204
        $ids = [];
205
        foreach ($orderTransfers as $orderTransfer) {
206
            $ids[] = $orderTransfer->getIdSalesOrder();
207
        }
208
209
        $query = $this->getFactory()->createPaymentPayoneApiLogQuery()
210
            ->useSpyPaymentPayoneQuery()
211
                ->filterByFkSalesOrder($ids, Criteria::IN)
212
            ->endUse()
213
            ->orderByCreatedAt();
214
215
        return $query;
216
    }
217
218
    /**
219
     * @param \ArrayObject\Generated\Shared\Transfer\OrderTransfer[] $orderTransfers
220
     *
221
     * @return \Orm\Zed\Payone\Persistence\SpyPaymentPayoneTransactionStatusLogQuery
222
     */
223
    protected function createPaymentPayoneTransactionStatusLogQueryByOrderIds(ArrayObject $orderTransfers): SpyPaymentPayoneTransactionStatusLogQuery
224
    {
225
        $ids = [];
226
        foreach ($orderTransfers as $orderTransfer) {
227
            $ids[] = $orderTransfer->getIdSalesOrder();
228
        }
229
230
        $query = $this->getFactory()->createPaymentPayoneTransactionStatusLogQuery()
231
            ->useSpyPaymentPayoneQuery()
232
                ->filterByFkSalesOrder($ids, Criteria::IN)
233
            ->endUse()
234
            ->orderByCreatedAt();
235
236
        return $query;
237
    }
238
}
239