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