public function load(ObjectManager $manager)
 {
     $sqlFacturaUsuario = 'select id, usuario_id, total, month, year, enviado, pago, cancelado, fechavencimiento from facturaUsuario order by  usuario_id ASC , year ASC , MONTH ASC';
     $sqlFacturaUsuarioDetalle = 'select id, factura_id, description, amount from facturaUsuarioDetalle where factura_id = ?';
     $sqlFacturaFinal = 'select id, total, month, year, pago, cancelado, enviado, cuenta_id, fechavencimiento, pagadodeltotal from facturaFinal where id in (select factura_final_id from facturausuariofinal where factura_usuario_id = ?)';
     $sqlFacturaFinalDetalle = 'select id, factura_id, description, amount from facturaFinalDetalle where factura_id = ?';
     $username = DataFixturesConstants::DBUSER;
     $password = DataFixturesConstants::DBPASS;
     $database = DataFixturesConstants::DBSCHEMA;
     return;
     $conn = new \PDO(sprintf('mysql:host=localhost;dbname=%s', $database), $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
     $stmt = $conn->prepare($sqlFacturaUsuario);
     $stmt->execute();
     $stmtUsuarioDetalle = $conn->prepare($sqlFacturaUsuarioDetalle);
     $stmtFactura = $conn->prepare($sqlFacturaFinal);
     $stmtFacturaDetalle = $conn->prepare($sqlFacturaFinalDetalle);
     $metadata = $manager->getClassMetaData(get_class(new FacturaEstudiante()));
     $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     $metadataDetalle = $manager->getClassMetaData(get_class(new FacturaEstudianteDetalle()));
     $metadataDetalle->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     $metadataFactura = $manager->getClassMetaData(get_class(new FacturaFinal()));
     $metadataFactura->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     $metadataFacturaDetalle = $manager->getClassMetaData(get_class(new FacturaFinalDetalle()));
     $metadataFacturaDetalle->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     $facturasList = array();
     while ($row = $stmt->fetch()) {
         // Adding cobro
         $facturaUsuario = new FacturaEstudiante();
         $facturaUsuario->setId($row['id']);
         $fechavencimiento = $row['fechavencimiento'];
         if ($fechavencimiento) {
             $facturaUsuario->setFechavencimiento(new \DateTime($fechavencimiento));
         }
         $facturaUsuario->setCancelado($row['cancelado']);
         $facturaUsuario->setEnviado($row['enviado']);
         $facturaUsuario->setMonth($row['month']);
         $facturaUsuario->setPago($row['pago']);
         $facturaUsuario->setTotal($row['total']);
         $facturaUsuario->setYear($row['year']);
         $facturaUsuario->setEstudiante($manager->getRepository('AppBundle:Estudiante')->find($row['usuario_id']));
         $manager->persist($facturaUsuario);
         $stmtUsuarioDetalle->execute(array($row['id']));
         while ($rowUsuarioDetalle = $stmtUsuarioDetalle->fetch()) {
             $usuarioDetalle = new FacturaEstudianteDetalle();
             $usuarioDetalle->setId($rowUsuarioDetalle['id']);
             $usuarioDetalle->setAmount($rowUsuarioDetalle['amount']);
             $usuarioDetalle->setDescription($rowUsuarioDetalle['description']);
             $usuarioDetalle->setFactura($facturaUsuario);
             $manager->persist($usuarioDetalle);
         }
         $stmtFactura->execute(array($row['id']));
         while ($rowFactura = $stmtFactura->fetch()) {
             if (!isset($facturasList[$rowFactura['id']])) {
                 $facturaFinal = new FacturaFinal();
                 $facturaFinal->setCancelado($rowFactura['cancelado']);
                 $facturaFinal->setCuenta($manager->getRepository('AppBundle:Cuenta')->find($rowFactura['cuenta_id']));
                 $facturaFinal->setEnviado($rowFactura['enviado']);
                 $fechavencimiento = $rowFactura['fechavencimiento'];
                 if ($fechavencimiento) {
                     $facturaFinal->setFechavencimiento(new \DateTime($fechavencimiento));
                 }
                 $facturaFinal->setId($rowFactura['id']);
                 $facturaFinal->setMonth($rowFactura['month']);
                 $facturaFinal->setPagadodeltotal($rowFactura['pagadodeltotal']);
                 $facturaFinal->setPago($rowFactura['pago']);
                 $facturaFinal->setTotal($rowFactura['total']);
                 $facturaFinal->setYear($rowFactura['year']);
                 $manager->persist($facturaFinal);
                 $facturasList[$rowFactura['id']] = $facturaFinal;
                 $stmtFacturaDetalle->execute(array($rowFactura['id']));
                 while ($rowDetalle = $stmtFacturaDetalle->fetch()) {
                     $facturaFinalDetalle = new FacturaFinalDetalle();
                     $facturaFinalDetalle->setAmount($rowDetalle['amount']);
                     $facturaFinalDetalle->setDescription($rowDetalle['description']);
                     $facturaFinalDetalle->setFactura($facturaFinal);
                     $facturaFinalDetalle->setId($rowDetalle['id']);
                     $manager->persist($facturaFinalDetalle);
                 }
             } else {
                 $facturaFinal = $facturasList[$rowFactura['id']];
             }
             $facturaUsuario->setFacturaFinal($facturaFinal);
         }
         $manager->persist($facturaUsuario);
     }
     $manager->flush();
 }
 public function createDetalleFacturaUsuario(Estudiante $estudiante, $month, $year, $description, $amount)
 {
     if ($estudiante === null) {
         throw new \Exception('Student is null');
     }
     $factura = $this->em->getRepository('AppBundle:FacturaEstudiante')->retrieveFacturaOfEstudiantePerMonthAndYear($estudiante, $month, $year);
     $detalle = new FacturaEstudianteDetalle();
     $detalle->setAmount($amount);
     $detalle->setDescription($description);
     $detalle->setFactura($factura);
     $detalle->setAutogenerated(false);
     $factura->setTotal($factura->getTotal() + $amount);
     $this->em->persist($detalle);
     $this->em->persist($factura);
     $this->em->flush();
     $returnData = $this->generateFinalBill($estudiante->getCuenta(), $month, $year);
     $this->em->refresh($returnData);
     return $returnData;
 }