Blame view

common/modules/product/models/Export.php 4.67 KB
d8c1a2e0   Yarik   Big commit artbox
1
  <?php
36d1807a   Yarik   Big commit.
2
3
4
      
      namespace common\modules\product\models;
      
96410438   Yarik   Project admin com...
5
      use common\modules\language\models\Language;
36d1807a   Yarik   Big commit.
6
7
8
9
10
      use yii\base\Model;
      
      class Export extends Model
      {
          
96410438   Yarik   Project admin com...
11
12
13
14
          public $lang;
          
          public $file;
          
36d1807a   Yarik   Big commit.
15
16
17
18
          public $errors = [];
          
          public $output = [];
          
96410438   Yarik   Project admin com...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
          public function rules()
          {
              return [
                  [
                      'lang',
                      'integer',
                  ],
                  [
                      'lang',
                      'default',
                      'value' => Language::getCurrent()->language_id,
                  ],
              ];
          }
          
          public function process($filename = NULL, $from = 0)
d8c1a2e0   Yarik   Big commit artbox
35
          {
96410438   Yarik   Project admin com...
36
37
38
              $limit = 100;
              
              if(empty( $filename )) {
36d1807a   Yarik   Big commit.
39
                  $filename = 'products_' . date('d_m_Y_H_i') . '.csv';
96410438   Yarik   Project admin com...
40
41
42
                  $handle = fopen(\Yii::getAlias('@storage/sync/') . $filename, "w");
              } else {
                  $handle = fopen(\Yii::getAlias('@storage/sync/') . $filename, "a");
d8c1a2e0   Yarik   Big commit artbox
43
              }
96410438   Yarik   Project admin com...
44
45
46
47
              
              $language = Language::findOne(\Yii::$app->session->get('export_lang', Language::getDefaultLanguage()->language_id));
              Language::setCurrent($language->url);
              
36d1807a   Yarik   Big commit.
48
              $products = Product::find()
96410438   Yarik   Project admin com...
49
50
51
52
                                 ->with('variantsWithFilters', 'brand.lang', 'categories.lang', 'filters')
                                 ->joinWith('lang', true, 'INNER JOIN')
                                 ->limit($limit)
                                 ->offset($from)
36d1807a   Yarik   Big commit.
53
                                 ->all();
96410438   Yarik   Project admin com...
54
55
56
              $filesize = Product::find()
                                 ->joinWith('lang', true, 'INNER JOIN')
                                 ->count();
36d1807a   Yarik   Big commit.
57
58
59
60
61
              foreach($products as $product) {
                  $mods = [];
                  $filterString = $this->convertFilterToString($product->filters);
                  
                  foreach($product->variantsWithFilters as $variant) {
96410438   Yarik   Project admin com...
62
                      $color = $variant->lang->name;
36d1807a   Yarik   Big commit.
63
64
65
66
67
68
69
                      $mods[] = $variant->sku . '=' . $this->convertFilterToString($variant->filters) . '=' . $color . '=' . ( ( !empty( $variant->image ) ) ? $variant->image->image : '' ) . '=' . $variant->stock;
                  }
                  
                  $fotos = [];
                  
                  $categories = [];
                  foreach($product->categories as $value) {
96410438   Yarik   Project admin com...
70
                      $categories[] = $value->lang->name;
36d1807a   Yarik   Big commit.
71
72
73
74
75
76
                  }
                  
                  $categories = implode(',', $categories);
                  
                  $list = [
                      $categories,
96410438   Yarik   Project admin com...
77
78
                      ( ( !empty( $product->brand ) ) ? $product->brand->lang->name : '' ),
                      $product->lang->name,
36d1807a   Yarik   Big commit.
79
                      '',
96410438   Yarik   Project admin com...
80
                      ( ( !empty( $product->lang->description ) ) ? $product->lang->description : '' ),
36d1807a   Yarik   Big commit.
81
82
83
84
85
86
87
88
89
90
91
                      $filterString,
                      ( !empty( $product->variant ) ) ? $product->variant->price_old : '',
                      ( !empty( $product->variant ) ) ? $product->variant->price : '',
                      intval($product->akciya),
                      '',
                      intval($product->is_new),
                      intval($product->is_top),
                      $product->video,
                      implode(',', $fotos),
                  ];
                  $to_write = array_merge($list, $mods);
36d1807a   Yarik   Big commit.
92
93
                  fputcsv($handle, $to_write, ';');
                  unset( $product );
d8c1a2e0   Yarik   Big commit artbox
94
              }
36d1807a   Yarik   Big commit.
95
96
97
              
              fclose($handle);
              
96410438   Yarik   Project admin com...
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
              $from += $limit;
              $end = false;
              if($from > $filesize) {
                  $end = true;
              }
              
              $result = [
                  'end'       => $end,
                  'from'      => $from,
                  'totalsize' => $filesize,
                  'filename'  => $filename,
              ];
              
              if($end) {
                  $result = array_merge($result, [
                      'link' => '/storage/sync/' . $filename,
                  ]);
              }
              
              return $result;
              
d8c1a2e0   Yarik   Big commit artbox
119
          }
36d1807a   Yarik   Big commit.
120
121
122
123
124
          
          public function convertFilterToString($filters)
          {
              $fittersArray = [];
              foreach($filters as $filter) {
96410438   Yarik   Project admin com...
125
                  $fittersArray[ $filter->taxGroup->alias ][] = $filter->lang->value;
36d1807a   Yarik   Big commit.
126
127
128
129
130
131
132
133
              }
              $filterString = [];
              
              foreach($fittersArray as $filterName => $filterRows) {
                  $row = implode(',', $filterRows);
                  $filterString[] = "[{$filterName}:{$row}]";
              }
              return implode('*', $filterString);
d8c1a2e0   Yarik   Big commit artbox
134
          }
36d1807a   Yarik   Big commit.
135
      }