Ejemplo n.º 1
0
 /**
  * mengimpor data siswa baru
  *
  * @param array                                $content
  * @param array                                $fieldnames
  * @param \Langgas\SisdikBundle\Entity\Sekolah $sekolah
  * @param \Langgas\SisdikBundle\Entity\Tahun   $tahun
  * @param boolean                              $andFlush
  */
 private function imporSiswaBaru($content, $fieldnames, $sekolah, $tahun, $andFlush = false)
 {
     /* @var $em EntityManager */
     $em = $this->getDoctrine()->getManager();
     $atleastone = false;
     foreach ($content as $key => $val) {
         if ($val != "") {
             $atleastone = true;
         }
     }
     if (!$atleastone) {
         return;
     }
     $entity = new Siswa();
     $reflectionClass = new \ReflectionClass('Langgas\\SisdikBundle\\Entity\\Siswa');
     $entityFields = [];
     foreach ($reflectionClass->getProperties() as $property) {
         $entityFields[] = $property->getName();
     }
     $orangtuaWali = new ArrayCollection();
     $ortu = new OrangtuaWali();
     $sekolahAsal = null;
     foreach ($fieldnames as $keyfield => $valuefield) {
         if (preg_match("/(.+)\\.(.+)/", $valuefield, $matches)) {
             $valuefield = $matches[1];
             $childfield = $matches[2];
         }
         $key = array_search($valuefield, $entityFields);
         if (is_int($key)) {
             if (array_key_exists($keyfield, $content)) {
                 $value = $content[$keyfield];
                 if ($value == "0" || $value == "") {
                     $value = null;
                 }
                 if ($valuefield == 'orangtuaWali') {
                     $ortu->setAktif(true);
                     $ortu->{'set' . ucfirst($childfield)}(trim($value));
                 } elseif ($valuefield == 'sekolahAsal') {
                     if (trim($value) != '') {
                         $querySekolahAsal = $em->createQueryBuilder()->select('sekolahasal')->from('LanggasSisdikBundle:SekolahAsal', 'sekolahasal')->where('sekolahasal.nama LIKE :nama')->setParameter('nama', "%{$value}%");
                         $resultSekolahAsal = $querySekolahAsal->getQuery()->getResult();
                         if (count($resultSekolahAsal) >= 1) {
                             $sekolahAsal = $resultSekolahAsal[0];
                         } else {
                             $sekolahAsal = new SekolahAsal();
                             $sekolahAsal->{'set' . ucfirst($childfield)}(trim($value));
                             $sekolahAsal->setSekolah($sekolah);
                         }
                     }
                 } elseif ($valuefield == 'tanggalLahir') {
                     if ($value) {
                         $entity->{'set' . ucfirst($valuefield)}(new \DateTime($value));
                     }
                 } else {
                     $value = $value !== null ? trim($value) : $value;
                     $entity->{'set' . ucfirst($valuefield)}($value);
                 }
             }
         }
     }
     if ($this->nomorUrutPersekolah == 0) {
         $qbe = $em->createQueryBuilder();
         $querynomor = $em->createQueryBuilder()->select($qbe->expr()->max('siswa.nomorUrutPersekolah'))->from('LanggasSisdikBundle:Siswa', 'siswa')->where('siswa.sekolah = :sekolah')->setParameter('sekolah', $sekolah);
         $nomorUrutPersekolah = $querynomor->getQuery()->getSingleScalarResult();
         $nomorUrutPersekolah = $nomorUrutPersekolah === null ? 100000 : $nomorUrutPersekolah;
         $nomorUrutPersekolah++;
         $this->nomorUrutPersekolah = $nomorUrutPersekolah;
     } else {
         $this->nomorUrutPersekolah++;
     }
     $entity->setNomorUrutPersekolah($this->nomorUrutPersekolah);
     $entity->setNomorIndukSistem($this->nomorUrutPersekolah . $sekolah->getNomorUrut());
     $entity->setCalonSiswa(false);
     $entity->setSekolah($sekolah);
     $entity->setTahun($tahun);
     $entity->setGelombang(null);
     $orangtuaWali->add($ortu);
     $entity->setOrangtuaWali($orangtuaWali);
     $entity->setSekolahAsal($sekolahAsal);
     $entity->setDibuatOleh($this->getUser());
     $tanggalBulan = preg_split("/[\\/,\\s,\\-,\\+,_,\\*]/", $sekolah->getAwalPembiayaan());
     if (is_array($tanggalBulan)) {
         $tanggal = $tanggalBulan[0];
         $bulan = $tanggalBulan[1];
     } else {
         $tanggal = '01';
         $bulan = '07';
     }
     $entity->setPembiayaanSejak(new \DateTime($entity->getTahun()->getTahun() . '-' . $bulan . '-' . $tanggal));
     $em->persist($entity);
     $this->imporSiswaJumlah++;
     if ($andFlush) {
         $em->flush();
         $em->clear($entity);
         $em->clear($ortu);
         $em->clear($sekolahAsal);
     }
 }
 /**
  * Mengambil identitas biaya sekali bayar seorang siswa
  *
  * @param Siswa $siswa
  * @return
  *                     array['semua'] array id biaya sekali bayar seluruhnya<br>
  *                     array['tersimpan'] array id biaya sekali bayar yang tersimpan<br>
  *                     array['tersisa'] array id biaya sekali bayar yang tersisa<br>
  */
 private function getBiayaProperties(Siswa $siswa)
 {
     $em = $this->getDoctrine()->getManager();
     if ($siswa->getPenjurusan() instanceof Penjurusan) {
         $biayaSekali = $em->createQueryBuilder()->select('biaya')->from('LanggasSisdikBundle:BiayaSekali', 'biaya')->where('biaya.tahun = :tahun')->andWhere('biaya.penjurusan IS NULL OR biaya.penjurusan = :penjurusan')->orderBy('biaya.urutan', 'ASC')->setParameter('tahun', $siswa->getTahun())->setParameter('penjurusan', $siswa->getPenjurusan())->getQuery()->getResult();
     } else {
         $biayaSekali = $em->createQueryBuilder()->select('biaya')->from('LanggasSisdikBundle:BiayaSekali', 'biaya')->where('biaya.tahun = :tahun')->andWhere('biaya.penjurusan IS NULL')->orderBy('biaya.urutan', 'ASC')->setParameter('tahun', $siswa->getTahun())->getQuery()->getResult();
     }
     $idBiayaSemua = [];
     foreach ($biayaSekali as $biaya) {
         if ($biaya instanceof BiayaSekali) {
             $idBiayaSemua[] = $biaya->getId();
         }
     }
     $querybuilder1 = $em->createQueryBuilder()->select('daftar')->from('LanggasSisdikBundle:DaftarBiayaSekali', 'daftar')->leftJoin('daftar.biayaSekali', 'biaya')->leftJoin('daftar.pembayaranSekali', 'pembayaran')->where('pembayaran.siswa = :siswa')->orderBy('biaya.urutan', 'ASC')->setParameter('siswa', $siswa);
     $daftarBiaya = $querybuilder1->getQuery()->getResult();
     $idBiayaTersimpan = [];
     foreach ($daftarBiaya as $daftar) {
         if ($daftar instanceof DaftarBiayaSekali) {
             $idBiayaTersimpan[] = $daftar->getBiayaSekali()->getId();
         }
     }
     $idBiayaSisa = array_diff($idBiayaSemua, $idBiayaTersimpan);
     return ['semua' => $idBiayaSemua, 'tersimpan' => $idBiayaTersimpan, 'tersisa' => $idBiayaSisa];
 }
 /**
  * Memeriksa apakah seorang siswa memiliki tunggakan pembayaran rutin
  *
  * @param Siswa     $siswa
  * @param \DateTime $tanggalSekarang
  *
  * @return boolean
  */
 private function memilikiTunggakan(Siswa $siswa, \DateTime $tanggalSekarang)
 {
     $em = $this->getDoctrine()->getManager();
     $daftarPerulangan = BiayaRutin::getDaftarPerulangan();
     $bulanSekarang = $tanggalSekarang->format('n');
     if ($siswa->getPenjurusan() instanceof Penjurusan) {
         $daftarBiayaRutin = $em->createQueryBuilder()->select('biaya')->from('LanggasSisdikBundle:BiayaRutin', 'biaya')->where('biaya.tahun = :tahun')->andWhere('biaya.penjurusan IS NULL OR biaya.penjurusan = :penjurusan')->orderBy('biaya.perulangan', 'ASC')->setParameter('tahun', $siswa->getTahun())->setParameter('penjurusan', $siswa->getPenjurusan())->getQuery()->getResult();
     } else {
         $daftarBiayaRutin = $em->createQueryBuilder()->select('biaya')->from('LanggasSisdikBundle:BiayaRutin', 'biaya')->where('biaya.tahun = :tahun')->andWhere('biaya.penjurusan IS NULL')->orderBy('biaya.perulangan', 'ASC')->setParameter('tahun', $siswa->getTahun())->getQuery()->getResult();
     }
     $bedaWaktu = $tanggalSekarang->diff($siswa->getPembiayaanSejak());
     foreach ($daftarBiayaRutin as $biaya) {
         $jumlahWajibBayar = 0;
         $pembayaranLunas = $em->createQueryBuilder()->select('COUNT(DISTINCT pembayaran.id) AS jumlah')->from('LanggasSisdikBundle:PembayaranRutin', 'pembayaran')->leftJoin('pembayaran.transaksiPembayaranRutin', 'transaksi')->where('pembayaran.siswa = :siswa')->andWhere('pembayaran.biayaRutin = :biayaRutin')->setParameter('siswa', $siswa)->setParameter('biayaRutin', $biaya)->groupBy('pembayaran.id')->having('SUM(transaksi.nominalPembayaran) >= (SUM(DISTINCT pembayaran.nominalBiaya) - (SUM(DISTINCT pembayaran.nominalPotongan) + SUM(DISTINCT pembayaran.persenPotonganDinominalkan)))')->getQuery()->getResult();
         if (count($pembayaranLunas) == 0) {
             $pembayaranLunas[0]['jumlah'] = 0;
         }
         $jumlahPembayaran = 0;
         if (is_array($pembayaranLunas)) {
             foreach ($pembayaranLunas as $pembayaran) {
                 $jumlahPembayaran += $pembayaran['jumlah'];
             }
         }
         $tmpHariKe = $biaya->getBulananHariKe() && $biaya->getBulananHariKe() <= 28 ? $biaya->getBulananHariKe() : '01';
         $tanggalAwalBayar = new \DateTime($siswa->getPembiayaanSejak()->format('Y-m-') . $tmpHariKe);
         $bedaBulan = abs($biaya->getBulanAwal() - $siswa->getPembiayaanSejak()->format('n'));
         switch ($biaya->getPerulangan()) {
             case 'a-harian':
                 $jumlahWajibBayar = $bedaWaktu->format("%a");
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
             case 'b-mingguan':
                 $jumlahWajibBayar = floor($bedaWaktu->format("%a") / 7);
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
             case 'c-bulanan':
                 $jumlahWajibBayar = $bedaWaktu->format("%m");
                 if ($bedaWaktu->format("%d") >= $biaya->getBulananHariKe()) {
                     $jumlahWajibBayar++;
                 }
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
             case 'd-triwulan':
                 if ($biaya->getBulanAwal() < $siswa->getPembiayaanSejak()->format('n')) {
                     $tanggalAwalBayar->modify("+1 year");
                     $tanggalAwalBayar->modify("-{$bedaBulan} months");
                 } else {
                     $tanggalAwalBayar->modify("+{$bedaBulan} months");
                 }
                 $bedaWaktu = $tanggalSekarang->diff($tanggalAwalBayar);
                 $jumlahWajibBayar = ceil($bedaWaktu->format("%m") / 3);
                 if ($bedaWaktu->format('%m') % 3 == 0) {
                     if ($bedaWaktu->format("%r%d") < 0) {
                         $jumlahWajibBayar++;
                     }
                 }
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
             case 'e-caturwulan':
                 if ($biaya->getBulanAwal() < $siswa->getPembiayaanSejak()->format('n')) {
                     $tanggalAwalBayar->modify("+1 year");
                     $tanggalAwalBayar->modify("-{$bedaBulan} months");
                 } else {
                     $tanggalAwalBayar->modify("+{$bedaBulan} months");
                 }
                 $bedaWaktu = $tanggalSekarang->diff($tanggalAwalBayar);
                 $jumlahWajibBayar = ceil($bedaWaktu->format("%m") / 4);
                 if ($bedaWaktu->format('%m') % 4 == 0) {
                     if ($bedaWaktu->format("%r%d") < 0) {
                         $jumlahWajibBayar++;
                     }
                 }
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
             case 'f-semester':
                 if ($biaya->getBulanAwal() < $siswa->getPembiayaanSejak()->format('n')) {
                     $tanggalAwalBayar->modify("+1 year");
                     $tanggalAwalBayar->modify("-{$bedaBulan} months");
                 } else {
                     $tanggalAwalBayar->modify("+{$bedaBulan} months");
                 }
                 $bedaWaktu = $tanggalSekarang->diff($tanggalAwalBayar);
                 $jumlahWajibBayar = ceil($bedaWaktu->format("%m") / 6);
                 if ($bedaWaktu->format('%m') % 6 == 0) {
                     if ($bedaWaktu->format("%r%d") < 0) {
                         $jumlahWajibBayar++;
                     }
                 }
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
             case 'g-tahunan':
                 if ($biaya->getBulanAwal() < $siswa->getPembiayaanSejak()->format('n')) {
                     $tanggalAwalBayar->modify("+1 year");
                     $tanggalAwalBayar->modify("-{$bedaBulan} months");
                 } else {
                     $tanggalAwalBayar->modify("+{$bedaBulan} months");
                 }
                 $bedaWaktu = $tanggalSekarang->diff($tanggalAwalBayar);
                 if ($bedaWaktu->format("%r%a") < 0) {
                     $jumlahWajibBayar++;
                 }
                 if ($jumlahPembayaran < $jumlahWajibBayar) {
                     return true;
                 }
                 break;
         }
     }
     return false;
 }
Ejemplo n.º 4
0
 /**
  * @Route("/new", name="applicant_new")
  * @Method("GET")
  * @Template()
  */
 public function newAction()
 {
     $this->setCurrentMenu();
     $panitiaAktif = $this->getPanitiaAktif();
     if (!is_array($panitiaAktif) || count($panitiaAktif) <= 0) {
         throw new AccessDeniedException($this->get('translator')->trans('exception.tidak.ada.panitia.pendaftaran'));
     }
     if (!(is_array($panitiaAktif[0]) && in_array($this->getUser()->getId(), $panitiaAktif[0]) || $panitiaAktif[1] == $this->getUser()->getId())) {
         throw new AccessDeniedException($this->get('translator')->trans('exception.register.as.committee'));
     }
     $entity = new Siswa();
     $orangtuaWali = new OrangtuaWali();
     $entity->getOrangtuaWali()->add($orangtuaWali);
     $form = $this->createForm('sisdik_siswapendaftar', $entity, ['tahun_aktif' => $panitiaAktif[2], 'mode' => 'new']);
     return ['entity' => $entity, 'form' => $form->createView()];
 }