Passed
Pull Request — feature/eco-574/eco-2266-check... (#12)
by Ruslan
06:24 queued 03:07
created

OrderToRequestTransfer::hasImageUrlHttpProtocol()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 1
dl 0
loc 5
rs 10
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\AfterPay\Business\Payment\Mapper;
9
10
use Generated\Shared\Transfer\AfterPayAuthorizeRequestTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...uthorizeRequestTransfer 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...
11
use Generated\Shared\Transfer\AfterPayCallTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\AfterPayCallTransfer 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\AfterPayCancelRequestTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...ayCancelRequestTransfer 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\AfterPayCaptureRequestTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...yCaptureRequestTransfer 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\AfterPayRefundRequestTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...ayRefundRequestTransfer 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\AfterPayRequestAddressTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...yRequestAddressTransfer 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\AfterPayRequestCustomerTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...RequestCustomerTransfer 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\AfterPayRequestOrderItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...equestOrderItemTransfer 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\AfterPayRequestOrderTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...PayRequestOrderTransfer 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 Generated\Shared\Transfer\AfterPayRequestPaymentTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...yRequestPaymentTransfer 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 Generated\Shared\Transfer\ExpenseTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\ExpenseTransfer 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 Generated\Shared\Transfer\ItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\ItemTransfer 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 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...
23
use SprykerEco\Shared\AfterPay\AfterPayConfig;
24
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface;
25
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface;
26
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface;
27
28
class OrderToRequestTransfer implements OrderToRequestTransferInterface
29
{
30
    public const NEGATIVE_MULTIPLIER = -1;
31
    public const GIFT_CARD_PROVIDER = 'GiftCard';
32
33
    protected const ZERO_AMOUNT = '0';
34
35
    /**
36
     * @var \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface
37
     */
38
    protected $moneyFacade;
39
40
    /**
41
     * @var \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface
42
     */
43
    protected $storeFacade;
44
45
    /**
46
     * @var array
47
     */
48
    protected static $paymentMethods = [
49
        AfterPayConfig::PAYMENT_METHOD_INVOICE => AfterPayConfig::PAYMENT_TYPE_INVOICE,
50
    ];
51
52
    /**
53
     * @var \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface
54
     */
55
    protected $priceToPayProvider;
56
57
    /**
58
     * @param \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface $moneyFacade
59
     * @param \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface $storeFacade
60
     * @param \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface $priceToPayProvider
61
     */
62
    public function __construct(
63
        AfterPayToMoneyFacadeInterface $moneyFacade,
64
        AfterPayToStoreFacadeInterface $storeFacade,
65
        PriceToPayProviderInterface $priceToPayProvider
66
    ) {
67
        $this->moneyFacade = $moneyFacade;
68
        $this->storeFacade = $storeFacade;
69
        $this->priceToPayProvider = $priceToPayProvider;
70
    }
71
72
    /**
73
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
74
     *
75
     * @return \Generated\Shared\Transfer\AfterPayAuthorizeRequestTransfer
76
     */
77
    public function orderToAuthorizeRequest(AfterPayCallTransfer $afterPayCallTransfer): AfterPayAuthorizeRequestTransfer
78
    {
79
        return (new AfterPayAuthorizeRequestTransfer())
80
            ->setPayment($this->buildPaymentRequestTransfer($afterPayCallTransfer))
81
            ->setCustomer($this->buildCustomerRequestTransfer($afterPayCallTransfer))
82
            ->setOrder($this->buildOrderWithItemsRequestTransfer($afterPayCallTransfer));
83
    }
84
85
    /**
86
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
87
     *
88
     * @return \Generated\Shared\Transfer\AfterPayCaptureRequestTransfer
89
     */
90
    public function orderToBaseCaptureRequest(AfterPayCallTransfer $afterPayCallTransfer): AfterPayCaptureRequestTransfer
91
    {
92
        $orderRequestTransfer = $this->buildOrderRequestTransfer($afterPayCallTransfer)
93
            ->setTotalGrossAmount(static::ZERO_AMOUNT);
94
95
        return (new AfterPayCaptureRequestTransfer())
96
            ->setOrderDetails($orderRequestTransfer);
97
    }
98
99
    /**
100
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
101
     *
102
     * @return \Generated\Shared\Transfer\AfterPayCancelRequestTransfer
103
     */
104
    public function orderToBaseCancelRequest(AfterPayCallTransfer $afterPayCallTransfer): AfterPayCancelRequestTransfer
105
    {
106
        $orderRequestTransfer = $this->buildOrderRequestTransfer($afterPayCallTransfer)
107
            ->setTotalGrossAmount(static::ZERO_AMOUNT);
108
109
        return (new AfterPayCancelRequestTransfer())
110
            ->setCancellationDetails($orderRequestTransfer);
111
    }
112
113
    /**
114
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
115
     *
116
     * @return \Generated\Shared\Transfer\AfterPayRefundRequestTransfer
117
     */
118
    public function orderToBaseRefundRequest(OrderTransfer $orderTransfer): AfterPayRefundRequestTransfer
119
    {
120
        return (new AfterPayRefundRequestTransfer())
121
            ->setIdSalesOrder($orderTransfer->getIdSalesOrder())
122
            ->setOrderNumber($orderTransfer->getOrderReference());
123
    }
124
125
    /**
126
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
127
     *
128
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer
129
     */
130
    public function orderItemToAfterPayItemRequest(ItemTransfer $itemTransfer): AfterPayRequestOrderItemTransfer
131
    {
132
        return $this->buildOrderItemRequestTransfer($itemTransfer);
133
    }
134
135
    /**
136
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
137
     *
138
     * @return \Generated\Shared\Transfer\AfterPayRequestCustomerTransfer
139
     */
140
    protected function buildCustomerRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestCustomerTransfer
141
    {
142
        $billingAddressTransfer = $afterPayCallTransfer->getBillingAddress();
143
144
        return (new AfterPayRequestCustomerTransfer())
145
            ->setFirstName($billingAddressTransfer->getFirstName())
146
            ->setLastName($billingAddressTransfer->getLastName())
147
            ->setConversationalLanguage($this->getStoreCountryIso2())
148
            ->setCustomerCategory(AfterPayConfig::API_CUSTOMER_CATEGORY_PERSON)
149
            ->setSalutation($billingAddressTransfer->getSalutation())
150
            ->setEmail($afterPayCallTransfer->getEmail())
151
            ->setAddress($this->buildCustomerBillingAddressRequestTransfer($afterPayCallTransfer));
152
    }
153
154
    /**
155
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
156
     *
157
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderTransfer
158
     */
159
    protected function buildOrderWithItemsRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestOrderTransfer
160
    {
161
        $orderRequestTransfer = $this->buildOrderRequestTransfer($afterPayCallTransfer);
162
163
        foreach ($afterPayCallTransfer->getItems() as $itemTransfer) {
164
            $orderRequestTransfer->addItem(
165
                $this->buildOrderItemRequestTransfer($itemTransfer)
166
            );
167
        }
168
169
        $orderRequestTransfer = $this->addExpensesToOrderRequestTransfer($orderRequestTransfer, $afterPayCallTransfer);
170
171
        return $orderRequestTransfer;
172
    }
173
174
    /**
175
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
176
     *
177
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderTransfer
178
     */
179
    protected function buildOrderRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestOrderTransfer
180
    {
181
        return (new AfterPayRequestOrderTransfer())
182
            ->setNumber($afterPayCallTransfer->getOrderReference())
183
            ->setTotalGrossAmount($this->getStringDecimalOrderGrossTotal($afterPayCallTransfer))
184
            ->setCurrency($afterPayCallTransfer->getCurrency());
185
    }
186
187
    /**
188
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
189
     *
190
     * @return \Generated\Shared\Transfer\AfterPayRequestPaymentTransfer
191
     */
192
    protected function buildPaymentRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestPaymentTransfer
193
    {
194
        return (new AfterPayRequestPaymentTransfer())
195
            ->setType(static::$paymentMethods[$afterPayCallTransfer->getPaymentMethod()]);
196
    }
197
198
    /**
199
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
200
     *
201
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer
202
     */
203
    protected function buildOrderItemRequestTransfer(ItemTransfer $itemTransfer): AfterPayRequestOrderItemTransfer
204
    {
205
        return (new AfterPayRequestOrderItemTransfer())
206
            ->setProductId($itemTransfer->getSku())
207
            ->setDescription($itemTransfer->getName())
208
            ->setGrossUnitPrice($this->getStringDecimalItemGrossUnitPrice($itemTransfer))
209
            ->setQuantity($itemTransfer->getQuantity())
210
            ->setVatAmount($this->getStringDecimalItemVatAmountPrice($itemTransfer))
211
            ->setVatPercent($itemTransfer->getTaxRate())
212
            ->setImageUrl($this->getImageUrlFromOrderItem($itemTransfer))
213
            ->setGroupId($itemTransfer->getGroupKey());
214
    }
215
216
    /**
217
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
218
     *
219
     * @return \Generated\Shared\Transfer\AfterPayRequestAddressTransfer
220
     */
221
    protected function buildCustomerBillingAddressRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestAddressTransfer
222
    {
223
        $customerAddressTransfer = $afterPayCallTransfer->getBillingAddress();
224
225
        return (new AfterPayRequestAddressTransfer())
226
            ->setCountryCode($customerAddressTransfer->getIso2Code())
227
            ->setStreet($customerAddressTransfer->getAddress1())
228
            ->setStreetNumber($customerAddressTransfer->getAddress2())
229
            ->setPostalCode($customerAddressTransfer->getZipCode())
230
            ->setPostalPlace($customerAddressTransfer->getCity());
231
    }
232
233
    /**
234
     * @return string
235
     */
236
    protected function getStoreCountryIso2(): string
237
    {
238
        return $this->storeFacade->getCurrentStore()->getName();
239
    }
240
241
    /**
242
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
243
     *
244
     * @return string
245
     */
246
    protected function getStringDecimalOrderGrossTotal(AfterPayCallTransfer $afterPayCallTransfer): string
247
    {
248
        $orderGrossTotal = $afterPayCallTransfer->getTotals()->getGrandTotal();
249
250
        return (string)$this->moneyFacade->convertIntegerToDecimal($orderGrossTotal);
251
    }
252
253
    /**
254
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
255
     *
256
     * @return string
257
     */
258
    protected function getStringDecimalOrderNetTotal(AfterPayCallTransfer $afterPayCallTransfer): string
259
    {
260
        $orderGrossTotal = $afterPayCallTransfer->getTotals()->getGrandTotal();
261
        $orderTaxTotal = $afterPayCallTransfer->getTotals()->getTaxTotal()->getAmount();
262
        $orderNetTotal = $orderGrossTotal - $orderTaxTotal;
263
264
        return (string)$this->moneyFacade->convertIntegerToDecimal($orderNetTotal);
265
    }
266
267
    /**
268
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
269
     *
270
     * @return string
271
     */
272
    protected function getStringDecimalItemGrossUnitPrice(ItemTransfer $itemTransfer): string
273
    {
274
        $itemUnitGrossPrice = $itemTransfer->getUnitPriceToPayAggregation();
275
276
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemUnitGrossPrice);
277
    }
278
279
    /**
280
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
281
     *
282
     * @return string
283
     */
284
    protected function getStringDecimalItemNetUnitPrice(ItemTransfer $itemTransfer): string
285
    {
286
        $itemUnitGrossPriceAmount = $itemTransfer->getUnitPriceToPayAggregation();
287
        $itemUnitTaxAmount = $itemTransfer->getUnitTaxAmountFullAggregation();
288
        $itemUnitNetAmount = $itemUnitGrossPriceAmount - $itemUnitTaxAmount;
289
290
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemUnitNetAmount);
291
    }
