Passed
Pull Request — master (#23)
by
unknown
09:00 queued 04:40
created

addShippingFeeToOrderRequestTransfer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 16
nc 1
nop 2
dl 0
loc 25
rs 9.7333
c 1
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
    protected const SALUTATION_MAP = [
39
        'Mr' => 'Mr',
40
        'Ms' => 'Miss',
41
        'Mrs' => 'Mrs',
42
        'Dr' => 'Mr',
43
    ];
44
45
    /**
46
     * @var \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface
47
     */
48
    protected $moneyFacade;
49
50
    /**
51
     * @var \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface
52
     */
53
    protected $storeFacade;
54
55
    /**
56
     * @var array
57
     */
58
    protected static $paymentMethods = [
59
        AfterPayConfig::PAYMENT_METHOD_INVOICE => AfterPayConfig::PAYMENT_TYPE_INVOICE,
60
    ];
61
62
    /**
63
     * @var \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface
64
     */
65
    protected $priceToPayProvider;
66
67
    /**
68
     * @param \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface $moneyFacade
69
     * @param \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface $storeFacade
70
     * @param \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface $priceToPayProvider
71
     */
72
    public function __construct(
73
        AfterPayToMoneyFacadeInterface $moneyFacade,
74
        AfterPayToStoreFacadeInterface $storeFacade,
75
        PriceToPayProviderInterface $priceToPayProvider
76
    ) {
77
        $this->moneyFacade = $moneyFacade;
78
        $this->storeFacade = $storeFacade;
79
        $this->priceToPayProvider = $priceToPayProvider;
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(static::SALUTATION_MAP[$billingAddressTransfer->getSalutation()] ?? 'Mr')
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
        $shippingTax = $afterPayCallTransfer->getTotals()->getTaxTotal()->getAmount() -
200
            $afterPayCallTransfer->getTotals()->getTaxTotal()->getItemsTotalTax();
201
202
        $shippingNet = $afterPayCallTransfer->getTotals()->getShipmentTotal() - $shippingTax;
203
        $shippingNetPercent = (int)round($shippingTax * 100 / $shippingNet);
204
205
        $orderRequestTransfer->addItem(
206
            (new AfterPayRequestOrderItemTransfer())
207
                ->setProductId(static::SHIPPING_FEE_PROVIDER)
208
                ->setDescription(static::SHIPPING_FEE_PROVIDER)
209
                ->setGrossUnitPrice($amount)
210
                ->setNetUnitPrice((string)$this->moneyFacade->convertIntegerToDecimal((int)$shippingNet))
211
                ->setVatAmount((string)$this->moneyFacade->convertIntegerToDecimal((int)$shippingTax))
212
                ->setVatPercent($shippingNetPercent)
213
                ->setQuantity(static::ORDER_ITEM_QUANTITY)
214
        );
215
216
        return $orderRequestTransfer;
217
    }
218
219
    /**
220
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
221
     *
222
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderTransfer
223
     */
224
    protected function buildOrderRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestOrderTransfer
225
    {
226
        return (new AfterPayRequestOrderTransfer())
227
            ->setNumber($afterPayCallTransfer->getOrderReference())
228
            ->setTotalNetAmount($this->getStringDecimalOrderNetTotal($afterPayCallTransfer))
229
            ->setTotalGrossAmount($this->getStringDecimalOrderGrossTotal($afterPayCallTransfer))
230
            ->setCurrency($afterPayCallTransfer->getCurrency());
231
    }
232
233
    /**
234
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
235
     *
236
     * @return \Generated\Shared\Transfer\AfterPayRequestPaymentTransfer
237
     */
238
    protected function buildPaymentRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestPaymentTransfer
239
    {
240
        return (new AfterPayRequestPaymentTransfer())
241
            ->setType(static::$paymentMethods[$afterPayCallTransfer->getPaymentMethod()] ?? null);
242
    }
243
244
    /**
245
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
246
     *
247
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer
248
     */
249
    protected function buildOrderItemRequestTransfer(ItemTransfer $itemTransfer): AfterPayRequestOrderItemTransfer
250
    {
251
        return (new AfterPayRequestOrderItemTransfer())
252
            ->setProductId($itemTransfer->getSku())
253
            ->setDescription($itemTransfer->getName())
254
            ->setGrossUnitPrice($this->getStringDecimalItemGrossUnitPrice($itemTransfer))
255
            ->setQuantity($itemTransfer->getQuantity())
256
            ->setNetUnitPrice($this->getStringDecimalItemNetUnitPrice($itemTransfer))
257
            ->setVatAmount($this->getStringDecimalItemVatAmountPrice($itemTransfer))
258
            ->setVatPercent($itemTransfer->getTaxRate())
259
            ->setGroupId($itemTransfer->getGroupKey());
260
    }
261
262
    /**
263
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
264
     *
265
     * @return \Generated\Shared\Transfer\AfterPayRequestAddressTransfer
266
     */
267
    protected function buildCustomerBillingAddressRequestTransfer(AfterPayCallTransfer $afterPayCallTransfer): AfterPayRequestAddressTransfer
268
    {
269
        $customerAddressTransfer = $afterPayCallTransfer->getBillingAddress();
270
271
        return (new AfterPayRequestAddressTransfer())
272
            ->setCountryCode($customerAddressTransfer->getIso2Code())
273
            ->setStreet($customerAddressTransfer->getAddress1())
274
            ->setStreetNumber($customerAddressTransfer->getAddress2())
275
            ->setPostalCode($customerAddressTransfer->getZipCode())
276
            ->setPostalPlace($customerAddressTransfer->getCity());
277
    }
278
279
    /**
280
     * @return string
281
     */
282
    protected function getStoreCountryIso2(): string
283
    {
284
        return $this->storeFacade->getCurrentStore()->getName();
285
    }
286
287
    /**
288
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
289
     *
290
     * @return string
291
     */
292
    protected function getStringDecimalOrderGrossTotal(AfterPayCallTransfer $afterPayCallTransfer): string
293
    {
294
        $orderGrossTotal = $afterPayCallTransfer->getTotals()->getGrandTotal();
295
296
        return (string)$this->moneyFacade->convertIntegerToDecimal($orderGrossTotal);
297
    }
298
299
    /**
300
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
301
     *
302
     * @return string
303
     */
304
    protected function getStringDecimalOrderNetTotal(AfterPayCallTransfer $afterPayCallTransfer): string
305
    {
306
        $orderGrossTotal = $afterPayCallTransfer->getTotals()->getGrandTotal();
307
        $orderTaxTotal = $afterPayCallTransfer->getTotals()->getTaxTotal()->getAmount();
308
        $orderNetTotal = $orderGrossTotal - $orderTaxTotal;
309
310
        return (string)$this->moneyFacade->convertIntegerToDecimal($orderNetTotal);
311
    }
312
313
    /**
314
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
315
     *
316
     * @return string
317
     */
318
    protected function getStringDecimalItemGrossUnitPrice(ItemTransfer $itemTransfer): string
319
    {
320
        $itemUnitGrossPrice = $itemTransfer->getUnitPriceToPayAggregation();
321
322
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemUnitGrossPrice);
323
    }
