public function getDatos(OrigenDatos $origenDato) { $datos = array(); $nombre_campos = array(); if ($origenDato->getSentenciaSql() != '') { $conexion = $origenDato->getConexion(); $conn = $this->getEntityManager()->getRepository('IndicadoresBundle:Conexion')->getConexionGenerica($conexion); try { $query = $conn->query($origenDato->getSentenciaSql()); if ($query->rowCount() > 0) { $datos = $query->fetchAll(); $nombre_campos = array_keys($datos[0]); } } catch (\PDOException $e) { return false; } catch (DBAL\DBALException $e) { return false; } } else { $reader = new Excel(); try { $reader->loadFile($origenDato->getAbsolutePath()); $datos_aux = $reader->getSheet()->toArray(null, false, false, false); $nombre_campos = array_values(array_shift($datos_aux)); // Buscar por columnas que tengan null en el título $primer_null = array_search(null, $nombre_campos); if ($primer_null == false) { foreach ($datos_aux as $fila) { $datos[] = $fila; } } else { $nombre_campos = array_slice($nombre_campos, 0, $primer_null, true); foreach ($datos_aux as $fila) { $datos[] = array_slice($fila, 0, $primer_null, true); } } $fix_datos = array(); foreach ($datos as $k => $f) { foreach ($f as $indice => $campo) { $fix_datos[$k][$nombre_campos[$indice]] = trim($campo); } } } catch (\Exception $e) { return false; } $datos = $fix_datos; } return $datos; }
public function getDatos($sql, $conexion, $ruta_archivo = null) { $datos = array(); $nombre_campos = array(); if ($ruta_archivo == null) { //$conexion = $origenDato->getConexion(); $conn = $this->getEntityManager()->getRepository('IndicadoresBundle:Conexion')->getConexionGenerica($conexion); try { if ($conexion->getIdMotor()->getCodigo() == 'pdo_dblib') { $query = mssql_query($sql, $conn); if (mssql_num_rows($query) > 0) { while ($row = mssql_fetch_assoc($query)) { $datos[] = $row; } $nombre_campos = array_keys($datos[0]); } } else { $query = $conn->query($sql); while ($row = $query->fetch()) { $datos[] = $row; } $nombre_campos = array_keys($datos[0]); } } catch (\PDOException $e) { return false; } catch (\Exception $e) { return false; } catch (DBAL\DBALException $e) { return false; } } else { $reader = new Excel(); try { $reader->loadFile($ruta_archivo); $datos_aux = $reader->getSheet()->toArray($nullValue = null, $calculateFormulas = true, $formatData = false, $returnCellRef = false); $nombre_campos = array_values(array_shift($datos_aux)); // Buscar por columnas que tengan null en el título $primer_null = array_search(null, $nombre_campos); if ($primer_null == false) { foreach ($datos_aux as $fila) { $datos[] = $fila; } } else { $nombre_campos = array_slice($nombre_campos, 0, $primer_null, true); foreach ($datos_aux as $fila) { $datos[] = array_slice($fila, 0, $primer_null, true); } } $fix_datos = array(); foreach ($datos as $k => $f) { // determinar que datos tienen todos sus campos nulos $todosNULL = true; foreach ($f as $indice => $campo) { $fix_datos[$k][$nombre_campos[$indice]] = trim($campo); if (!empty($fix_datos[$k][$nombre_campos[$indice]])) { $todosNULL = false; } } if ($todosNULL) { unset($fix_datos[$k]); } } } catch (\Exception $e) { return false; } $datos = $fix_datos; } return $datos; }
/** * @Route("/origen_dato/{id}/leer", name="origen_dato_leer", options={"expose"=true}) */ public function leerOrigenAction(OrigenDatos $origenDato) { $resultado = array('estado' => 'ok', 'mensaje' => '', 'tipo_origen' => '', 'es_catalogo' => '', 'nombre_campos' => array(), 'datos' => array()); $recargar = $this->getRequest()->get('recargar') == 'false' ? false : true; $em = $this->getDoctrine()->getManager(); $resultado['es_catalogo'] = $origenDato->getEsCatalogo() ? true : false; $sql = "SELECT tp\n FROM IndicadoresBundle:TipoCampo tp\n ORDER BY tp.descripcion"; $resultado['tipos_datos'] = $em->createQuery($sql)->getArrayResult(); $sql = "SELECT dic\n FROM IndicadoresBundle:Diccionario dic\n ORDER BY dic.descripcion"; $resultado['diccionarios'] = $em->createQuery($sql)->getArrayResult(); $sql = "SELECT sv\n FROM IndicadoresBundle:SignificadoCampo sv\n WHERE sv.usoEnCatalogo = :uso_en_catalogo\n ORDER BY sv.descripcion"; $resultado['significados'] = $em->createQuery($sql)->setParameter('uso_en_catalogo', $resultado['es_catalogo'] ? 'true' : 'false')->getArrayResult(); //recuperar los campos ya existentes en el origen de datos $campos_existentes = $em->getRepository('IndicadoresBundle:Campo')->findBy(array('origenDato' => $origenDato)); $campos = array(); foreach ($campos_existentes as $campo) { $campos[$campo->getNombre()]['id'] = $campo->getId(); } $resultado['campos'] = $campos; if (count($campos_existentes) == 0 or $recargar == true) { if ($origenDato->getSentenciaSql() != '') { $resultado['tipo_origen'] = 'sql'; $sentenciaSQL = $origenDato->getSentenciaSql(); $conexiones = $origenDato->getConexiones(); if ($conexiones[0] == null) { $resultado['mensaje'] = $this->get('translator')->trans('sentencia_error') . ': ' . $this->get('translator')->trans('_no_conexion_configurada_'); $resultado['estado'] = 'error'; } else { $conn = $this->getConexionGenerica('consulta_sql', $conexiones[0]); try { if ($this->driver == 'pdo_dblib') { $sentenciaSQL = str_ireplace('SELECT', 'SELECT TOP 20 ', $sentenciaSQL); $query = mssql_query($sentenciaSQL, $conn); if (mssql_num_rows($query) > 0) { while ($row = mssql_fetch_assoc($query)) { $resultado['datos'][] = $row; } $resultado['nombre_campos'] = array_keys($resultado['datos'][0]); } } else { $query = $conn->query($sentenciaSQL . ' LIMIT 20'); if ($query->rowCount() > 0) { $resultado['datos'] = $query->fetchAll(); $resultado['nombre_campos'] = array_keys($resultado['datos'][0]); } } $resultado['estado'] = 'ok'; $resultado['mensaje'] = '<span style="color: green">' . $this->get('translator')->trans('sentencia_success'); } catch (\PDOException $e) { $resultado['mensaje'] = $this->get('translator')->trans('sentencia_error') . ' 1: ' . $e->getMessage(); } catch (DBAL\DBALException $e) { $resultado['mensaje'] = $this->get('translator')->trans('sentencia_error') . ' 2: ' . $e->getMessage(); } catch (\Exception $e) { $resultado['mensaje'] = $this->get('translator')->trans('sentencia_error') . ' 3: ' . $e->getMessage(); } } } else { $resultado['tipo_origen'] = 'archivo'; $reader = new Excel(); try { $reader->loadFile($origenDato->getAbsolutePath()); $datos = $reader->getSheet()->toArray($nullValue = null, $calculateFormulas = true, $formatData = false, $returnCellRef = false); $resultado['nombre_campos'] = array_values(array_shift($datos)); // Buscar por columnas que tengan null en el título $primer_null = array_search(null, $resultado['nombre_campos']); if ($primer_null == false) { foreach ($datos as $fila) { $resultado['datos'][] = $fila; } } else { $resultado['nombre_campos'] = array_slice($resultado['nombre_campos'], 0, $primer_null, true); foreach ($datos as $fila) { $resultado['datos'][] = array_slice($fila, 0, $primer_null, true); } } $resultado['estado'] = 'ok'; // Poner el nombre de la columna como indice del arreglo $aux = array(); foreach ($resultado['datos'] as $fila) { $aux[] = array_combine($resultado['nombre_campos'], $fila); } $resultado['datos'] = $aux; } catch (\Exception $e) { $resultado['estado'] = 'error'; $resultado['mensaje'] = $e->getMessage(); } } // Guardar los campos if ($resultado['estado'] == 'ok') { $nombres_id = array(); $campo = array(); //Por defecto poner tipo entero $tipoCampo = $em->getRepository("IndicadoresBundle:TipoCampo")->findOneByCodigo('integer'); $util = new \MINSAL\IndicadoresBundle\Util\Util(); foreach ($resultado['nombre_campos'] as $k => $nombre) { // si existe no guardarlo $nombre_campo = $util->slug($nombre); if (!array_key_exists($nombre_campo, $campos)) { $campo[$k] = new Campo(); $campo[$k]->setNombre($nombre_campo); $campo[$k]->setOrigenDato($origenDato); $campo[$k]->setTipoCampo($tipoCampo); $em->persist($campo[$k]); $nombres_id[$campo[$k]->getId()] = $nombre_campo; } else { $nombres_id[$campos[$nombre_campo]['id']] = $nombre_campo; } } //Borrar algún campo que ya no se use foreach ($campos_existentes as $campo) { if (!in_array($campo->getNombre(), $nombres_id)) { $em->remove($campo); } } try { $em->flush(); } catch (\Exception $e) { $resultado = array('estado' => 'error', 'mensaje' => '<div class="alert alert-danger"> ' . $this->get('translator')->trans('camio_no_realizado') . '</div>'); } $resultado['nombre_campos'] = $nombres_id; } $campos_existentes = $em->getRepository('IndicadoresBundle:Campo')->findBy(array('origenDato' => $origenDato)); } else { foreach ($campos_existentes as $campo) { $nombre_campos[$campo->getId()] = $campo->getNombre(); } $resultado['nombre_campos'] = $nombre_campos; } $campos = array(); foreach ($campos_existentes as $campo) { $campos[$campo->getNombre()]['id'] = $campo->getId(); $campos[$campo->getNombre()]['significado'] = $campo->getSignificado() ? $campo->getSignificado()->getId() : null; $campos[$campo->getNombre()]['significado_codigo'] = $campo->getSignificado() ? $campo->getSignificado()->getCodigo() : null; $campos[$campo->getNombre()]['diccionario'] = $campo->getDiccionario() ? $campo->getDiccionario()->getId() : null; $campos[$campo->getNombre()]['tipo'] = $campo->getTipoCampo() ? $campo->getTipoCampo()->getId() : null; } $resultado['campos'] = $campos; //Cambiar la estructura $aux = array(); foreach ($resultado['nombre_campos'] as $n) { $aux[$n] = ''; } foreach (array_slice($resultado['datos'], 0, 10) as $fila) { foreach ($fila as $k => $v) { $aux[$util->slug($k)] .= trim(mb_check_encoding($v, 'UTF-8') ? $v : utf8_encode($v)) . ', '; } } $resultado['datos'] = $aux; return new Response(json_encode($resultado)); }
/** * @Route("/{id}/leer", name="origen_dato_leer", options={"expose"=true}) */ public function leerOrigenAction($id) { $resultado = array('estado' => 'error', 'mensaje' => '', 'tipos_datos' => array(), 'tipo_origen' => '', 'es_catalogo' => '', 'significados' => array(), 'nombre_campos' => array(), 'datos' => array()); $em = $this->getDoctrine()->getEntityManager(); $origenDato = $em->find("IndicadoresBundle:OrigenDatos", $id); $resultado['es_catalogo'] = $origenDato->getEsCatalogo() ? true : false; $sql = "SELECT tp \n FROM IndicadoresBundle:TipoCampo tp \n ORDER BY tp.descripcion"; $resultado['tipos_datos'] = $em->createQuery($sql)->getArrayResult(); $sql = "SELECT sv \n FROM IndicadoresBundle:SignificadoCampo sv \n WHERE sv.usoEnCatalogo = :uso_en_catalogo \n ORDER BY sv.descripcion"; $resultado['significados'] = $em->createQuery($sql)->setParameter('uso_en_catalogo', $resultado['es_catalogo'] ? 'true' : 'false')->getArrayResult(); //recuperar los campos ya existentes en el origen de datos $campos_existentes = $em->getRepository('IndicadoresBundle:Campo')->findBy(array('origenDato' => $origenDato)); $campos = array(); foreach ($campos_existentes as $campo) { $campos[$campo->getNombre()]['id'] = $campo->getId(); } $resultado['campos'] = $campos; if ($origenDato->getSentenciaSql() != '') { $resultado['tipo_origen'] = 'sql'; $sentenciaSQL = $origenDato->getSentenciaSql(); $idConexion = $origenDato->getConexion()->getId(); $conn = $this->getConexionGenerica('consulta_sql', $idConexion); try { $query = $conn->query($sentenciaSQL . ' LIMIT 20'); if ($query->rowCount() > 0) { $resultado['datos'] = $query->fetchAll(); $resultado['nombre_campos'] = array_keys($resultado['datos'][0]); } $resultado['estado'] = 'ok'; $resultado['mensaje'] = '<span style="color: green">' . $this->get('translator')->trans('sentencia_success') . '</span>'; } catch (\PDOException $e) { $resultado['mensaje'] = '<span style="color: red">' . $this->get('translator')->trans('sentencia_error') . ': ' . $e->getMessage() . '</span>'; } catch (DBAL\DBALException $e) { $resultado['mensaje'] = '<span style="color: red">' . $this->get('translator')->trans('sentencia_error') . ': ' . $e->getMessage() . '</span>'; } } else { $resultado['tipo_origen'] = 'archivo'; $reader = new Excel(); try { $reader->loadFile($origenDato->getAbsolutePath()); $datos = $reader->getSheet()->toArray($nullValue = null, $calculateFormulas = false, $formatData = false, $returnCellRef = false); $resultado['nombre_campos'] = array_values(array_shift($datos)); // Buscar por columnas que tengan null en el título $primer_null = array_search(null, $resultado['nombre_campos']); if ($primer_null == false) { foreach ($datos as $fila) { $resultado['datos'][] = $fila; } } else { $resultado['nombre_campos'] = array_slice($resultado['nombre_campos'], 0, $primer_null, true); foreach ($datos as $fila) { $resultado['datos'][] = array_slice($fila, 0, $primer_null, true); } } $resultado['estado'] = 'ok'; // Poner el nombre de la columna como indice del arreglo $aux = array(); foreach ($resultado['datos'] as $fila) { $aux[] = array_combine($resultado['nombre_campos'], $fila); } $resultado['datos'] = $aux; } catch (\Exception $e) { $resultado['mensaje'] = '<span style="color: red">' . $e->getMessage() . '</span>'; } } // Guardar los campos if ($resultado['estado'] == 'ok') { $nombres_id = array(); $campo = array(); //Por defecto poner tipo texto $tipo_campo = $em->getRepository("IndicadoresBundle:TipoCampo")->findOneByCodigo('integer'); $util = new \MINSAL\IndicadoresBundle\Util\Util(); foreach ($resultado['nombre_campos'] as $k => $nombre) { // si existe no guardarlo $nombre_campo = $util->slug($nombre); if (!array_key_exists($nombre_campo, $campos)) { $campo[$k] = new Campo(); $campo[$k]->setNombre($nombre_campo); $campo[$k]->setOrigenDato($origenDato); $campo[$k]->setTipoCampo($tipo_campo); $em->persist($campo[$k]); $nombres_id[$campo[$k]->getId()] = $nombre_campo; } else { $nombres_id[$campos[$nombre_campo]['id']] = $nombre_campo; } } try { $em->flush(); } catch (\Exception $e) { $resultado = array('estado' => 'error', 'mensaje' => '<div class="alert alert-error"> ' . $this->get('translator')->trans('camio_no_realizado') . '</div>'); } $resultado['nombre_campos'] = $nombres_id; } $campos_existentes = $em->getRepository('IndicadoresBundle:Campo')->findBy(array('origenDato' => $origenDato)); $campos = array(); foreach ($campos_existentes as $campo) { $campos[$campo->getNombre()]['id'] = $campo->getId(); $campos[$campo->getNombre()]['significado'] = $campo->getSignificado() ? $campo->getSignificado()->getId() : null; $campos[$campo->getNombre()]['significado_codigo'] = $campo->getSignificado() ? $campo->getSignificado()->getCodigo() : null; $campos[$campo->getNombre()]['tipo'] = $campo->getTipoCampo() ? $campo->getTipoCampo()->getId() : null; } $resultado['campos'] = $campos; //Cambiar la estructura $aux = array(); foreach ($resultado['nombre_campos'] as $n) { $aux[$n] = ''; } foreach (array_slice($resultado['datos'], 0, 10) as $fila) { foreach ($fila as $k => $v) { $aux[$k] .= $v . ', '; } } $resultado['datos'] = $aux; return new Response(json_encode($resultado)); }