public function actionEgreso($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/egreso']));
         return $this->redirect(['portones/elegir', 'backUrl' => 'accesos/egreso']);
     }
     // inicializa modelo
     $model = new Accesos();
     // si viene por POST, es decir, si se intenta grabar
     if (isset($_POST['Accesos'])) {
         $model->attributes = $_POST['Accesos'];
         // recupera de la sesion los 2 grupos
         $sessPersonas = \Yii::$app->session->get('egrpersonas');
         $sessVehiculo = \Yii::$app->session->get('egrvehiculos');
         // se verifica que estén los 2 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 ($diferido) {
             if (!AccesosAutmanual::periodoManualActivo($model->egr_hora)) {
                 \Yii::$app->session->addFlash('danger', 'Fecha/hora no está dentro de un periodo habilitado');
                 $rechaza = true;
             }
         }
         if ($rechaza) {
             // actualiza los 2 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('egreso', ['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->egr_hora;
             $horAux = $model->egr_hora;
         } else {
             $fecAux = date("Y-m-d");
             $horAux = new Expression('CURRENT_TIMESTAMP');
         }
         // Comienza Transaccion
         $transaction = Yii::$app->db->beginTransaction();
         try {
             $controlEgreso = $model->control;
             foreach ($sessPersonas as $id_persona) {
                 $model = Accesos::find()->where(['id_persona' => $id_persona, 'egr_fecha' => null])->orderBy(['id' => SORT_DESC])->one();
                 if (!empty($model)) {
                     foreach ($sessVehiculo as $model->egr_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->egr_fecha = $fecAux;
                         $model->egr_hora = $horAux;
                         $model->egr_id_porton = \Yii::$app->session->get('porton');
                         $model->egr_id_user = \Yii::$app->user->identity->id;
                         if ($controlEgreso) {
                             if ($model->control) {
                                 $model->control = $model->control . '.- ' . $controlEgreso;
                             } else {
                                 $model->control = $controlEgreso;
                             }
                         }
                         $model->save();
                     }
                 } else {
                     $model = new Accesos();
                     foreach ($sessVehiculo as $model->egr_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->id_persona = $id_persona;
                         $model->ing_id_vehiculo = $model->egr_id_vehiculo;
                         $model->ing_fecha = $fecAux;
                         $model->ing_hora = $horAux;
                         $model->egr_fecha = $fecAux;
                         $model->egr_hora = $horAux;
                         $model->egr_id_porton = \Yii::$app->session->get('porton');
                         $model->ing_id_porton = $model->egr_id_porton;
                         $model->egr_id_user = \Yii::$app->user->identity->id;
                         $model->ing_id_user = \Yii::$app->user->identity->id;
                         $model->id_concepto = 0;
                         $model->motivo = 'Sin ingreso';
                         $model->isNewRecord = true;
                         $model->save();
                     }
                 }
                 //foreach vehiculos
             }
             //foreach personas
             // Todo bien
             $transaction->commit();
             \Yii::$app->session->addFlash('success', 'Egreso grabado correctamente');
             // limpia todo
             \Yii::$app->session->remove('egrpersonas');
             \Yii::$app->session->remove('egrvehiculos');
             return $this->redirect(['egreso']);
         } 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 2 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('egreso', ['model' => $model, 'tmpListas' => $listas, 'diferido' => $diferido]);
 }