324
325
    /**
326
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
327
     *
328
     * @return string
329
     */
330
    protected function getStringDecimalItemNetUnitPrice(ItemTransfer $itemTransfer): string
331
    {
332
        $itemUnitGrossPriceAmount = $itemTransfer->getUnitPriceToPayAggregation();
333
        $itemUnitTaxAmount = $itemTransfer->getUnitTaxAmountFullAggregation();
334
        $itemUnitNetAmount = $itemUnitGrossPriceAmount - $itemUnitTaxAmount;
335
336
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemUnitNetAmount);
337
    }
338
339
    /**
340
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
341
     *
342
     * @return string
343
     */
344
    protected function getStringDecimalItemVatAmountPrice(ItemTransfer $itemTransfer): string
345
    {
346
        $itemVatAmountPrice = $itemTransfer->getUnitTaxAmountFullAggregation();
347
348
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemVatAmountPrice);
349
    }
350
351
    /**
352
     * @param \Generated\Shared\Transfer\AfterPayRequestOrderTransfer $orderRequestTransfer
353
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
354
     *
355
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderTransfer
356
     */
357
    protected function addGiftcardItems(
358
        AfterPayRequestOrderTransfer $orderRequestTransfer,
359
        AfterPayCallTransfer $afterPayCallTransfer
360
    ): AfterPayRequestOrderTransfer {
361
        foreach ($this->getGiftcards($afterPayCallTransfer) as $index => $paymentTransfer) {
362
            $amount = (string)$this->moneyFacade
363
                ->convertIntegerToDecimal(static::NEGATIVE_MULTIPLIER * $paymentTransfer->getAmount());
364
365
            $orderRequestTransfer->addItem(
366
                (new AfterPayRequestOrderItemTransfer())
367
                    ->setProductId(static::GIFT_CARD_PROVIDER . $index)
368
                    ->setDescription(static::GIFT_CARD_PROVIDER . $index)
369
                    ->setGrossUnitPrice($amount)
370
                    ->setQuantity(static::ORDER_ITEM_QUANTITY)
371
            );
372
        }
373
374
        return $orderRequestTransfer;
375
    }
