OSDN Git Service

2afcd89f75633c0516c34c87c3b586b65c0c5dae
[invent/invent.git] / views / items / index.php
1 <?php
2
3 use yii\helpers\Html;
4 use yii\grid\GridView;
5 use yii\widgets\Pjax;
6 use yii\helpers\Url;
7 use yii\widgets\DetailView;
8 use yii\helpers\ArrayHelper;
9 use app\models\Status;
10 use app\models\User;
11
12 /* @var $this yii\web\View */
13 /* @var $searchModel app\models\ItemsSearch */
14 /* @var $dataProvider yii\data\ActiveDataProvider */
15
16 $this->title = Yii::t('items', 'Items');
17 $this->params[ 'breadcrumbs' ][] = $this->title;
18
19 // Формирование колонок и кнопок
20 // номер строки
21 $columns = [[ 'class' => 'yii\grid\SerialColumn' ]];
22 // Кнопки действий {view} {update} {delete} {print}
23 $template = '';
24 $buttons = [];
25 if (User::canPermission('updateRecord'))
26 {
27     // Кнопки
28     $template .= ' {delete}';
29     // Инвентарный номер
30     array_push($columns, [ 'attribute' => 'invent',
31         'value' => function ($data)
32         {
33             return showUrlUpdate($data->invent, $data);
34         },
35         'format' => 'raw',
36     ] );
37
38     // Серийный номер
39     array_push($columns, [ 'attribute' => 'serial',
40         'value' => function ($data)
41         {
42             return showUrlUpdate($data->serial, $data);
43         },
44         'format' => 'raw',
45     ] );
46
47     // Модель
48     array_push($columns, [ 'attribute' => 'modelName',
49         'value' => function ($data)
50         {
51             if ($data->name == '')
52             {
53                 return showUrlUpdate($data->modelName, $data);
54             }
55             else
56             {
57                 return showUrlUpdate($data->modelName . ' (' . $data->name . ')', $data);
58             }
59         },
60         'format' => 'raw',
61     ] );
62
63     /* // Идентификатор записи
64     array_push($columns, [ 'attribute' => 'id',
65         'value' => function ($data)
66         {
67             return showUrlUpdate($data->id, $data);
68         },
69         'format' => 'raw',
70     ] ); // */
71
72     /* // Сетевое имя
73     array_push($columns, [ 'attribute' => 'name',
74         'value' => function ($data)
75         {
76             return showUrlUpdate($data->name, $data);
77         },
78         'format' => 'raw',
79     ] ); // */
80
81     // Название подразделения
82     array_push($columns, [ 'attribute' => 'regionName',
83         'value' => function ($data)
84         {
85             return showUrlUpdate($data->regionName . ' (' . $data->locationName . ')', $data);
86         },
87         'format' => 'raw',
88     ] ); // */
89
90     // Состояние
91     array_push($columns, [ 'attribute' => 'statusName',
92         'filter' => Html::activeDropDownList(
93             $searchModel,
94             'statusName',
95             ArrayHelper::merge(
96                 [ '' => Yii::t('app', 'All statuses'), ],
97                 ArrayHelper::map(Status::find()->orderBy('name')->all(), 'name', 'name')
98             ),
99             [ 'class' => 'form-control', ],
100         ) ,
101         'value' => function ($data)
102         {
103             return showUrlUpdate($data->statusName, $data);
104         },
105         'format' => 'raw',
106     ] ); // */
107
108     /* // Операционная система
109     array_push($columns, [ 'attribute' => 'os',
110         'value' => function ($data)
111         {
112             return showUrlUpdate($data->os, $data);
113         },
114         'format' => 'raw',
115     ] ); // */
116
117     /* // МАС - адрес
118     array_push($columns, [ 'attribute' => 'mac',
119         'value' => function ($data)
120         {
121             return showUrlUpdate($data->mac, $data);
122         },
123         'format' => 'raw',
124     ] ); // */
125
126     /* // Примечания
127     array_push($columns, [ 'attribute' => 'comment',
128         'value' => function ($data)
129         {
130             return showUrlUpdate($data->comment, $data);
131         },
132         'format' => 'raw',
133     ] ); // */
134
135
136 }
137 else
138 {
139     array_push($columns, 'invent');
140     array_push($columns, 'serial');
141     array_push($columns, 'modelName');
142     //array_push($columns, 'id');
143     //array_push($columns, 'name');
144     array_push($columns, [ 'attribute' => 'regionName',
145         'value' => function($data)
146         {
147             return $data->regionName .  ' (' . $data->locationName . ')';
148         },
149     ]);
150     array_push($columns, [ 'attribute' => 'statusName',
151         'filter' => Html::activeDropDownList(
152             $searchModel,
153             'statusName',
154             ArrayHelper::merge(
155                 [ '' => Yii::t('app', 'All statuses') ],
156                 ArrayHelper::map(Status::find()->orderBy('name')->all(), 'name', 'name')),
157             [ 'class' => 'form-control' ],
158         ),
159         'value' => 'statusName',
160     ]);
161     //array_push($columns, 'os');
162     //array_push($columns, 'mac');
163     //array_push($columns, 'product');
164     //array_push($columns, 'modelnumber');
165     //array_push($columns, 'comment');
166 }
167
168 if (User::canPermission('takingInventory'))
169 {
170     // Кнопки
171     $template .= ' {print}';
172     $buttons = [
173                 'print' => function ($url, $model, $key)
174                     {
175                         return Html::a('<span class="glyphicon glyphicon-print"></span>',
176                             Url::to([ 'print', 'id[]' => $model->id ], 'http'),
177                             [ 'target' => '_blank',
178                                 'onclick' => 'markToPrint($(this));',
179                                 'title' => Yii::t('items', 'Print selected labels'),
180                             ]);
181                     },
182     ];
183     // Чекбоксы для выбора предметов/оборудования для печати QR меток
184     array_push($columns,
185             [ 'class' => 'yii\grid\CheckboxColumn',
186                 'checkboxOptions' => function($model, $key, $index, $column)
187                     {
188                         return [ 'value' => $model->id, ];
189                     },
190             ]
191     );
192 }
193
194 array_push($columns, [
195     'class' => 'yii\grid\ActionColumn',
196     'template' => $template,
197     'buttons' => $buttons,
198 ]);
199 ?>
200 <div class="items-index">
201
202     <h1><?= Html::encode($this->title) ?></h1>
203
204 <script language="JavaScript">
205     function markToPrint(href)
206     {
207         url = href.attr("href");
208         var ids = $("input[name='selection[]']");
209         var res = '';
210         for ( var i = 0; i < ids.length; i++)
211         {
212             if (ids[ i ][ "checked" ] == true)
213             {
214                 res += "&id[]=" + ids[ i ][ "value" ];
215             }
216         }
217         href.attr("href", url + res);
218         return false;
219     }
220 </script>
221
222     <div class="row">
223         <?php // Кнопки на форме 
224             if (User::canPermission('createRecord'))
225             {
226         ?>
227         <div class="col-md-2"><?= Html::a(Yii::t('items', 'Create Items'),
228             [ 'create' ],
229             [ 'class' => 'btn btn-success' ]) ?></div>
230             <?php
231             }
232             if (User::canPermission('updateRecord'))
233             {
234             ?>
235         <div class="col-md-2"><?= Html::a(Yii::t('items', 'Import'),
236             [ 'import' ],
237             [ 'class' => 'btn btn-success',
238                 'style' => 'width: 100%;',
239             ]) ?></div>
240         <div class="col-md-2"><?= Html::a(Yii::t('items', 'Print Items'),
241             Url::to([ 'print' ], 'http'),
242             [ 'class' => 'btn btn-warning',
243                 'style' => 'width: 100%;',
244                 'target' => '_blank',
245             ]) ?></div>
246             <?php
247             }
248             if (User::canPermission('takingInventory'))
249             {
250             ?>
251         <div class="col-md-2"><?= Html::a(Yii::t('items', 'Start checking'),
252             [ 'start_checking' ],
253             [ 'class' => 'btn btn-info',
254             ]) ?></div>
255         <?php
256             }
257         ?>
258     </div>
259
260     <?= GridView::widget([
261         'id' => 'ItemsTable',
262         'dataProvider' => $dataProvider, // Источник данных
263         'filterModel' => $searchModel,   // Модель поиска
264         'rowOptions' => function($model) // Функция окраски неинвентаризированных предметов/оборудования
265             {
266                 if ($model->checked == false)     // Критерий проверки планируется
267                 {
268                     return [ 'class' => 'danger' ]; // Отметка неинвентаризированной строки
269                 } else
270                 if ($model->statusName == 'Списано')
271                 {
272                     return [ 'class' => 'info' ];
273                 }
274             },
275         'columns' => $columns,
276     ]); ?>
277
278 </div>