Passed
Pull Request — master (#23)
by
unknown
05:19
created

addShippingFeeToOrderRequestTransfer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

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