Issues (456)

Business/Api/Mapper/OrderPaymentRequestMapper.php (1 issue)

1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\Ratepay\Business\Api\Mapper;
9
10
use Generated\Shared\Transfer\AddressTransfer;
11
use Generated\Shared\Transfer\OrderTransfer;
12
use Generated\Shared\Transfer\RatepayPaymentInitTransfer;
13
use Generated\Shared\Transfer\RatepayPaymentRequestTransfer;
14
use Orm\Zed\Sales\Persistence\SpySalesOrder;
15
use Orm\Zed\Sales\Persistence\SpySalesOrderAddress;
16
use Spryker\Shared\Shipment\ShipmentConstants;
0 ignored issues
show
The type Spryker\Shared\Shipment\ShipmentConstants 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 SprykerEco\Zed\Ratepay\Persistence\RatepayQueryContainerInterface;
18
19
class OrderPaymentRequestMapper extends BaseMapper
20
{
21
    /**
22
     * @var \Generated\Shared\Transfer\RatepayPaymentRequestTransfer
23
     */
24
    protected $ratepayPaymentRequestTransfer;
25
26
    /**
27
     * @var \Generated\Shared\Transfer\OrderTransfer
28
     */
29
    protected $orderTransfer;
30
31
    /**
32
     * @var \Generated\Shared\Transfer\OrderTransfer
33
     */
34
    protected $partialOrderTransfer;
35
36
    /**
37
     * @var \Orm\Zed\Sales\Persistence\SpySalesOrder
38
     */
39
    protected $orderEntity;
40
41
    /**
42
     * @var \Generated\Shared\Transfer\RatepayPaymentInitTransfer
43
     */
44
    protected $ratepayPaymentInitTransfer;
45
46
    /**
47
     * @var \SprykerEco\Zed\Ratepay\Persistence\RatepayQueryContainerInterface $queryContainer
48
     */
49
    protected $queryContainer;
50
51
    /**
52
     * @param \Generated\Shared\Transfer\RatepayPaymentRequestTransfer $ratepayPaymentRequestTransfer
53
     * @param \Generated\Shared\Transfer\RatepayPaymentInitTransfer $ratepayPaymentInitTransfer
54
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
55
     * @param \Generated\Shared\Transfer\OrderTransfer $partialOrderTransfer
56
     * @param \Orm\Zed\Sales\Persistence\SpySalesOrder $orderEntity
57
     * @param \SprykerEco\Zed\Ratepay\Persistence\RatepayQueryContainerInterface $queryContainer
58
     */
59
    public function __construct(
60
        RatepayPaymentRequestTransfer $ratepayPaymentRequestTransfer,
61
        RatepayPaymentInitTransfer $ratepayPaymentInitTransfer,
62
        OrderTransfer $orderTransfer,
63
        OrderTransfer $partialOrderTransfer,
64
        SpySalesOrder $orderEntity,
65
        RatepayQueryContainerInterface $queryContainer
66
    ) {
67
        $this->ratepayPaymentRequestTransfer = $ratepayPaymentRequestTransfer;
68
        $this->ratepayPaymentInitTransfer = $ratepayPaymentInitTransfer;
69
        $this->orderTransfer = $orderTransfer;
70
        $this->partialOrderTransfer = $partialOrderTransfer;
71
        $this->orderEntity = $orderEntity;
72
        $this->queryContainer = $queryContainer;
73
    }
74
75
    /**
76
     * @return void
77
     */
78
    public function map()
79
    {
80
        $this->mapPaymentRatepayEntity();
81
        $this->mapAddresses();
82
83
        $this->ratepayPaymentRequestTransfer
84
            ->setOrderId($this->orderEntity->getIdSalesOrder())
85
            ->setRatepayPaymentInit($this->ratepayPaymentInitTransfer)
86
            ->setCustomerEmail($this->orderTransfer->getEmail());
87
88
        $this->mapTotals();
89
        $this->mapExpenses();
90
        $this->mapBasketItems();
91
    }
92
93
    /**
94
     * @param \Orm\Zed\Sales\Persistence\SpySalesOrderAddress $addressEntity
95
     *
96
     * @return \Generated\Shared\Transfer\AddressTransfer
97
     */
98
    protected function getAddressTransfer(SpySalesOrderAddress $addressEntity)
99
    {
100
        $addressTransfer = new AddressTransfer();
101
        $addressTransfer
102
            ->setSalutation($addressEntity->getSalutation())
103
            ->setFirstName($addressEntity->getFirstName())
104
            ->setMiddleName($addressEntity->getMiddleName())
105
            ->setLastName($addressEntity->getLastName())
106
            ->setCompany($addressEntity->getCompany())
107
            ->setCity($addressEntity->getCity())
108
            ->setIso2Code($addressEntity->getCountry()->getIso2Code())
109
            ->setZipCode($addressEntity->getZipCode())
110
            ->setAddress1($addressEntity->getAddress1())
111
            ->setAddress2($addressEntity->getAddress2())
112
            ->setAddress3($addressEntity->getAddress3())
113
            ->setCellPhone($addressEntity->getCellPhone())
114
            ->setEmail($addressEntity->getEmail());
115
116
        return $addressTransfer;
117
    }
118
119
    /**
120
     * @return void
121
     */
122
    protected function mapAddresses()
123
    {
124
        $billingAddress = $this->getAddressTransfer($this->orderEntity->getBillingAddress());
125
        $shippingAddress = $this->getAddressTransfer($this->orderEntity->getShippingAddress());
126
127
        $this->ratepayPaymentRequestTransfer
128
            ->setBillingAddress($billingAddress)
129
            ->setShippingAddress($shippingAddress)
130
            ->setBankAccountHolder($billingAddress->getFirstName() . " " . $billingAddress->getLastName());
131
    }
132
133
    /**
134
     * @return void
135
     */
136
    protected function mapPaymentRatepayEntity()
137
    {
138
        if ($this->orderEntity->getSpyPaymentRatepays() &&
139
            count($this->orderEntity->getSpyPaymentRatepays()->getData())
140
        ) {
141
            $paymentRatepayEntity = $this->orderEntity->getSpyPaymentRatepays()->getFirst();
142
            $this->ratepayPaymentRequestTransfer
143
                ->setPaymentType($paymentRatepayEntity->getPaymentType())
144
                ->setCurrencyIso3($paymentRatepayEntity->getCurrencyIso3())
145
                ->setCustomerPhone($paymentRatepayEntity->getPhone())
146
                ->setGender($paymentRatepayEntity->getGender())
147
                ->setDateOfBirth($paymentRatepayEntity->getDateOfBirth("Y-m-d"))
148
                ->setIpAddress($paymentRatepayEntity->getIpAddress())
149
                ->setCustomerAllowCreditInquiry($paymentRatepayEntity->getCustomerAllowCreditInquiry())
150
151
                ->setBankAccountBic($paymentRatepayEntity->getBankAccountBic())
152
                ->setBankAccountIban($paymentRatepayEntity->getBankAccountIban())
153
154
                ->setDebitPayType($paymentRatepayEntity->getDebitPayType())
155
                ->setInstallmentGrandTotalAmount($paymentRatepayEntity->getInstallmentTotalAmount())
156
                ->setInstallmentNumberRates($paymentRatepayEntity->getInstallmentNumberRates())
157
                ->setInstallmentRate($paymentRatepayEntity->getInstallmentRate())
158
                ->setInstallmentLastRate($paymentRatepayEntity->getInstallmentLastRate())
159
                ->setInstallmentInterestRate($paymentRatepayEntity->getInstallmentInterestRate())
160
                ->setInstallmentPaymentFirstDay($paymentRatepayEntity->getInstallmentPaymentFirstDay());
161
        }
162
    }
163
164
    /**
165
     * @return void
166
     */
167
    protected function mapExpenses()
168
    {
169
        $maxTaxRate = 0;
170
        $expenses = $this->orderTransfer->getExpenses();
171
172
        foreach ($expenses as $expense) {
173
            $maxTaxRate = ($expense->getTaxRate() > $maxTaxRate) ? $expense->getTaxRate() : $maxTaxRate;
174
        }
175
176
        $this->ratepayPaymentRequestTransfer
177
            ->setShippingTaxRate($maxTaxRate);
178
    }
179
180
    /**
181
     * @return void
182
     */
183
    protected function mapTotals()
184
    {
185
        $totalsTransfer = $this->orderTransfer->requireTotals()->getTotals();
186
187
        $this->ratepayPaymentRequestTransfer
188
            ->setGrandTotal($totalsTransfer->requireGrandTotal()->getGrandTotal())
189
            ->setShippingExpenseTotal($this->getShippingExpenseTotal())
190
            ->setExpenseTotal($totalsTransfer->requireExpenseTotal()->getExpenseTotal());
191
    }
192
193
    /**
194
     * @return int
195
     */
196
    protected function getShippingExpenseTotal()
197
    {
198
        $shippingExpenses = 0;
199
        foreach ($this->orderTransfer->getExpenses() as $expenseTransfer) {
200
            if ($expenseTransfer->getType() === ShipmentConstants::SHIPMENT_EXPENSE_TYPE) {
201
                $shippingExpenses += $expenseTransfer->getUnitGrossPrice();
202
            }
203
        }
204
205
        return $shippingExpenses;
206
    }
207
208
    /**
209
     * @return void
210
     */
211
    protected function mapBasketItems()
212
    {
213
        $basketItems = $this->orderTransfer->requireItems()->getItems();
214
        $grouppedItems = [];
215
        $discountTaxRate = 0;
216
        foreach ($basketItems as $basketItem) {
217
            if (isset($grouppedItems[$basketItem->getGroupKey()])) {
218
                $grouppedItems[$basketItem->getGroupKey()]->setQuantity($grouppedItems[$basketItem->getGroupKey()]->getQuantity() + $basketItem->getQuantity());
219
            } else {
220
                $grouppedItems[$basketItem->getGroupKey()] = clone $basketItem;
221
            }
222
            if ($discountTaxRate < $basketItem->getTaxRate()) {
223
                $discountTaxRate = $basketItem->getTaxRate();
224
            }
225
        }
226
        $discountTotal = $this->partialOrderTransfer->getTotals()->getDiscountTotal();
227
        $this->ratepayPaymentRequestTransfer
228
            ->setDiscountTotal($discountTotal)
229
            ->setDiscountTaxRate($discountTaxRate);
230
231
        foreach ($grouppedItems as $basketItem) {
232
            $this->ratepayPaymentRequestTransfer->addItem($basketItem);
233
        }
234
    }
235
}
236