OrderToHeidelpayRequest::mapCustomerAddress()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 2
dl 0
loc 16
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\Heidelpay\Business\Mapper;
9
10
use DateTime;
11
use Generated\Shared\Transfer\AddressTransfer;
12
use Generated\Shared\Transfer\HeidelpayCustomerAddressTransfer;
13
use Generated\Shared\Transfer\HeidelpayCustomerPurchaseTransfer;
14
use Generated\Shared\Transfer\HeidelpayInvoiceSecuredB2cTransfer;
15
use Generated\Shared\Transfer\HeidelpayRequestTransfer;
16
use Generated\Shared\Transfer\HeidelpayRiskInformationTransfer;
17
use Generated\Shared\Transfer\OrderTransfer;
18
use SprykerEco\Shared\Heidelpay\HeidelpayConfig;
19
use SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface;
20
21
class OrderToHeidelpayRequest implements OrderToHeidelpayRequestInterface
22
{
23
    /**
24
     * @var \SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface
25
     */
26
    protected $moneyFacade;
27
28
    /**
29
     * @param \SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface $moneyFacade
30
     */
31
    public function __construct(HeidelpayToMoneyFacadeInterface $moneyFacade)
32
    {
33
        $this->moneyFacade = $moneyFacade;
34
    }
35
36
    /**
37
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
38
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
39
     *
40
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
41
     */
42
    public function map(OrderTransfer $orderTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
43
    {
44
        $heidelpayRequestTransfer = $this->mapCustomerAddress($orderTransfer, $heidelpayRequestTransfer);
45
        $heidelpayRequestTransfer = $this->mapOrderInformation($orderTransfer, $heidelpayRequestTransfer);
46
        $heidelpayRequestTransfer = $this->mapOrderPayment($orderTransfer, $heidelpayRequestTransfer);
47
        $heidelpayRequestTransfer = $this->mapCustomerInformation($orderTransfer, $heidelpayRequestTransfer);
48
        $heidelpayRequestTransfer = $this->addAdditionalCustomerInformation($orderTransfer, $heidelpayRequestTransfer);
49
50
        return $heidelpayRequestTransfer;
51
    }
52
53
    /**
54
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
55
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
56
     *
57
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
58
     */
59
    protected function mapCustomerAddress(OrderTransfer $orderTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
60
    {
61
        $heidelpayRequestTransfer->setCustomerAddress(
62
            (new HeidelpayCustomerAddressTransfer())
63
                ->setCity($orderTransfer->getBillingAddress()->getCity())
64
                ->setCompany($orderTransfer->getBillingAddress()->getCompany())
65
                ->setCountry($orderTransfer->getBillingAddress()->getIso2Code())
66
                ->setEmail($orderTransfer->getEmail())
67
                ->setFirstName($orderTransfer->getBillingAddress()->getFirstName())
68
                ->setLastName($orderTransfer->getBillingAddress()->getLastName())
69
                ->setState($orderTransfer->getBillingAddress()->getState())
70
                ->setStreet($this->getFullStreetName($orderTransfer->getBillingAddress()))
71
                ->setZip($orderTransfer->getBillingAddress()->getZipCode())
72
        );
73
74
        return $heidelpayRequestTransfer;
75
    }
76
77
    /**
78
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
79
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
80
     *
81
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
82
     */
83
    protected function mapOrderInformation(OrderTransfer $orderTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
84
    {
85
        $heidelpayRequestTransfer->setCustomerPurchase(
86
            (new HeidelpayCustomerPurchaseTransfer())
87
                ->setAmount($this->getOrderGrandTotalInDecimal($orderTransfer))
88
                ->setIdOrder((string)$orderTransfer->getIdSalesOrder())
89
        );
90
91
        return $heidelpayRequestTransfer;
92
    }
93
94
    /**
95
     * @param \Generated\Shared\Transfer\AddressTransfer $shippingAddressTransfer
96
     *
97
     * @return string
98
     */
99
    protected function getFullStreetName(AddressTransfer $shippingAddressTransfer): string
100
    {
101
        return sprintf('%s %s', $shippingAddressTransfer->getAddress1(), $shippingAddressTransfer->getAddress2());
102
    }
103
104
    /**
105
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
106
     *
107
     * @return float
108
     */
109
    protected function getOrderGrandTotalInDecimal(OrderTransfer $orderTransfer): float
110
    {
111
        $orderAmountInt = $orderTransfer->getTotals()->getGrandTotal();
112
        $orderAmountDecimal = $this->moneyFacade->convertIntegerToDecimal($orderAmountInt);
113
114
        return $orderAmountDecimal;
115
    }
116
117
    /**
118
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
119
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
120
     *
121
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
122
     */
123
    protected function mapOrderPayment(OrderTransfer $orderTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
124
    {
125
        $heidelpayPayment = $orderTransfer->getHeidelpayPayment();
126
        $heidelpayRequestTransfer
127
            ->setIdBasket($heidelpayPayment->getIdBasket())
128
            ->setIdPaymentRegistration($heidelpayPayment->getIdPaymentRegistration())
129
            ->setIdPaymentReference($heidelpayPayment->getIdPaymentReference());
130
131
        return $heidelpayRequestTransfer;
132
    }
133
134
    /**
135
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
136
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
137
     *
138
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
139
     */
140
    protected function mapCustomerInformation(OrderTransfer $orderTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
141
    {
142
        if ($orderTransfer->getCustomer() === null) {
143
            return $heidelpayRequestTransfer
144
                ->setRiskInformation(
145
                    (new HeidelpayRiskInformationTransfer())
146
                        ->setIsCustomerGuest(true)
147
                );
148
        }
149
150
        $heidelpayRequestTransfer->setRiskInformation(
151
            (new HeidelpayRiskInformationTransfer())
152
                ->setIsCustomerGuest(false)
153
                ->setCustomerSince(
154
                    $this->formatDate($orderTransfer->getCustomer()->getCreatedAt())
155
                )
156
                ->setCustomerId($orderTransfer->getCustomer()->getIdCustomer())
157
        );
158
159
        return $heidelpayRequestTransfer;
160
    }
161
162
    /**
163
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
164
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $requestTransfer
165
     *
166
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
167
     */
168
    protected function addAdditionalCustomerInformation(
169
        OrderTransfer $orderTransfer,
170
        HeidelpayRequestTransfer $requestTransfer
171
    ): HeidelpayRequestTransfer {
172
        if ($orderTransfer->getHeidelpayPayment()->getPaymentMethod() !== HeidelpayConfig::PAYMENT_METHOD_INVOICE_SECURED_B2C) {
173
            return $requestTransfer;
174
        }
175
176
        $requestTransfer
177
            ->setInvoiceSecuredB2c(
178
                (new HeidelpayInvoiceSecuredB2cTransfer())
179
                    ->setSalutation($orderTransfer->getHeidelpayPayment()->getSalutation())
180
                    ->setDateOfBirth($orderTransfer->getHeidelpayPayment()->getDateOfBirth())
181
            );
182
183
        return $requestTransfer;
184
    }
185
186
    /**
187
     * @param string $date
188
     *
189
     * @return string
190
     */
191
    protected function formatDate(string $date): string
192
    {
193
        return (new DateTime($date))->format('Y-m-d');
194
    }
195
}
196