Passed
Pull Request — master (#319)
by Dmitry
22:36
created

queryRelationsBecomingActive()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 46
Code Lines 40

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 40
c 0
b 0
f 0
dl 0
loc 46
rs 9.28
cc 1
nc 1
nop 1
1
<?php
2
3
/**
4
 * This file is part of the Spryker Commerce OS.
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
namespace Pyz\Zed\ExampleProductSalePage\Persistence;
9
10
use Orm\Zed\Product\Persistence\SpyProductAbstractQuery;
11
use Orm\Zed\ProductLabel\Persistence\SpyProductLabelProductAbstractQuery;
12
use Orm\Zed\ProductLabel\Persistence\SpyProductLabelQuery;
13
use Propel\Runtime\ActiveQuery\Criteria;
14
use Propel\Runtime\ActiveQuery\Criterion\BasicModelCriterion;
15
use Spryker\Zed\Kernel\Persistence\AbstractQueryContainer;
16
17
/**
18
 * @method \Pyz\Zed\ExampleProductSalePage\Persistence\ExampleProductSalePagePersistenceFactory getFactory()
19
 */
20
class ExampleProductSalePageQueryContainer extends AbstractQueryContainer implements ExampleProductSalePageQueryContainerInterface
21
{
22
    /**
23
     * @var string
24
     */
25
    protected const PRICE_TYPE_ORIGINAL = 'ORIGINAL';
26
27
    /**
28
     * @var string
29
     */
30
    protected const PRICE_TYPE_DEFAULT = 'DEFAULT';
31
32
    /**
33
     * @api
34
     *
35
     * @param string $labelName
36
     *
37
     * @return \Orm\Zed\ProductLabel\Persistence\SpyProductLabelQuery
38
     */
39
    public function queryProductLabelByName($labelName): SpyProductLabelQuery
40
    {
41
        return $this->getFactory()
0 ignored issues
show
Deprecated Code introduced by
The function Spryker\Zed\ProductLabel...eryProductLabelByName() has been deprecated: Use {@link \Spryker\Zed\ProductLabel\Persistence\ProductLabelRepositoryInterface::findProductLabelByName} instead. ( Ignorable by Annotation )

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

41
        return /** @scrutinizer ignore-deprecated */ $this->getFactory()

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...
42
            ->getProductLabelQueryContainer()
43
            ->queryProductLabelByName($labelName);
44
    }
45
46
    /**
47
     * @api
48
     *
49
     * @param int $idProductLabel
50
     *
51
     * @return \Orm\Zed\ProductLabel\Persistence\SpyProductLabelProductAbstractQuery
52
     */
53
    public function queryRelationsBecomingInactive($idProductLabel): SpyProductLabelProductAbstractQuery
54
    {
55
        /** @var \Orm\Zed\ProductLabel\Persistence\SpyProductLabelProductAbstractQuery $productLabelProductAbstractQuery */
56
        $productLabelProductAbstractQuery = $this->getFactory()
57
            ->getProductLabelQueryContainer()
58
            ->queryProductAbstractRelationsByIdProductLabel($idProductLabel)
59
            ->distinct()
60
            ->useSpyProductAbstractQuery(null, Criteria::LEFT_JOIN)
61
                ->usePriceProductQuery('priceProductOrigin', Criteria::LEFT_JOIN)
62
                    ->joinPriceType('priceTypeOrigin', Criteria::INNER_JOIN)
63
                    ->addJoinCondition(
64
                        'priceTypeOrigin',
65
                        'priceTypeOrigin.name = ?',
66
                        static::PRICE_TYPE_ORIGINAL,
67
                    )
68
                    ->usePriceProductStoreQuery('priceProductStoreOrigin', Criteria::LEFT_JOIN)
69
                        ->usePriceProductDefaultQuery('priceProductDefaultOriginal', Criteria::LEFT_JOIN)
70
                        ->endUse()
71
                    ->endUse()
72
                ->endUse()
73
                ->usePriceProductQuery('priceProductDefault', Criteria::LEFT_JOIN)
74
                    ->joinPriceType('priceTypeDefault', Criteria::INNER_JOIN)
75
                    ->addJoinCondition(
76
                        'priceTypeDefault',
77
                        'priceTypeDefault.name = ?',
78
                        static::PRICE_TYPE_DEFAULT,
79
                    )
80
                    ->usePriceProductStoreQuery('priceProductStoreDefault', Criteria::LEFT_JOIN)
81
                        ->usePriceProductDefaultQuery('priceProductDefaultDefault', Criteria::LEFT_JOIN)
82
                        ->endUse()
83
                    ->endUse()
84
                ->endUse()
85
            ->endUse()
86
            ->addAnd('priceProductDefaultOriginal.id_price_product_default', null, Criteria::ISNOTNULL)
87
            ->addAnd('priceProductDefaultDefault.id_price_product_default', null, Criteria::ISNOTNULL)
88
            ->addJoinCondition('priceProductStoreDefault', 'priceProductStoreOrigin.fk_store = priceProductStoreDefault.fk_store')
89
            ->addJoinCondition('priceProductStoreDefault', 'priceProductStoreOrigin.fk_currency = priceProductStoreDefault.fk_currency');
90
91
        $orCriterion = $this->getBasicModelCriterion(
92
            $productLabelProductAbstractQuery,
93
            'priceProductStoreOrigin.gross_price < priceProductStoreDefault.gross_price',
94
            'priceProductStoreOrigin.gross_price',
95
        );
96
        $orCriterion->addOr($productLabelProductAbstractQuery->getNewCriterion('priceProductStoreOrigin.gross_price', null, Criteria::ISNULL));
97
        $orCriterion->addOr($productLabelProductAbstractQuery->getNewCriterion('priceProductStoreOrigin.net_price', null, Criteria::ISNULL));
98
        $orCriterion->addOr(
99
            $this->getBasicModelCriterion(
100
                $productLabelProductAbstractQuery,
101
                'priceProductStoreOrigin.net_price < priceProductStoreDefault.net_price',
102
                'priceProductStoreOrigin.net_price',
103
            ),
104
        );
105
        $orCriterion->addOr($productLabelProductAbstractQuery->getNewCriterion('priceProductStoreDefault.gross_price', null, Criteria::ISNULL));
106
        $orCriterion->addOr($productLabelProductAbstractQuery->getNewCriterion('priceProductStoreDefault.net_price', null, Criteria::ISNULL));
107
        $productLabelProductAbstractQuery->addAnd($orCriterion);
108
109
        return $productLabelProductAbstractQuery;
110
    }
111
112
    /**
113
     * @api
114
     *
115
     * @param int $idProductLabel
116
     *
117
     * @return \Orm\Zed\Product\Persistence\SpyProductAbstractQuery
118
     */
119
    public function queryRelationsBecomingActive($idProductLabel): SpyProductAbstractQuery
120
    {
121
        /** @var \Orm\Zed\Product\Persistence\SpyProductAbstractQuery $productAbstractQuery */
122
        $productAbstractQuery = $this->getFactory()
123
            ->getProductQueryContainer()
124
            ->queryProductAbstract()
125
            ->distinct()
126
            ->usePriceProductQuery('priceProductOrigin', Criteria::LEFT_JOIN)
127
                ->joinPriceType('priceTypeOrigin', Criteria::INNER_JOIN)
128
                ->addJoinCondition(
129
                    'priceTypeOrigin',
130
                    'priceTypeOrigin.name = ?',
131
                    static::PRICE_TYPE_ORIGINAL,
132
                )
133
                ->usePriceProductStoreQuery('priceProductStoreOrigin', Criteria::LEFT_JOIN)
134
                    ->usePriceProductDefaultQuery('priceProductDefaultOriginal', Criteria::LEFT_JOIN)
135
                    ->endUse()
136
                ->endUse()
137
            ->endUse()
138
            ->usePriceProductQuery('priceProductDefault', Criteria::LEFT_JOIN)
139
                ->joinPriceType('priceTypeDefault', Criteria::INNER_JOIN)
140
                ->addJoinCondition(
141
                    'priceTypeDefault',
142
                    'priceTypeDefault.name = ?',
143
                    static::PRICE_TYPE_DEFAULT,
144
                )
145
                ->usePriceProductStoreQuery('priceProductStoreDefault', Criteria::LEFT_JOIN)
146
                    ->usePriceProductDefaultQuery('priceProductDefaultDefault', Criteria::LEFT_JOIN)
147
                    ->endUse()
148
                ->endUse()
149
            ->endUse()
150
            ->useSpyProductLabelProductAbstractQuery('rel', Criteria::LEFT_JOIN)
151
                ->filterByFkProductLabel(null, Criteria::ISNULL)
152
            ->endUse()
153
            ->addJoinCondition('rel', sprintf('rel.fk_product_label = %d', $idProductLabel))
154
            ->addAnd('rel.fk_product_label', null, Criteria::ISNULL)
155
            ->addAnd('priceProductDefaultOriginal.id_price_product_default', null, Criteria::ISNOTNULL)
156
            ->addAnd('priceProductDefaultDefault.id_price_product_default', null, Criteria::ISNOTNULL)
157
            ->addAnd('priceProductStoreOrigin.gross_price', null, Criteria::ISNOTNULL)
158
            ->addAnd('priceProductStoreOrigin.net_price', null, Criteria::ISNOTNULL)
159
            ->addJoinCondition('priceProductStoreDefault', 'priceProductStoreOrigin.fk_store = priceProductStoreDefault.fk_store')
160
            ->addJoinCondition('priceProductStoreDefault', 'priceProductStoreOrigin.fk_currency = priceProductStoreDefault.fk_currency')
161
            ->addJoinCondition('priceProductStoreDefault', 'priceProductStoreOrigin.gross_price > priceProductStoreDefault.gross_price')
162
            ->addJoinCondition('priceProductStoreDefault', 'priceProductStoreOrigin.net_price > priceProductStoreDefault.net_price');
163
164
        return $productAbstractQuery;
165
    }
166
167
    /**
168
     * @param \Propel\Runtime\ActiveQuery\Criteria $criteria
169
     * @param string $clause
170
     * @param \Propel\Runtime\Map\ColumnMap|string $column
171
     *
172
     * @return \Propel\Runtime\ActiveQuery\Criterion\BasicModelCriterion
173
     */
174
    protected function getBasicModelCriterion(Criteria $criteria, string $clause, $column): BasicModelCriterion
175
    {
176
        return new BasicModelCriterion($criteria, $clause, $column);
177
    }
178
}
179