CombinedProductAbstractHydratorStep::execute()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
c 0
b 0
f 0
rs 10
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
declare(strict_types = 1);
9
10
namespace Pyz\Zed\DataImport\Business\CombinedProduct\ProductAbstract;
11
12
use Pyz\Zed\DataImport\Business\Exception\InvalidDataException;
13
use Pyz\Zed\DataImport\Business\Model\ProductAbstract\ProductAbstractHydratorStep;
14
use Spryker\Zed\DataImport\Business\Exception\DataKeyNotFoundInDataSetException;
15
use Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface;
16
17
class CombinedProductAbstractHydratorStep extends ProductAbstractHydratorStep
18
{
19
    public const BULK_SIZE = 5000;
20
21
    public const COLUMN_ABSTRACT_SKU = 'abstract_sku';
22
23
    public const COLUMN_CONCRETE_SKU = 'concrete_sku';
24
25
    public const COLUMN_CATEGORY_KEY = 'product_abstract.category_key';
26
27
    public const COLUMN_CATEGORY_PRODUCT_ORDER = 'product_abstract.category_product_order';
28
29
    public const COLUMN_URL = 'product_abstract.url';
30
31
    public const COLUMN_COLOR_CODE = 'product_abstract.color_code';
32
33
    public const COLUMN_TAX_SET_NAME = 'product_abstract.tax_set_name';
34
35
    public const COLUMN_META_TITLE = 'product_abstract.meta_title';
36
37
    public const COLUMN_META_KEYWORDS = 'product_abstract.meta_keywords';
38
39
    public const COLUMN_META_DESCRIPTION = 'product_abstract.meta_description';
40
41
    public const COLUMN_NEW_FROM = 'product_abstract.new_from';
42
43
    public const COLUMN_NEW_TO = 'product_abstract.new_to';
44
45
    public const COLUMN_NAME = 'product.name';
46
47
    public const COLUMN_DESCRIPTION = 'product.description';
48
49
    public const COLUMN_ASSIGNED_PRODUCT_TYPE = 'product.assigned_product_type';
50
51
    protected const ASSIGNABLE_PRODUCT_TYPE_ABSTRACT = 'abstract';
52
53
    protected const ASSIGNABLE_PRODUCT_TYPE_BOTH = 'both';
54
55
    protected const ASSIGNABLE_PRODUCT_TYPES = [
56
        self::ASSIGNABLE_PRODUCT_TYPE_ABSTRACT,
57
        self::ASSIGNABLE_PRODUCT_TYPE_BOTH,
58
    ];
59
60
    public function execute(DataSetInterface $dataSet): void
61
    {
62
        $this->assertAssignableProductTypeColumn($dataSet);
63
64
        parent::execute($dataSet);
65
    }
66
67
    /**
68
     * @param \Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface $dataSet
69
     *
70
     * @throws \Spryker\Zed\DataImport\Business\Exception\DataKeyNotFoundInDataSetException
71
     * @throws \Pyz\Zed\DataImport\Business\Exception\InvalidDataException
72
     */
73
    protected function assertAssignableProductTypeColumn(DataSetInterface $dataSet): void
74
    {
75
        if (empty($dataSet[static::COLUMN_ASSIGNED_PRODUCT_TYPE])) {
76
            throw new DataKeyNotFoundInDataSetException(sprintf(
77
                '"%s" must be defined in the data set. Given: "%s"',
78
                static::COLUMN_ASSIGNED_PRODUCT_TYPE,
79
                implode(', ', array_keys($dataSet->getArrayCopy())),
80
            ));
81
        }
82
83
        if (!in_array($dataSet[static::COLUMN_ASSIGNED_PRODUCT_TYPE], static::ASSIGNABLE_PRODUCT_TYPES, true)) {
84
            throw new InvalidDataException(sprintf(
85
                '"%s" must have one of the following values: %s. Given: "%s"',
86
                static::COLUMN_ASSIGNED_PRODUCT_TYPE,
87
                implode(', ', static::ASSIGNABLE_PRODUCT_TYPES),
88
                $dataSet[static::COLUMN_ASSIGNED_PRODUCT_TYPE],
89
            ));
90
        }
91
    }
92
}
93