Completed
Push — master ( 4d3f02...0930b8 )
by Oleksandr
35s queued 15s
created

PaymentMethodFilter::isQuoteGrandTotalOutOfRange()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 2
nc 2
nop 1
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\Payment;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\AddressTransfer;
12
use Generated\Shared\Transfer\PaymentMethodsTransfer;
13
use Generated\Shared\Transfer\PaymentMethodTransfer;
14
use Generated\Shared\Transfer\QuoteTransfer;
15
use SprykerEco\Shared\Heidelpay\HeidelpayConfig as SharedHeidelpayConfig;
16
use SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface;
17
use SprykerEco\Zed\Heidelpay\HeidelpayConfig;
18
19
class PaymentMethodFilter implements PaymentMethodFilterInterface
20
{
21
    /**
22
     * @var \SprykerEco\Zed\Heidelpay\HeidelpayConfig
23
     */
24
    protected $config;
25
26
    /**
27
     * @var \SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface
28
     */
29
    protected $moneyFacade;
30
31
    /**
32
     * @param \SprykerEco\Zed\Heidelpay\HeidelpayConfig $config
33
     * @param \SprykerEco\Zed\Heidelpay\Dependency\Facade\HeidelpayToMoneyFacadeInterface $moneyFacade
34
     */
35
    public function __construct(
36
        HeidelpayConfig $config,
37
        HeidelpayToMoneyFacadeInterface $moneyFacade
38
    ) {
39
        $this->config = $config;
40
        $this->moneyFacade = $moneyFacade;
41
    }
42
43
    /**
44
     * @param \Generated\Shared\Transfer\PaymentMethodsTransfer $paymentMethodsTransfer
45
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
46
     *
47
     * @return \Generated\Shared\Transfer\PaymentMethodsTransfer
48
     */
49
    public function filterPaymentMethods(
50
        PaymentMethodsTransfer $paymentMethodsTransfer,
51
        QuoteTransfer $quoteTransfer
52
    ): PaymentMethodsTransfer {
53
54
        $result = new ArrayObject();
55
56
        foreach ($paymentMethodsTransfer->getMethods() as $paymentMethod) {
57
            if ($this->isPaymentMethodHeidelpayEasyCredit($paymentMethod) && !$this->isEasyCreditAllowed($quoteTransfer)) {
58
                continue;
59
            }
60
61
            $result->append($paymentMethod);
62
        }
63
64
        $paymentMethodsTransfer->setMethods($result);
65
66
        return $paymentMethodsTransfer;
67
    }
68
69
    /**
70
     * @param \Generated\Shared\Transfer\PaymentMethodTransfer $paymentMethodTransfer
71
     *
72
     * @return bool
73
     */
74
    protected function isPaymentMethodHeidelpayEasyCredit(PaymentMethodTransfer $paymentMethodTransfer): bool
75
    {
76
        return $paymentMethodTransfer->getMethodName() === SharedHeidelpayConfig::PAYMENT_METHOD_EASY_CREDIT;
77
    }
78
79
    /**
80
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
81
     *
82
     * @return bool
83
     */
84
    protected function isEasyCreditAllowed(QuoteTransfer $quoteTransfer): bool
85
    {
86
        $billingAddressData = $quoteTransfer->getBillingAddress()->toArrayRecursiveCamelCased();
87
        $shippingAddressData = $quoteTransfer->getShippingAddress()->toArrayRecursiveCamelCased();
88
        unset(
89
            $billingAddressData[AddressTransfer::IS_DEFAULT_BILLING],
90
            $shippingAddressData[AddressTransfer::IS_DEFAULT_BILLING],
91
            $billingAddressData[AddressTransfer::IS_DEFAULT_SHIPPING],
92
            $shippingAddressData[AddressTransfer::IS_DEFAULT_SHIPPING]
93
        );
94
95
        return in_array($quoteTransfer->getShippingAddress()->getIso2Code(), $this->config->getEasyCreditAllowedCountries(), true)
96
            && $this->isAddressCorrect($quoteTransfer)
97
            && $billingAddressData === $shippingAddressData
98
            && !$this->isQuoteGrandTotalOutOfRange($quoteTransfer);
99
    }
100
101
    /**
102
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
103
     *
104
     * @return bool
105
     */
106
    protected function isQuoteGrandTotalOutOfRange(QuoteTransfer $quoteTransfer): bool
107
    {
108
        $grandTotal = $this->moneyFacade->convertIntegerToDecimal($quoteTransfer->getTotals()->getGrandTotal());
109
110
        return (
111
            $grandTotal < $this->config->getEasycreditCriteriaGrandTotalLessThan()
112
            || $grandTotal > $this->config->getEasycreditCriteriaGrandTotalMoreThan()
113
        );
114
    }
115
116
    /**
117
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
118
     *
119
     * @return bool
120
     */
121
    protected function isAddressCorrect(QuoteTransfer $quoteTransfer): bool
122
    {
123
        $isRejectedShippingAddress = strpos(
124
            $quoteTransfer->getShippingAddress()->getAddress1(),
125
            $this->config->getEasycreditCriteriaRejectedDeliveryAddress()
126
        );
127
        $isRejectedBillingAddress = strpos(
128
            $quoteTransfer->getBillingAddress()->getAddress1(),
129
            $this->config->getEasycreditCriteriaRejectedDeliveryAddress()
130
        );
131
132
        return ($isRejectedShippingAddress === false && $isRejectedBillingAddress === false);
133
    }
134
}
135