QuoteToHeidelpayRequest::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\CustomerTransfer;
13
use Generated\Shared\Transfer\HeidelpayCustomerAddressTransfer;
14
use Generated\Shared\Transfer\HeidelpayCustomerPurchaseTransfer;
15
use Generated\Shared\Transfer\HeidelpayRequestTransfer;
16
use Generated\Shared\Transfer\HeidelpayRiskInformationTransfer;
17
use Generated\Shared\Transfer\QuoteTransfer;
18
use SprykerEco\Shared\Heidelpay\QuoteUniqueIdGenerator;
19
use SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface;
20
21
class QuoteToHeidelpayRequest implements QuoteToHeidelpayRequestInterface
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\QuoteTransfer $quoteTransfer
38
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
39
     *
40
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
41
     */
42
    public function map(QuoteTransfer $quoteTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
43
    {
44
        $heidelpayRequestTransfer = $this->mapCustomerAddress($quoteTransfer, $heidelpayRequestTransfer);
45
        $heidelpayRequestTransfer = $this->mapQuoteInformation($quoteTransfer, $heidelpayRequestTransfer);
46
        $heidelpayRequestTransfer = $this->mapCustomerInformation($quoteTransfer, $heidelpayRequestTransfer);
47
48
        return $heidelpayRequestTransfer;
49
    }
50
51
    /**
52
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
53
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
54
     *
55
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
56
     */
57
    protected function mapCustomerAddress(QuoteTransfer $quoteTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
58
    {
59
        $heidelpayRequestTransfer->setCustomerAddress(
60
            (new HeidelpayCustomerAddressTransfer())
61
                ->setCity($quoteTransfer->getBillingAddress()->getCity())
62
                ->setCompany($quoteTransfer->getBillingAddress()->getCompany())
63
                ->setCountry($quoteTransfer->getBillingAddress()->getIso2Code())
64
                ->setEmail($quoteTransfer->getCustomer()->getEmail())
65
                ->setFirstName($quoteTransfer->getBillingAddress()->getFirstName())
66
                ->setLastName($quoteTransfer->getBillingAddress()->getLastName())
67
                ->setState($quoteTransfer->getBillingAddress()->getState())
68
                ->setStreet($this->getFullStreetName($quoteTransfer->getBillingAddress()))
69
                ->setZip($quoteTransfer->getBillingAddress()->getZipCode())
70
        );
71
72
        return $heidelpayRequestTransfer;
73
    }
74
75
    /**
76
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
77
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
78
     *
79
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
80
     */
81
    protected function mapQuoteInformation(QuoteTransfer $quoteTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
82
    {
83
        $heidelpayRequestTransfer->setCustomerPurchase(
84
            (new HeidelpayCustomerPurchaseTransfer())
85
                ->setAmount($this->getDecimalQuoteAmount($quoteTransfer))
86
                ->setIdOrder($this->generateQuoteId($quoteTransfer))
87
        );
88
89
        return $heidelpayRequestTransfer;
90
    }
91
92
    /**
93
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
94
     * @param \Generated\Shared\Transfer\HeidelpayRequestTransfer $heidelpayRequestTransfer
95
     *
96
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
97
     */
98
    protected function mapCustomerInformation(QuoteTransfer $quoteTransfer, HeidelpayRequestTransfer $heidelpayRequestTransfer): HeidelpayRequestTransfer
99
    {
100
        $customerRegistrationDate = $this->findCustomerRegistrationDate($quoteTransfer->getCustomer());
101
102
        $heidelpayRequestTransfer->setRiskInformation(
103
            (new HeidelpayRiskInformationTransfer())
104
                ->setIsCustomerGuest((bool)$quoteTransfer->getCustomer()->getIsGuest())
105
                ->setCustomerSince($customerRegistrationDate)
106
                ->setCustomerId($quoteTransfer->getCustomer()->getIdCustomer())
107
        );
108
109
        return $heidelpayRequestTransfer;
110
    }
111
112
    /**
113
     * @param \Generated\Shared\Transfer\CustomerTransfer $customerTransfer
114
     *
115
     * @return string|null
116
     */
117
    protected function findCustomerRegistrationDate(CustomerTransfer $customerTransfer): ?string
118
    {
119
        $createdAtDate = $customerTransfer->getCreatedAt();
120
        $createdAtDateFormatted = $createdAtDate ? $this->formatDate($createdAtDate) : $createdAtDate;
121
122
        return $createdAtDateFormatted;
123
    }
124
125
    /**
126
     * @param string $date
127
     *
128
     * @return string
129
     */
130
    protected function formatDate(string $date): string
131
    {
132
        return (new DateTime($date))->format('Y-m-d');
133
    }
134
135
    /**
136
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
137
     *
138
     * @return string
139
     */
140
    protected function generateQuoteId(QuoteTransfer $quoteTransfer): string
141
    {
142
        return QuoteUniqueIdGenerator::getHashByCustomerEmailAndTotals($quoteTransfer);
143
    }
144
145
    /**
146
     * @param \Generated\Shared\Transfer\AddressTransfer $shippingAddressTransfer
147
     *
148
     * @return string
149
     */
150
    protected function getFullStreetName(AddressTransfer $shippingAddressTransfer): string
151
    {
152
        return sprintf('%s %s', $shippingAddressTransfer->getAddress1(), $shippingAddressTransfer->getAddress2());
153
    }
154
155
    /**
156
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
157
     *
158
     * @return int
159
     */
160
    protected function getQuoteAmount(QuoteTransfer $quoteTransfer): int
161
    {
162
        return $quoteTransfer->getTotals()->getGrandTotal();
163
    }
164
165
    /**
166
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
167
     *
168
     * @return float
169
     */
170
    protected function getDecimalQuoteAmount(QuoteTransfer $quoteTransfer): float
171
    {
172
        $quoteAmountInt = $quoteTransfer->getTotals()->getGrandTotal();
173
        $quoteAmountDecimal = $this->moneyFacade->convertIntegerToDecimal($quoteAmountInt);
174
175
        return $quoteAmountDecimal;
176
    }
177
}
178