33d902b8
Mihail
add converter as ...
|
1
|
<?php
|
912e6b15
Mihail
fixed Image class
|
2
|
namespace common\components\parsers;
|
a0d1ac87
Mihail
add articul filte...
|
3
|
|
ef41533d
Mihail
temp commit - wor...
|
4
|
use common\components\CustomVarDamp;
|
33d902b8
Mihail
add converter as ...
|
5
|
use yii\multiparser\Converter;
|
ef41533d
Mihail
temp commit - wor...
|
6
|
use backend\models\Details;
|
a0d1ac87
Mihail
add articul filte...
|
7
|
use backend\models\ImportersPrefix;
|
33d902b8
Mihail
add converter as ...
|
8
|
|
a0d1ac87
Mihail
add articul filte...
|
9
10
|
class CustomConverter extends Converter
{
|
33d902b8
Mihail
add converter as ...
|
11
12
13
14
15
16
|
/**
* @param $value_arr - двумерный массив значений, которому нужно присвоить ключи
* @param $key_array - ключи для вложенного массива
* @return array - таблица с проименованными колонками
*/
|
78684ed4
Mihail
add multiply pric...
|
17
18
|
public static $sign;
public static $multiplier;
|
a0d1ac87
Mihail
add articul filte...
|
19
|
public static $importer_id;
|
78684ed4
Mihail
add multiply pric...
|
20
|
|
a0d1ac87
Mihail
add articul filte...
|
21
|
public static function convertToAssocArray(array $value_arr, array $key_array, $key_prefix = '')
|
33d902b8
Mihail
add converter as ...
|
22
|
{
|
d7f6bdbb
Mihail
add Importers fil...
|
23
|
// очистка служебного префикса в массиве заголовков
|
33d902b8
Mihail
add converter as ...
|
24
|
if ($key_prefix) {
|
14ab0a80
Mihail
fixed error in Co...
|
25
|
// @todo оптимизировать - два переворота массива - избыточно
|
a0d1ac87
Mihail
add articul filte...
|
26
|
$key_array = array_flip($key_array);
|
14ab0a80
Mihail
fixed error in Co...
|
27
|
|
a0d1ac87
Mihail
add articul filte...
|
28
29
30
|
array_walk($key_array, function (&$value, $key, $key_prefix) {
$value = str_replace($key_prefix, '', $value);
}, $key_prefix);
|
14ab0a80
Mihail
fixed error in Co...
|
31
|
|
a0d1ac87
Mihail
add articul filte...
|
32
|
$key_array = array_flip($key_array);
|
d7f6bdbb
Mihail
add Importers fil...
|
33
|
//уберем пустые элементы
|
a0d1ac87
Mihail
add articul filte...
|
34
35
36
|
$key_array = array_filter($key_array, function ($value) {
return $value !== '';
});
|
33d902b8
Mihail
add converter as ...
|
37
38
|
}
|
a0d1ac87
Mihail
add articul filte...
|
39
40
|
array_walk($value_arr,
function (&$value, $key, $key_array) {
|
33d902b8
Mihail
add converter as ...
|
41
|
$res = $value;
|
48b58a13
Mihail
finish with xml a...
|
42
43
|
foreach ($res as $sub_key => $sub_value) {
if (isset($key_array[$sub_key])) {
|
33d902b8
Mihail
add converter as ...
|
44
|
// если такой ключ в базовом массиве (массиве ключей) есть, то заменим новым, иначе просто удалим
|
48b58a13
Mihail
finish with xml a...
|
45
|
$new_key = $key_array[$sub_key];
|
a0d1ac87
Mihail
add articul filte...
|
46
47
|
if (!array_key_exists($new_key, $res)) {
$res[$new_key] = $value[$sub_key];
|
33d902b8
Mihail
add converter as ...
|
48
49
|
}
}
|
a0d1ac87
Mihail
add articul filte...
|
50
|
unset($res[$sub_key]);
|
48b58a13
Mihail
finish with xml a...
|
51
|
$value = $res;
|
33d902b8
Mihail
add converter as ...
|
52
53
|
}
|
33d902b8
Mihail
add converter as ...
|
54
|
},
|
a0d1ac87
Mihail
add articul filte...
|
55
|
$key_array);
|
48b58a13
Mihail
finish with xml a...
|
56
57
|
return $value_arr;
|
33d902b8
Mihail
add converter as ...
|
58
59
|
}
|
2fb5a757
Mihail
add menu and chec...
|
60
61
|
/**
* @param $value_arr - двумерный массив к которому нужно добавить колонки
|
48b58a13
Mihail
finish with xml a...
|
62
|
* @param $add_array - массив с колонками (ключи) и значениями колонок
|
2fb5a757
Mihail
add menu and chec...
|
63
64
|
* @return mixed
*/
|
a0d1ac87
Mihail
add articul filte...
|
65
|
public function addColumns(array $value_arr, array $add_array)
|
d7f6bdbb
Mihail
add Importers fil...
|
66
67
68
|
{
$i = 0;
while ($i < count($value_arr)) {
|
51514d7d
Mihail
add writing data ...
|
69
70
71
|
foreach ($add_array as $add_key => $add_value) {
$value_arr[$i][$add_key] = $add_value;
}
|
d7f6bdbb
Mihail
add Importers fil...
|
72
73
|
$i++;
}
|
d7f6bdbb
Mihail
add Importers fil...
|
74
75
|
return $value_arr;
}
|
ef41533d
Mihail
temp commit - wor...
|
76
|
|
a0d1ac87
Mihail
add articul filte...
|
77
|
public static function convertToDetails(array $row)
|
ef41533d
Mihail
temp commit - wor...
|
78
79
80
81
82
83
84
85
|
{
// присвоим полный артикул
$row['FULL_ARTICLE'] = $row['ARTICLE'];
$details_model = new Details();
// проверим все ли обязательные колонки были указаны пользователем
$details_model->load(['Details' => $row]);
|
a0d1ac87
Mihail
add articul filte...
|
86
|
if (!$details_model->validate()) {
|
ef41533d
Mihail
temp commit - wor...
|
87
|
$errors = '';
|
a0d1ac87
Mihail
add articul filte...
|
88
89
|
foreach ($details_model->errors as $key => $arr_errors) {
$errors .= "Аттрибут $key - " . implode(' , ', $arr_errors);
|
ef41533d
Mihail
temp commit - wor...
|
90
|
}
|
a0d1ac87
Mihail
add articul filte...
|
91
|
throw new \ErrorException($errors);
|
ef41533d
Mihail
temp commit - wor...
|
92
93
94
95
|
}
return $row;
}
|
a0d1ac87
Mihail
add articul filte...
|
96
|
public function ConvertToMultiply(array $row)
|
78684ed4
Mihail
add multiply pric...
|
97
|
{
|
a0d1ac87
Mihail
add articul filte...
|
98
|
$PRICE = $row['PRICE'];
|
78684ed4
Mihail
add multiply pric...
|
99
100
101
102
103
104
105
106
|
$sign = self::$sign;
$multiplier = self::$multiplier;
//CustomVarDamp::dumpAndDie(self);
if (isset($sign)) {
if ($sign == '+') {
if ($multiplier > 0) {
$PRICE += $multiplier;
}
|
a0d1ac87
Mihail
add articul filte...
|
107
|
} else if ($sign == '-') {
|
78684ed4
Mihail
add multiply pric...
|
108
109
110
|
if ($multiplier > 0) {
$PRICE -= $multiplier;
}
|
a0d1ac87
Mihail
add articul filte...
|
111
|
} else if ($sign == '*') {
|
78684ed4
Mihail
add multiply pric...
|
112
113
114
|
if ($multiplier > 0) {
$PRICE *= $multiplier;
}
|
a0d1ac87
Mihail
add articul filte...
|
115
|
} else if ($sign == '/') {
|
78684ed4
Mihail
add multiply pric...
|
116
117
118
119
120
121
|
if ($multiplier > 0) {
$PRICE /= $multiplier;
}
}
}
|
a0d1ac87
Mihail
add articul filte...
|
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
$row['PRICE'] = $PRICE;
return $row;
}
public static function convertToArticul(array $row)
{
if (isset($row['ARTICLE']) && isset($row['BRAND']) && isset(self::$importer_id)) {
// 1. Уберем префикс который разделен пробелом (если он есть)
$words = explode(" ", $row['ARTICLE']);
if (count($words) > 1) {
array_shift($words);
$row['ARTICLE'] = implode(" ", $words);
}
// 2. Уберем брендовый префикс (если он есть)
$prefix = '';
// запрос закешируем
$prefix = ImportersPrefix::getDb()->cache( function ($db, $configuration, $row ) {
return ImportersPrefix::find()->where([ 'importer_id' => self::$importer_id,
'brand' => $row['BRAND'] ])->one();
});
|
78684ed4
Mihail
add multiply pric...
|
146
|
|
a0d1ac87
Mihail
add articul filte...
|
147
148
149
150
|
if ($prefix) {
$row['BRAND'] = str_replace($prefix, "", $row['BRAND']);
}
}
|
78684ed4
Mihail
add multiply pric...
|
151
|
return $row;
|
a0d1ac87
Mihail
add articul filte...
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
}
public static function convertToBrand($value)
{
$res = $value;
$res = trim(strtoupper($res));
$res = str_replace("Ä", "A", str_replace("Ö", "O", str_replace("Ü", "U", str_replace("Ë", "E", str_replace("Ò", "O", $res)))));
$res = str_replace(array('@', '#', '~', '"', "'", "?", "!"), '', $res);
return $res;
}
public static function convertToString($value)
{
$value = parent::convertToString($value);
|
78684ed4
Mihail
add multiply pric...
|
167
|
|
a0d1ac87
Mihail
add articul filte...
|
168
|
return str_replace(array('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '~', '`', '"', "'", ' ', '№', '%', ';', ':', '[', ']', '{', '}', '*', '?', '/', '\'', '|', '.', ',', '<', '>', '\\'), '', $value);
|
78684ed4
Mihail
add multiply pric...
|
169
|
}
|
ef41533d
Mihail
temp commit - wor...
|
170
171
|
|
33d902b8
Mihail
add converter as ...
|
172
|
}
|