292
293
    /**
294
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
295
     *
296
     * @return string
297
     */
298
    protected function getStringDecimalItemVatAmountPrice(ItemTransfer $itemTransfer): string
299
    {
300
        $itemVatAmountPrice = $itemTransfer->getUnitTaxAmountFullAggregation();
301
302
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemVatAmountPrice);
303
    }
304
305
    /**
306
     * @param \Generated\Shared\Transfer\OrderTransfer $orderWithPaymentTransfer
307
     * @param \Generated\Shared\Transfer\AfterPayRequestOrderTransfer $orderRequestTransfer
308
     *
309
     * @return void
310
     */
311
    protected function addGiftcardItems(
312
        OrderTransfer $orderWithPaymentTransfer,
313
        AfterPayRequestOrderTransfer $orderRequestTransfer
314
    ): void {
315
        foreach ($this->getGiftcards($orderWithPaymentTransfer) as $index => $paymentTransfer) {
316
            $amount = (string)$this->moneyFacade
317
                ->convertIntegerToDecimal(static::NEGATIVE_MULTIPLIER * $paymentTransfer->getAmount());
318
319
            $orderRequestTransfer->addItem(
320
                (new AfterPayRequestOrderItemTransfer())
321
                    ->setProductId(static::GIFT_CARD_PROVIDER . $index)
322
                    ->setDescription(static::GIFT_CARD_PROVIDER . $index)
323
                    ->setGrossUnitPrice($amount)
324
                    ->setQuantity(1)
325
            );
326
        }
327
    }
