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