Issues (3641)

Zed/CartCode/Business/Operation/CartCodeAdder.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Zed\CartCode\Business\Operation;
9
10
use Generated\Shared\Transfer\CartCodeRequestTransfer;
11
use Generated\Shared\Transfer\CartCodeResponseTransfer;
12
use Generated\Shared\Transfer\QuoteTransfer;
13
use Spryker\Zed\CartCode\Dependency\Facade\CartCodeToCalculationFacadeInterface;
14
15
class CartCodeAdder implements CartCodeAdderInterface
16
{
17
    /**
18
     * @var \Spryker\Zed\CartCode\Dependency\Facade\CartCodeToCalculationFacadeInterface
19
     */
20
    protected CartCodeToCalculationFacadeInterface $calculationFacade;
21
22
    /**
23
     * @var \Spryker\Zed\CartCode\Business\Operation\QuoteOperationCheckerInterface
24
     */
25
    protected QuoteOperationCheckerInterface $quoteOperationChecker;
26
27
    /**
28
     * @var \Spryker\Zed\CartCode\Business\Operation\RecalculationResultProcessorInterface
29
     */
30
    protected RecalculationResultProcessorInterface $recalculationResultProcessor;
31
32
    /**
33
     * @var list<\Spryker\Zed\CartCodeExtension\Dependency\Plugin\CartCodePluginInterface>
34
     */
35
    protected array $cartCodePlugins;
36
37
    /**
38
     * @var list<\Spryker\Zed\CartCodeExtension\Dependency\Plugin\CartCodePostAddPluginInterface>
39
     */
40
    protected array $cartCodePostAddPlugins;
41
42
    /**
43
     * @param \Spryker\Zed\CartCode\Dependency\Facade\CartCodeToCalculationFacadeInterface $calculationClient
44
     * @param \Spryker\Zed\CartCode\Business\Operation\QuoteOperationCheckerInterface $quoteOperationChecker
45
     * @param \Spryker\Zed\CartCode\Business\Operation\RecalculationResultProcessorInterface $recalculationResultProcessor
46
     * @param list<\Spryker\Zed\CartCodeExtension\Dependency\Plugin\CartCodePluginInterface> $cartCodePlugins
47
     * @param list<\Spryker\Zed\CartCodeExtension\Dependency\Plugin\CartCodePostAddPluginInterface> $cartCodePostAddPlugins
48
     */
49
    public function __construct(
50
        CartCodeToCalculationFacadeInterface $calculationClient,
51
        QuoteOperationCheckerInterface $quoteOperationChecker,
52
        RecalculationResultProcessorInterface $recalculationResultProcessor,
53
        array $cartCodePlugins,
54
        array $cartCodePostAddPlugins
55
    ) {
56
        $this->calculationFacade = $calculationClient;
57
        $this->quoteOperationChecker = $quoteOperationChecker;
58
        $this->recalculationResultProcessor = $recalculationResultProcessor;
59
        $this->cartCodePlugins = $cartCodePlugins;
60
        $this->cartCodePostAddPlugins = $cartCodePostAddPlugins;
0 ignored issues
show
Documentation Bug introduced by
It seems like $cartCodePostAddPlugins of type array is incompatible with the declared type Spryker\Zed\CartCode\Business\Operation\list of property $cartCodePostAddPlugins.

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...
61
    }
62
63
    /**
64
     * @param \Generated\Shared\Transfer\CartCodeRequestTransfer $cartCodeRequestTransfer
65
     *
66
     * @return \Generated\Shared\Transfer\CartCodeResponseTransfer
67
     */
68
    public function addCartCode(CartCodeRequestTransfer $cartCodeRequestTransfer): CartCodeResponseTransfer
69
    {
70
        $lockedCartCodeResponseTransfer = $this->quoteOperationChecker
71
            ->checkLockedQuoteResponse($cartCodeRequestTransfer->getQuote());
72
73
        if ($lockedCartCodeResponseTransfer) {
74
            return $lockedCartCodeResponseTransfer;
75
        }
76
77
        $quoteTransfer = $this->executeCartCodePlugins($cartCodeRequestTransfer);
78
        $quoteTransfer = $this->calculationFacade->recalculateQuote($quoteTransfer);
79
        $cartCodeResponseTransfer = $this->executeCartCodePostAddPlugins($cartCodeRequestTransfer->setQuote($quoteTransfer));
80
81
        if (!$cartCodeResponseTransfer->getIsSuccessful()) {
82
            return $cartCodeResponseTransfer;
83
        }
84
85
        return $this->recalculationResultProcessor->processRecalculationResults($cartCodeRequestTransfer);
86
    }
87
88
    /**
89
     * @param \Generated\Shared\Transfer\CartCodeRequestTransfer $cartCodeRequestTransfer
90
     *
91
     * @return \Generated\Shared\Transfer\QuoteTransfer
92
     */
93
    protected function executeCartCodePlugins(CartCodeRequestTransfer $cartCodeRequestTransfer): QuoteTransfer
94
    {
95
        $quoteTransfer = $cartCodeRequestTransfer->getQuote();
96
97
        foreach ($this->cartCodePlugins as $cartCodePlugin) {
98
            $quoteTransfer = $cartCodePlugin->addCartCode($quoteTransfer, $cartCodeRequestTransfer->getCartCode());
99
        }
100
101
        return $quoteTransfer;
102
    }
103
104
    /**
105
     * @param \Generated\Shared\Transfer\CartCodeRequestTransfer $cartCodeRequestTransfer
106
     *
107
     * @return \Generated\Shared\Transfer\CartCodeResponseTransfer
108
     */
109
    protected function executeCartCodePostAddPlugins(CartCodeRequestTransfer $cartCodeRequestTransfer): CartCodeResponseTransfer
110
    {
111
        $cartCodeResponseTransfer = (new CartCodeResponseTransfer())->setIsSuccessful(true);
112
113
        foreach ($this->cartCodePostAddPlugins as $cartCodePostAddPlugin) {
114
            $cartCodeResponseTransfer = $cartCodePostAddPlugin->execute($cartCodeRequestTransfer);
115
116
            if (!$cartCodeResponseTransfer->getIsSuccessful()) {
117
                return $cartCodeResponseTransfer;
118
            }
119
        }
120
121
        return $cartCodeResponseTransfer;
122
    }
123
}
124