328
329
    /**
330
     * @param \Generated\Shared\Transfer\OrderTransfer $orderWithPaymentTransfer
331
     *
332
     * @return \Generated\Shared\Transfer\PaymentTransfer[]
333
     */
334
    protected function getGiftcards(OrderTransfer $orderWithPaymentTransfer): array
335
    {
336
        $giftCardPayments = [];
337
        foreach ($orderWithPaymentTransfer->getPayments() as $paymentTransfer) {
338
            if ($paymentTransfer->getPaymentMethod() !== static::GIFT_CARD_PROVIDER) {
339
                continue;
340
            }
341
342
            $giftCardPayments[] = $paymentTransfer;
343
        }
344
345
        return $giftCardPayments;
346
    }
347
348
    /**
349
     * @param \Generated\Shared\Transfer\AfterPayRequestOrderTransfer $orderRequestTransfer
350
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
351
     *
352
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderTransfer
353
     */
354
    protected function addExpensesToOrderRequestTransfer(
355
        AfterPayRequestOrderTransfer $orderRequestTransfer,
356
        AfterPayCallTransfer $afterPayCallTransfer
357
    ): AfterPayRequestOrderTransfer {
358
        foreach ($afterPayCallTransfer->getExpenses() as $expenseTransfer) {
359
            if ($expenseTransfer->getSumPriceToPayAggregation() > 0) {
360
                $orderRequestTransfer->addItem(
361
                    $this->buildOrderExpenseRequestTransfer($expenseTransfer)
362
                );
363
            }
364
        }
365
366
        return $orderRequestTransfer;
367
    }
