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