public function crearCamposIndicador(FichaTecnica $fichaTecnica)
 {
     $em = $this->_em;
     //Recuperar las variables
     $variables = $fichaTecnica->getVariables();
     $origen_campos = array();
     $origenDato = array();
     foreach ($variables as $k => $variable) {
         //Obtener la información de los campos de cada origen
         $origenDato[$k] = $variable->getOrigenDatos();
         if ($origenDato[$k]->getEsFusionado()) {
             $significados = explode(',', $origenDato[$k]->getCamposFusionados());
             //Los tipos de campos sacarlos de uno de los orígenes de datos que ha sido fusionado
             $fusionados = $origenDato[$k]->getFusiones();
             $fusionado = $fusionados[0];
             $tipos = array();
             foreach ($fusionado->getAllFields() as $campo) {
                 $tipos[$campo->getSignificado()->getCodigo()] = $campo->getTipoCampo()->getCodigo();
             }
             foreach ($significados as $sig) {
                 $sig_ = str_replace("'", '', $sig);
                 $significado = $em->getRepository('IndicadoresBundle:SignificadoCampo')->findOneBy(array('codigo' => $sig_));
                 $llave = $significado->getCodigo() . '-' . $tipos[$sig_];
                 $origen_campos[$origenDato[$k]->getId()][$llave]['significado'] = $sig_;
             }
         } elseif ($origenDato[$k]->getEsPivote()) {
             foreach ($origenDato[$k]->getFusiones() as $or) {
                 foreach ($or->getAllFields() as $campo) {
                     //La llave para considerar campo comun será el mismo significado
                     $llave = $campo->getSignificado()->getCodigo();
                     //$llave = $campo->getSignificado()->getId();
                     $origen_campos[$origenDato[$k]->getId()][$llave]['significado'] = $campo->getSignificado()->getCodigo();
                 }
             }
         } else {
             foreach ($origenDato[$k]->getAllFields() as $campo) {
                 //La llave para considerar campo comun será el mismo tipo y significado
                 $llave = $campo->getSignificado()->getCodigo() . '-' . $campo->getTipoCampo()->getCodigo();
                 //$llave = $campo->getSignificado()->getId();
                 $origen_campos[$origenDato[$k]->getId()][$llave]['significado'] = $campo->getSignificado()->getCodigo();
             }
         }
         //Determinar los campos comunes (con igual significado e igual tipo)
         $aux = $origen_campos;
         $campos_comunes = array_shift($aux);
         foreach ($aux as $a) {
             $campos_comunes = array_intersect_key($campos_comunes, $a);
         }
     }
     $aux = array();
     foreach ($campos_comunes as $campo) {
         $aux[$campo['significado']] = $campo['significado'];
     }
     if (isset($aux['calculo'])) {
         unset($aux['calculo']);
     }
     $campos_comunes = implode(", ", $aux);
     if ($fichaTecnica->getCamposIndicador() != '') {
         //Si ya existen los campos sacar el orden que ya ha especificado el usuario
         $act = explode(',', str_replace(' ', '', $fichaTecnica->getCamposIndicador()));
         $campos_comunes = array_intersect($act, $aux);
         //agregar los posibles campos nuevos
         $campos_comunes = array_merge($campos_comunes, array_diff($aux, $act));
         $campos_comunes = implode(", ", $campos_comunes);
     }
     $fichaTecnica->setCamposIndicador($campos_comunes);
     $em->flush();
 }
Exemple #2
0
 public function crearCamposIndicador(FichaTecnica $fichaTecnica)
 {
     //Recuperar las variables
     $variables = $fichaTecnica->getVariables();
     $origen_campos = array();
     $origenDato = array();
     foreach ($variables as $k => $variable) {
         //Obtener la información de los campos de cada origen
         $origenDato[$k] = $variable->getOrigenDatos();
         foreach ($origenDato[$k]->getCampos() as $campo) {
             //La llave para considerar campo comun será el mismo tipo y significado
             $llave = $campo->getSignificado()->getId() . '-' . $campo->getTipoCampo()->getId();
             $origen_campos[$origenDato[$k]->getId()][$llave]['significado'] = $campo->getSignificado()->getCodigo();
         }
         //Determinar los campos comunes (con igual significado)
         $aux = $origen_campos;
         $campos_comunes = array_shift($aux);
         foreach ($aux as $a) {
             $campos_comunes = array_intersect_key($campos_comunes, $a);
         }
     }
     $aux = array();
     foreach ($campos_comunes as $campo) {
         $aux[$campo['significado']] = $campo['significado'];
     }
     if (isset($aux['calculo'])) {
         unset($aux['calculo']);
     }
     $campos_comunes = implode(",", $aux);
     if ($fichaTecnica->getCamposIndicador() != '') {
         //Si ya existen los campos sacar el orden que ya ha especificado el usuario
         $act = explode(',', $fichaTecnica->getCamposIndicador());
         $campos_comunes = array_intersect($act, $aux);
         //agregar los posibles campos nuevos
         $campos_comunes = array_merge($campos_comunes, array_diff($aux, $act));
         $campos_comunes = implode(",", $campos_comunes);
     }
     $fichaTecnica->setCamposIndicador($campos_comunes);
 }