376
377
    /**
378
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
379
     *
380
     * @return \Generated\Shared\Transfer\PaymentTransfer[]
381
     */
382
    protected function getGiftcards(AfterPayCallTransfer $afterPayCallTransfer): array
383
    {
384
        $giftCardPayments = [];
385
        foreach ($afterPayCallTransfer->getPayments() as $paymentTransfer) {
386
            if ($paymentTransfer->getPaymentMethod() !== static::GIFT_CARD_PROVIDER) {
387
                continue;
388
            }
389
390
            $giftCardPayments[] = $paymentTransfer;
391
        }
392
393
        return $giftCardPayments;
394
    }
395
396
    /**
397
     * @param \Generated\Shared\Transfer\AfterPayRequestOrderTransfer $orderRequestTransfer
398
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
399
     *
400
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderTransfer
401
     */
402
    protected function addExpensesToOrderRequestTransfer(
403
        AfterPayRequestOrderTransfer $orderRequestTransfer,
404
        AfterPayCallTransfer $afterPayCallTransfer
405
    ): AfterPayRequestOrderTransfer {
406
        foreach ($afterPayCallTransfer->getExpenses() as $expenseTransfer) {
407
            if ($expenseTransfer->getSumPriceToPayAggregation() > 0) {
408
                $orderRequestTransfer->addItem(
409
                    $this->buildOrderExpenseRequestTransfer($expenseTransfer)
410
                );
411
            }
412
        }
413
414
        return $orderRequestTransfer;
415
    }
416
417
    /**
418
     * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
419
     *
420
     * @return \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer
421
     */
422
    protected function buildOrderExpenseRequestTransfer(ExpenseTransfer $expenseTransfer): AfterPayRequestOrderItemTransfer
423
    {
424
        $item = (new AfterPayRequestOrderItemTransfer())
425
            ->setProductId($expenseTransfer->getType())
426
            ->setDescription($expenseTransfer->getName())
427
            ->setGrossUnitPrice($this->getStringDecimalExpenseGrossUnitPrice($expenseTransfer))
428
            ->setNetUnitPrice($this->getStringDecimalExpenseNetUnitPrice($expenseTransfer))
429
            ->setQuantity($expenseTransfer->getQuantity());
430
431
        return $item;
432
    }
433
434
    /**
435
     * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
436
     *
437
     * @return string
438
     */
439
    protected function getStringDecimalExpenseGrossUnitPrice(ExpenseTransfer $expenseTransfer): string
440
    {
441
        $expenseUnitGrossPrice = $expenseTransfer->getUnitPriceToPayAggregation();
442
443
        return (string)$this->moneyFacade->convertIntegerToDecimal($expenseUnitGrossPrice);
444
    }
445
446
    /**
447
     * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer
448
     *
449
     * @return string
450
     */
451
    protected function getStringDecimalExpenseNetUnitPrice(ExpenseTransfer $expenseTransfer): string
452
    {
453
        $expenseUnitGrossPriceAmount = $expenseTransfer->getUnitPriceToPayAggregation();
454
        $expenseUnitTaxAmount = $expenseTransfer->getUnitTaxAmount();
455
        $expenseUnitNetAmount = $expenseUnitGrossPriceAmount - $expenseUnitTaxAmount;
456
457
        return (string)$this->moneyFacade->convertIntegerToDecimal($expenseUnitNetAmount);
458
    }
459
}
460