/** * @Route("/{id}/show", name="fee_recur_show") * @Template() * @Secure(roles="ROLE_BENDAHARA") */ public function showAction($id) { $this->setCurrentMenu(); $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('LanggasSisdikBundle:BiayaRutin')->find($id); if (!$entity) { throw $this->createNotFoundException('Entity BiayaRutin tak ditemukan.'); } if ($this->get('security.authorization_checker')->isGranted('view', $entity) === false) { throw new AccessDeniedException($this->get('translator')->trans('akses.ditolak')); } $deleteForm = $this->createDeleteForm($id); return ['entity' => $entity, 'delete_form' => $deleteForm->createView(), 'daftarPerulangan' => BiayaRutin::getDaftarPerulangan(), 'daftarBulan' => BiayaRutin::getDaftarNamaBulan(), 'daftarHari' => JadwalKehadiran::getNamaHari()]; }
public function buildForm(FormBuilderInterface $builder, array $options) { $sekolah = $this->getSekolah(); $builder->add('tahun', 'entity', ['class' => 'LanggasSisdikBundle:Tahun', 'label' => 'label.year.entry', 'multiple' => false, 'expanded' => false, 'property' => 'tahun', 'placeholder' => false, 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) { $qb = $repository->createQueryBuilder('tahun')->where('tahun.sekolah = :sekolah')->orderBy('tahun.tahun', 'DESC')->setParameter('sekolah', $sekolah); return $qb; }, 'attr' => ['class' => 'small'], 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false, 'horizontal_input_wrapper_class' => 'col-sm-4 col-md-3 col-lg-2'])->add('penjurusan', 'entity', ['class' => 'LanggasSisdikBundle:Penjurusan', 'label' => 'label.placement.study', 'multiple' => false, 'expanded' => false, 'property' => 'optionLabel', 'placeholder' => 'label.semua.penjurusan.studi', 'required' => false, 'query_builder' => function (EntityRepository $repository) use($sekolah) { $qb = $repository->createQueryBuilder('penjurusan')->where('penjurusan.sekolah = :sekolah')->orderBy('penjurusan.root', 'ASC')->addOrderBy('penjurusan.lft', 'ASC')->setParameter('sekolah', $sekolah); return $qb; }, 'attr' => ['class' => 'xlarge'], 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false])->add('jenisbiaya', 'entity', ['class' => 'LanggasSisdikBundle:Jenisbiaya', 'label' => 'label.fee.type.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'placeholder' => false, 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) { $qb = $repository->createQueryBuilder('jenisbiaya')->where('jenisbiaya.sekolah = :sekolah')->orderBy('jenisbiaya.nama', 'ASC')->setParameter('sekolah', $sekolah); return $qb; }, 'attr' => ['class' => 'xlarge'], 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false])->add('nominal', 'money', ['currency' => 'IDR', 'required' => true, 'precision' => 0, 'grouping' => 3, 'attr' => ['class' => 'large'], 'horizontal_input_wrapper_class' => 'col-sm-6 col-md-5 col-lg-4'])->add('perulangan', 'choice', ['choices' => BiayaRutin::getDaftarPerulangan(), 'preferred_choices' => ['c-bulanan'], 'required' => true, 'multiple' => false, 'expanded' => false, 'attr' => ['class' => 'medium'], 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false])->add('mingguanHariKe', 'choice', ['label' => 'label.day', 'choices' => JadwalKehadiran::getNamaHari(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => 'label.selectweekday', 'attr' => ['class' => 'medium'], 'help_block' => 'help.untuk.perulangan.mingguan', 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false])->add('bulananHariKe', 'choice', ['label' => 'label.monthday', 'choices' => JadwalKehadiran::getAngkaHariSebulan(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => 'label.selectmonthday', 'attr' => ['class' => 'medium'], 'help_block' => 'help.untuk.perulangan.bulanan.atau.lebih.lama', 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false])->add('bulanAwal', 'choice', ['label' => 'label.bulan.awal', 'choices' => LayananSmsPeriodik::getDaftarNamaBulan(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => 'label.pilih.bulan', 'attr' => ['class' => 'medium'], 'help_block' => 'help.untuk.perulangan.triwulan.atau.lebih.lama', 'read_only' => $options['mode'] == 'edit' ? true : false, 'disabled' => $options['mode'] == 'edit' ? true : false])->add('urutan', 'choice', ['choices' => $this->buildOrderChoices(), 'required' => true, 'multiple' => false, 'expanded' => false, 'attr' => ['class' => 'small'], 'horizontal_input_wrapper_class' => 'col-sm-3 col-md-2 col-lg-1']); if ($options['mode'] == 'edit') { $builder->add('nominalSebelumnya', 'hidden', ['required' => false, 'data' => $options['nominal']]); } if ($options['nominal'] !== null) { $builder->add('captcha', 'captcha', ['attr' => ['class' => 'medium', 'placeholder' => 'help.type.captcha', 'autocomplete' => 'off'], 'as_url' => true, 'reload' => true, 'help_block' => 'help.captcha.penjelasan.ubah.biaya', 'horizontal_input_wrapper_class' => 'col-sm-6 col-md-5 col-lg-4']); } }
/** * 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; }