Example #1
0
 public function crearTablaCatalogo(OrigenDatos $origenDato, array $datos)
 {
     //Recuperar la información para construir la tabla
     $em = $this->getEntityManager();
     $nombre_tabla = $origenDato->getNombreCatalogo();
     $campos = $origenDato->getCampos();
     //Verificar si existe la tabla
     $sql = "CREATE TABLE IF NOT EXISTS {$nombre_tabla} (";
     foreach ($campos as $campo) {
         $sql .= $campo->getNombre() . " " . $campo->getTipoCampo()->getCodigo();
         if ($campo->getSignificado()->getCodigo() == 'pk') {
             $sql .= ' PRIMARY KEY ';
             $pk = $campo->getNombre();
         }
         $sql .= ', ';
     }
     $sql = trim($sql, ', ') . '); ';
     //Crear tabla temporal para hacer un puente y validar antes de subir al catálogo
     $nombre_temp = $nombre_tabla . time();
     $sql .= ' 
             SELECT * INTO TEMP ' . $nombre_temp . ' FROM ' . $nombre_tabla . ' LIMIT 0;';
     $nombre_campos = implode(", ", array_keys($datos[0]));
     $sql .= "\n          INSERT INTO {$nombre_temp}({$nombre_campos}) VALUES ";
     foreach ($datos as $fila) {
         $sql .= "('" . implode("','", $fila) . "'), ";
     }
     $sql = trim($sql, ', ');
     // Si tiene llave primaria
     if ($pk != '') {
         //Insertar las que no están
         $sql .= "; INSERT INTO {$nombre_tabla} SELECT * FROM {$nombre_temp} WHERE {$pk} NOT IN (SELECT {$pk} FROM {$nombre_tabla})";
         //Actualizar las que estaban
         $sql .= "; UPDATE {$nombre_tabla} SET";
         foreach (array_keys($datos[0]) as $campo) {
             $sql .= " {$campo} = {$nombre_temp}.{$campo}, ";
         }
         $sql = trim($sql, ', ');
         $sql .= " FROM {$nombre_temp} WHERE {$nombre_tabla}.{$pk} IN (SELECT {$pk} FROM {$nombre_tabla}) \n                    AND {$nombre_tabla}.{$pk} = {$nombre_temp}.{$pk}";
     }
     try {
         $em->getConnection()->exec($sql);
     } catch (\PDOException $e) {
         return $e->getMessages();
     }
     return true;
 }
 public function mergeSaveAction()
 {
     $req = $this->getRequest();
     $opciones = $req->get('fusionar');
     $em = $this->getDoctrine()->getEntityManager();
     //Crear el origen
     $origenDato = new OrigenDatos();
     $origenDato->setNombre($req->get('nombre'));
     $origenDato->setDescripcion($req->get('descripcion'));
     $origenDato->setEsFusionado(true);
     foreach ($req->get('origenes_fusionados') as $k => $origen_id) {
         $origenFu = $em->find('IndicadoresBundle:OrigenDatos', $origen_id);
         $origenDato->addFusione($origenFu);
     }
     $campos_fusionados = '';
     foreach ($req->get('campos_fusionar') as $campo) {
         $obj = json_decode($campo);
         $campos_fusionados .= "'" . $obj->nombre . "',";
     }
     $campos_fusionados = trim($campos_fusionados, ',');
     $origenDato->setCamposFusionados($campos_fusionados);
     $em->persist($origenDato);
     $em->flush();
     $this->get('session')->setFlash('sonata_flash_success', $origenDato->getNombre() . ' ' . $this->get('translator')->trans('fusion.origen_fusionado_creado'));
     return new RedirectResponse($this->admin->generateUrl('list', $this->admin->getFilterParameters()));
 }
 public function getUltimaActualizacion(OrigenDatos $origenDato)
 {
     if ($origenDato->getEsFusionado()) {
         $sql = 'SELECT MAX(ultima_lectura) as ultima_lectura
                     FROM fila_origen_dato
                     WHERE id_origen_dato
                         IN
                         (SELECT id_origen_dato_fusionado FROM origen_datos_fusiones WHERE id_origen_dato = :id_origen_dato)';
     } else {
         $sql = 'SELECT MAX(ultima_lectura) as ultima_lectura FROM fila_origen_dato WHERE id_origen_dato = :id_origen_dato';
     }
     $sth = $this->_em->getConnection()->prepare($sql);
     $sth->execute(array(':id_origen_dato' => $id = $origenDato->getId()));
     $act = $sth->fetch(\PDO::FETCH_ASSOC);
     return $act['ultima_lectura'];
 }
 /**
  * {@inheritDoc}
  */
 public function getAreaCosteo()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getAreaCosteo', array());
     return parent::getAreaCosteo();
 }
 /**
  * @Route("/origen_dato/get_campos/{id}", name="origen_dato_get_campos", options={"expose"=true})
  */
 public function getCamposAction(OrigenDatos $origen)
 {
     $resp = '<h6>' . $this->get('translator')->trans('_campos_utilizables_en_campos_calculados_') . '</h6>
             <UL class="campos_disponibles">';
     if ($origen->getEsFusionado() or $origen->getEsPivote()) {
         $campos = explode(',', str_replace(array(' ', "'"), '', $origen->getCamposFusionados()));
         foreach ($campos as $campo) {
             $resp .= '<LI><A href="javascript:funcion()">{' . $campo . '}</A></LI>';
         }
     } else {
         $campos = $origen->getCampos();
         foreach ($campos as $campo) {
             if ($campo->getSignificado()) {
                 $resp .= '<LI><A href="javascript:funcion()">{' . $campo->getSignificado()->getCodigo() . '}</A></LI>';
             }
         }
     }
     return new Response($resp . '</UL>');
 }
 public function getUltimaActualizacion(OrigenDatos $origenDato)
 {
     $sql = 'SELECT MAX(ultima_lectura) as ultima_lectura FROM fila_origen_dato WHERE id_origen_dato = :id_origen_dato';
     $sth = $this->_em->getConnection()->prepare($sql);
     $sth->execute(array(':id_origen_dato' => $id = $origenDato->getId()));
     $respuesta = $sth->fetch(\PDO::FETCH_ASSOC);
     return $respuesta['ultima_lectura'];
 }