Blame view

common/components/parsers/CustomConverter.php 4.3 KB
33d902b8   Mihail   add converter as ...
1
  <?php
912e6b15   Mihail   fixed Image class
2
  namespace common\components\parsers;
ef41533d   Mihail   temp commit - wor...
3
  use common\components\CustomVarDamp;
33d902b8   Mihail   add converter as ...
4
  use yii\multiparser\Converter;
ef41533d   Mihail   temp commit - wor...
5
  use backend\models\Details;
33d902b8   Mihail   add converter as ...
6
7
8
9
10
11
12
13
  
  class CustomConverter extends Converter {
  
      /**
       * @param $value_arr - двумерный массив значений, которому нужно присвоить ключи
       * @param $key_array - ключи для вложенного массива
       * @return array - таблица с проименованными колонками
       */
78684ed4   Mihail   add multiply pric...
14
15
16
      public static $sign;
      public static $multiplier;
  
48b58a13   Mihail   finish with xml a...
17
      public static function convertToAssocArray ( array $value_arr, array $key_array, $key_prefix = '' )
33d902b8   Mihail   add converter as ...
18
      {
d7f6bdbb   Mihail   add Importers fil...
19
          // очистка служебного префикса в массиве заголовков
33d902b8   Mihail   add converter as ...
20
          if ($key_prefix) {
14ab0a80   Mihail   fixed error in Co...
21
22
23
24
25
26
              // @todo оптимизировать - два переворота массива - избыточно
              $key_array = array_flip( $key_array );
  
              array_walk( $key_array,  function ( &$value, $key, $key_prefix ){ $value = str_replace( $key_prefix, '',$value ); }, $key_prefix );
  
              $key_array = array_flip( $key_array );
d7f6bdbb   Mihail   add Importers fil...
27
28
              //уберем пустые элементы
              $key_array = array_filter($key_array,  function ($value){ return $value !==''; });
33d902b8   Mihail   add converter as ...
29
30
          }
  
48b58a13   Mihail   finish with xml a...
31
          array_walk( $value_arr,
14ab0a80   Mihail   fixed error in Co...
32
              function ( &$value, $key, $key_array ) {
33d902b8   Mihail   add converter as ...
33
                  $res = $value;
48b58a13   Mihail   finish with xml a...
34
35
                  foreach ($res as $sub_key => $sub_value) {
                      if (isset($key_array[$sub_key])) {
33d902b8   Mihail   add converter as ...
36
                          // если такой ключ в базовом массиве (массиве ключей) есть, то заменим новым, иначе просто удалим
48b58a13   Mihail   finish with xml a...
37
                          $new_key = $key_array[$sub_key];
33d902b8   Mihail   add converter as ...
38
                          if( !array_key_exists( $new_key , $res ) ){
48b58a13   Mihail   finish with xml a...
39
                              $res[ $new_key ] = $value[$sub_key];
33d902b8   Mihail   add converter as ...
40
41
                          }
                      }
48b58a13   Mihail   finish with xml a...
42
43
                      unset( $res[$sub_key] );
                      $value = $res;
33d902b8   Mihail   add converter as ...
44
45
                  }
  
33d902b8   Mihail   add converter as ...
46
              },
48b58a13   Mihail   finish with xml a...
47
48
49
               $key_array);
  
          return $value_arr;
33d902b8   Mihail   add converter as ...
50
51
      }
  
2fb5a757   Mihail   add menu and chec...
52
53
      /**
       * @param $value_arr - двумерный массив к которому нужно добавить колонки
48b58a13   Mihail   finish with xml a...
54
       * @param $add_array - массив с колонками (ключи) и значениями колонок
2fb5a757   Mihail   add menu and chec...
55
56
57
       * @return mixed
       */
      public function addColumns ( array $value_arr ,  array $add_array )
d7f6bdbb   Mihail   add Importers fil...
58
59
60
      {
          $i = 0;
          while ($i < count($value_arr)) {
51514d7d   Mihail   add writing data ...
61
62
63
              foreach ($add_array as $add_key => $add_value) {
                  $value_arr[$i][$add_key] = $add_value;
              }
d7f6bdbb   Mihail   add Importers fil...
64
65
              $i++;
          }
d7f6bdbb   Mihail   add Importers fil...
66
67
          return $value_arr;
      }
ef41533d   Mihail   temp commit - wor...
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  
      public static function convertToDetails ( array $row )
      {
          // присвоим полный артикул
          $row['FULL_ARTICLE'] = $row['ARTICLE'];
  
          $details_model = new Details();
          // проверим все ли обязательные колонки были указаны пользователем
          $details_model->load(['Details' => $row]);
  
          if (!$details_model->validate()){
              $errors = '';
              foreach ( $details_model->errors as $key => $arr_errors ) {
                  $errors .= "Аттрибут $key - " . implode( ' , ', $arr_errors );
              }
              throw new \ErrorException( $errors );
          }
          return $row;
      }
  
78684ed4   Mihail   add multiply pric...
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
      public function ConvertToMultiply ( array $row )
      {
          $PRICE = $row[ 'PRICE' ];
          $sign = self::$sign;
          $multiplier = self::$multiplier;
          //CustomVarDamp::dumpAndDie(self);
          if (isset($sign)) {
              if ($sign == '+') {
                  if ($multiplier > 0) {
                      $PRICE += $multiplier;
                  }
              }
              else if ($sign == '-') {
                  if ($multiplier > 0) {
                      $PRICE -= $multiplier;
                  }
              }
              else if ($sign == '*') {
                  if ($multiplier > 0) {
                      $PRICE *= $multiplier;
                  }
              }
              else if ($sign == '/') {
                  if ($multiplier > 0) {
                      $PRICE /= $multiplier;
                  }
              }
          }
  
          $row[ 'PRICE' ] = $PRICE;
  
          return $row;
  
      }
ef41533d   Mihail   temp commit - wor...
122
123
  
  
33d902b8   Mihail   add converter as ...
124
  }