/** * Creates a new Reserva model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { $model = new Reserva(); $modelHora = new Hora(); $modelsExamen = [new HoraExamenSolicitado()]; if ($model->load(Yii::$app->request->post()) && $modelHora->load(Yii::$app->request->post())) { $modelsExamen = Model::createMultiple(HoraExamenSolicitado::classname()); Model::loadMultiple($modelsExamen, Yii::$app->request->post()); $valid = $model->validate(); $valid = $modelHora->validate() && $valid; $valid = Model::validateMultiple($modelsExamen) && $valid; if ($valid) { $transaction = \Yii::$app->db->beginTransaction(); try { $administrador = Administrador::find()->where(['id' => Yii::$app->user->getId()])->one(); $modelHora->administrador_id = $administrador->id; $modelHora->save(false); $profesional = Profesional::find()->where(['id' => $modelHora->profesional_id])->one(); $persona = Persona::find()->where(['id' => $profesional->persona_id])->one(); $model->hora_medica_id = $modelHora->id; $model->persona_id_ingresa_reserva = $persona->id; $model->save(false); foreach ($modelsExamen as $modelExamen) { $modelExamen->hora_id = $model->hora_medica_id; if (!($flag = $modelExamen->save(false))) { $transaction->rollBack(); break; } } if ($flag) { $transaction->commit(); return $this->redirect(['view', 'id' => $model->id]); } } catch (Exception $e) { $transaction->rollBack(); } } } else { return $this->render('create', ['model' => $model, 'modelHora' => $modelHora, 'modelsExamen' => empty($modelsExamen) ? [new HoraExamenSolicitado()] : $modelsExamen]); } }