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 updateEstudianteRelations(Estudiante $estudiante, $updateBrothers = false)
 {
     foreach ($estudiante->getProgenitores() as $progenitor) {
         $newsletterUser = $progenitor->getNewsletterUser();
         $toRemoveGroups = array();
         $newsletterGroups = $newsletterUser->getUserGroups();
         foreach ($newsletterGroups as $group) {
             $toRemoveGroups[$group->getId()] = $group;
         }
         $toAddGroups = $this->getNewsletterGroupsOfStudent($estudiante);
         $addKeys = array_keys($toAddGroups);
         foreach ($addKeys as $key) {
             if (isset($toRemoveGroups[$key])) {
                 unset($toRemoveGroups[$key]);
                 unset($toAddGroups[$key]);
             }
         }
         foreach ($toRemoveGroups as $group) {
             $newsletterUser->removeUserGroup($group);
         }
         foreach ($toAddGroups as $group) {
             $newsletterUser->addUserGroup($group);
         }
         $this->em->persist($newsletterUser);
         $this->em->flush($newsletterUser);
     }
     if ($updateBrothers) {
         foreach ($estudiante->getMyBrothers() as $brother) {
             $this->updateEstudianteRelations($brother, false);
         }
     }
 }
 public function loadEstudiante(ObjectManager $manager)
 {
     $estudiante = array(array(1, 12, 1), array(2, 14, 1), array(3, 19, 1), array(4, 37, 1), array(5, 40, 1), array(6, 41, 1), array(7, 48, 1), array(8, 50, 1), array(9, 55, 1), array(10, 56, 1), array(11, 63, 1), array(12, 64, 1), array(13, 65, 1), array(14, 66, 1), array(15, 67, 1), array(16, 69, 1), array(17, 71, 1), array(18, 72, 1), array(19, 73, 1), array(20, 75, 1), array(21, 76, 1), array(22, 78, 1), array(23, 84, 1), array(24, 87, 1), array(25, 44, 4), array(26, 16, 4), array(27, 13, 4), array(28, 46, 4), array(29, 35, 4), array(30, 10, 4), array(31, 2, 4), array(32, 42, 4), array(33, 15, 4), array(34, 43, 4), array(35, 27, 4), array(36, 22, 4), array(37, 30, 2), array(38, 32, 2), array(39, 36, 2), array(40, 39, 2), array(41, 47, 2), array(42, 49, 2), array(43, 57, 2), array(44, 31, 1), array(45, 45, 1), array(46, 52, 1), array(47, 54, 1), array(48, 58, 1), array(49, 60, 1), array(50, 74, 1), array(51, 79, 1), array(52, 83, 1), array(53, 85, 2), array(54, 33, 2), array(55, 7, 2), array(56, 59, 2), array(57, 81, 2), array(58, 82, 2), array(59, 18, 2), array(60, 68, 4), array(61, 62, 2), array(62, 70, 2), array(63, 53, 3), array(64, 24, 4), array(65, 80, 1), array(66, 86, 2), array(67, 17, 1));
     $em = $this->container->get('doctrine')->getEntityManager('default');
     foreach ($estudiante as $data) {
         $entityEstudiante = new Estudiante();
         $entityPersona = $em->getRepository('AppBundle:Persona')->find($data[1]);
         $entityEstudiante->setPersona($entityPersona);
         $entityPnf = $em->getRepository('AppBundle:Pnf')->find($data[2]);
         $entityEstudiante->setPnf($entityPnf);
         $manager->persist($entityEstudiante);
     }
     $manager->flush();
 }
 public function estuPnfEntity(Request $request, Estudiante $entity)
 {
     if (is_array($request->request->get('estuPnf'))) {
         $pnf = $request->request->get('estuPnf');
         $em = $this->getDoctrine()->getManager();
         $entityEstuPnf = $em->getRepository('AppBundle:EstuPnf')->findBy(array('estu' => $entity->getCedu()));
         $estuPnfIds = array();
         foreach ($entityEstuPnf as $key => $enti) {
             $pnfId = $enti->getPnf()->getPnfId();
             if (in_array($pnfId, $pnf)) {
                 if (($key = array_search($pnfId, $pnf)) !== false) {
                     unset($pnf[$key]);
                     sort($pnf);
                 }
             } else {
                 $estuPnfIds[] = $enti;
             }
         }
         //delete entity
         foreach ($estuPnfIds as $key => $value) {
             $em->remove($value);
         }
         if ($estuPnfIds) {
             $em->flush();
         }
         //add entity
         foreach ($pnf as $key => $value) {
             $entityPnf = $em->getRepository('AppBundle:Pnf')->find($value);
             if ($entityPnf) {
                 $entityEstuPnf = new EstuPnf();
                 $entityEstuPnf->setPnf($entityPnf);
                 $entity->addEstuPnf($entityEstuPnf);
             }
         }
     }
 }
 public function updateStudent($id)
 {
     $row = $this->retrieveOldStudent($id);
     if (!$row) {
         return;
     }
     $estudiante = $this->em->getRepository('AppBundle:Estudiante')->findOneBy(array('oldId' => $row['id']));
     $isUpdate = true;
     if (!$estudiante) {
         $estudiante = new Estudiante();
         $isUpdate = false;
     }
     $nombre = $row['nombre'];
     $apellido = $row['apellido'];
     $fechaNacimiento = $row['fecha_nacimiento'];
     $anioIngreso = $row['anio_ingreso'];
     $sociedad = $row['sociedad'];
     $referencia_bancaria = $row['referencia_bancaria'];
     $emergencia_medica = $row['emergencia_medica'];
     $horario = $row['horario'];
     $futuro_colegio = $row['futuro_colegio'];
     $descuento = $row['descuento'];
     $clase = $row['clase'];
     $egresado = $row['egresado'];
     $estudiante->setAnioIngreso($anioIngreso);
     $estudiante->setApellido($apellido);
     $estudiante->setDescuento($descuento);
     $estudiante->setEgresado($egresado);
     if ($fechaNacimiento) {
         $estudiante->setFechaNacimiento(new \DateTime($fechaNacimiento));
     }
     $estudiante->setNombre($nombre);
     $estudiante->setReferenciaBancaria($referencia_bancaria);
     $estudiante->setActive(true);
     $estudiante->setOldId($row['id']);
     if ($horario == 'doble_horario') {
         $horario = 'Doble Horario';
     }
     $dbHorario = $this->em->getRepository('AppBundle:Horario')->findOneBy(array('name' => ucfirst($horario)));
     $estudiante->setHorario($dbHorario);
     $dbClase = $this->em->getRepository('AppBundle:Clase')->findOneBy(array('name' => ucfirst($clase)));
     $estudiante->setClase($dbClase);
     if ($futuro_colegio != '') {
         $dbColegio = $this->em->getRepository('AppBundle:Colegio')->findOneBy(array('name' => $futuro_colegio));
         if (!$dbColegio) {
             $dbColegio = new Colegio();
             $dbColegio->setName($futuro_colegio);
             $this->em->persist($dbColegio);
         }
         $estudiante->setFuturoColegio($dbColegio);
     }
     if ($sociedad != '') {
         $dbSociedad = $this->em->getRepository('AppBundle:SociedadMedica')->findOneBy(array('name' => $sociedad));
         if (!$dbSociedad) {
             $dbSociedad = new SociedadMedica();
             $dbSociedad->setName($sociedad);
             $this->em->persist($dbSociedad);
         }
         $estudiante->setSociedadMedica($dbSociedad);
     }
     if ($emergencia_medica != '') {
         $dbEmergenciaMedica = $this->em->getRepository('AppBundle:EmergenciaMedica')->findOneBy(array('name' => $emergencia_medica));
         if (!$dbEmergenciaMedica) {
             $dbEmergenciaMedica = new EmergenciaMedica();
             $dbEmergenciaMedica->setName($emergencia_medica);
             $this->em->persist($dbEmergenciaMedica);
         }
         $estudiante->setEmergenciaMedica($dbEmergenciaMedica);
     }
     $oldDbActivities = $this->retrieveOldStudentActivities($id);
     $activitiesList = new ArrayCollection();
     foreach ($oldDbActivities as $rowActivity) {
         $activity = $this->em->getRepository('AppBundle:Actividad')->findOneBy(array('oldId' => $rowActivity['actividad_id']));
         if ($activity) {
             $activitiesList->add($activity);
         }
     }
     $estudiante->mergeActividades($activitiesList);
     $this->em->persist($estudiante);
     $this->em->flush();
     if (!$isUpdate) {
         $this->cuentaService->updateOrCreateCuenta($estudiante);
     }
     $this->facturasServices->generateUserAndFinalBill($estudiante);
     $this->newsLetterSyncService->updateEstudianteRelations($estudiante);
     return true;
 }
 public function generateUserBill(Estudiante $estudiante, $month = null, $year = null, $ignorePaidAndCancel = false)
 {
     if ($month === null) {
         $month = date('n');
     }
     if ($year === null) {
         $year = date('Y');
     }
     if ($estudiante->getEgresado()) {
         $this->logger->addInfo(sprintf('The student %s has already left', $estudiante->getId()));
         return;
     }
     $factura = $this->em->getRepository('AppBundle:FacturaEstudiante')->retrieveFacturaOfEstudiantePerMonthAndYear($estudiante, $month, $year);
     if ($factura) {
         if (!$ignorePaidAndCancel) {
             if ($factura->getPago()) {
                 $this->logger->addInfo(sprintf('The student %s has the bill of %s/%s paid', $estudiante->getId(), $month, $year));
                 return;
             }
             if ($factura->getCancelado()) {
                 $this->logger->addInfo(sprintf('The student %s has the bill of %s/%s cancelled', $estudiante->getId(), $month, $year));
                 return;
             }
         }
     } else {
         $factura = new FacturaEstudiante();
     }
     if ($estudiante->getAnioIngreso() > date('Y')) {
         if ($factura->getId() > 0) {
             $this->em->remove($factura);
             $this->em->flush($factura);
         }
         $this->logger->addInfo(sprintf('The student %s starting year is %s. No bill generated', $estudiante->getId(), $estudiante->getAnioIngreso()));
         return;
     }
     $factura->setEstudiante($estudiante);
     $factura->setMonth($month);
     $factura->setTotal(0);
     $factura->setYear($year);
     $factura->setFechavencimiento(new \DateTime());
     $this->em->persist($factura);
     $total = 0;
     $listadoDetalles = array();
     if ($estudiante->getHorario() !== null) {
         $costoHorario = $this->getCostoOfHorario($estudiante->getHorario());
         $total = $costoHorario;
         $detalleMensualidad = new FacturaEstudianteDetalle();
         $detalleMensualidad->setAmount($costoHorario);
         $detalleMensualidad->setDescription('Mensualidad');
         $detalleMensualidad->setFactura($factura);
         $detalleMensualidad->setAutogenerated(true);
         $listadoDetalles[$detalleMensualidad->generateUniqueHash()] = $detalleMensualidad;
     }
     // Descuento de hermano
     $activeBrother = 0;
     foreach ($estudiante->getMyBrothers() as $brother) {
         if (!$brother->getEgresado()) {
             ++$activeBrother;
         }
     }
     $descuento = $this->em->getRepository('AppBundle:Descuento')->findOneBy(array('cantidadDeHermanos' => $activeBrother));
     if ($descuento && $descuento->getPorcentaje() > 0) {
         $amount = ceil($total * $descuento->getPorcentaje() / 100 * -1);
         $detalleDescuentoHermano = new FacturaEstudianteDetalle();
         $detalleDescuentoHermano->setAmount($amount);
         $detalleDescuentoHermano->setDescription('Descuento hermano');
         $detalleDescuentoHermano->setFactura($factura);
         $detalleDescuentoHermano->setAutogenerated(true);
         $listadoDetalles[$detalleDescuentoHermano->generateUniqueHash()] = $detalleDescuentoHermano;
         $total += $amount;
     }
     if ($estudiante->getDescuento() && $estudiante->getDescuento() > 0) {
         $amount = ceil($total * $estudiante->getDescuento() / 100 * -1);
         $detalleDescuento = new FacturaEstudianteDetalle();
         $detalleDescuento->setAmount($amount);
         $detalleDescuento->setDescription('Descuento usuario');
         $detalleDescuento->setFactura($factura);
         $detalleDescuento->setAutogenerated(true);
         $listadoDetalles[$detalleDescuento->generateUniqueHash()] = $detalleDescuento;
         $total += $amount;
     }
     foreach ($estudiante->getActividades() as $actividad) {
         $detalleActividad = new FacturaEstudianteDetalle();
         $detalleActividad->setAmount($actividad->getCosto());
         $detalleActividad->setDescription($actividad->getNombre());
         $detalleActividad->setFactura($factura);
         $detalleActividad->setAutogenerated(true);
         $listadoDetalles[$detalleActividad->generateUniqueHash()] = $detalleActividad;
         $total += $actividad->getCosto();
     }
     foreach ($factura->getFacturaDetalles() as $detalle) {
         if (count($listadoDetalles) > 0) {
             $auxDetalle = array_pop($listadoDetalles);
             $detalle->setAmount($auxDetalle->getAmount());
             $detalle->setDescription($auxDetalle->getDescription());
             $this->em->persist($detalle);
         } else {
             $this->em->remove($detalle);
         }
     }
     foreach ($listadoDetalles as $detalle) {
         $this->em->persist($detalle);
     }
     $factura->setTotal($total);
     $this->em->persist($factura);
     $this->em->flush();
 }