private function loadData(ServicioContratado $servicio) { $manager = $this->manager; $bag =& $this->bag; /** @var EntityRepository $repo */ $repo = $this->manager->getRepository('SisesApplicationBundle:Ubicacion\\CentroPoblado'); $repoLugar = $this->manager->getRepository('SisesApplicationBundle:LugarEntrega'); $findLugar = function ($columns) use($repo, $repoLugar, &$bag, $manager) { $nombre = $columns[self::COL_NOM_LUGAR]; $codigoUbicacion = $columns[self::COL_CODIGO_UBICACION]; if (!isset($bag[self::BAG_LUGAR][$nombre])) { $bag[self::BAG_LUGAR][$nombre] = $repoLugar->findOneBy(array('nombre' => $nombre)); } if (!$bag[self::BAG_LUGAR][$nombre]) { if (!isset($bag[self::BAG_UBICACION][$codigoUbicacion])) { $bag[self::BAG_UBICACION][$codigoUbicacion] = $repo->findOneBy(array('codigoDane' => "{$codigoUbicacion}000")); } if (!$bag[self::BAG_UBICACION][$codigoUbicacion]) { throw new \Exception("No se encontro el municipio para codigo {$codigoUbicacion}"); } $lugar = new LugarEntrega(); $lugar->setUbicacion($bag[self::BAG_UBICACION][$codigoUbicacion]); $lugar->setNombre($nombre); $manager->persist($lugar); $bag[self::BAG_LUGAR][$nombre] = $lugar; } return $bag[self::BAG_LUGAR][$nombre]; }; /** @var EntityRepository $repo2 */ $repo2 = $this->manager->getRepository('SisesApplicationBundle:Persona'); $findPersona = function ($column) use($repo2, &$bag, $manager) { $documento = $column[self::COL_DOCUMENTO]; // Busca la persona en la base d datos if (!isset($bag[self::BAG_PERSONA][$documento])) { $bag[self::BAG_PERSONA][$documento] = $repo2->findOneBy(array('documento' => $documento)); } // Crea la persona if (!$bag[self::BAG_PERSONA][$documento]) { $persona = new Persona(); $persona->setNombre(trim("{$column[self::COL_1_NOM]} {$column[self::COL_2_NOM]}")); $persona->setApellidos(trim("{$column[self::COL_1_APE]} {$column[self::COL_2_APE]}")); $persona->setDocumento($documento); $manager->persist($persona); $bag[self::BAG_PERSONA][$documento] = $persona; } return $bag[self::BAG_PERSONA][$documento]; }; $interpreter = new CSV\Interpreter(); $interpreter->addObserver(function (array $columns) use($bag, $findLugar, $findPersona, $servicio, $manager) { if ($columns[0] == "AÑO") { return; } $beneficiario = new Beneficiario(); $beneficiario->setPersona($findPersona($columns)); $beneficiario->setContrato($servicio->getContrato()); $beneficio = new Beneficio(); $beneficio->setBeneficiario($beneficiario); $beneficio->setLugar($findLugar($columns)); $beneficio->setServicio($servicio); $manager->persist($beneficiario); $manager->persist($beneficio); }); $this->lexer->parse($this->file, $interpreter); ksort($bag['ubicacion']); $manager->flush(); }
public function loadBeneficio(ServicioContratado $servicio) { $file = sprintf(__DIR__ . '/../../Resources/files/%s.csv', $servicio->getNombre() == "Desayunos" ? '100' : '200'); $config = new LexerConfig(); $config->setDelimiter(',')->setEnclosure('"')->setFromCharset('UTF-8')->setToCharset('UTF-8'); $lexer = new Lexer($config); $manager = $this->manager; $bag =& $this->bag; $repo = $this->manager->getRepository('SisesApplicationBundle:Ubicacion\\CentroPoblado'); $findLugar = function ($columns) use($repo, &$bag, $manager) { $nombre = $columns[LoadBeneficiarios::COL_NOM_LUGAR]; $codigoLugar = $columns[LoadBeneficiarios::COL_CODIGO_UBICACION]; if (!isset($bag[LoadBeneficiarios::BAG_UBICACION][$nombre])) { if (!isset($bag[LoadBeneficiarios::BAG_LUGAR][$codigoLugar])) { $bag[LoadBeneficiarios::BAG_LUGAR][$codigoLugar] = $repo->findOneBy(array('codigoDane' => "{$codigoLugar}000")); } $lugar = new LugarEntrega(); $lugar->setUbicacion($bag[LoadBeneficiarios::BAG_LUGAR][$codigoLugar]); $lugar->setNombre($nombre); $manager->persist($lugar); $bag[LoadBeneficiarios::BAG_UBICACION][$nombre] = $lugar; } return $bag[LoadBeneficiarios::BAG_UBICACION][$nombre]; }; $repo2 = $this->manager->getRepository('SisesApplicationBundle:Persona'); $findPersona = function ($column) use($repo2, &$bag, $manager) { $documento = $column[LoadBeneficiarios::COL_DOCUMENTO]; // Busca la persona en la base d datos if (!isset($bag[LoadBeneficiarios::BAG_PERSONA][$documento])) { $bag[LoadBeneficiarios::BAG_PERSONA][$documento] = $repo2->findOneBy(array('documento' => $documento)); } // Crea la persona if (!isset($bag[LoadBeneficiarios::BAG_PERSONA][$documento])) { $persona = new Persona(); $persona->setNombre(trim("{$column[LoadBeneficiarios::COL_1_NOM]} {$column[LoadBeneficiarios::COL_2_NOM]}")); $persona->setApellidos(trim("{$column[LoadBeneficiarios::COL_1_APE]} {$column[LoadBeneficiarios::COL_2_APE]}")); $persona->setDocumento($documento); $manager->persist($persona); $bag[LoadBeneficiarios::BAG_PERSONA][$documento] = $persona; } return $bag[LoadBeneficiarios::BAG_PERSONA][$documento]; }; $interpreter = new Interpreter(); $interpreter->addObserver(function (array $columns) use($bag, $findLugar, $findPersona, $servicio, $manager) { if ($columns[0] == "AÑO") { return; } $beneficiario = new Beneficiario(); $beneficiario->setPersona($findPersona($columns)); $beneficiario->setContrato($servicio->getContrato()); $beneficio = new Beneficio(); $beneficio->setBeneficiario($beneficiario); $beneficio->setLugar($findLugar($columns)); $beneficio->setServicio($servicio); $manager->persist($beneficiario); $manager->persist($beneficio); }); $lexer->parse($file, $interpreter); ksort($bag['ubicacion']); $manager->flush(); }