public function actionAssignToGrid() { $LastBC = Proc::GetLastBreadcrumbsFromSession(); if ($LastBC['dopparams']['foreign']['model'] === 'Authassignment') { Proc::AssignToModelFromGrid(True, new Authassignment(), 'user_id'); } elseif ($LastBC['dopparams']['foreign']['model'] === 'Authitemchild') { Proc::AssignToModelFromGrid(True, new Authitemchild(), 'parent'); } }
<?php use yii\helpers\Html; use kartik\dynagrid\DynaGrid; use app\func\Proc; use yii\helpers\Url; /* @var $this yii\web\View */ /* @var $searchModel app\models\Fregat\TrMatSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = 'Установленные комплектующие'; $this->params['breadcrumbs'] = Proc::Breadcrumbs($this); ?> <div class="tr-mat-index"> <?php $result = Proc::GetLastBreadcrumbsFromSession(); $foreign = isset($result['dopparams']['foreign']) ? $result['dopparams']['foreign'] : ''; echo DynaGrid::widget(Proc::DGopts(['options' => ['id' => 'trmatgrid'], 'columns' => Proc::DGcols(['columns' => ['idMattraffic.idMaterial.material_name', 'idMattraffic.idMaterial.material_inv', 'idMattraffic.mattraffic_number', ['attribute' => 'idParent.idMaterial.material_name', 'label' => 'Укомплекторано в мат-ую цен-ть'], ['attribute' => 'idParent.idMaterial.material_inv', 'label' => 'Инвентарный номер мат-ой цен-ти, в которую укомплектован материал'], ['attribute' => 'idParent.idMol.idbuild.build_name', 'label' => 'Здание, где установлено'], ['attribute' => 'idParent.trOsnovs.tr_osnov_kab', 'label' => 'Кабинет, где установлено', 'value' => function ($model) { return $model->idParent->trOsnovs[0]->tr_osnov_kab; }], ['attribute' => 'idMattraffic.idMol.idperson.auth_user_fullname', 'label' => 'ФИО материально-ответственного лица'], ['attribute' => 'idMattraffic.idMol.iddolzh.dolzh_name', 'label' => 'Должность материально-ответственного лица']], 'buttons' => array_merge(empty($foreign) ? [] : ['chooseajax' => ['Fregat/tr-mat/assign-to-grid']])]), 'gridOptions' => ['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'panel' => ['heading' => '<i class="glyphicon glyphicon-align-paste"></i> ' . $this->title]]])); ?> </div>
/** * Присваивает выбранное значение из справочника модели, в сессии. * При выборе значения из справочника, значение присваивается в сессию предыдущей хлебной крошки, для формы, с которой был открыт справочник. * @param bool $RedirectPreviousUrl * @param ActiveRecord $ActiveRecord Модель к которой присваивается знаечния из справочника. * @param string $AttributeForeignID Имя атрибута * @return string */ public static function AssignToModelFromGrid($RedirectPreviousUrl = True, $ActiveRecord = NULL, $AttributeForeignID = NULL) { if (Yii::$app->request->isAjax) { $LastBC = Proc::GetLastBreadcrumbsFromSession(); $assigndata = filter_input(INPUT_POST, 'assigndata'); $foreign = isset($LastBC['dopparams']['foreign']) ? $LastBC['dopparams']['foreign'] : ''; if (!empty($foreign) && !empty($assigndata)) { $BC = Proc::GetBreadcrumbsFromSession(); end($BC); prev($BC); $BC[key($BC)]['dopparams'][$foreign['model']][$foreign['field']] = $assigndata; $session = new Session(); $session->open(); $session['breadcrumbs'] = $BC; $session->close(); if ($ActiveRecord instanceof ActiveRecord && is_string($AttributeForeignID)) { $field = $LastBC['dopparams']['foreign']['field']; if ($ActiveRecord->formName() === $LastBC['dopparams']['foreign']['model']) { $ActiveRecord->{$field} = $assigndata; $ActiveRecord->{$AttributeForeignID} = $foreign['id']; if ($ActiveRecord->validate()) { $ActiveRecord->save(false); } } } if ($RedirectPreviousUrl) { Yii::$app->response->redirect(Proc::GetPreviousURLBreadcrumbsFromSession()); } } else { return 'error foreign or assigndata empty AssignToModelFromGrid()'; } } }