public function buildForm(FormBuilderInterface $builder, array $options) { $sekolah = $this->getSekolah(); $builder->addEventSubscriber(new SekolahSubscriber($sekolah)); $builder->add('sekolah', 'sisdik_entityhidden', ['required' => true, 'class' => 'LanggasSisdikBundle:Sekolah', 'data' => $sekolah->getId()])->add('jenisLayanan', 'choice', ['choices' => array_merge(PilihanLayananSms::getDaftarLayananPeriodik()), 'required' => true, 'label' => 'label.layanansms.jenis'])->add('perulangan', 'choice', ['choices' => LayananSmsPeriodik::getDaftarPerulangan(), 'label' => 'label.perulangan', 'multiple' => false, 'expanded' => false, 'required' => true, 'attr' => ['class' => 'small']])->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'])->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'])->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'])->add('smsJam', 'time', ['label' => 'label.kirim.sms.jam', 'required' => false, 'input' => 'string', 'widget' => 'single_text', 'with_seconds' => false, 'attr' => ['class' => 'mini']])->add('templatesms', 'entity', ['class' => 'LanggasSisdikBundle:Templatesms', 'label' => 'label.sms.template.entry', 'multiple' => false, 'expanded' => false, 'required' => true, 'property' => 'optionLabel', 'query_builder' => function (EntityRepository $repository) use($sekolah) { $qb = $repository->createQueryBuilder('templateSms')->where('templateSms.sekolah = :sekolah')->orderBy('templateSms.nama', 'ASC')->setParameter('sekolah', $sekolah); return $qb; }, 'attr' => ['class' => 'xlarge']])->add('tingkat', 'entity', ['class' => 'LanggasSisdikBundle:Tingkat', 'label' => 'label.tingkat', 'required' => false, 'property' => 'optionLabel', 'placeholder' => 'label.pilih.tingkat', 'query_builder' => function (EntityRepository $repository) use($sekolah) { $qb = $repository->createQueryBuilder('tingkat')->where('tingkat.sekolah = :sekolah')->orderBy('tingkat.urutan', 'ASC')->setParameter('sekolah', $sekolah); return $qb; }])->add('aktif', 'checkbox', ['label' => 'label.active', 'required' => false, 'label_render' => true, 'widget_checkbox_label' => 'widget', 'horizontal_input_wrapper_class' => 'col-sm-offset-4 col-sm-8 col-md-offset-4 col-md-7 col-lg-offset-3 col-lg-9']); }
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']); } }
/** * @Route("/{id}", name="layanan_smsperiodik_show") * @Method("GET") * @Template() */ public function showAction($id) { $this->setCurrentMenu(); $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('LanggasSisdikBundle:LayananSmsPeriodik')->find($id); if (!$entity) { throw $this->createNotFoundException('Entity LayananSmsPeriodik 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(), 'daftarJenisLayanan' => array_merge(PilihanLayananSms::getDaftarLayananPeriodik()), 'daftarPerulangan' => LayananSmsPeriodik::getDaftarPerulangan(), 'daftarBulan' => LayananSmsPeriodik::getDaftarNamaBulan(), 'daftarHari' => JadwalKehadiran::getNamaHari()]; }
/** * @param InputInterface $input * @param Sekolah $sekolah * @param VendorSekolah $vendorSekolah * @param LayananSmsPeriodik $layananSms * @param \DateTime $waktuSekarang */ private function kirimSms(InputInterface $input, Sekolah $sekolah, VendorSekolah $vendorSekolah, LayananSmsPeriodik $layananSms, \DateTime $waktuSekarang) { if (!$layananSms->getTemplatesms() instanceof Templatesms) { return 0; } $em = $this->getContainer()->get('doctrine')->getManager(); $prosesSmsPeriodik = $em->getRepository('LanggasSisdikBundle:ProsesSmsPeriodik')->findOneBy(['sekolah' => $sekolah, 'layananSmsPeriodik' => $layananSms, 'tanggal' => $waktuSekarang]); if ($prosesSmsPeriodik instanceof ProsesSmsPeriodik) { if ($prosesSmsPeriodik->getBerhasilKirimSms() == true) { return 0; } } $smsKehadiran = 0; $daftarBulan = LayananSmsPeriodik::getDaftarNamaBulan(); $daftarHari = LayananSmsPeriodik::getDaftarNamaHariSingkat(); $daftarStatusKehadiran = JadwalKehadiran::getDaftarStatusKehadiran(); /* @var $translator Translator */ $translator = $this->getContainer()->get('translator'); $translator->setLocale("id_ID"); switch ($layananSms->getJenisLayanan()) { case 'zca-kehadiran-kepulangan-rekap-mingguan': $terkirim = false; $siswaHadir = []; $waktuSekarang->modify("-6 days"); $dariTanggal = $waktuSekarang->format('Y-m-d'); $dariTanggalFormatIndonesia = $waktuSekarang->format('d/m/Y'); $waktuSekarang->modify("+6 days"); $qbSiswaHadir = $em->createQueryBuilder()->select('DISTINCT(siswa.id)')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiranSiswa')->leftJoin('kehadiranSiswa.siswa', 'siswa')->where('kehadiranSiswa.sekolah = :sekolah')->andWhere('kehadiranSiswa.tanggal BETWEEN :dariTanggal AND :hinggaTanggal')->setParameter('sekolah', $sekolah)->setParameter('dariTanggal', $dariTanggal)->setParameter('hinggaTanggal', $waktuSekarang->format('Y-m-d')); if ($layananSms->getTingkat() instanceof Tingkat) { $qbSiswaHadir->leftJoin('kehadiranSiswa.kelas', 'kelas')->andWhere('kelas.tingkat = :tingkat')->setParameter('tingkat', $layananSms->getTingkat()); } $dataSiswa = array_map('current', $qbSiswaHadir->getQuery()->getResult()); if (count($dataSiswa) > 0) { foreach ($dataSiswa as $value) { if (!in_array($value, $siswaHadir)) { $siswaHadir[] = $value; } } } if (count($siswaHadir) > 0) { foreach ($siswaHadir as $idsiswa) { $teksRekapitulasi = $layananSms->getTemplatesms()->getTeks(); $teksHadirPulang = ''; $qbKehadiranSiswa = $em->createQueryBuilder()->select('kehadiranSiswa')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiranSiswa')->leftJoin('kehadiranSiswa.siswa', 'siswa')->where('kehadiranSiswa.sekolah = :sekolah')->andWhere('kehadiranSiswa.tanggal BETWEEN :dariTanggal AND :hinggaTanggal')->andWhere('kehadiranSiswa.siswa = :siswa')->setParameter('sekolah', $sekolah)->setParameter('dariTanggal', $dariTanggal)->setParameter('hinggaTanggal', $waktuSekarang->format('Y-m-d'))->setParameter('siswa', $idsiswa)->orderBy('kehadiranSiswa.tanggal', 'ASC'); $kehadiranSiswa = $qbKehadiranSiswa->getQuery()->getResult(); /* @var $kehadiran KehadiranSiswa */ foreach ($kehadiranSiswa as $kehadiran) { $teksRekapitulasi = str_replace("%nama%", $kehadiran->getSiswa()->getNamaLengkap(), $teksRekapitulasi); $teksRekapitulasi = str_replace("%nis%", $kehadiran->getSiswa()->getNomorInduk(), $teksRekapitulasi); $teksRekapitulasi = str_replace("%kelas%", $kehadiran->getKelas()->getNama(), $teksRekapitulasi); $teksRekapitulasi = str_replace("%dari%", $dariTanggalFormatIndonesia, $teksRekapitulasi); $teksRekapitulasi = str_replace("%hingga%", $waktuSekarang->format('d/m/Y'), $teksRekapitulasi); $stringHari = $translator->trans($daftarHari[$kehadiran->getTanggal()->format('N')]); $stringStatusKehadiran = str_replace(' ', '', $translator->trans($daftarStatusKehadiran[$kehadiran->getStatusKehadiran()])); if ($kehadiran->getStatusKehadiran() == 'a-hadir-tepat' || $kehadiran->getStatusKehadiran() == 'b-hadir-telat') { $stringJamDatang = '*'; if ($kehadiran->getJam(false) != '') { $stringJamDatang = $kehadiran->getJam(false); } $kepulangan = $em->getRepository('LanggasSisdikBundle:KepulanganSiswa')->findOneBy(['kehadiranSiswa' => $kehadiran]); $stringJamPulang = '*'; if ($kepulangan instanceof KepulanganSiswa) { if ($kehadiran->getJam(false) != '') { $stringJamPulang = $kepulangan->getJam(false); } else { $stringJamPulang = 'PTT'; } } $teksHadirPulang .= $stringHari . ':' . $stringStatusKehadiran . ' ' . $stringJamDatang . '-' . $stringJamPulang . ', '; } else { $teksHadirPulang .= $stringHari . ':' . $stringStatusKehadiran . ', '; } } $teksHadirPulang = preg_replace('/, $/', '', $teksHadirPulang); $teksRekapitulasi = str_replace("%rekap-kehadiran-kepulangan%", $teksHadirPulang, $teksRekapitulasi); if ($input->getOption('debug')) { print "[debug]: " . $teksRekapitulasi . "\n"; } $ortuWaliAktif = $em->getRepository('LanggasSisdikBundle:OrangtuaWali')->findOneBy(['siswa' => $idsiswa, 'aktif' => true]); if ($ortuWaliAktif instanceof OrangtuaWali) { $ponselOrtuWaliAktif = $ortuWaliAktif->getPonsel(); if ($ponselOrtuWaliAktif != "") { $nomorponsel = preg_split("/[\\s,\\/]+/", $ponselOrtuWaliAktif); foreach ($nomorponsel as $ponsel) { $messenger = $this->getContainer()->get('sisdik.messenger'); if ($messenger instanceof Messenger) { if ($vendorSekolah->getJenis() == 'khusus') { $messenger->setUseVendor(true); $messenger->setVendorURL($vendorSekolah->getUrlPengirimPesan()); } $messenger->setPhoneNumber($ponsel); $messenger->setMessage($teksRekapitulasi); if ($input->getOption('debug')) { $messenger->populateMessage(); print "[debug]: " . $messenger->getMessageCommand() . "\n\n"; } else { $messenger->sendMessage($sekolah); } $smsKehadiran++; $terkirim = true; } } } } } if ($terkirim === true) { if ($prosesSmsPeriodik instanceof ProsesSmsPeriodik) { $prosesSmsPeriodik->setBerhasilKirimSms(true); } else { $prosesSmsPeriodik = new ProsesSmsPeriodik(); $prosesSmsPeriodik->setSekolah($sekolah); $prosesSmsPeriodik->setLayananSmsPeriodik($layananSms); $prosesSmsPeriodik->setTanggal($waktuSekarang); $prosesSmsPeriodik->setBerhasilKirimSms(true); } if (!$input->getOption('debug')) { $em->persist($prosesSmsPeriodik); $em->flush(); } } } break; } return $smsKehadiran; }