Issues (3877)

ProductOfferServicePointAvailabilityCalculator.php (7 issues)

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\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Calculator;
9
10
use Generated\Shared\Transfer\ProductOfferServicePointAvailabilityCollectionTransfer;
11
use Generated\Shared\Transfer\ProductOfferServicePointAvailabilityConditionsTransfer;
12
use Generated\Shared\Transfer\ProductOfferServicePointAvailabilityCriteriaTransfer;
13
use Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Calculator\Strategy\ProductOfferServicePointAvailabilityCalculatorStrategyInterface;
14
use Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Expander\ProductOfferServicePointAvailabilityRequestItemsExpanderInterface;
15
use Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Reader\ProductOfferServicePointAvailabilityReaderInterface;
16
17
class ProductOfferServicePointAvailabilityCalculator implements ProductOfferServicePointAvailabilityCalculatorInterface
18
{
19
    /**
20
     * @var \Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Reader\ProductOfferServicePointAvailabilityReaderInterface
21
     */
22
    protected ProductOfferServicePointAvailabilityReaderInterface $productOfferServicePointAvailabilityReader;
23
24
    /**
25
     * @var \Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Expander\ProductOfferServicePointAvailabilityRequestItemsExpanderInterface
26
     */
27
    protected ProductOfferServicePointAvailabilityRequestItemsExpanderInterface $productOfferServicePointAvailabilityRequestItemsExpander;
28
29
    /**
30
     * @var \Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Calculator\Strategy\ProductOfferServicePointAvailabilityCalculatorStrategyInterface
31
     */
32
    protected ProductOfferServicePointAvailabilityCalculatorStrategyInterface $defaultProductOfferServicePointAvailabilityCalculatorStrategy;
33
34
    /**
35
     * @var list<\Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorageExtension\Dependency\Plugin\ProductOfferServicePointAvailabilityCalculatorStrategyPluginInterface>
36
     */
37
    protected array $productOfferServicePointAvailabilityCalculatorStrategyPlugins;
38
39
    /**
40
     * @param \Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Reader\ProductOfferServicePointAvailabilityReaderInterface $productOfferServicePointAvailabilityReader
41
     * @param \Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Expander\ProductOfferServicePointAvailabilityRequestItemsExpanderInterface $productOfferServicePointAvailabilityRequestItemsExpander
42
     * @param \Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorage\Calculator\Strategy\ProductOfferServicePointAvailabilityCalculatorStrategyInterface $defaultProductOfferServicePointAvailabilityCalculatorStrategy
43
     * @param list<\Spryker\Client\ProductOfferServicePointAvailabilityCalculatorStorageExtension\Dependency\Plugin\ProductOfferServicePointAvailabilityCalculatorStrategyPluginInterface> $productOfferServicePointAvailabilityCalculatorStrategyPlugins
44
     */
45
    public function __construct(
46
        ProductOfferServicePointAvailabilityReaderInterface $productOfferServicePointAvailabilityReader,
47
        ProductOfferServicePointAvailabilityRequestItemsExpanderInterface $productOfferServicePointAvailabilityRequestItemsExpander,
48
        ProductOfferServicePointAvailabilityCalculatorStrategyInterface $defaultProductOfferServicePointAvailabilityCalculatorStrategy,
49
        array $productOfferServicePointAvailabilityCalculatorStrategyPlugins
50
    ) {
51
        $this->productOfferServicePointAvailabilityReader = $productOfferServicePointAvailabilityReader;
52
        $this->productOfferServicePointAvailabilityRequestItemsExpander = $productOfferServicePointAvailabilityRequestItemsExpander;
53
        $this->defaultProductOfferServicePointAvailabilityCalculatorStrategy = $defaultProductOfferServicePointAvailabilityCalculatorStrategy;
54
        $this->productOfferServicePointAvailabilityCalculatorStrategyPlugins = $productOfferServicePointAvailabilityCalculatorStrategyPlugins;
0 ignored issues
show
Documentation Bug introduced by
It seems like $productOfferServicePoin...lculatorStrategyPlugins of type array is incompatible with the declared type Spryker\Client\ProductOf...Storage\Calculator\list of property $productOfferServicePoin...lculatorStrategyPlugins.

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...
55
    }
56
57
    /**
58
     * @param \Generated\Shared\Transfer\ProductOfferServicePointAvailabilityCriteriaTransfer $productOfferServicePointAvailabilityCriteriaTransfer
59
     *
60
     * @return array<string, list<\Generated\Shared\Transfer\ProductOfferServicePointAvailabilityResponseItemTransfer>>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string, list<\Gene...yResponseItemTransfer>> at position 4 could not be parsed: Expected '>' at position 4, but found 'list'.
Loading history...
61
     */
62
    public function calculateProductOfferServicePointAvailabilities(
63
        ProductOfferServicePointAvailabilityCriteriaTransfer $productOfferServicePointAvailabilityCriteriaTransfer
64
    ): array {
65
        $productOfferServicePointAvailabilityConditionsTransfer = $productOfferServicePointAvailabilityCriteriaTransfer->getProductOfferServicePointAvailabilityConditionsOrFail();
66
        $productOfferServicePointAvailabilityConditionsTransfer->requireProductOfferServicePointAvailabilityRequestItems();
67
68
        $productOfferServicePointAvailabilityConditionsTransfer->setProductOfferServicePointAvailabilityRequestItems(
69
            $this->productOfferServicePointAvailabilityRequestItemsExpander->expandWithIdentifier(
70
                $productOfferServicePointAvailabilityConditionsTransfer->getProductOfferServicePointAvailabilityRequestItems(),
71
            ),
72
        );
73
74
        $productOfferServicePointAvailabilityCollectionTransfer = $this->productOfferServicePointAvailabilityReader
75
            ->getProductOfferServicePointAvailabilities($productOfferServicePointAvailabilityCriteriaTransfer);
76
77
        $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid = $this->calculateProductOfferServicePointAvailabilitiesByStrategy(
78
            $productOfferServicePointAvailabilityCollectionTransfer,
79
            $productOfferServicePointAvailabilityConditionsTransfer,
80
        );
81
82
        if (count($productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid) < count($productOfferServicePointAvailabilityConditionsTransfer->getServicePointUuids())) {
83
            $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid = $this->addMissingServicePointUuidsToProductOfferServicePointAvailabilities(
84
                $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid,
85
                $productOfferServicePointAvailabilityConditionsTransfer->getServicePointUuids(),
86
            );
87
        }
88
89
        return $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid;
90
    }
91
92
    /**
93
     * @param \Generated\Shared\Transfer\ProductOfferServicePointAvailabilityCollectionTransfer $productOfferServicePointAvailabilityCollectionTransfer
94
     * @param \Generated\Shared\Transfer\ProductOfferServicePointAvailabilityConditionsTransfer $productOfferServicePointAvailabilityConditionsTransfer
95
     *
96
     * @return array<string, list<\Generated\Shared\Transfer\ProductOfferServicePointAvailabilityResponseItemTransfer>>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string, list<\Gene...yResponseItemTransfer>> at position 4 could not be parsed: Expected '>' at position 4, but found 'list'.
Loading history...
97
     */
98
    protected function calculateProductOfferServicePointAvailabilitiesByStrategy(
99
        ProductOfferServicePointAvailabilityCollectionTransfer $productOfferServicePointAvailabilityCollectionTransfer,
100
        ProductOfferServicePointAvailabilityConditionsTransfer $productOfferServicePointAvailabilityConditionsTransfer
101
    ): array {
102
        $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid = $this->executeProductOfferServicePointAvailabilityCalculatorStrategyPlugins(
103
            $productOfferServicePointAvailabilityCollectionTransfer,
104
            $productOfferServicePointAvailabilityConditionsTransfer,
105
        );
106
107
        if ($productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid) {
0 ignored issues
show
$productOfferServicePoin...oupedByServicePointUuid is an empty array, thus is always false.
Loading history...
108
            return $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid;
109
        }
110
111
        return $this->defaultProductOfferServicePointAvailabilityCalculatorStrategy->calculateProductOfferServicePointAvailabilities(
112
            $productOfferServicePointAvailabilityCollectionTransfer,
113
            $productOfferServicePointAvailabilityConditionsTransfer,
114
        );
115
    }
116
117
    /**
118
     * @param \Generated\Shared\Transfer\ProductOfferServicePointAvailabilityCollectionTransfer $productOfferServicePointAvailabilityCollectionTransfer
119
     * @param \Generated\Shared\Transfer\ProductOfferServicePointAvailabilityConditionsTransfer $productOfferServicePointAvailabilityConditionsTransfer
120
     *
121
     * @return array<string, list<\Generated\Shared\Transfer\ProductOfferServicePointAvailabilityResponseItemTransfer>>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string, list<\Gene...yResponseItemTransfer>> at position 4 could not be parsed: Expected '>' at position 4, but found 'list'.
Loading history...
122
     */
123
    protected function executeProductOfferServicePointAvailabilityCalculatorStrategyPlugins(
124
        ProductOfferServicePointAvailabilityCollectionTransfer $productOfferServicePointAvailabilityCollectionTransfer,
125
        ProductOfferServicePointAvailabilityConditionsTransfer $productOfferServicePointAvailabilityConditionsTransfer
126
    ): array {
127
        foreach ($this->productOfferServicePointAvailabilityCalculatorStrategyPlugins as $productOfferServicePointAvailabilityCalculatorStrategyPlugin) {
128
            $isApplicable = $productOfferServicePointAvailabilityCalculatorStrategyPlugin->isApplicable(
129
                $productOfferServicePointAvailabilityCollectionTransfer,
130
                $productOfferServicePointAvailabilityConditionsTransfer,
131
            );
132
133
            if (!$isApplicable) {
134
                continue;
135
            }
136
137
            return $productOfferServicePointAvailabilityCalculatorStrategyPlugin->calculateProductOfferServicePointAvailabilities(
138
                $productOfferServicePointAvailabilityCollectionTransfer,
139
                $productOfferServicePointAvailabilityConditionsTransfer,
140
            );
141
        }
142
143
        return [];
144
    }
145
146
    /**
147
     * @param array<string, list<\Generated\Shared\Transfer\ProductOfferServicePointAvailabilityResponseItemTransfer>> $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string, list<\Gene...yResponseItemTransfer>> at position 4 could not be parsed: Expected '>' at position 4, but found 'list'.
Loading history...
148
     * @param list<string> $servicePointUuids
149
     *
150
     * @return array<string, list<\Generated\Shared\Transfer\ProductOfferServicePointAvailabilityResponseItemTransfer>>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string, list<\Gene...yResponseItemTransfer>> at position 4 could not be parsed: Expected '>' at position 4, but found 'list'.
Loading history...
151
     */
152
    protected function addMissingServicePointUuidsToProductOfferServicePointAvailabilities(
153
        array $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid,
154
        array $servicePointUuids
155
    ): array {
156
        foreach ($servicePointUuids as $servicePointUuid) {
157
            if (!isset($productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid[$servicePointUuid])) {
158
                $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid[$servicePointUuid] = [];
159
            }
160
        }
161
162
        return $productOfferServicePointAvailabilityResponseItemTransfersGroupedByServicePointUuid;
163
    }
164
}
165