/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = AccesosAutmanual::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['id' => SORT_DESC]]]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere(['id' => $this->id, 'hora_desde' => $this->hora_desde, 'hora_hasta' => $this->hora_hasta, 'created_by' => $this->created_by, 'created_at' => $this->created_at, 'updated_by' => $this->updated_by, 'updated_at' => $this->updated_at]); $query->andFilterWhere(['like', 'estado', $this->estado]); return $dataProvider; }
public function actionIngreso($diferido = false) { // chequea que se haya elegido un porton, sino es asi se redirecciona a la eleccion de porton if (!\Yii::$app->session->get('porton')) { // se setea returnUrl para que funcione el goBack en portones/elegir (parecido a lo que hace login()) //Yii::$app->user->setReturnUrl(Yii::$app->urlManager->createUrl(['accesos/ingreso'])); return $this->redirect(['portones/elegir', 'backUrl' => 'accesos/ingreso']); } // inicializa modelo $model = new Accesos(); \Yii::$app->session->set('req_seguro', 0); // si viene por POST, es decir, si se intenta grabar if (isset($_POST['Accesos'])) { $model->attributes = $_POST['Accesos']; // setea la variable req_seguro de la sesion de acuerdo al valor del concepto que viene en el POST \Yii::$app->session->set('req_seguro', $model->accesosConcepto->req_seguro); // recupera de la sesion los 3 grupos $sessPersonas = \Yii::$app->session->get('ingpersonas'); $sessVehiculo = \Yii::$app->session->get('ingvehiculos'); $sessAutorizantes = \Yii::$app->session->get('autorizantes'); // se verifica que estén los 3 grupos cargados $rechaza = false; if (!$sessPersonas) { \Yii::$app->session->addFlash('danger', 'Debe especificar al menos una persona'); $rechaza = true; } if (!$sessVehiculo) { \Yii::$app->session->addFlash('danger', 'Debe especificar un vehiculo'); $rechaza = true; } if (!$sessAutorizantes) { \Yii::$app->session->addFlash('danger', 'Debe especificar al menos un autorizante'); $rechaza = true; } if ($sessPersonas) { // verifica los vencimientos de los seguros if ($model->accesosConcepto->req_seguro) { foreach ($sessPersonas as $segIDpersona) { $ps = Personas::findOne($segIDpersona); if (empty($ps->vto_seguro)) { \Yii::$app->session->addFlash('danger', 'Personas sin seguro'); $rechaza = true; break; } if ($this->fecVencida($ps->vto_seguro)) { \Yii::$app->session->addFlash('danger', 'Personas con seguro vencido'); $rechaza = true; break; } } } } if ($diferido) { if (!AccesosAutmanual::periodoManualActivo($model->ing_hora)) { \Yii::$app->session->addFlash('danger', 'Fecha/hora no está dentro de un periodo habilitado'); $rechaza = true; } } if ($rechaza) { // actualiza los 3 grupos en variables que se van a pasar al render // si se modifica, modificar tambien antes del render del final de la funcion $listas = $this->refreshListas(); return $this->render('ingreso', ['model' => $model, 'tmpListas' => $listas, 'diferido' => $diferido]); } // Para que coincidan las fechas y horas en todos los registros se utilizan variables auxiliares antes de grabar if ($diferido) { $fecAux = $model->ing_hora; $horAux = $model->ing_hora; } else { $fecAux = date("Y-m-d"); $horAux = new Expression('CURRENT_TIMESTAMP'); } // Comienza Transaccion $transaction = Yii::$app->db->beginTransaction(); try { foreach ($sessPersonas as $model->id_persona) { foreach ($sessVehiculo as $model->ing_id_vehiculo) { // Aunque deberia haber un solo vehiculo // Para que save() no funcione como update sino como insert, // se debe resetear el id y setear isNewRecord como true $model->id = null; $model->ing_fecha = $fecAux; $model->ing_hora = $horAux; $model->ing_id_porton = \Yii::$app->session->get('porton'); $model->ing_id_user = \Yii::$app->user->identity->id; $model->isNewRecord = true; if ($model->save()) { foreach ($sessAutorizantes as $id_autorizante) { $accaut = new AccesosAutorizantes(); $accaut->id_acceso = $model->id; $aut = Autorizantes::findOne($id_autorizante); $accaut->id_persona = $aut->id_persona; $accaut->id_uf = $aut->id_uf; $accaut->save(); } // foreach autorizantes } // if model->save() } //foreach vehiculos } //foreach personas // Todo bien $transaction->commit(); \Yii::$app->session->addFlash('success', 'Ingreso grabado correctamente'); // limpia todo \Yii::$app->session->remove('ingpersonas'); \Yii::$app->session->remove('ingvehiculos'); \Yii::$app->session->remove('autorizantes'); return $this->redirect(['ingreso']); } catch (\Exception $e) { $transaction->rollBack(); Yii::$app->session->addFlash('danger', 'Hubo un error en la grabación'); throw $e; } // try..catch } // if POST // actualiza los 3 grupos en un array que se va a pasar al render // si se modifica, modificar tambien dentro del if (rechaza) $listas = $this->refreshListas(); return $this->render('ingreso', ['model' => $model, 'tmpListas' => $listas, 'diferido' => $diferido]); }
<div class="accesos-autmanual-form"> <?php $form = ActiveForm::begin(); ?> <?php echo $form->field($model, 'hora_desde')->widget(DateControl::classname(), ['type' => DateControl::FORMAT_DATETIME, 'displayFormat' => 'php:d/m/Y H:i']); ?> <?php echo $form->field($model, 'hora_hasta')->widget(DateControl::classname(), ['type' => DateControl::FORMAT_DATETIME, 'displayFormat' => 'php:d/m/Y H:i']); ?> <?php echo $form->field($model, 'estado')->dropDownList(AccesosAutmanual::getEstados()); ?> <div class="form-group"> <?php echo Html::submitButton('Aceptar', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']); ?> </div> <?php ActiveForm::end(); ?> </div>
/** * Finds the AccesosAutmanual model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return AccesosAutmanual the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = AccesosAutmanual::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
<?php use yii\helpers\Html; use yii\widgets\DetailView; use frontend\models\AccesosAutmanual; /* @var $this yii\web\View */ /* @var $model frontend\models\AccesosAutmanual */ $this->title = 'Detalle de autorización'; $this->params['breadcrumbs'][] = ['label' => 'Autorización de accesos manuales', 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?> <div class="accesos-autmanual-view"> <h3><?php echo Html::encode($this->title); ?> </h3> <p> <?php echo Html::a($model->estado == AccesosAutmanual::ESTADO_ABIERTO ? 'Cerrar periodo' : 'Abrir periodo', ['update', 'id' => $model->id], ['class' => 'btn btn-danger', 'data' => ['confirm' => 'Está seguro de cambiar el estado de la autorización?', 'method' => 'post']]); ?> </p> <?php echo DetailView::widget(['model' => $model, 'attributes' => ['id', 'hora_desde:datetime', 'hora_hasta:datetime', ['attribute' => 'Estado', 'value' => AccesosAutmanual::getEstados($model->estado)], 'userCreatedBy.username', 'created_at:datetime', 'userUpdatedBy.username', 'updated_at:datetime']]); ?> </div>
.kv-grid-loading { opacity: 0.5; background: #ffffff url("../images/loading.gif") top center no-repeat !important; } '); ?> <div class="accesos-autmanual-index"> <h3><?php echo Html::encode($this->title); ?> </h3> <?php $columns = ['id', ['attribute' => 'hora_desde', 'format' => 'datetime'], ['attribute' => 'hora_hasta', 'format' => 'datetime'], ['attribute' => 'estado', 'value' => function ($model) { return AccesosAutmanual::getEstados($model->estado); }], ['class' => 'kartik\\grid\\ActionColumn', 'header' => Html::a('<span class="glyphicon glyphicon-plus-sign"></span>', ['create'], ['class' => 'btn-sm btn-primary', 'title' => Yii::t('app', 'Alta de autorización')]), 'template' => '{view} {comentario}', 'buttons' => ['comentario' => function ($url, $model) { $c = Comentarios::getComentariosByModelId($model->className(), $model->id); $text = '<span class="glyphicon glyphicon-copyright-mark"'; if (!empty($c)) { $text .= ' style="color:#FF8000"></span>'; $titl = 'Ingresar nuevo/Ver comentarios'; } else { $text .= '></span>'; $titl = 'Ingresar nuevo comentario'; } return Html::a($text, $url, ['title' => $titl, 'onclick' => '$.ajax({ type :"POST", cache : false, url : $(this).attr("href"), success : function(response) {