Issues (112)

Block/Product/Simulator.php (8 issues)

1
<?php
2
3
namespace Pagantis\Pagantis\Block\Product;
4
5
use Magento\Backend\Block\Template\Context;
6
use Magento\Catalog\Model\Category;
7
use Magento\Catalog\Model\Product;
8
use Magento\Framework\Registry;
9
use Magento\Framework\View\Element\Template;
10
use Pagantis\Pagantis\Helper\ExtraConfig;
11
use Magento\Framework\Locale\Resolver;
12
use Zend\Db\Sql\Ddl\Column\Boolean;
13
14
/**
15
 * Class Simulator
16
 * @package Pagantis\Pagantis\Block\Product
17
 */
18
class Simulator extends Template
19
{
20
    const PROMOTIONS_CATEGORY = 'pagantis-promotion-product';
21
22
    /**
23
     * @var bool
24
     */
25
    protected $enabled;
26
27
    /**
28
     * @var bool
29
     */
30
    protected $enabled_4x;
31
32
    /**
33
     * @var bool
34
     */
35
    protected $enabled_12x;
36
37
    /**
38
     * @var string
39
     */
40
    protected $publicKey;
41
42
    /**
43
     * @var string
44
     */
45
    protected $publicKey_4x;
46
47
    /**
48
     * @var string
49
     */
50
    protected $productSimulator;
51
52
    /**
53
     * @var string
54
     */
55
    protected $promotionProductExtra;
56
57
    /**
58
     * @var float
59
     */
60
    protected $minAmount;
61
62
    /**
63
     * @var float
64
     */
65
    protected $maxAmount;
66
67
    /**
68
     * @var float
69
     */
70
    protected $minAmount4x;
71
72
    /**
73
     * @var float
74
     */
75
    protected $maxAmount4x;
76
77
    /**
78
     * @var Product
79
     */
80
    protected $product;
81
82
    /**
83
     * @var int
84
     */
85
    protected $minInstallments;
86
87
    /**
88
     * @var string
89
     */
90
    protected $priceSelector;
91
92
    /**
93
     * @var string
94
     */
95
    protected $quantitySelector;
96
97
    /**
98
     * @var String
99
     */
100
    protected $positionSelector;
101
102
    /**
103
     * @var Registry
104
     */
105
    protected $registry;
106
107
    /**
108
     * @var Config
0 ignored issues
show
The type Pagantis\Pagantis\Block\Product\Config 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
     */
110
    protected $extraConfig;
111
112
    /**
113
     * @var String
114
     */
115
    protected $simulatorType;
116
117
    /**
118
     * @var String
119
     */
120
    protected $store;
121
122
    /**
123
     * @var Boolean
124
     */
125
    protected $promoted;
126
127
    /**
128
     * @var String
129
     */
130
    protected $promotedMessage;
131
132
    /**
133
     * @var String
134
     */
135
    protected $thousandSeparator;
136
137
    /**
138
     * @var String
139
     */
140
    protected $decimalSeparator;
141
142
    /**
143
     * @var String
144
     */
145
    protected $destinationSim;
146
147
    /**
148
     * Simulator constructor.
149
     *
150
     * @param Context        $context
151
     * @param Registry       $registry
152
     * @param ExtraConfig    $extraConfig
153
     * @param Resolver $store
154
     * @param array          $data
155
     */
156
    public function __construct(
157
        Context $context,
158
        Registry $registry,
159
        ExtraConfig $extraConfig,
160
        Resolver $store,
161
        array $data = []
162
    ) {
163
        parent::__construct($context, $data);
164
        $this->registry = $registry;
165
        $this->store = $store;
0 ignored issues
show
Documentation Bug introduced by
It seems like $store of type Magento\Framework\Locale\Resolver is incompatible with the declared type string of property $store.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
166
        /** @var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig */
167
        $scopeConfig = $this->_scopeConfig;
168
        $config = $scopeConfig->getValue('payment/pagantis');
169
170
        $this->enabled = $config['active'];
171
        $this->enabled_12x = $config['active_12x'];
172
        $this->enabled_4x = $config['active_4x'];
173
        $this->publicKey = isset($config['pagantis_public_key']) ? $config['pagantis_public_key'] : '';
174
        $this->publicKey_4x = isset($config['pagantis_public_key_4x']) ? $config['pagantis_public_key_4x'] : '';
175
        $this->productSimulator = $config['product_simulator'];
176
177
        $this->extraConfig = $extraConfig->getExtraConfig();
0 ignored issues
show
Documentation Bug introduced by
It seems like $extraConfig->getExtraConfig() of type array or array is incompatible with the declared type Pagantis\Pagantis\Block\Product\Config of property $extraConfig.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
178
        $this->minAmount = $this->extraConfig['PAGANTIS_DISPLAY_MIN_AMOUNT'];
179
        $this->maxAmount = $this->extraConfig['PAGANTIS_DISPLAY_MAX_AMOUNT'];
180
        $this->minAmount4x = $this->extraConfig['PAGANTIS_DISPLAY_MIN_AMOUNT_4x'];
181
        $this->maxAmount4x = $this->extraConfig['PAGANTIS_DISPLAY_MAX_AMOUNT_4x'];
182
        $this->minInstallments = $this->extraConfig['PAGANTIS_SIMULATOR_START_INSTALLMENTS'];
183
        $this->priceSelector = $this->extraConfig['PAGANTIS_SIMULATOR_CSS_PRICE_SELECTOR'];
184
        $this->quantitySelector = $this->extraConfig['PAGANTIS_SIMULATOR_CSS_QUANTITY_SELECTOR'];
185
        $this->positionSelector = $this->extraConfig['PAGANTIS_SIMULATOR_CSS_POSITION_SELECTOR'];
186
        $this->simulatorType = $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_TYPE'];
187
        $this->promotedMessage = $this->extraConfig['PAGANTIS_PROMOTION_EXTRA'];
188
        $this->thousandSeparator = $this->extraConfig['PAGANTIS_SIMULATOR_THOUSANDS_SEPARATOR'];
189
        $this->decimalSeparator = $this->extraConfig['PAGANTIS_SIMULATOR_DECIMAL_SEPARATOR'];
190
        $this->destinationSim = $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_SITUATION'];
191
192
        $this->promoted = $this->isProductInPromotion();
0 ignored issues
show
Documentation Bug introduced by
It seems like $this->isProductInPromotion() of type boolean is incompatible with the declared type Zend\Db\Sql\Ddl\Column\Boolean of property $promoted.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
193
    }
194
195
    /**
196
     * @return string
197
     */
198
    public function getSimulatorMessage()
199
    {
200
        return sprintf(__("or 4 installments of %s€, without fees, with "), $this->getFinalPrice4x());
201
    }
202
203
    /**
204
     * @return string
205
     */
206
    public function getLocale()
207
    {
208
        return strstr($this->store->getLocale(), '_', true);
209
    }
210
211
    /**
212
     * @return string
213
     */
214
    public function getCountry()
215
    {
216
        return strstr($this->store->getLocale(), '_', true);
217
    }
218
219
    /**
220
     * @param $locale
221
     *
222
     * @return bool
223
     */
224
    public function getAllowedCountry($locale)
225
    {
226
        $locale = strtolower($locale);
227
        $allowedCountries = unserialize($this->extraConfig['PAGANTIS_ALLOWED_COUNTRIES']);
228
        return (in_array(strtolower($locale), $allowedCountries));
229
    }
230
231
    /**
232
     * @return Product
233
     */
234
    protected function getProduct()
235
    {
236
        if (is_null($this->product)) {
237
            $this->product = $this->registry->registry('product');
0 ignored issues
show
Deprecated Code introduced by
The function Magento\Framework\Registry::registry() has been deprecated: 102.0.0 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

237
            $this->product = /** @scrutinizer ignore-deprecated */ $this->registry->registry('product');

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
238
        }
239
240
        return $this->product;
241
    }
242
243
    /**
244
     * @return bool
245
     */
246
    public function isEnabled12x()
247
    {
248
        return ($this->enabled && $this->enabled_12x);
249
    }
250
251
    /**
252
     * @return bool
253
     */
254
    public function isEnabled4x()
255
    {
256
        return ($this->enabled && $this->enabled_4x);
257
    }
258
259
    /**
260
     * @return string
261
     */
262
    public function getPublicKey()
263
    {
264
        return $this->publicKey;
265
    }
266
267
    /**
268
     * @return string
269
     */
270
    public function getPublicKey4x()
271
    {
272
        return $this->publicKey_4x;
273
    }
274
275
    /**
276
     * @return string
277
     */
278
    public function getPromotionProductExtra()
279
    {
280
        return $this->promotionProductExtra;
281
    }
282
283
    /**
284
     * @return bool
285
     */
286
    public function isProductInPromotion()
287
    {
288
        try {
289
            return ($this->getProduct()->getData('pagantis_promoted') === '1') ? 'true' : 'false';
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getProduct... '1' ? 'true' : 'false' returns the type string which is incompatible with the documented return type boolean.
Loading history...
290
        } catch (\Exception $exception) {
291
            return 'false';
0 ignored issues
show
Bug Best Practice introduced by
The expression return 'false' returns the type string which is incompatible with the documented return type boolean.
Loading history...
292
        }
293
    }
294
295
    /**
296
     * @return float
297
     */
298
    public function getFinalPrice()
299
    {
300
        return $this->getProduct()->getFinalPrice();
301
    }
302
303
    /**
304
     * @return float
305
     */
306
    public function getFinalPrice4x()
307
    {
308
        return number_format($this->getProduct()->getFinalPrice()/4, 2);
0 ignored issues
show
Bug Best Practice introduced by
The expression return number_format($th...getFinalPrice() / 4, 2) returns the type string which is incompatible with the documented return type double.
Loading history...
309
    }
310
311
    /**
312
     * @return array|false|string
313
     */
314
    public function getProductSimulator()
315
    {
316
        return $this->productSimulator;
317
    }
318
319
    /**
320
     * @param int $productSimulator
321
     */
322
    public function setProductSimulator($productSimulator)
323
    {
324
        $this->productSimulator = $productSimulator;
325
    }
326
327
    /**
328
     * @return float
329
     */
330
    public function getMinAmount()
331
    {
332
        return $this->minAmount;
333
    }
334
335
    /**
336
     * @param float $minAmount
337
     */
338
    public function setMinAmount($minAmount)
339
    {
340
        $this->minAmount = $minAmount;
341
    }
342
343
    /**
344
     * @return float
345
     */
346
    public function getMaxAmount()
347
    {
348
        return $this->maxAmount;
349
    }
350
351
    /**
352
     * @param float $maxAmount
353
     */
354
    public function setMaxAmount($maxAmount)
355
    {
356
        $this->maxAmount = $maxAmount;
357
    }
358
359
    /**
360
     * @return int
361
     */
362
    public function getMinInstallments()
363
    {
364
        return $this->minInstallments;
365
    }
366
367
    /**
368
     * @param int $minInstallments
369
     */
370
    public function setMinInstallments($minInstallments)
371
    {
372
        $this->minInstallments = $minInstallments;
373
    }
374
375
    /**
376
     * @return string
377
     */
378
    public function getPriceSelector()
379
    {
380
        return $this->priceSelector;
381
    }
382
383
    /**
384
     * @param string $priceSelector
385
     */
386
    public function setPriceSelector($priceSelector)
387
    {
388
        $this->priceSelector = $priceSelector;
389
    }
390
391
    /**
392
     * @return string
393
     */
394
    public function getQuantitySelector()
395
    {
396
        return $this->quantitySelector;
397
    }
398
399
    /**
400
     * @param string $quantitySelector
401
     */
402
    public function setQuantitySelector($quantitySelector)
403
    {
404
        $this->quantitySelector = $quantitySelector;
405
    }
406
407
    /**
408
     * @return String
409
     */
410
    public function getPositionSelector()
411
    {
412
        return $this->positionSelector;
413
    }
414
415
    /**
416
     * @param String $positionSelector
417
     */
418
    public function setPositionSelector($positionSelector)
419
    {
420
        $this->positionSelector = $positionSelector;
421
    }
422
423
424
    /**
425
     * @return String
426
     */
427
    public function getSimulatorType()
428
    {
429
        return $this->simulatorType;
430
    }
431
432
    /**
433
     * @param String $simulatorType
434
     */
435
    public function setSimulatorType($simulatorType)
436
    {
437
        $this->simulatorType = $simulatorType;
438
    }
439
440
    /**
441
     * @return Boolean
442
     */
443
    public function getPromoted()
444
    {
445
        return $this->promoted;
446
    }
447
448
    /**
449
     * @param Boolean $promoted
450
     */
451
    public function setPromoted($promoted)
452
    {
453
        $this->promoted = $promoted;
454
    }
455
456
    /**
457
     * @return String
458
     */
459
    public function getPromotedMessage()
460
    {
461
        return $this->promotedMessage;
462
    }
463
464
    /**
465
     * @param String $promotedMessage
466
     */
467
    public function setPromotedMessage($promotedMessage)
468
    {
469
        $this->promotedMessage = $promotedMessage;
470
    }
471
472
    /**
473
     * @return String
474
     */
475
    public function getThousandSeparator()
476
    {
477
        return $this->thousandSeparator;
478
    }
479
480
    /**
481
     * @param String $thousandSeparator
482
     */
483
    public function setThousandSeparator($thousandSeparator)
484
    {
485
        $this->thousandSeparator = $thousandSeparator;
486
    }
487
488
    /**
489
     * @return String
490
     */
491
    public function getDecimalSeparator()
492
    {
493
        return $this->decimalSeparator;
494
    }
495
496
    /**
497
     * @param String $decimalSeparator
498
     */
499
    public function setDecimalSeparator($decimalSeparator)
500
    {
501
        $this->decimalSeparator = $decimalSeparator;
502
    }
503
504
    /**
505
     * @return float
506
     */
507
    public function getMinAmount4x()
508
    {
509
        return $this->minAmount4x;
510
    }
511
512
    /**
513
     * @param float $minAmount4x
514
     */
515
    public function setMinAmount4x($minAmount4x)
516
    {
517
        $this->minAmount4x = $minAmount4x;
518
    }
519
520
    /**
521
     * @return float
522
     */
523
    public function getMaxAmount4x()
524
    {
525
        return $this->maxAmount4x;
526
    }
527
528
    /**
529
     * @param float $maxAmount4x
530
     */
531
    public function setMaxAmount4x($maxAmount4x)
532
    {
533
        $this->maxAmount4x = $maxAmount4x;
534
    }
535
536
    /**
537
     * @return bool
538
     */
539
    public function checkValidAmount()
540
    {
541
        $maxAmount = $this->getMaxAmount();
542
        $minAmount = $this->getMinAmount();
543
        $totalPrice = (string) floor($this->getFinalPrice());
544
545
        return ($totalPrice>=$minAmount && ($totalPrice<=$maxAmount||$maxAmount=='0'));
546
    }
547
548
    /**
549
     * @return bool
550
     */
551
    public function checkValidAmount4x()
552
    {
553
        $maxAmount = $this->getMaxAmount4x();
554
        $minAmount = $this->getMinAmount4x();
555
        $totalPrice = (string) floor($this->getFinalPrice());
556
557
        return ($totalPrice>=$minAmount && ($totalPrice<=$maxAmount||$maxAmount=='0'));
558
    }
559
560
    /**
561
     * @return String
562
     */
563
    public function getDestinationSim()
564
    {
565
        return $this->destinationSim;
566
    }
567
568
    /**
569
     * @param String $destinationSim
570
     */
571
    public function setDestinationSim($destinationSim)
572
    {
573
        $this->destinationSim = $destinationSim;
574
    }
575
}
576