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(); }
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); }