Passed
Push — feature/eco-574/eco-2266-check... ( efd21d )
by Aleksey
08:13
created

buildCustomerRequestTransfer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 1
dl 0
loc 18
rs 9.8666
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\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...
21
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...
22
use SprykerEco\Shared\Afterpay\AfterpayConfig;
23
use SprykerEco\Shared\Afterpay\AfterpayConstants;
24
use SprykerEco\Zed\Afterpay\Business\Payment\Transaction\PriceToPayProviderInterface;
25
use SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface;
26
use SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToStoreInterface;
27
28
class OrderToRequestTransfer implements OrderToRequestTransferInterface
29
{
30
    public const NEGATIVE_MULTIPLIER = -1;
31
    public const GIFT_CARD_PROVIDER = 'GiftCard';
32
33
    /**
34
     * @var \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface
35
     */
36
    protected $moneyFacade;
37
38
    /**
39
     * @var \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToStoreInterface
40
     */
41
    protected $storeFacade;
42
43
    /**
44
     * @var array
45
     */
46
    protected static $paymentMethods = [
47
        AfterpayConfig::PAYMENT_METHOD_INVOICE => AfterpayConfig::PAYMENT_TYPE_INVOICE,
48
    ];
49
50
    /**
51
     * @var \SprykerEco\Zed\Afterpay\Business\Payment\Transaction\PriceToPayProviderInterface
52
     */
53
    protected $priceToPayProvider;
54
55
    /**
56
     * @param \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface $moneyFacade
57
     * @param \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToStoreInterface $storeFacade
58
     * @param \SprykerEco\Zed\Afterpay\Business\Payment\Transaction\PriceToPayProviderInterface $priceToPayProvider
59
     */
60
    public function __construct(
61
        AfterpayToMoneyInterface $moneyFacade,
62
        AfterpayToStoreInterface $storeFacade,
63
        PriceToPayProviderInterface $priceToPayProvider
64
    ) {
65
        $this->moneyFacade = $moneyFacade;
66
        $this->storeFacade = $storeFacade;
67
        $this->priceToPayProvider = $priceToPayProvider;
68
    }
69
70
    /**
71
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
72
     *
73
     * @return \Generated\Shared\Transfer\AfterpayAuthorizeRequestTransfer
74
     */
75
    public function orderToAuthorizeRequest(AfterpayCallTransfer $afterpayCallTransfer): AfterpayAuthorizeRequestTransfer
76
    {
77
        $requestTransfer = new AfterpayAuthorizeRequestTransfer();
78
79
        $requestTransfer
80
            ->setPayment(
81
                $this->buildPaymentRequestTransfer($afterpayCallTransfer)
82
            )
83
            ->setCustomer(
84
                $this->buildCustomerRequestTransfer($afterpayCallTransfer)
85
            )
86
            ->setOrder(
87
                $this->buildOrderWithItemsRequestTransfer($afterpayCallTransfer)
88
            );
89
90
        return $requestTransfer;
91
    }
92
93
    /**
94
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
95
     *
96
     * @return \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer
97
     */
98
    public function orderToBaseCaptureRequest(AfterpayCallTransfer $afterpayCallTransfer): AfterpayCaptureRequestTransfer
99
    {
100
        $requestTransfer = new AfterpayCaptureRequestTransfer();
101
102
        $requestTransfer
103
            ->setOrderDetails(
104
                $this->buildOrderRequestTransfer($afterpayCallTransfer)
105
                    ->setTotalGrossAmount(0)
106
                    ->setTotalNetAmount(0)
107
            );
108
109
        return $requestTransfer;
110
    }
111
112
    /**
113
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
114
     *
115
     * @return \Generated\Shared\Transfer\AfterpayCancelRequestTransfer
116
     */
117
    public function orderToBaseCancelRequest(AfterpayCallTransfer $afterpayCallTransfer): AfterpayCancelRequestTransfer
118
    {
119
        $requestTransfer = new AfterpayCancelRequestTransfer();
120
121
        $requestTransfer
122
            ->setCancellationDetails(
123
                $this->buildOrderRequestTransfer($afterpayCallTransfer)
124
                    ->setTotalGrossAmount(0)
125
                    ->setTotalNetAmount(0)
126
            );
127
128
        return $requestTransfer;
129
    }
130
131
    /**
132
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
133
     *
134
     * @return \Generated\Shared\Transfer\AfterpayRefundRequestTransfer
135
     */
136
    public function orderToBaseRefundRequest(OrderTransfer $orderTransfer): AfterpayRefundRequestTransfer
137
    {
138
        $refundRequestTransfer = new AfterpayRefundRequestTransfer();
139
140
        $refundRequestTransfer
141
            ->setIdSalesOrder($orderTransfer->getIdSalesOrder())
142
            ->setOrderNumber($orderTransfer->getOrderReference());
143
144
        return $refundRequestTransfer;
145
    }
146
147
    /**
148
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
149
     *
150
     * @return \Generated\Shared\Transfer\AfterpayRequestOrderItemTransfer
151
     */
152
    public function orderItemToAfterpayItemRequest(ItemTransfer $itemTransfer): AfterpayRequestOrderItemTransfer
153
    {
154
        return $this->buildOrderItemRequestTransfer($itemTransfer);
155
    }
156
157
    /**
158
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
159
     *
160
     * @return \Generated\Shared\Transfer\AfterpayRequestCustomerTransfer
161
     */
162
    protected function buildCustomerRequestTransfer(AfterpayCallTransfer $afterpayCallTransfer): AfterpayRequestCustomerTransfer
163
    {
164
        $billingAddressTransfer = $afterpayCallTransfer->getBillingAddress();
165
        $customerRequestTransfer = new AfterpayRequestCustomerTransfer();
166
167
        $customerRequestTransfer
168
            ->setFirstName($billingAddressTransfer->getFirstName())
169
            ->setLastName($billingAddressTransfer->getLastName())
170
            ->setConversationalLanguage($this->getStoreCountryIso2())
171
            ->setCustomerCategory(AfterpayConfig::API_CUSTOMER_CATEGORY_PERSON)
172
            ->setSalutation($billingAddressTransfer->getSalutation())
173
            ->setEmail($afterpayCallTransfer->getEmail());
174
175
        $customerRequestTransfer->setAddress(
176
            $this->buildCustomerBillingAddressRequestTransfer($afterpayCallTransfer)
177
        );
178
179
        return $customerRequestTransfer;
180
    }
181
182
    /**
183
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
184
     *
185
     * @return \Generated\Shared\Transfer\AfterpayRequestOrderTransfer
186
     */
187
    protected function buildOrderWithItemsRequestTransfer(AfterpayCallTransfer $afterpayCallTransfer): AfterpayRequestOrderTransfer
188
    {
189
        $orderRequestTransfer = $this->buildOrderRequestTransfer($afterpayCallTransfer);
190
191
        foreach ($afterpayCallTransfer->getItems() as $itemTransfer) {
192
            $orderRequestTransfer->addItem(
193
                $this->buildOrderItemRequestTransfer($itemTransfer)
194
            );
195
        }
196
197
        return $orderRequestTransfer;
198
    }
199
200
    /**
201
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
202
     *
203
     * @return \Generated\Shared\Transfer\AfterpayRequestOrderTransfer
204
     */
205
    protected function buildOrderRequestTransfer(AfterpayCallTransfer $afterpayCallTransfer): AfterpayRequestOrderTransfer
206
    {
207
        $orderRequestTransfer = new AfterpayRequestOrderTransfer();
208
        $orderRequestTransfer
209
            ->setNumber($afterpayCallTransfer->getOrderReference())
210
            ->setTotalGrossAmount($this->getStringDecimalOrderGrossTotal($afterpayCallTransfer))
211
            ->setTotalNetAmount($this->getStringDecimalOrderNetTotal($afterpayCallTransfer));
212
213
        return $orderRequestTransfer;
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
        $paymentMethod = $afterpayCallTransfer->getPaymentMethod();
224
225
        $requestPaymentTransfer = new AfterpayRequestPaymentTransfer();
226
        $requestPaymentTransfer->setType(static::$paymentMethods[$paymentMethod]);
227
228
        return $requestPaymentTransfer;
229
    }
230
231
    /**
232
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
233
     *
234
     * @return \Generated\Shared\Transfer\AfterpayRequestOrderItemTransfer
235
     */
236
    protected function buildOrderItemRequestTransfer(ItemTransfer $itemTransfer): AfterpayRequestOrderItemTransfer
237
    {
238
        $orderItemRequestTransfer = new AfterpayRequestOrderItemTransfer();
239
240
        $orderItemRequestTransfer
241
            ->setProductId($itemTransfer->getSku())
242
            ->setDescription($itemTransfer->getName())
243
            ->setGrossUnitPrice($this->getStringDecimalItemGrossUnitPrice($itemTransfer))
244
            ->setNetUnitPrice($this->getStringDecimalItemNetUnitPrice($itemTransfer))
245
            ->setQuantity($itemTransfer->getQuantity());
246
247
        return $orderItemRequestTransfer;
248
    }
249
250
    /**
251
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
252
     *
253
     * @return \Generated\Shared\Transfer\AfterpayRequestAddressTransfer
254
     */
255
    protected function buildCustomerBillingAddressRequestTransfer(AfterpayCallTransfer $afterpayCallTransfer): AfterpayRequestAddressTransfer
256
    {
257
        $customerAddressTransfer = $afterpayCallTransfer->getBillingAddress();
258
        $customerAddressRequestTransfer = new AfterpayRequestAddressTransfer();
259
260
        $customerAddressRequestTransfer
261
            ->setCountryCode($customerAddressTransfer->getIso2Code())
262
            ->setStreet($customerAddressTransfer->getAddress1())
263
            ->setStreetNumber($customerAddressTransfer->getAddress2())
264
            ->setPostalCode($customerAddressTransfer->getZipCode())
265
            ->setPostalPlace($customerAddressTransfer->getCity());
266
267
        return $customerAddressRequestTransfer;
268
    }
269
270
    /**
271
     * @return string
272
     */
273
    protected function getStoreCountryIso2(): string
274
    {
275
        return $this->storeFacade->getCurrentStore()->getName();
276
    }
277
278
    /**
279
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
280
     *
281
     * @return string
282
     */
283
    protected function getStringDecimalOrderGrossTotal(AfterpayCallTransfer $afterpayCallTransfer): string
284
    {
285
        $orderGrossTotal = (int)$afterpayCallTransfer->getTotals()->getGrandTotal();
286
287
        return (string)$this->moneyFacade->convertIntegerToDecimal($orderGrossTotal);
288
    }
289
290
    /**
291
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
292
     *
293
     * @return string
294
     */
295
    protected function getStringDecimalOrderNetTotal(AfterpayCallTransfer $afterpayCallTransfer): string
296
    {
297
        $orderGrossTotal = (int)$afterpayCallTransfer->getTotals()->getGrandTotal();
298
        $orderTaxTotal = (int)$afterpayCallTransfer->getTotals()->getTaxTotal()->getAmount();
299
        $orderNetTotal = (int)$orderGrossTotal - $orderTaxTotal;
300
301
        return (string)$this->moneyFacade->convertIntegerToDecimal($orderNetTotal);
302
    }
303
304
    /**
305
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
306
     *
307
     * @return string
308
     */
309
    protected function getStringDecimalItemGrossUnitPrice(ItemTransfer $itemTransfer): string
310
    {
311
        $itemUnitGrossPrice = (int)$itemTransfer->getUnitPriceToPayAggregation();
312
313
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemUnitGrossPrice);
314
    }
