Blame view

backend/controllers/PriceController.php 3.57 KB
b60a88b8   Anastasia   - main page
1
2
3
4
5
6
7
8
9
10
  <?php
      /**
       * Created by PhpStorm.
       * User: stes
       * Date: 24.05.18
       * Time: 18:49
       */
      
      namespace backend\controllers;
      
c2648e65   Anastasia   - prices
11
12
13
      use artbox\core\models\Language;
      use common\models\Price;
      use common\models\PriceLang;
b60a88b8   Anastasia   - main page
14
15
16
17
18
19
20
      use common\models\Service;
      use yii\helpers\ArrayHelper;
      use yii\web\Controller;
  
      class PriceController extends Controller
      {
          public function actionIndex($service_id = null){
c2648e65   Anastasia   - prices
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
61
62
63
64
65
66
67
      
              if (\Yii::$app->request->post()){
                  $price = \Yii::$app->request->post('Price');
                  $price_lang = \Yii::$app->request->post('PriceLang');
                  $transaction = \Yii::$app->db->beginTransaction();
                  try {
                      Price::deleteAll(['service_id' => $service_id]);
                      foreach ($price as $key => $value){
                          $model = new Price();
                          $model->load($value, '');
                          $model->id = $key;
                          if ($model->save()){
                              $languages = [];
                              foreach ($price_lang[$key] as $k => $item){
                                  $languages[] = [
                                      'language_id' => $k,
                                      'price_id'    => $model->id,
                                      'title'       => $item['title']
                                  ];
                              }
                              \Yii::$app->db->createCommand()
                                            ->batchInsert(
                                                'price_lang',
                                                [
                                                    'language_id',
                                                    'price_id',
                                                    'title',
                                                ],
                                                $languages
                                            )
                                            ->execute();
                          }else{
                              continue;
                          }
                      }
                      $transaction->commit();
                      
                  } catch (\Exception $e) {
                      $transaction->rollBack();
                      throw $e;
              
                  } catch (\Throwable $e) {
                      $transaction->rollBack();
                      return false;
                  }
          
              }
9e6e5602   Anastasia   prices
68
                  $services = Service::find()->with('language')->all();
c2648e65   Anastasia   - prices
69
70
                  $lastId = Price::find()->max('id');
                  $prices = Price::find()->where(['service_id' => $service_id])->with('languages')->all();
b60a88b8   Anastasia   - main page
71
                  $data = ArrayHelper::map($services, 'id', 'title');
c2648e65   Anastasia   - prices
72
                  
b60a88b8   Anastasia   - main page
73
74
                  return $this->render('index',[
                     'services' => $data,
c2648e65   Anastasia   - prices
75
76
77
                     'service_id' => $service_id,
                     'lastId' => $lastId,
                     'prices' => $prices
b60a88b8   Anastasia   - main page
78
                  ]);
c2648e65   Anastasia   - prices
79
80
81
82
83
84
85
86
                  
          }
          
          public function actionNewPrice($lastId, $service_id = null){
              $languages = Language::getActive();
              $price = New Price();
              $price->service_id = $service_id;
              $price_lang = new PriceLang();
724308f6   Anastasia   add status to price
87
              return $this->renderAjax('_add_price',[
c2648e65   Anastasia   - prices
88
89
90
91
92
93
                 'lastId' => $lastId,
                 'price' => $price,
                 'price_lang' => $price_lang,
                 'service_id' => $service_id,
                 'languages'  => $languages
              ]);
b60a88b8   Anastasia   - main page
94
95
          }
      }