コード例 #1
0
 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));
 }