368
369
    /**
370
     * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
371
     *
372
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer
373
     */
374
    protected function buildOrderExpenseRequestTransfer(ExpenseTransfer $expenseTransfer): AfterPayRequestOrderItemTransfer
375
    {
376
        $item = (new AfterPayRequestOrderItemTransfer())
377
            ->setProductId($expenseTransfer->getType())
378
            ->setDescription($expenseTransfer->getName())
379
            ->setGrossUnitPrice($this->getStringDecimalExpenseGrossUnitPrice($expenseTransfer))
380
            ->setNetUnitPrice($this->getStringDecimalExpenseNetUnitPrice($expenseTransfer))
381
            ->setQuantity($expenseTransfer->getQuantity());
382
383
        return $item;
384
    }
385
386
    /**
387
     * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
388
     *
389
     * @return string
390
     */
391
    protected function getStringDecimalExpenseGrossUnitPrice(ExpenseTransfer $expenseTransfer): string
392
    {
393
        $expenseUnitGrossPrice = $expenseTransfer->getUnitPriceToPayAggregation();
394
395
        return (string)$this->moneyFacade->convertIntegerToDecimal($expenseUnitGrossPrice);
396
    }
397
398
    /**
399
     * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
400
     *
401
     * @return string
402
     */
403
    protected function getStringDecimalExpenseNetUnitPrice(ExpenseTransfer $expenseTransfer): string
404
    {
405
        $expenseUnitGrossPriceAmount = $expenseTransfer->getUnitPriceToPayAggregation();
406
        $expenseUnitTaxAmount = $expenseTransfer->getUnitTaxAmount();
407
        $expenseUnitNetAmount = $expenseUnitGrossPriceAmount - $expenseUnitTaxAmount;
408
409
        return (string)$this->moneyFacade->convertIntegerToDecimal($expenseUnitNetAmount);
410
    }
411
412
    /**
413
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
414
     *
415
     * @return string|null
416
     */
417
    protected function getImageUrlFromOrderItem(ItemTransfer $itemTransfer): ?string
418
    {
419
        foreach ($itemTransfer->getImages() as $imageTransfer) {
420
            $imageUrl = $imageTransfer->getExternalUrlSmall();
421
422
            if (!$this->hasImageUrlHttpProtocol($imageUrl)) {
423
                return 'http:' . $imageUrl;
424
            }
425
426
            return $imageUrl;
427
        }
428
429
        return null;
430
    }
431
432
    /**
433
     * @param string $url
434
     *
435
     * @return bool
436
     */
437
    protected function hasImageUrlHttpProtocol(string $url): bool
438
    {
439
        $hasImageHttpProtocolInUrl = strpos($url, 'http:') || strpos($url, 'https:');
440
441
        return $hasImageHttpProtocolInUrl !== false;
442
    }
443
}
444