public function actionimport($id) { $nombreprimercampo = null; MiFactoria::limpialogcarga(); $carga = Cargamasiva::model()->findByPk($id); $carga->setScenario('search'); //verificando que haya llenado bien los campos de longitud y orden $filas = $carga->detalle; foreach ($filas as $filita) { if (!((int) $filita->longitud > 0) or !((int) $filita->orden > 0)) { throw new CHttpException(500, 'Revise la longitud y el orden del campo ' . $filita->nombrecampo . ' '); } if (is_null($nombreprimercampo)) { $nombreprimercampo = (int) $filita->orden == 1 ? $filita->nombrecampo : null; } } if (is_null($nombreprimercampo)) { throw new CHttpException(500, 'NO asignó un campo clave para la carga, debe tener el numero de orden 1 '); } /*$modelito= new Inventario(); var_dump(get_parent_class($modelito)); echo "<br><br><br>"; yii::app()->end();*/ /*$modelito=Inventario::model()->findByPk(2000); var_dump($modelito); yii::app()->end();*/ //hallando el modelo a cargar if (isset($_POST['Cargamasiva'])) { //$model->attributes=$_POST['Alinventario']; $filelist = CUploadedFile::getInstancesByName('csvfile'); foreach ($filelist as $file) { $carga->ruta = Yii::getPathOfAlias('webroot') . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . time() . '.' . $file->getExtensionName(); $file->saveAS($carga->ruta, false); //$transaction = Yii::app()->db->beginTransaction(); $handle = fopen("{$file->tempName}", "r"); $row = 1; while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { if ($row > 1) { if ($carga->insercion == '1') { $cadena = "\$model= new " . $carga->modelo . ";"; } else { $cadena = " \$model= " . $carga->modelo . "::Model()->find('" . $nombreprimercampo . "=:param ', array(':param'=>'" . $data[0] . "')); "; } eval($cadena); if (is_null($model)) { MiFactoria::registralogcarga($row - 1, $carga->id, ' No se encontro ningun registro para el valor : ' . $filas[$i]->nombrecampo . ' = ' . $data[0] . ' ', $filas[$i]->nombrecampo, 0); continue; } $model->setScenario($carga->escenario); //Si el numero de campos leidos = numero de campos de la carga if (count($data) != $carga->numeroitems) { MiFactoria::registralogcarga($row - 1, $carga->id, 'El numero de campos del objeto Carga y el archivo no coinciden.', 'todos', 0); throw new CHttpException(500, 'El numero de campos del objeto Carga (' . $carga->numeroitems . ') y el archivo (' . count($data) . ') no coinciden.'); } //verificando que los datos ean ocnsistentes foreach ($data as $i => $valorx) { //si excede la longitud /* var_dump(strlen(trim($data[$i]))); echo "<br>"; $model->{$filas[$i]->nombrecampo}='amigi'; var_dump($model->{$filas[$i]->nombrecampo}); yii::app()->end(); */ if (!($carga->insercion != '1' and $i == 0)) { ///Si es actuyalizacion y es el primer campo if ($filas[$i]->longitud < strlen(trim($valorx))) { MiFactoria::registralogcarga($row - 1, $carga->id, ' El valor es demasiado largo para este campo', $filas[$i]->nombrecampo, 0); } } //$huboerror=true; if (!($carga->insercion != '1' and $i == 0)) { ///Si no es actuyalizacion y es el primer campo //si es requerido y no hay nada if ($filas[$i]->requerida == '1' and (is_null($valorx) or $valorx == "" or empty($valorx) or trim($valorx) == "")) { MiFactoria::registralogcarga($row - 1, $carga->id, ' Este campo es obligatorio', $filas[$i]->nombrecampo, 0); } } //si no es del tipo if ($filas[$i]->tipo == 'date' and preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $valorx) == 0) { MiFactoria::registralogcarga($row - 1, $carga->id, ' Los formatos de fecha deben ser de la forma YYYY-MM-DD ', $filas[$i]->nombrecampo, 0); } ///ahora colocar los campos del modelo a llenar if ($carga->insercion != '1') { if ($i > 0) { $model->{$filas[$i]->nombrecampo} = $valorx; } } else { $model->{$filas[$i]->nombrecampo} = $valorx; } } ///Listo ya tratamos la fila ahora a validar el registro del $model llenado $model->validate(); $errores = $model->geterrors(); $mensaje = ""; /*echo $model->getScenario(); echo "<br>"; echo "<br>"; print_r($model->attributes); echo "<br>"; echo "<br>"; print_r($errores); yii::app()->end();*/ if (count($errores) == 0) { MiFactoria::registralogcarga($row - 1, $carga->id, ' OK', $nombreprimercampo, 1); } else { foreach ($errores as $clave => $valor) { foreach ($valor as $clavi => $valori) { $mensaje .= $clavi . ")" . $valori . "\n"; } MiFactoria::registralogcarga($row - 1, $carga->id, $valori, $clave, 0); } } } $row++; } } $this->render('logerrores', array('model' => $carga, 'ruta' => $carga->ruta)); yii::app()->end(); } else { echo "NO se ha enviado ningun form"; } $this->render('cargainventario', array('model' => $carga)); }