public function actionCoseguro() { $model = new Descuentocoseguro(); // Período de carga/facturación actual $model->periodofacturacion = Parametro::model()->getParametro('PERIODOCARGA', 'CARGA')->valoralfanumerico; $modelHijo = null; if (isset($_POST['Descuentocoseguro'])) { $transac = Yii::app()->db->beginTransaction(); try { $id = $_POST['Descuentocoseguro']['iddescuentocoseguro']; $model->iddescuentocoseguro = $id; // Valida que hayan seleccionado el tipo de descuento if (!$model->validate(array('iddescuentocoseguro'))) { throw new Exception(""); } // Cargo el modelo según lo que vino por form $modelHijo = $this->loadModel($id); // Obtengo datos del modelo padre $model->setAttributes($_POST['Descuentocoseguro']); // Datos del modelo padre e hijo $modelHijo->setAttributes($_POST['Descuentocoseguro']); $modelHijo->setAttributes($_POST[get_class($modelHijo)]); // Valido sólo el modelo Hijo ya que contiene todas las reglas if ($modelHijo->validate()) { // sumadores $totaldescontado = 0; $totalborrado = 0; $aBorradas = array(); // quito / del periodo $modelHijo->periodofacturacion = str_replace('/', '', $model->periodofacturacion); $boletas = $modelHijo->traeBoletas(); if (count($boletas) == 0) { throw new Exception("No se encontraron boletas para revalorizar"); } // Traigo las boletas según el tipo de coseguro foreach ($boletas as $boleta) { $descuento = $modelHijo->getDescuento($boleta); // Actualizo los valores en la boleta $boleta->cosegurodesc = $boleta->cosegurodesc + $descuento; // Actualizo el valor del coseguro descontado en la boleta $boleta->update(); // Si el total de la boleta con el descuento es <=0 la borro if ($boleta->totalBoletaConDescuento <= 0) { $totalborrado = $totalborrado + $boleta->totalBoleta; // Guardo el objeto a la lista de borradas array_push($aBorradas, array("Nro Movimiento eliminado" => $boleta->idcarga, "Total Original" => $boleta->totalBoleta, "Coseguro Descontado" => $boleta->cosegurodesc)); $boleta->delete(); } else { $totaldescontado = $totaldescontado + $descuento; } } $transac->commit(); // Muestro resultados $this->actionResultado($modelHijo->nombre, $totaldescontado, $totalborrado, $aBorradas); Yii::app()->end(); } } catch (Exception $e) { $transac->rollback(); // Si ya esta definido el modelo hijo agrego el error, sino // se lo agrego al modelo padre if (isset($modelHijo)) { $modelHijo->addError('', $e->getMessage()); } else { $model->addError('', $e->getMessage()); } } } $this->render('create', array('model' => $model, 'modelHijo' => $modelHijo)); }