/** * @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()]; }
/** * @Route("/{sid}/{bid}", name="pembayaran_biaya_rutin__summary") * @Template() */ public function summaryAction($sid, $bid) { $sekolah = $this->getSekolah(); $this->setCurrentMenu(); $em = $this->getDoctrine()->getManager(); $translator = $this->get('translator'); $siswa = $em->getRepository('LanggasSisdikBundle:Siswa')->find($sid); if (!$siswa instanceof Siswa) { throw $this->createNotFoundException('Entity Siswa tak ditemukan.'); } if ($this->get('security.authorization_checker')->isGranted('view', $siswa) === false) { throw new AccessDeniedException($this->get('translator')->trans('akses.ditolak')); } $biaya = $em->getRepository('LanggasSisdikBundle:BiayaRutin')->find($bid); if (!$biaya instanceof BiayaRutin) { throw $this->createNotFoundException('Entity BiayaRutin tak ditemukan.'); } $pembayaranRutin = $em->getRepository('LanggasSisdikBundle:PembayaranRutin')->findBy(['siswa' => $siswa, 'biayaRutin' => $biaya], ['waktuSimpan' => 'DESC'], self::PERIODE_AWAL); $daftarPerulangan = BiayaRutin::getDaftarPerulangan(); $daftarBulan = BiayaRutin::getDaftarNamaBulan(); $daftarHari = JadwalKehadiran::getNamaHari(); $tanggalSekarang = new \DateTime(); $bulanSekarang = $tanggalSekarang->format('n'); /* @var $bedaWaktu \DateInterval */ $bedaWaktu = $tanggalSekarang->diff($siswa->getPembiayaanSejak()); $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']; } } $pembayaranBelumLunas = $em->createQueryBuilder()->select('DISTINCT pembayaran.id')->from('LanggasSisdikBundle:PembayaranRutin', 'pembayaran')->leftJoin('pembayaran.transaksiPembayaranRutin', 'transaksi')->where('pembayaran.siswa = :siswa')->andWhere('pembayaran.biayaRutin = :biayaRutin')->orderBy('pembayaran.waktuSimpan', 'DESC')->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(); $jumlahPembayaranBelumLunas = count($pembayaranBelumLunas); $jumlahWajibBayar = 0; $jatuhTempo = $translator->trans($daftarPerulangan[$biaya->getPerulangan()]); if ($biaya->getBulanAwal() == 0) { $tmpTanggal = new \DateTime($tanggalSekarang->format('Y') . '-01-01'); } else { $tmpTanggal = new \DateTime($tanggalSekarang->format('Y') . '-' . $biaya->getBulanAwal() . '-01'); } $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"); break; case 'b-mingguan': $jumlahWajibBayar = floor($bedaWaktu->format("%a") / 7); $jatuhTempo .= ': ' . $translator->trans($daftarHari[$biaya->getMingguanHariKe()]); break; case 'c-bulanan': $jumlahWajibBayar = $bedaWaktu->format("%m"); if ($bedaWaktu->format("%d") >= $biaya->getBulananHariKe()) { $jumlahWajibBayar++; } $jatuhTempo .= ': ' . $translator->trans('tanggal') . ' ' . $biaya->getBulananHariKe(); 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++; } } $jatuhTempo .= ': ' . $translator->trans('tanggal') . ' ' . $biaya->getBulananHariKe(); $jatuhTempo .= ' ('; $jatuhTempo .= $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $tmpTanggal->modify('+3 months'); $jatuhTempo .= '/' . $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $tmpTanggal->modify('+3 months'); $jatuhTempo .= '/' . $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $tmpTanggal->modify('+3 months'); $jatuhTempo .= '/' . $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $jatuhTempo .= ')'; 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++; } } $jatuhTempo .= ': ' . $translator->trans('tanggal') . ' ' . $biaya->getBulananHariKe(); $jatuhTempo .= ' ('; $jatuhTempo .= $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $tmpTanggal->modify('+4 months'); $jatuhTempo .= '/' . $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $tmpTanggal->modify('+4 months'); $jatuhTempo .= '/' . $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $jatuhTempo .= ')'; 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++; } } $jatuhTempo .= ': ' . $translator->trans('tanggal') . ' ' . $biaya->getBulananHariKe(); $jatuhTempo .= ' ('; $jatuhTempo .= $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $tmpTanggal->modify('+6 months'); $jatuhTempo .= '/' . $translator->trans($daftarBulan[$tmpTanggal->format('n')]); $jatuhTempo .= ')'; 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++; } $jatuhTempo .= ': ' . $translator->trans('tanggal') . ' ' . $biaya->getBulananHariKe() . ' ' . $translator->trans($daftarBulan[$biaya->getBulanAwal()]); break; } if ($this->getRequest()->getMethod() == "POST") { if ($siswa->getPenjurusan() instanceof Penjurusan) { $biayaBisaDibayar = $em->createQueryBuilder()->select('biaya')->from('LanggasSisdikBundle:BiayaRutin', 'biaya')->where('biaya.id = :id')->andWhere('biaya.tahun = :tahun')->andWhere('biaya.penjurusan IS NULL OR biaya.penjurusan = :penjurusan')->orderBy('biaya.perulangan', 'ASC')->setParameter('id', $biaya->getId())->setParameter('tahun', $siswa->getTahun())->setParameter('penjurusan', $siswa->getPenjurusan())->getQuery()->getOneOrNullResult(); } else { $biayaBisaDibayar = $em->createQueryBuilder()->select('biaya')->from('LanggasSisdikBundle:BiayaRutin', 'biaya')->where('biaya.id = :id')->andWhere('biaya.tahun = :tahun')->andWhere('biaya.penjurusan IS NULL')->orderBy('biaya.perulangan', 'ASC')->setParameter('id', $biaya->getId())->setParameter('tahun', $siswa->getTahun())->getQuery()->getOneOrNullResult(); } if (!$biayaBisaDibayar instanceof BiayaRutin) { throw $this->createNotFoundException('BiayaRutin yang dipilih tidak bisa dibayar oleh siswa tersebut.'); } // if ($jumlahPembayaranBelumLunas != 0) { // throw new AccessDeniedException($this->get('translator')->trans('exception.pembayaran.sebelumnya.harus.lunas')); // } $entity = new PembayaranRutin(); $form = $this->createForm('sisdik_pembayaranrutin', $entity); $form->submit($this->getRequest()); $nominalBayar = 0; $nominalBiaya = $biaya->getNominal(); $transaksiCollection = $form->get('transaksiPembayaranRutin')->getData(); if ($form->get('jenisPotongan')->getData() == 'nominal') { $nominalBiaya = $nominalBiaya - $form->get('nominalPotongan')->getData(); } elseif ($form->get('jenisPotongan')->getData() == 'persentase') { $nominalBiaya = $nominalBiaya - $form->get('persenPotongan')->getData() / 100 * $nominalBiaya; } /* @var $transaksi TransaksiPembayaranRutin */ foreach ($transaksiCollection as $transaksi) { $nominalBayar += $transaksi->getNominalPembayaran(); } if ($nominalBayar > $nominalBiaya) { if ($form->get('jenisPotongan')->getData()) { $message = $this->get('translator')->trans('shortinfo.pay.notbiggerthan.fee.discounted'); } else { $message = $this->get('translator')->trans('shortinfo.pay.notbiggerthan.fee'); } $form->get('transaksiPembayaranRutin')->addError(new FormError($message)); } if ($form->isValid()) { $entity->setSiswa($siswa); $entity->setBiayaRutin($biaya); $entity->setNominalBiaya($biaya->getNominal()); $entity->setNamaBiaya($biaya->getJenisbiaya()->getNama()); $biaya->setTerpakai(true); $now = new \DateTime(); $entity->setTanggal($now); $qbmaxnum = $em->createQueryBuilder()->select('MAX(transaksi.nomorUrutTransaksiPerbulan)')->from('LanggasSisdikBundle:TransaksiPembayaranRutin', 'transaksi')->where("YEAR(transaksi.waktuSimpan) = :tahunsimpan")->andWhere("MONTH(transaksi.waktuSimpan) = :bulansimpan")->andWhere('transaksi.sekolah = :sekolah')->setParameter('tahunsimpan', $now->format('Y'))->setParameter('bulansimpan', $now->format('m'))->setParameter('sekolah', $sekolah); $nomormax = intval($qbmaxnum->getQuery()->getSingleScalarResult()); $nomormax++; $totalPayment = 0; $nomorTransaksi = ""; $transaksi = $entity->getTransaksiPembayaranRutin()->first(); if ($transaksi instanceof TransaksiPembayaranRutin) { $transaksi->setNomorUrutTransaksiPerbulan($nomormax); if ($sekolah->getAtributNomorTransaksiBiayaBerulang() !== null) { $nomorTransaksiRutin = $sekolah->getAtributNomorTransaksiBiayaBerulang(); $nomorTransaksiRutin = str_replace("%tahun%", $now->format('Y'), $nomorTransaksiRutin); $nomorTransaksiRutin = str_replace("%bulan%", $now->format('m'), $nomorTransaksiRutin); $nomorTransaksiRutin = str_replace("%tanggal%", $now->format('d'), $nomorTransaksiRutin); $tmpNomorTransaksi = $nomormax; $matches = []; $penambah = preg_match('/{\\+(\\d+)}/', $nomorTransaksiRutin, $matches); if ($penambah === 1) { $tmpNomorTransaksi = $tmpNomorTransaksi + $matches[1]; } $nomorTransaksiRutin = preg_replace('/{\\+\\d+}/', '', $nomorTransaksiRutin); if (preg_match('/#+%nomor-urut-perbulan%/', $nomorTransaksiRutin) === 1) { $placeholder = preg_match_all('/#/', $nomorTransaksiRutin); if ($placeholder >= 1 && strlen($tmpNomorTransaksi) <= $placeholder) { $tmpNomorTransaksi = str_repeat('0', $placeholder - strlen($tmpNomorTransaksi) + 1) . $tmpNomorTransaksi; } } $nomorTransaksiRutin = str_replace('#', '', $nomorTransaksiRutin); $nomorTransaksiRutin = str_replace("%nomor-urut-perbulan%", $tmpNomorTransaksi, $nomorTransaksiRutin); $transaksi->setNomorTransaksi($nomorTransaksiRutin); } else { $transaksi->setNomorTransaksi(TransaksiPembayaranRutin::tandakwitansi . $now->format('Y') . $now->format('m') . $nomormax); } $totalPayment = $transaksi->getNominalPembayaran(); $nomorTransaksi = $transaksi->getNomorTransaksi(); } if ($entity->getAdaPotongan() === false) { $entity->setJenisPotongan(null); $entity->setNominalPotongan(0); $entity->setPersenPotongan(0); $entity->setPersenPotonganDinominalkan(0); } if ($entity->getAdaPotongan() && $entity->getPersenPotongan() != 0) { $persenPotonganDinominalkan = $entity->getNominalBiaya() * ($entity->getPersenPotongan() / 100); $entity->setPersenPotonganDinominalkan($persenPotonganDinominalkan); $entity->setNominalPotongan(0); } else { $entity->setPersenPotongan(0); $entity->setPersenPotonganDinominalkan(0); } $em->persist($entity); $em->persist($biaya); $em->flush(); $vendorSekolah = $em->getRepository('LanggasSisdikBundle:VendorSekolah')->findOneBy(['sekolah' => $sekolah]); $pilihanLayananSms = $em->getRepository('LanggasSisdikBundle:PilihanLayananSms')->findOneBy(['sekolah' => $sekolah, 'jenisLayanan' => 'zda-biaya-rutin-bayar', 'status' => true]); if ($pilihanLayananSms instanceof PilihanLayananSms) { if ($pilihanLayananSms->getStatus()) { $layanan = $em->getRepository('LanggasSisdikBundle:LayananSms')->findOneBy(['sekolah' => $sekolah, 'jenisLayanan' => 'zda-biaya-rutin-bayar']); if ($layanan instanceof LayananSms) { $tekstemplate = $layanan->getTemplatesms()->getTeks(); $namaOrtuWali = ""; $ponselOrtuWali = ""; $orangtuaWaliAktif = $siswa->getOrangtuaWaliAktif(); if ($orangtuaWaliAktif instanceof OrangtuaWali) { $namaOrtuWali = $orangtuaWaliAktif->getNama(); $ponselOrtuWali = $orangtuaWaliAktif->getPonsel(); } $tekstemplate = str_replace("%nama-ortuwali%", $namaOrtuWali, $tekstemplate); $tekstemplate = str_replace("%nama-siswa%", $siswa->getNamaLengkap(), $tekstemplate); $tekstemplate = str_replace("%nis%", $siswa->getNomorInduk(), $tekstemplate); $tekstemplate = str_replace("%nomor-kwitansi%", $nomorTransaksi, $tekstemplate); $tekstemplate = str_replace("%nama-biaya%", $entity->getNamaBiaya(), $tekstemplate); $formatter = new \NumberFormatter($this->container->getParameter('locale'), \NumberFormatter::CURRENCY); $symbol = $formatter->getSymbol(\NumberFormatter::CURRENCY_SYMBOL); $tekstemplate = str_replace("%besar-pembayaran%", $symbol . ". " . number_format($totalPayment, 0, ',', '.'), $tekstemplate); if ($ponselOrtuWali != "") { $nomorponsel = preg_split("/[\\s,\\/]+/", $ponselOrtuWali); foreach ($nomorponsel as $ponsel) { $messenger = $this->get('sisdik.messenger'); if ($messenger instanceof Messenger) { if ($vendorSekolah instanceof VendorSekolah) { if ($vendorSekolah->getJenis() == 'khusus') { $messenger->setUseVendor(true); $messenger->setVendorURL($vendorSekolah->getUrlPengirimPesan()); } } $messenger->setPhoneNumber($ponsel); $messenger->setMessage($tekstemplate); $messenger->sendMessage($sekolah); } } } } } } $this->get('session')->getFlashBag()->add('success', $this->get('translator')->trans('flash.pembayaran.biaya.berulang.tersimpan')); return $this->redirect($this->generateUrl('pembayaran_biaya_rutin__summary', ['sid' => $sid, 'bid' => $bid])); } $this->get('session')->getFlashBag()->add('error', $this->get('translator')->trans('flash.pembayaran.biaya.berulang.gagal.disimpan')); } // if ($jumlahPembayaranBelumLunas > 0) { // return [ // 'siswa' => $siswa, // 'biaya' => $biaya, // 'pembayaranRutin' => $pembayaranRutin, // 'jumlahWajibBayar' => $jumlahWajibBayar, // 'jumlahPembayaran' => $jumlahPembayaran, // 'jumlahPembayaranBelumLunas' => $jumlahPembayaranBelumLunas, // 'jatuhTempo' => $jatuhTempo, // 'daftarPerulangan' => $daftarPerulangan, // 'daftarBulan' => $daftarBulan, // 'daftarHari' => $daftarHari, // ]; // } else { // } $entity = new PembayaranRutin(); $entity->setJenisPotongan("nominal"); $transaksiPembayaranRutin = new TransaksiPembayaranRutin(); $entity->getTransaksiPembayaranRutin()->add($transaksiPembayaranRutin); $entity->setSiswa($siswa); $form = $this->createForm('sisdik_pembayaranrutin', $entity); return ['siswa' => $siswa, 'biaya' => $biaya, 'pembayaranRutin' => $pembayaranRutin, 'jumlahWajibBayar' => $jumlahWajibBayar, 'jumlahPembayaran' => $jumlahPembayaran, 'jumlahPembayaranBelumLunas' => $jumlahPembayaranBelumLunas, 'jumlahPeriode' => $jumlahPembayaran + $jumlahPembayaranBelumLunas, 'jatuhTempo' => $jatuhTempo, 'tanggalAwalBayar' => $tanggalAwalBayar, 'daftarPerulangan' => $daftarPerulangan, 'daftarBulan' => $daftarBulan, 'daftarHari' => $daftarHari, 'form' => $form->createView(), 'tambahPeriode' => self::PERIODE_TAMBAH]; }