OSDN Git Service

Добавлена возможность испорта данных из .csv файла. Файл выгружается из 1С в .xls...
[invent/invent.git] / controllers / LocationsController.php
1 <?php
2
3 namespace app\controllers;
4
5 use Yii;
6 use app\models\Locations;
7 use app\models\LocationsSearch;
8 use yii\web\Controller;
9 use yii\web\NotFoundHttpException;
10 use yii\filters\VerbFilter;
11
12 /**
13  * LocationsController implements the CRUD actions for Locations model.
14  */
15 class LocationsController extends Controller
16 {
17     /**
18      * {@inheritdoc}
19      */
20     public function behaviors()
21     {
22         return [
23             'verbs' => [
24                 'class'   => VerbFilter::className(),
25                 'actions' => [
26                     'delete' => [ 'POST' ],
27                 ],
28             ],
29         ];
30     }
31
32     /**
33      * Добавление места разположения
34      *
35      * @param array $options
36      *        string 'name'    - наименование места расположения
37      *        string|NULL  'region'    - наименование региона/подразделения
38      *        integer|NULL 'region_id' - идентификатор региона/подразделения
39      * @return integer|boolean - идентификатор записи места расположения или FALSE
40      */
41     public static function addIfNeed($options)
42     {
43         if (is_array($options) && isset($options[ 'name' ]) && (isset($options[ 'region' ]) || isset($options[ 'region_id' ])))
44         {
45             if (isset($options[ 'region' ]))
46             {
47                 $region_id = RegionsController::addIfNeed([ 'name' => $options[ 'region' ]]);
48             }
49             else
50             {
51                 $region_id = $options[ 'region_id' ];
52             }
53             if ($region_id !== FALSE) {
54                 // Ищем расположение, совпадающее по наименованию и региону/подразделению
55                 $location = Locations::find()
56                     ->where([ 'like', 'name', $options[ 'name' ]])
57                     ->andWhere([ 'region_id' => $region_id ])
58                     ->all();
59                 if (count($location) > 0)
60                 {
61                     return $location[0]->id; // Если нашли, возвращаем идентификатор записи
62                 }
63                 // Не нашли, пробуем добавить место расположения
64                 $location = new Locations();
65                 $location->name = $options[ 'name' ];
66                 $location->region_id = $region_id;
67                 if($location->validate() && $location->save())
68                 {
69                     return $location->id; // Если удалось сохранить, вернём идентификатор места расположения
70                 }
71             }
72         }
73         return FALSE; // Записать не удалось, вернём FALSE
74     }
75
76     /**
77      * Список всех мест/размещений.
78      * @return mixed
79      */
80     public function actionIndex()
81     {
82         $searchModel = new LocationsSearch();
83         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
84
85         return $this->render('index', [
86             'searchModel'  => $searchModel,
87             'dataProvider' => $dataProvider,
88         ]);
89     }
90
91     /**
92      * Показ одного места размещения (не используется).
93      * @param integer $id
94      * @return mixed
95      * @throws NotFoundHttpException если отсутствует место/размещение
96      */
97     public function actionView($id)
98     {
99         return $this->render('view', [
100             'model' => $this->findModel($id),
101         ]);
102     }
103
104     /**
105      * Создание нового места/размещения.
106      * В случае успешного создания,  происходит переход к списку всех мест/размещений.
107      * @return mixed
108      */
109     public function actionCreate()
110     {
111         $model = new Locations();
112
113         if ($model->load(Yii::$app->request->post()) && $model->save())
114         {
115             return $this->redirect([ 'index', 'id' => $model->id ]);
116         }
117
118         return $this->render('create', [
119             'model' => $model,
120         ]);
121     }
122
123     /**
124      * Изменение существующего места/размещения.
125      * В случаае успешного изменения, происходит переход к списку всех мест/размещений.
126      * @param integer $id
127      * @return mixed
128      * @throws NotFoundHttpException если отсутствует место/размещение
129      */
130     public function actionUpdate($id)
131     {
132         $model = $this->findModel($id);
133
134         if ($model->load(Yii::$app->request->post()) && $model->save())
135         {
136             return $this->redirect([ 'index', 'id' => $model->id ]);
137         }
138
139         return $this->render('update', [
140             'model' => $model,
141         ]);
142     }
143
144     /**
145      * Удаение существующего места/размещения.
146      * В случае успешного удаления, происходит переход к списку всех мест/размещений.
147      * @param integer $id
148      * @return mixed
149      * @throws NotFoundHttpException Усли отсутствует место/размещение
150      */
151     public function actionDelete($id)
152     {
153         $this->findModel($id)->delete();
154
155         return $this->redirect([ 'index' ]);
156     }
157
158     /**
159      * Finds the Locations model based on its primary key value.
160      * If the model is not found, a 404 HTTP exception will be thrown.
161      * @param integer $id
162      * @return Locations the loaded model
163      * @throws NotFoundHttpException if the model cannot be found
164      */
165     protected function findModel($id)
166     {
167         if (($model = Locations::findOne($id)) !== null)
168         {
169             return $model;
170         }
171
172         throw new NotFoundHttpException(Yii::t('locations', 'The requested page does not exist.'));
173     }
174 }