Passed
Push — master ( e960b8...8ab9a9 )
by
unknown
53s queued 18s
created

SafeInvoice::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 19
dl 0
loc 23
rs 10
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
/**
4
 * PAYONE Magento 2 Connector is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU Lesser General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * PAYONE Magento 2 Connector is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with PAYONE Magento 2 Connector. If not, see <http://www.gnu.org/licenses/>.
16
 *
17
 * PHP version 5
18
 *
19
 * @category  Payone
20
 * @package   Payone_Magento2_Plugin
21
 * @author    FATCHIP GmbH <[email protected]>
22
 * @copyright 2003 - 2016 Payone GmbH
23
 * @license   <http://www.gnu.org/licenses/> GNU Lesser General Public License
24
 * @link      http://www.payone.de
25
 */
26
27
namespace Payone\Core\Model\Methods;
28
29
use Payone\Core\Model\PayoneConfig;
30
use Magento\Sales\Model\Order;
0 ignored issues
show
Bug introduced by
The type Magento\Sales\Model\Order 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...
31
use Magento\Framework\DataObject;
0 ignored issues
show
Bug introduced by
The type Magento\Framework\DataObject 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...
32
33
/**
34
 * Model for safe invoice payment method
35
 */
36
class SafeInvoice extends PayoneMethod
37
{
38
    /**
39
     * Payment method code
40
     *
41
     * @var string
42
     */
43
    protected $_code = PayoneConfig::METHOD_SAFE_INVOICE;
44
45
    /**
46
     * Clearingtype for PAYONE authorization request
47
     *
48
     * @var string
49
     */
50
    protected $sClearingtype = 'rec';
51
52
    /**
53
     * Determines if the invoice information has to be added
54
     * to the authorization-request
55
     *
56
     * @var bool
57
     */
58
    protected $blNeedsProductInfo = true;
59
60
    /**
61
     * Payment ban entity
62
     *
63
     * @var \Payone\Core\Model\ResourceModel\PaymentBan
64
     */
65
    protected $paymentBan;
66
67
    /**
68
     * Payment ban duration in hours
69
     *
70
     * @var int
71
     */
72
    protected $iBanDuration = 24;
73
74
    /**
75
     * Constructor
76
     *
77
     * @param \Magento\Framework\Model\Context                        $context
78
     * @param \Magento\Framework\Registry                             $registry
79
     * @param \Magento\Framework\Api\ExtensionAttributesFactory       $extensionFactory
80
     * @param \Magento\Framework\Api\AttributeValueFactory            $customAttrFactory
81
     * @param \Magento\Payment\Helper\Data                            $paymentData
82
     * @param \Magento\Framework\App\Config\ScopeConfigInterface      $scopeConfig
83
     * @param \Magento\Payment\Model\Method\Logger                    $logger
84
     * @param \Payone\Core\Helper\Toolkit                             $toolkitHelper
85
     * @param \Payone\Core\Helper\Shop                                $shopHelper
86
     * @param \Magento\Framework\Url                                  $url
87
     * @param \Magento\Checkout\Model\Session                         $checkoutSession
88
     * @param \Payone\Core\Model\Api\Request\Debit                    $debitRequest
89
     * @param \Payone\Core\Model\Api\Request\Capture                  $captureRequest
90
     * @param \Payone\Core\Model\Api\Request\Authorization            $authorizationRequest
91
     * @param \Payone\Core\Model\ResourceModel\SavedPaymentData       $savedPaymentData
92
     * @param \Payone\Core\Model\ResourceModel\PaymentBan             $paymentBan
93
     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
94
     * @param \Magento\Framework\Data\Collection\AbstractDb           $resourceCollection
95
     * @param array                                                   $data
96
     */
97
    public function __construct(
98
        \Magento\Framework\Model\Context $context,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Model\Context 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...
99
        \Magento\Framework\Registry $registry,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Registry 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...
100
        \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Api\ExtensionAttributesFactory 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...
101
        \Magento\Framework\Api\AttributeValueFactory $customAttrFactory,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Api\AttributeValueFactory 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...
102
        \Magento\Payment\Helper\Data $paymentData,
0 ignored issues
show
Bug introduced by
The type Magento\Payment\Helper\Data 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...
103
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\App\Config\ScopeConfigInterface 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...
104
        \Magento\Payment\Model\Method\Logger $logger,
0 ignored issues
show
Bug introduced by
The type Magento\Payment\Model\Method\Logger 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...
105
        \Payone\Core\Helper\Toolkit $toolkitHelper,
106
        \Payone\Core\Helper\Shop $shopHelper,
107
        \Magento\Framework\Url $url,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Url 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...
108
        \Magento\Checkout\Model\Session $checkoutSession,
0 ignored issues
show
Bug introduced by
The type Magento\Checkout\Model\Session 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...
109
        \Payone\Core\Model\Api\Request\Debit $debitRequest,
110
        \Payone\Core\Model\Api\Request\Capture $captureRequest,
111
        \Payone\Core\Model\Api\Request\Authorization $authorizationRequest,
112
        \Payone\Core\Model\ResourceModel\SavedPaymentData $savedPaymentData,
113
        \Payone\Core\Model\ResourceModel\PaymentBan $paymentBan,
114
        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Model\...eModel\AbstractResource 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...
115
        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Data\Collection\AbstractDb 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...
116
        array $data = []
117
    ) {
118
        parent::__construct($context, $registry, $extensionFactory, $customAttrFactory, $paymentData, $scopeConfig, $logger, $toolkitHelper, $shopHelper, $url, $checkoutSession, $debitRequest, $captureRequest, $authorizationRequest, $savedPaymentData, $resource, $resourceCollection, $data);
119
        $this->paymentBan = $paymentBan;
120
    }
121
122
    /**
123
     * @param Order $oOrder
124
     * @return string|false
125
     */
126
    protected function getBirthday(Order $oOrder)
127
    {
128
        $sDob = false;
129
        if (!empty($oOrder->getCustomerDob())) {
130
            $sDob = $oOrder->getCustomerDob();
131
        } elseif (!empty($this->getInfoInstance()->getAdditionalInformation('dob'))) {
132
            $sDob = $this->getInfoInstance()->getAdditionalInformation('dob');
133
        }
134
135
        if (!empty($sDob)) {
136
            $iDobTime = strtotime($sDob);
137
            if ($iDobTime !== false) {
138
                $sDob = date('Ymd', $iDobTime);
139
            }
140
        }
141
        return $sDob;
142
    }
143
144
    /**
145
     * Return parameters specific to this payment type
146
     *
147
     * @param  Order $oOrder
148
     * @return array
149
     */
150
    public function getPaymentSpecificParameters(Order $oOrder)
151
    {
152
        $aParams = ['clearingsubtype' => 'POV'];
153
154
        $sDob = $this->getBirthday($oOrder);
155
        if ($sDob) {
156
            $aParams['birthday'] = $sDob;
157
        }
158
159
        $sBusinessrelation = 'b2c';
160
        if (!empty($oOrder->getBillingAddress()->getCompany())) {
161
            $sBusinessrelation = 'b2b';
162
        }
163
        $aParams['businessrelation'] = $sBusinessrelation;
164
165
        return $aParams;
166
    }
167
168
    /**
169
     * Returns formatted birthday if possible
170
     *
171
     * @param  DataObject $data
172
     * @return string|false
173
     */
174
    protected function getFormattedBirthday(DataObject $data)
175
    {
176
        $sFormattedDob = false;
177
178
        $sBirthday = $this->toolkitHelper->getAdditionalDataEntry($data, 'birthday');
179
        $sBirthmonth = $this->toolkitHelper->getAdditionalDataEntry($data, 'birthmonth');
180
        $sBirthyear = $this->toolkitHelper->getAdditionalDataEntry($data, 'birthyear');
181
        if ($sBirthday && $sBirthmonth && $sBirthyear) {
182
            $sFormattedDob = $sBirthyear.'-'.$sBirthmonth.'-'.$sBirthday;
183
        }
184
        return $sFormattedDob;
185
    }
186
187
    /**
188
     * Add the checkout-form-data to the checkout session
189
     *
190
     * @param  DataObject $data
191
     * @return $this
192
     */
193
    public function assignData(DataObject $data)
194
    {
195
        parent::assignData($data);
196
197
        $sFormattedDob = $this->getFormattedBirthday($data);
198
        if ($sFormattedDob !== false) {
199
            $oInfoInstance = $this->getInfoInstance();
200
            $oInfoInstance->setAdditionalInformation('dob', $sFormattedDob);
201
        }
202
        return $this;
203
    }
204
205
    /**
206
     * Perform certain actions with the response
207
     *
208
     * @param  array $aResponse
209
     * @param  Order $oOrder
210
     * @param  float $amount
211
     * @return array
212
     */
213
    protected function handleResponse($aResponse, Order $oOrder, $amount)
214
    {
215
        $aResponse = parent::handleResponse($aResponse, $oOrder, $amount);
216
        if (isset($aResponse['status']) && $aResponse['status'] == 'ERROR'
217
            && isset($aResponse['errorcode']) && $aResponse['errorcode'] == '351'
218
        ) {
219
            if (!empty($oOrder->getCustomerId())) {
220
                $this->paymentBan->addPaymentBan($this->getCode(), $oOrder->getCustomerId(), $this->iBanDuration);
221
            } else { // guest checkout
222
                $aBans = $this->checkoutSession->getPayonePaymentBans();
223
                if (!$aBans) {
224
                    $aBans = [];
225
                }
226
                $aBans[$this->getCode()] = $this->paymentBan->getBanEndDate($this->iBanDuration);
227
                $this->checkoutSession->setPayonePaymentBans($aBans);
228
            }
229
        }
230
        return $aResponse;
231
    }
232
}
233