public function createEstudiante(Estudiante $estudiante)
 {
     $this->em->persist($estudiante);
     $cuenta = $this->em->getRepository('AppBundle:Cuenta')->findOneBy(array('referenciabancaria' => $estudiante->getReferenciaBancaria()));
     if ($cuenta) {
         $this->logger->addInfo("The student is from an active account");
         foreach ($cuenta->getEstudiantes() as $hermano) {
             $estudiante->addMyBrother($hermano);
             $hermano->addMyBrother($estudiante);
             $this->em->persist($hermano);
         }
         foreach ($cuenta->getProgenitores() as $progenitor) {
             $estudiante->addProgenitore($progenitor);
             $progenitor->addEstudiante($estudiante);
             $this->em->persist($progenitor);
         }
         $estudiante->setCuenta($cuenta);
         $this->em->persist($estudiante);
     } else {
         $this->logger->addInfo("Creating new account for the student");
         $cuenta = new Cuenta();
         $cuenta->setReferenciabancaria($estudiante->getReferenciaBancaria());
         $this->em->persist($cuenta);
         $estudiante->setCuenta($cuenta);
     }
     $this->em->flush();
     return $estudiante;
 }
 public function updateOrCreateCuenta(Estudiante $estudiante)
 {
     $cuenta = $this->em->getRepository('AppBundle:Cuenta')->findOneBy(array('referenciabancaria' => $estudiante->getReferenciaBancaria()));
     if ($cuenta) {
         foreach ($cuenta->getEstudiantes() as $hermano) {
             $estudiante->addMyBrother($hermano);
             $hermano->addMyBrother($estudiante);
             $this->em->persist($hermano);
         }
         foreach ($cuenta->getProgenitores() as $progenitor) {
             $estudiante->addProgenitore($progenitor);
             $progenitor->addEstudiante($estudiante);
             $this->em->persist($progenitor);
         }
         $estudiante->setCuenta($cuenta);
         $this->em->persist($estudiante);
     } else {
         $this->logger->addDebug(sprintf('Account not exists. Creating with reference: %s', $estudiante->getReferenciaBancaria()));
         $cuenta = new Cuenta();
         $cuenta->setReferenciabancaria($estudiante->getReferenciaBancaria());
         $this->em->persist($cuenta);
         $estudiante->setCuenta($cuenta);
     }
     $this->em->persist($estudiante);
     $this->em->flush();
 }
 public function load(ObjectManager $manager)
 {
     $sql = 'select id, referenciabancaria, debe, pago, diferencia from cuenta';
     $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($sql);
     $stmt->execute();
     $metadata = $manager->getClassMetaData(get_class(new Cuenta()));
     $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
     while ($row = $stmt->fetch()) {
         // Adding cuenta.
         $cuenta = new Cuenta();
         $cuenta->setId($row['id']);
         //$cuenta->setDebe($row['debe']);
         $cuenta->setDebe(0);
         //$cuenta->setDiferencia($row['diferencia']);
         //$cuenta->setPago($row['pago']);
         $cuenta->setPago(0);
         $cuenta->setReferenciabancaria($row['referenciabancaria']);
         $estudiantes = $manager->getRepository('AppBundle:Estudiante')->findBy(array('referenciaBancaria' => $row['referenciabancaria']));
         $manager->persist($cuenta);
         $brotherParents = true;
         foreach ($estudiantes as $estudiante) {
             $estudiante->setCuenta($cuenta);
             if ($brotherParents) {
                 foreach ($estudiante->getProgenitores() as $progenitor) {
                     $progenitor->setCuenta($cuenta);
                     $manager->persist($progenitor);
                 }
             }
             $brotherParents = false;
             $manager->persist($estudiante);
         }
     }
     $manager->flush();
 }
 public function exportAccountToPdf(Cuenta $account, $location = null, $returnBuffer = false)
 {
     $alumnos = '';
     foreach ($account->getEstudiantes() as $estudiante) {
         $alumnos .= $estudiante->getNombre() . ',';
     }
     if (strlen($alumnos) > 0) {
         $alumnos = rtrim($alumnos, ',');
     }
     $padres = '';
     foreach ($account->getProgenitores() as $progenitor) {
         $padres .= $progenitor->getNombre() . ' ' . ',';
     }
     if (strlen($padres) > 0) {
         $padres = rtrim($padres, ',');
     }
     $pdf = new Invoice(20, 'P', 'mm', 'A4');
     $facturas = $this->em->getRepository('AppBundle:FacturaFinal')->retrieveUnpaidFacturasOfAccount($account->getId());
     $cantidadFacturasDetalles = 0;
     $facturasDetailList = array();
     $quantity = count($facturas);
     $meses = array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
     $montoAdeudado = $account->getDiferencia();
     $lineDeuda = null;
     $montoFacturaMes = 0;
     foreach ($facturas as $factura) {
         if ($factura->getYear() == date('Y') && $factura->getMonth() == date('m')) {
             foreach ($factura->getFacturaFinalDetalles() as $facturaDetalle) {
                 if ($quantity > 1) {
                     $description = sprintf('%s (%s %s)', $facturaDetalle->getDescription(), $meses[$factura->getMonth() - 1], $factura->getYear());
                     $facturaDetalle->setDescription($description);
                 }
                 $facturasDetailList[$cantidadFacturasDetalles] = $facturaDetalle;
                 ++$cantidadFacturasDetalles;
             }
             if ($quantity > 1) {
                 $facturasDetailList[$cantidadFacturasDetalles] = new FacturaFinalDetalle();
                 ++$cantidadFacturasDetalles;
             }
             $montoFacturaMes = (double) $factura->getTotal() - (double) $factura->getPagadodeltotal();
         }
     }
     if ($montoFacturaMes < $account->getDiferencia()) {
         $montoAdeudado = (double) $montoAdeudado - $montoFacturaMes;
         $precion = number_format(1 * (int) $montoAdeudado, 0, ',', '.');
         $texto = sprintf('Monto adeudado al %s', date('m-Y'));
         $lineDeuda = array('Item' => 1, 'Descripción' => $texto, 'Precio' => '$' . $precion);
     }
     $maxPerPage = 30;
     $cantidadPaginas = $cantidadFacturasDetalles / $maxPerPage;
     $showPages = true;
     if ($cantidadPaginas < 1) {
         $showPages = false;
     }
     if ($cantidadFacturasDetalles > 0) {
         $cantidadFacturasDetalles = 0;
     }
     $pagina = 1;
     $paymentQuantity = 0;
     while ($cantidadPaginas >= 0 && $cantidadFacturasDetalles <= count($facturasDetailList)) {
         $pdf->AddPage();
         if ($showPages) {
             $pdf->addPageNumber($pagina);
         }
         $pdf->addSociete($this->webDirectory . 'bundles/app/img/logo.png');
         $pdf->temporaire("Bunny's Kinder");
         $pdf->addDate(date('d/m/Y'));
         $pdf->addClient($account->getReferenciabancaria());
         $pdf->addAlumnos($alumnos);
         $pdf->addPadres($padres);
         $colsNumbers = array('Item' => 30, 'Descripción' => 130, 'Precio' => 30);
         $pdf->addCols($colsNumbers);
         $cols = array('Item' => 'C', 'Descripción' => 'C', 'Precio' => 'C');
         $pdf->addLineFormat($cols);
         $y = 70;
         $size = 0;
         $counterItems = 1;
         if ($lineDeuda !== null) {
             $size = $pdf->addLine($y, $lineDeuda);
             $y += $size + 2;
             ++$counterItems;
         }
         while ($cantidadFacturasDetalles <= $maxPerPage * $pagina && $cantidadFacturasDetalles < count($facturasDetailList)) {
             $facturaDetalle = $facturasDetailList[$cantidadFacturasDetalles];
             if ($facturaDetalle->getAmount() > 0 || $facturaDetalle->getAmount() < 0) {
                 $precioShow = '$0';
                 if ($facturaDetalle->getAmount() > 0) {
                     $precioShow = '$' . $facturaDetalle->getFormatedAmount();
                 } else {
                     $precioShow = '- $' . number_format(-1 * (int) $facturaDetalle->getAmount(), 0, ',', '.');
                 }
                 $line = array('Item' => $counterItems, 'Descripción' => $facturaDetalle->getDescription(), 'Precio' => $precioShow);
                 $paymentQuantity = $paymentQuantity + $facturaDetalle->getAmount();
                 ++$counterItems;
             } else {
                 $line = array('Item' => '', 'Descripción' => '', 'Precio' => '');
             }
             $size = $pdf->addLine($y, $line);
             $y += $size + 2;
             ++$cantidadFacturasDetalles;
         }
         ++$pagina;
         --$cantidadPaginas;
     }
     if ($account->getDiferencia() - $paymentQuantity < 0) {
         $cobro = $this->em->getRepository('AppBundle:Cobro')->retrieveLastFromAccount($account->getId());
         $precion = number_format(-1 * (int) ($account->getDiferencia() - $paymentQuantity), 0, ',', '.');
         $fechaAux = explode('-', $cobro->getFecha());
         $texto = sprintf('Monto pagado (%s-%s-%s)', $fechaAux[2], $fechaAux[1], $fechaAux[0]);
         $line = array('Item' => $counterItems, 'Descripción' => $texto, 'Precio' => '- $' . $precion);
         $size = $pdf->addLine($y, $line);
         $y += $size + 2;
     }
     $pdf->addCadreEurosFrancs('$ ' . $account->getFormatedDiferencia());
     $outputOption = 'I';
     if ($returnBuffer) {
         $outputOption = 'S';
     } else {
         if ($location !== null) {
             if (!is_dir($location)) {
                 $location = sys_get_temp_dir();
             }
             $outputOption = 'F';
             $location .= DIRECTORY_SEPARATOR;
         } else {
             $location = '';
         }
     }
     $outputName = sprintf('Cuenta-%s-%s.pdf', $account->getReferenciabancaria(), date('m-Y'));
     $returnPdf = $pdf->Output($location . $outputName, $outputOption);
     if ($outputOption == 'F') {
         return $location . $outputName;
     }
     if ($outputOption == 'S') {
         return array('name' => $outputName, 'buffer' => $returnPdf);
     }
 }