BasketRequestToHeidelpay::mapShipmentItems()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 31
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
eloc 23
c 4
b 0
f 0
dl 0
loc 31
rs 9.552
cc 4
nc 4
nop 2
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\Heidelpay\Business\Adapter\Mapper;
9
10
use Generated\Shared\Transfer\HeidelpayBasketRequestTransfer;
11
use Heidelpay\PhpBasketApi\Object\Basket;
12
use Heidelpay\PhpBasketApi\Object\BasketItem;
13
use SprykerEco\Zed\Heidelpay\HeidelpayConfigInterface;
14
15
class BasketRequestToHeidelpay implements BasketRequestToHeidelpayInterface
16
{
17
    public const BASKET_ITEM_GOODS_TYPE = 'goods';
18
    public const SHIPMENT_EXPENSE_TYPE = 'SHIPMENT_EXPENSE_TYPE';
19
    public const BASKET_ITEM_SHIPPING_TYPE = 'shipping';
20
21
    /**
22
     * @var \SprykerEco\Zed\Heidelpay\HeidelpayConfigInterface
23
     */
24
    protected $config;
25
26
    /**
27
     * @param \SprykerEco\Zed\Heidelpay\HeidelpayConfigInterface $config
28
     */
29
    public function __construct(
30
        HeidelpayConfigInterface $config
31
    ) {
32
        $this->config = $config;
33
    }
34
35
    /**
36
     * @param \Generated\Shared\Transfer\HeidelpayBasketRequestTransfer $requestTransfer
37
     * @param \Heidelpay\PhpBasketApi\Object\Basket $heidelpayBasket
38
     *
39
     * @return void
40
     */
41
    public function map(HeidelpayBasketRequestTransfer $requestTransfer, Basket $heidelpayBasket): void
42
    {
43
        $heidelpayBasket
44
            ->setAmountTotalNet($requestTransfer->getTotals()->getNetTotal())
45
            ->setAmountTotalVat($requestTransfer->getTotals()->getTaxTotal()->getAmount())
46
            ->setCurrencyCode($requestTransfer->getCurrency()->getCode());
47
48
        $this->mapBasketItems($requestTransfer, $heidelpayBasket);
49
        $this->mapShipmentItems($requestTransfer, $heidelpayBasket);
50
    }
51
52
    /**
53
     * @param \Generated\Shared\Transfer\HeidelpayBasketRequestTransfer $requestTransfer
54
     * @param \Heidelpay\PhpBasketApi\Object\Basket $heidelpayBasket
55
     *
56
     * @return void
57
     */
58
    protected function mapBasketItems(HeidelpayBasketRequestTransfer $requestTransfer, Basket $heidelpayBasket): void
59
    {
60
        $position = 1;
61
        $isSplitPaymentEnabled = $this->config->getIsSplitPaymentEnabledKey();
62
63
        foreach ($requestTransfer->getItems() as $itemTransfer) {
64
            $basketItem = (new BasketItem())
65
                ->setPosition($position++)
66
                ->setBasketItemReferenceId($itemTransfer->getSku() . $position)
67
                ->setArticleId($itemTransfer->getSku())
68
                ->setTitle($itemTransfer->getName())
69
                ->setDescription($itemTransfer->getDescription())
70
                ->setType(static::BASKET_ITEM_GOODS_TYPE)
71
                ->setQuantity($itemTransfer->getQuantity())
72
                ->setVat($itemTransfer->getTaxRate())
73
                ->setAmountPerUnit($itemTransfer->getUnitPriceToPayAggregation())
74
                ->setAmountNet($itemTransfer->getSumPriceToPayAggregation() - $itemTransfer->getSumTaxAmount())
75
                ->setAmountGross($itemTransfer->getSumPriceToPayAggregation())
76
                ->setAmountVat($itemTransfer->getSumTaxAmountFullAggregation());
77
78
            if ($isSplitPaymentEnabled) {
79
                $basketItem
80
                    ->setChannel($itemTransfer->getHeidelpayItemChannelId())
81
                    ->setIsMarketplaceItem($itemTransfer->getHeidelpayItemChannelId() !== null);
82
            }
83
84
            $heidelpayBasket->addBasketItem($basketItem);
85
        }
86
    }
87
88
    /**
89
     * @param \Generated\Shared\Transfer\HeidelpayBasketRequestTransfer $requestTransfer
90
     * @param \Heidelpay\PhpBasketApi\Object\Basket $heidelpayBasket
91
     *
92
     * @return void
93
     */
94
    protected function mapShipmentItems(HeidelpayBasketRequestTransfer $requestTransfer, Basket $heidelpayBasket): void
95
    {
96
        $position = $requestTransfer->getItems()->count() + 1;
97
        $isSplitPaymentEnabled = $this->config->getIsSplitPaymentEnabledKey();
98
99
        foreach ($requestTransfer->getExpenses() as $expenseTransfer) {
100
            if ($expenseTransfer->getType() !== static::SHIPMENT_EXPENSE_TYPE) {
101
                continue;
102
            }
103
104
            $basketItem = (new BasketItem())
105
                ->setPosition($position++)
106
                ->setBasketItemReferenceId($expenseTransfer->getName() . $position)
107
                ->setArticleId($expenseTransfer->getName())
108
                ->setChannel($expenseTransfer->getHeidelpayItemChannelId())
109
                ->setTitle($expenseTransfer->getName())
110
                ->setType(static::BASKET_ITEM_SHIPPING_TYPE)
111
                ->setQuantity($expenseTransfer->getQuantity())
112
                ->setVat($expenseTransfer->getTaxRate())
113
                ->setAmountPerUnit($expenseTransfer->getUnitPriceToPayAggregation())
114
                ->setAmountNet(max($expenseTransfer->getSumPriceToPayAggregation() - $expenseTransfer->getSumDiscountAmountAggregation() - $expenseTransfer->getSumTaxAmount(), 0))
115
                ->setAmountGross($expenseTransfer->getSumPriceToPayAggregation())
116
                ->setAmountVat($expenseTransfer->getSumTaxAmount());
117
118
            if ($isSplitPaymentEnabled) {
119
                $basketItem
120
                    ->setChannel($expenseTransfer->getHeidelpayItemChannelId())
121
                    ->setIsMarketplaceItem($expenseTransfer->getHeidelpayItemChannelId() !== null);
122
            }
123
124
            $heidelpayBasket->addBasketItem($basketItem);
125
        }
126
    }
127
}
128