public function actionCreate2() { if (Yii::app()->request->isAjaxRequest) { $model = new Carga(); $models_practicas = $model->getPracticas(); if (isset($_POST['Carga'])) { $tran = Yii::app()->db->beginTransaction(); $codigocarga = $_POST['codigocarga']; // arreglo con las practicas cargadas en la grilla $model->setAttributes($_POST['Carga']); $model->distrito = 1; // Por ahora distrito IX $model->idcargatipo = 1; // Facturación $model->periodofacturacion = Parametro::model()->getParametro('PERIODOCARGA', 'CARGA')->valoralfanumerico; $model->agregarValidadores(); try { // Cargo primero los datos de las prácticas por si hay un error // en la cabecera. Sino se borran // También verifico que haya al menos una práctica cargada $cant_pr = 0; foreach ($_POST['Practicacarga'] as $i => $item) { $models_practicas[$i]->setAttributes($_POST['Practicacarga'][$i]); if ($models_practicas[$i]->idpractica > 0) { $cant_pr++; } } if ($model->save()) { if ($cant_pr == 0) { throw new Exception("Debe cargar al menos una práctica"); } foreach ($_POST['Practicacarga'] as $i => $item) { // Solo almaceno las prácticas que se cargaron if ($models_practicas[$i]->idpractica > 0) { $models_practicas[$i]->idcarga = $model->idcarga; $models_practicas[$i]->precio = 0; // Grabo 0 por ahora if (!$models_practicas[$i]->save()) { throw new Exception("Error al grabar práctica"); } } } $tran->commit(); // Ver con hugo por ahora lo resuelvo así Yii::app()->user->setFlash('success', "Se grabó correctamente."); } } catch (Exception $e) { $model->addError('', $e->getMessage()); $tran->rollback(); } } Yii::app()->clientScript->scriptMap = array('jquery.js' => false, 'jquery-ui.min.js' => false, 'jquery-ui-i18n.min.js' => false, 'select2.js' => false, 'bootstrap.js' => false, 'select2_locale_es.js' => false); $this->renderPartial('_formpracticas', array('model' => $model, 'models_practicas' => $models_practicas, 'codigocarga' => $codigocarga), false, true); } }