315
316
    /**
317
     * @param \Generated\Shared\Transfer\ItemTransfer $itemTransfer
318
     *
319
     * @return string
320
     */
321
    protected function getStringDecimalItemNetUnitPrice(ItemTransfer $itemTransfer): string
322
    {
323
        $itemUnitGrossPriceAmount = (int)$itemTransfer->getUnitPriceToPayAggregation();
324
        $itemUnitTaxAmount = (int)$itemTransfer->getUnitTaxAmountFullAggregation();
325
        $itemUnitNetAmount = $itemUnitGrossPriceAmount - $itemUnitTaxAmount;
326
327
        return (string)$this->moneyFacade->convertIntegerToDecimal($itemUnitNetAmount);
328
    }
329
330
    /**
331
     * @param \Generated\Shared\Transfer\OrderTransfer $orderWithPaymentTransfer
332
     * @param \Generated\Shared\Transfer\AfterpayRequestOrderTransfer $orderRequestTransfer
333
     *
334
     * @return void
335
     */
336
    protected function addGiftcardItems(
337
        OrderTransfer $orderWithPaymentTransfer,
338
        AfterpayRequestOrderTransfer $orderRequestTransfer
339
    ): void {
340
        foreach ($this->getGiftcards($orderWithPaymentTransfer) as $index => $paymentTransfer) {
341
            $orderItemRequestTransfer = new AfterpayRequestOrderItemTransfer();
342
            $amount = (string)$this->moneyFacade->convertIntegerToDecimal(static::NEGATIVE_MULTIPLIER * $paymentTransfer->getAmount());
343
344
            $orderItemRequestTransfer
345
                ->setProductId(static::GIFT_CARD_PROVIDER . $index)
346
                ->setDescription(static::GIFT_CARD_PROVIDER . $index)
347
                ->setGrossUnitPrice($amount)
348
                ->setQuantity(1);
349
350
            $orderRequestTransfer->addItem($orderItemRequestTransfer);
351
        }
352
    }
353
354
    /**
355
     * @param \Generated\Shared\Transfer\OrderTransfer $orderWithPaymentTransfer
356
     *
357
     * @return \Generated\Shared\Transfer\PaymentTransfer[]
358
     */
359
    protected function getGiftcards(OrderTransfer $orderWithPaymentTransfer): array
360
    {
361
        $giftCardPayments = [];
362
        foreach ($orderWithPaymentTransfer->getPayments() as $paymentTransfer) {
363
            if ($paymentTransfer->getPaymentMethod() !== static::GIFT_CARD_PROVIDER) {
364
                continue;
365
            }
366
367
            $giftCardPayments[] = $paymentTransfer;
368
        }
369
370
        return $giftCardPayments;
371
    }
372
}
373