Blame view

common/modules/product/models/Export.php 4.66 KB
4253cbec   root   first commit
1
  <?php
7253a9a0   Yarik   Export fix
2
3
4
      
      namespace common\modules\product\models;
      
63e867f2   Administrator   big commti
5
      use common\modules\rubrication\models\TaxGroup;
7253a9a0   Yarik   Export fix
6
7
8
9
10
11
12
13
14
15
16
17
18
19
      use yii\base\Model;
      
      class Export extends Model
      {
          
          public $lang;
          
          public $file;
          
          public $errors = [];
          
          public $output = [];
          
          public function process($filename = NULL, $from = 0)
4253cbec   root   first commit
20
          {
7253a9a0   Yarik   Export fix
21
22
23
24
25
26
27
28
29
              if(empty( $filename )) {
                  $filename = 'products_' . date('d_m_Y_H_i') . '.csv';
                  $handle = fopen(\Yii::getAlias('@storage/sync/') . $filename, "w");
              } else {
                  $handle = fopen(\Yii::getAlias('@storage/sync/') . $filename, "a");
              }
              
              
              $products = Product::find()
63e867f2   Administrator   big commti
30
                                 ->with([
7253a9a0   Yarik   Export fix
31
32
33
                                     'variantsWithFilters',
                                     'brand',
                                     'categories',
63e867f2   Administrator   big commti
34
35
                                     'filters'])
                                 ->limit(100)
7253a9a0   Yarik   Export fix
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
                                 ->offset($from)
                                 ->all();
              $filesize = Product::find()
                                 ->count();
              foreach($products as $product) {
                  
                                  $mods = [];
                                  $filterString = $this->convertFilterToString($product->filters);
                  
                                  foreach($product->variantsWithFilters as $variant) {
                                      $color = $variant->name;
                                      $mods[] = $variant->sku . '=' . $this->convertFilterToString($variant->filters) . '=' . $color . '=' . ( ( !empty( $variant->image ) ) ? $variant->image->image : '' ) . '=' . $variant->stock;
                                  }
                  
                                  $fotos = [];
                  
                                  $categories = [];
                                  foreach($product->categories as $value) {
                                      $categories[] = $value->name;
                                  }
                  
                                  $categories = implode(',', $categories);
                  
                                  $list = [
                                      $categories,
63e867f2   Administrator   big commti
61
                                      !empty($product->brand) ? $product->brand ->name :'',
7253a9a0   Yarik   Export fix
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
                                      $product->name,
                                      '',
                                      ( ( !empty( $product->description ) ) ? $product->description : '' ),
                                      $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);
                  fputcsv($handle, $to_write, ';');
                  unset( $product );
4253cbec   root   first commit
78
              }
7253a9a0   Yarik   Export fix
79
80
81
      
              fclose($handle);
      
63e867f2   Administrator   big commti
82
              $from += 100;
7253a9a0   Yarik   Export fix
83
84
85
              $end = false;
              if($from > $filesize) {
                  $end = true;
4253cbec   root   first commit
86
              }
7253a9a0   Yarik   Export fix
87
88
89
90
91
92
              
              $result = [
                  'end'       => $end,
                  'from'      => $from,
                  'totalsize' => $filesize,
                  'filename'  => $filename,
4253cbec   root   first commit
93
              ];
7253a9a0   Yarik   Export fix
94
95
96
97
98
              
              if($end) {
                  $result = array_merge($result, [
                      'link' => '/storage/sync/'.$filename,
                  ]);
73028f91   Administrator   big commti
99
              }
7253a9a0   Yarik   Export fix
100
101
102
              
              return $result;
              
4253cbec   root   first commit
103
          }
7253a9a0   Yarik   Export fix
104
105
106
          
          public function convertFilterToString($filters)
          {
63e867f2   Administrator   big commti
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
              if(!empty($filters)){
                  $fittersArray = [];
                  foreach($filters as $filter) {
                      if($filter->taxGroup instanceof  TaxGroup){
                          $fittersArray[ $filter->taxGroup->alias ][] = $filter->value;
                      }
  
                  }
                  $filterString = [];
  
                  foreach($fittersArray as $filterName => $filterRows) {
                      $row = implode(',', $filterRows);
                      $filterString[] = "[{$filterName}:{$row}]";
                  }
                  return implode('*', $filterString);
7253a9a0   Yarik   Export fix
122
              }
63e867f2   Administrator   big commti
123
  
4253cbec   root   first commit
124
          }
7253a9a0   Yarik   Export fix
125
      }