Esempio n. 1
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $sekolah = $options['sekolahSrc'];
     $builder->add('sekolahSrc', 'hidden', ['data' => $options['sekolahSrc']])->add('tahunAkademikSrc', 'hidden', ['data' => $options['tahunAkademikSrc']])->add('kelasSrc', 'hidden', ['data' => $options['kelasSrc']])->add('perulanganSrc', 'hidden', ['data' => $options['perulanganSrc']])->add('requestUri', 'hidden', ['data' => $options['requestUri']])->add('mingguanHariKeSrc', 'hidden', ['data' => $options['mingguanHariKeSrc']])->add('bulananHariKeSrc', 'hidden', ['data' => $options['bulananHariKeSrc']])->add('tahunAkademik', 'entity', ['class' => 'LanggasSisdikBundle:TahunAkademik', 'label' => 'label.year.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('tahunAkademik')->where('tahunAkademik.sekolah = :sekolah')->orderBy('tahunAkademik.urutan', 'DESC')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'medium selectyearduplicate'], 'label_render' => false, 'horizontal' => false])->add('kelas', 'entity', ['class' => 'LanggasSisdikBundle:Kelas', 'label' => 'label.class.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('kelas')->leftJoin('kelas.tingkat', 'tingkat')->where('kelas.sekolah = :sekolah')->orderBy('tingkat.urutan', 'ASC')->addOrderBy('kelas.urutan')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'medium selectclassduplicate'], 'label_render' => false, 'horizontal' => false])->add('perulangan', 'choice', ['choices' => JadwalKehadiran::getDaftarPerulangan(), 'label' => 'label.selectrepetition', 'multiple' => false, 'expanded' => false, 'required' => true, 'attr' => array('class' => 'small'), 'label_render' => false, 'horizontal' => false])->add('mingguanHariKe', 'choice', ['choices' => JadwalKehadiran::getNamaHari(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => 'label.selectweekday', 'attr' => array('class' => 'medium'), 'label_render' => false, 'horizontal' => false])->add('bulananHariKe', 'choice', ['choices' => JadwalKehadiran::getAngkaHariSebulan(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => 'label.selectmonthday', 'attr' => ['class' => 'medium'], 'label_render' => false, 'horizontal' => false]);
 }
 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']);
 }
Esempio n. 3
0
 /**
  * @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()];
 }
Esempio n. 4
0
 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('tahunAkademik', 'entity', ['class' => 'LanggasSisdikBundle:TahunAkademik', 'label' => 'label.year.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('tahunAkademik')->where('tahunAkademik.sekolah = :sekolah')->orderBy('tahunAkademik.urutan', 'DESC')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'medium selectyear']])->add('kelas', 'entity', ['class' => 'LanggasSisdikBundle:Kelas', 'label' => 'label.class.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('kelas')->leftJoin('kelas.tingkat', 'tingkat')->where('kelas.sekolah = :sekolah')->orderBy('tingkat.urutan', 'ASC')->addOrderBy('kelas.urutan')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'large selectclass']])->add('statusKehadiran', 'choice', ['choices' => JadwalKehadiran::getDaftarStatusKehadiran(), 'label' => 'label.status.kehadiran', 'multiple' => false, 'expanded' => false, 'required' => true, 'attr' => ['class' => 'medium']])->add('perulangan', 'choice', ['choices' => JadwalKehadiran::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']])->add('bulananHariKe', 'choice', ['label' => 'label.monthday', 'choices' => JadwalKehadiran::getAngkaHariSebulan(), 'multiple' => false, 'expanded' => false, 'required' => false, 'placeholder' => 'label.selectmonthday', 'attr' => ['class' => 'medium']])->add('paramstatusDariJam', 'time', ['label' => 'label.paramstatusfrom', 'required' => false, 'input' => 'string', 'widget' => 'single_text', 'with_seconds' => false, 'attr' => ['class' => 'mini']])->add('paramstatusHinggaJam', 'time', ['label' => 'label.paramstatusto', 'required' => false, 'input' => 'string', 'widget' => 'single_text', 'with_seconds' => false, 'attr' => ['class' => 'mini']])->add('kirimSms', 'checkbox', ['label' => 'label.kirim.sms', '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'])->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' => false, 'property' => 'optionLabel', 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('template')->where('template.sekolah = :sekolah')->orderBy('template.nama', 'ASC')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'xlarge'], 'placeholder' => 'label.pilih.template.sms'])->add('otomatisTerhubungMesin', 'checkbox', ['label' => 'label.otomatis.terhubung.mesin.kehadiran', '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'])->add('permulaan', 'checkbox', ['label' => 'label.awal.kehadiran', 'required' => false, 'help_block' => 'help.awal.kehadiran', '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']);
 }
 /**
  * @param FormEvent $event
  */
 public function preSubmit(FormEvent $event)
 {
     $data = $event->getData();
     $form = $event->getForm();
     $form->add('perulangan', 'choice', ['choices' => JadwalKehadiran::getDaftarPerulangan(), 'label' => 'label.selectrepetition', 'multiple' => false, 'expanded' => false, 'required' => true, 'attr' => ['class' => 'medium pilih-perulangan'], 'label_render' => false, 'horizontal' => false]);
     if (array_key_exists('perulangan', $data)) {
         if ($data['perulangan'] == 'a-harian') {
             $form->add('mingguanHariKe', 'hidden');
             $form->add('bulananHariKe', 'hidden');
         } elseif ($data['perulangan'] == 'b-mingguan') {
             $form->add('bulananHariKe', 'hidden');
             $form->add('mingguanHariKe', 'choice', ['choices' => JadwalKehadiran::getNamaHari(), 'multiple' => false, 'expanded' => false, 'required' => true, 'attr' => ['class' => 'medium'], 'label_render' => false, 'horizontal' => false]);
         } elseif ($data['perulangan'] == 'c-bulanan') {
             $form->add('mingguanHariKe', 'hidden');
             $form->add('bulananHariKe', 'choice', ['choices' => JadwalKehadiran::getAngkaHariSebulan(), 'multiple' => false, 'expanded' => false, 'required' => true, 'attr' => ['class' => 'medium'], 'label_render' => false, 'horizontal' => false]);
         }
     }
 }
Esempio n. 6
0
 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("/kirim-sms-ringkasan/{wali_kelas_id}/{tanggal}", name="kehadiran-siswa_kirimsmsringkasan")
  * @Method("POST")
  * @Secure(roles="ROLE_GURU_PIKET")
  */
 public function kirimSmsRingkasanAction($wali_kelas_id, $tanggal)
 {
     $sekolah = $this->getSekolah();
     $em = $this->getDoctrine()->getManager();
     $translator = $this->get('translator');
     $namaNamaHari = JadwalKehadiran::getNamaHari();
     $tanggalTerpilih = new \DateTime($tanggal);
     $vendorSekolah = $em->getRepository('LanggasSisdikBundle:VendorSekolah')->findOneBy(['sekolah' => $sekolah]);
     if (!$vendorSekolah instanceof VendorSekolah) {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.vendor.sekolah.tidak.tersedia");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     $layananSms = $em->getRepository('LanggasSisdikBundle:PilihanLayananSms')->findOneBy(['sekolah' => $sekolah, 'jenisLayanan' => 'zza-ringkasan-kehadiran', 'status' => true]);
     if (!$layananSms instanceof PilihanLayananSms) {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.layanan.sms.ringkasan.kehadiran.tidak.aktif");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     $tahunAkademik = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['aktif' => true, 'sekolah' => $sekolah]);
     if (!$tahunAkademik instanceof TahunAkademik) {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.tahun.akademik.tidak.ada.yang.aktif");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $tanggalTerpilih, 'kbm' => true]);
     if (!$kalenderPendidikan instanceof KalenderPendidikan) {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.bukan.hari.kbm.aktif");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     $waliKelas = $em->getRepository('LanggasSisdikBundle:WaliKelas')->find($wali_kelas_id);
     if (!$waliKelas instanceof WaliKelas) {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.wali.kelas.tidak.ada");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     if (!$waliKelas->getTemplatesmsIkhtisarKehadiran() instanceof Templatesms) {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.template.sms.ringkasan.wali.kelas.tidak.tersedia");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     if ($waliKelas->getUser()->getNomorPonsel() == '') {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.ponsel.wali.kelas.kosong");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
     $formKirimSmsRingkasan = $this->createForm('sisdik_kehadiransiswasms_ringkasan', null, ['wali_kelas' => $waliKelas, 'tanggal' => $tanggal]);
     $formKirimSmsRingkasan->submit($this->getRequest());
     if ($formKirimSmsRingkasan->isValid()) {
         $kehadiranSiswa = $em->createQueryBuilder()->select('kehadiran')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.tahunAkademik = :tahunakademik')->andWhere('kehadiran.kelas = :kelas')->andWhere('kehadiran.tanggal = :tanggal')->setParameter('sekolah', $sekolah)->setParameter('tahunakademik', $tahunAkademik)->setParameter('kelas', $waliKelas->getKelas())->setParameter('tanggal', $tanggalTerpilih->format("Y-m-d"))->getQuery()->useQueryCache(true)->getResult();
         if (count($kehadiranSiswa) <= 0) {
             continue;
         }
         $jumlahTepat = 0;
         $jumlahTelat = 0;
         $jumlahAlpa = 0;
         $jumlahIzin = 0;
         $jumlahSakit = 0;
         /* @var $kehadiran KehadiranSiswa */
         foreach ($kehadiranSiswa as $kehadiran) {
             switch ($kehadiran->getStatusKehadiran()) {
                 case 'a-hadir-tepat':
                     $jumlahTepat++;
                     break;
                 case 'b-hadir-telat':
                     $jumlahTelat++;
                     break;
                 case 'c-alpa':
                     $jumlahAlpa++;
                     break;
                 case 'd-izin':
                     $jumlahIzin++;
                     break;
                 case 'e-sakit':
                     $jumlahSakit++;
                     break;
             }
         }
         $teksRingkasan = $waliKelas->getTemplatesmsIkhtisarKehadiran()->getTeks();
         $teksRingkasan = str_replace("%nama%", $waliKelas->getUser()->getName(), $teksRingkasan);
         $teksRingkasan = str_replace("%kelas%", $waliKelas->getKelas()->getNama(), $teksRingkasan);
         $indeksHari = $tanggalTerpilih->format('N');
         $teksRingkasan = str_replace("%hari%", $translator->trans($namaNamaHari[$indeksHari]), $teksRingkasan);
         $teksRingkasan = str_replace("%tanggal%", $tanggalTerpilih->format('d/m/Y'), $teksRingkasan);
         $teksRingkasan = str_replace("%jumlah-tepat%", $jumlahTepat, $teksRingkasan);
         $teksRingkasan = str_replace("%jumlah-telat%", $jumlahTelat, $teksRingkasan);
         $teksRingkasan = str_replace("%jumlah-alpa%", $jumlahAlpa, $teksRingkasan);
         $teksRingkasan = str_replace("%jumlah-sakit%", $jumlahIzin, $teksRingkasan);
         $teksRingkasan = str_replace("%jumlah-izin%", $jumlahSakit, $teksRingkasan);
         $terkirim = false;
         $nomorponsel = preg_split("/[\\s,\\/]+/", $waliKelas->getUser()->getNomorPonsel());
         foreach ($nomorponsel as $ponsel) {
             $messenger = $this->container->get('sisdik.messenger');
             if ($messenger instanceof Messenger) {
                 if ($vendorSekolah->getJenis() == 'khusus') {
                     $messenger->setUseVendor(true);
                     $messenger->setVendorURL($vendorSekolah->getUrlPengirimPesan());
                 }
                 $messenger->setPhoneNumber($ponsel);
                 $messenger->setMessage($teksRingkasan);
                 $messenger->sendMessage($sekolah);
                 $terkirim = true;
             }
         }
         if ($terkirim) {
             $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademik, 'kelas' => $waliKelas->getKelas(), 'tanggal' => $tanggalTerpilih, 'berhasilKirimSmsRingkasan' => false]);
             if ($prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) {
                 $prosesKehadiranSiswa->setBerhasilKirimSmsRingkasan(true);
                 $em->persist($prosesKehadiranSiswa);
             }
         }
         $em->flush();
         $return['responseCode'] = 200;
         $return['responseText'] = $translator->trans('flash.sms.ringkasan.kehadiran.terkirim');
         $return['berhasilKirimSmsRingkasan'] = 1;
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     } else {
         $return['responseCode'] = 400;
         $return['responseText'] = $translator->trans("error.form.tidak.valid");
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
 }
 /**
  * @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];
 }
 /**
  * @Route("/jadwal-kehadiran/{id}", name="jadwal_kehadiran_show", requirements={"id"="\d+"})
  * @Method("GET")
  * @Template()
  * @Secure(roles="ROLE_ADMIN")
  */
 public function showAction($id)
 {
     $this->setCurrentMenu();
     /* @var $em EntityManager */
     $em = $this->getDoctrine()->getManager();
     $entity = $em->getRepository('LanggasSisdikBundle:JadwalKehadiran')->find($id);
     if (!$entity) {
         throw $this->createNotFoundException('Entity JadwalKehadiran tak ditemukan.');
     }
     $deleteForm = $this->createDeleteForm($id);
     return ['entity' => $entity, 'delete_form' => $deleteForm->createView(), 'daynames' => JadwalKehadiran::getNamaHari()];
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $smsTerproses = 0;
     /* @var $em EntityManager */
     $em = $this->getContainer()->get('doctrine')->getManager();
     $translator = $this->getContainer()->get('translator');
     $translator->setLocale("id_ID");
     $text = '';
     $perulangan = JadwalKehadiran::getDaftarPerulangan();
     $namaNamaHari = JadwalKehadiran::getNamaHari();
     $waktuSekarang = new \DateTime();
     $mingguanHariKe = $waktuSekarang->format('N');
     $bulananHariKe = $waktuSekarang->format('j');
     $semuaSekolah = $em->getRepository('LanggasSisdikBundle:Sekolah')->findAll();
     foreach ($semuaSekolah as $sekolah) {
         if (!(is_object($sekolah) && $sekolah instanceof Sekolah)) {
             continue;
         }
         if (!$this->isLocked($sekolah->getNomorUrut())) {
             $vendorSekolah = $em->getRepository('LanggasSisdikBundle:VendorSekolah')->findOneBy(['sekolah' => $sekolah]);
             if (!$vendorSekolah instanceof VendorSekolah) {
                 continue;
             }
             $layananSms = $em->getRepository('LanggasSisdikBundle:PilihanLayananSms')->findOneBy(['sekolah' => $sekolah, 'jenisLayanan' => 'zza-ringkasan-kehadiran', 'status' => true]);
             if (!$layananSms instanceof PilihanLayananSms) {
                 continue;
             }
             $tahunAkademikAktif = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['sekolah' => $sekolah, 'aktif' => true]);
             if (!$tahunAkademikAktif instanceof TahunAkademik) {
                 continue;
             }
             $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $waktuSekarang, 'kbm' => true]);
             if (!$kalenderPendidikan instanceof KalenderPendidikan) {
                 continue;
             }
             $waliKelasAktif = $em->createQueryBuilder()->select('waliKelas')->from('LanggasSisdikBundle:WaliKelas', 'waliKelas')->leftJoin('waliKelas.user', 'user')->where('waliKelas.tahunAkademik = :tahunAkademik')->andWhere('waliKelas.kirimIkhtisarKehadiran = :kirimIkhtisar')->andWhere('waliKelas.templatesmsIkhtisarKehadiran IS NOT NULL')->andWhere("user.nomorPonsel <> ''")->setParameter('tahunAkademik', $tahunAkademikAktif)->setParameter('kirimIkhtisar', true)->getQuery()->useQueryCache(true)->getResult();
             /* @var $waliKelas WaliKelas */
             foreach ($waliKelasAktif as $waliKelas) {
                 /* @var $jadwalKehadiranTerawal JadwalKehadiran */
                 $jadwalKehadiranTerawal = null;
                 $jamTerawal = 0;
                 if ($input->getOption('debug')) {
                     print $waliKelas->getUser()->getName() . "\n";
                 }
                 foreach ($perulangan as $key => $value) {
                     $qbJadwalKehadiran = $em->createQueryBuilder()->select('jadwal')->from('LanggasSisdikBundle:JadwalKehadiran', 'jadwal')->where('jadwal.sekolah = :sekolah')->andWhere('jadwal.tahunAkademik = :tahunAkademik')->andWhere('jadwal.kelas = :kelas')->andWhere('jadwal.perulangan = :perulangan')->andWhere('jadwal.kirimSms = 1')->andWhere('jadwal.smsJam IS NOT NULL')->andWhere("jadwal.smsJam <> ''")->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademikAktif)->setParameter('kelas', $waliKelas->getKelas())->setParameter('perulangan', $key)->addOrderBy('jadwal.smsJam', 'ASC');
                     if ($key == 'b-mingguan') {
                         $qbJadwalKehadiran->andWhere('jadwal.mingguanHariKe = :harike')->setParameter('harike', $mingguanHariKe);
                     } elseif ($key == 'c-bulanan') {
                         $qbJadwalKehadiran->andWhere('jadwal.bulananHariKe = :tanggalke')->setParameter('tanggalke', $bulananHariKe);
                     }
                     $jadwalKehadiran = $qbJadwalKehadiran->getQuery()->useQueryCache(true)->getResult();
                     if (count($jadwalKehadiran) > 0) {
                         /* @var $jadwal JadwalKehadiran */
                         foreach ($jadwalKehadiran as $jadwal) {
                             $jamSms = intval(str_replace(':', '', $jadwal->getSmsJam()));
                             if ($jamTerawal == 0 || $jamTerawal > $jamSms) {
                                 $jamTerawal = $jamSms;
                                 $jadwalKehadiranTerawal = $jadwal;
                             }
                         }
                     }
                 }
                 if ($jamTerawal != 0 || $jadwalKehadiranTerawal instanceof JadwalKehadiran) {
                     $timestampWaktuJadwal = strtotime(date('Y-m-d') . " " . $jadwalKehadiranTerawal->getSmsJam());
                     $bedaWaktu = abs($waktuSekarang->getTimestamp() - $timestampWaktuJadwal - $waliKelas->getJadwalKirimIkhtisarKehadiran() * 60);
                     $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademikAktif, 'kelas' => $waliKelas->getKelas(), 'tanggal' => $waktuSekarang, 'berhasilKirimSmsRingkasan' => false]);
                     if (!$prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) {
                         continue;
                     }
                     if ($input->getOption('paksa')) {
                         $bedaWaktu = 0;
                     }
                     if ($input->getOption('debug')) {
                         print $waliKelas->getJadwalKirimIkhtisarKehadiran() . "\n";
                         print $jadwalKehadiranTerawal->getSmsJam() . "\n";
                         print $bedaWaktu . "\n";
                     }
                     if ($bedaWaktu <= self::BEDA_WAKTU_MAKS) {
                         $kehadiranSiswa = $em->createQueryBuilder()->select('kehadiran')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.tahunAkademik = :tahunakademik')->andWhere('kehadiran.kelas = :kelas')->andWhere('kehadiran.tanggal = :tanggal')->setParameter('sekolah', $sekolah)->setParameter('tahunakademik', $tahunAkademikAktif)->setParameter('kelas', $waliKelas->getKelas())->setParameter('tanggal', $waktuSekarang->format("Y-m-d"))->getQuery()->useQueryCache(true)->getResult();
                         if (count($kehadiranSiswa) <= 0) {
                             continue;
                         }
                         $jumlahTepat = 0;
                         $jumlahTelat = 0;
                         $jumlahAlpa = 0;
                         $jumlahIzin = 0;
                         $jumlahSakit = 0;
                         /* @var $kehadiran KehadiranSiswa */
                         foreach ($kehadiranSiswa as $kehadiran) {
                             switch ($kehadiran->getStatusKehadiran()) {
                                 case 'a-hadir-tepat':
                                     $jumlahTepat++;
                                     break;
                                 case 'b-hadir-telat':
                                     $jumlahTelat++;
                                     break;
                                 case 'c-alpa':
                                     $jumlahAlpa++;
                                     break;
                                 case 'd-izin':
                                     $jumlahIzin++;
                                     break;
                                 case 'e-sakit':
                                     $jumlahSakit++;
                                     break;
                             }
                         }
                         $teksRingkasan = $waliKelas->getTemplatesmsIkhtisarKehadiran()->getTeks();
                         $teksRingkasan = str_replace("%nama%", $waliKelas->getUser()->getName(), $teksRingkasan);
                         $teksRingkasan = str_replace("%kelas%", $waliKelas->getKelas()->getNama(), $teksRingkasan);
                         $indeksHari = $waktuSekarang->format('N');
                         $teksRingkasan = str_replace("%hari%", $translator->trans($namaNamaHari[$indeksHari]), $teksRingkasan);
                         $teksRingkasan = str_replace("%tanggal%", $waktuSekarang->format('d/m/Y'), $teksRingkasan);
                         $teksRingkasan = str_replace("%jumlah-tepat%", $jumlahTepat, $teksRingkasan);
                         $teksRingkasan = str_replace("%jumlah-telat%", $jumlahTelat, $teksRingkasan);
                         $teksRingkasan = str_replace("%jumlah-alpa%", $jumlahAlpa, $teksRingkasan);
                         $teksRingkasan = str_replace("%jumlah-izin%", $jumlahIzin, $teksRingkasan);
                         $teksRingkasan = str_replace("%jumlah-sakit%", $jumlahSakit, $teksRingkasan);
                         $terkirim = false;
                         $nomorponsel = preg_split("/[\\s,\\/]+/", $waliKelas->getUser()->getNomorPonsel());
                         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($teksRingkasan);
                                 if ($input->getOption('debug')) {
                                     $messenger->populateMessage();
                                     print "[debug]: " . $messenger->getMessageCommand() . "\n";
                                 } else {
                                     $messenger->sendMessage($sekolah);
                                 }
                                 $smsTerproses++;
                                 $terkirim = true;
                             }
                         }
                         if ($terkirim) {
                             if ($prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) {
                                 if (!$input->getOption('debug')) {
                                     $prosesKehadiranSiswa->setBerhasilKirimSmsRingkasan(true);
                                     $em->persist($prosesKehadiranSiswa);
                                 }
                             }
                         }
                         if (!$input->getOption('debug')) {
                             $em->flush();
                         }
                     }
                 }
             }
             if ($input->getOption('debug')) {
                 $text .= "[debug]: SMS ringkasan kehadiran terproses = {$smsTerproses}";
             }
             if ($text != '') {
                 $output->writeln($text);
             }
         } else {
             print "proses pengiriman pesan ringkasan kehadiran sekolah " . $sekolah->getNama() . " telah dan sedang berjalan\n";
         }
     }
 }
 /**
  * Mengirim SMS kepulangan.
  *
  * @Route("/kirim-sms/{kelas_id}/{tanggal}", name="kepulangan-siswa_kirimsms")
  * @Method("POST")
  * @Secure(roles="ROLE_GURU_PIKET")
  */
 public function kirimSmsAction($kelas_id, $tanggal)
 {
     $sekolah = $this->getSekolah();
     /* @var $em EntityManager */
     $em = $this->getDoctrine()->getManager();
     $translator = $this->get('translator');
     $namaNamaHari = JadwalKehadiran::getNamaHari();
     $tanggalTerpilih = new \DateTime($tanggal);
     $mingguanHariKe = $tanggalTerpilih->format('N');
     $bulananHariKe = $tanggalTerpilih->format('j');
     $tahunAkademik = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['aktif' => true, 'sekolah' => $sekolah->getId()]);
     $kelas = $em->getRepository('LanggasSisdikBundle:Kelas')->find($kelas_id);
     $qbKepulanganSiswa = $em->createQueryBuilder()->select('kepulangan')->from('LanggasSisdikBundle:KepulanganSiswa', 'kepulangan')->leftJoin('kepulangan.kelas', 'kelas')->leftJoin('kepulangan.siswa', 'siswa')->where('kepulangan.sekolah = :sekolah')->andWhere('kepulangan.kelas = :kelas')->andWhere('kepulangan.tanggal = :tanggal')->orderBy('kelas.kode')->addOrderBy('siswa.namaLengkap')->setParameter('sekolah', $sekolah)->setParameter('kelas', $kelas)->setParameter('tanggal', $tanggalTerpilih->format('Y-m-d'));
     $kepulanganSiswa = $qbKepulanganSiswa->getQuery()->getResult();
     $formKirimSms = $this->createForm('sisdik_kepulangansiswasms', null, ['kelas' => $kelas, 'tanggal' => $tanggal, 'kepulangan' => $kepulanganSiswa]);
     $formKirimSms->submit($this->getRequest());
     if ($formKirimSms->isValid()) {
         $statusKepulangan = $formKirimSms->get('statusKepulangan')->getData();
         $siswa = $formKirimSms->get('siswa')->getData();
         $vendorSekolah = $em->getRepository('LanggasSisdikBundle:VendorSekolah')->findOneBy(['sekolah' => $sekolah]);
         // PERINGATAN: diasumsikan bahwa perulangan apapun
         // menggunakan template sms yang serupa :(
         // TODO: Mengirim sms manual sebaiknya bisa memilih template sms
         $jadwalKepulangan = $em->getRepository('LanggasSisdikBundle:JadwalKepulangan')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademik, 'kelas' => $kelas, 'kirimSms' => true, 'statusKepulangan' => $statusKepulangan]);
         if (!$jadwalKepulangan instanceof JadwalKepulangan) {
             $return['responseCode'] = 400;
             $return['responseText'] = "tidak ada jadwal yang sesuai atau jadwal tidak diatur untuk bisa mengirim sms";
             $return = json_encode($return);
             return new Response($return, 200, ['Content-Type' => 'application/json']);
         }
         switch ($jadwalKepulangan->getStatusKepulangan()) {
             case 'a-pulang-tercatat':
                 $jenisLayananSms = 'u-kepulangan-tercatat';
                 break;
             case 'b-pulang-tak-tercatat':
                 $jenisLayananSms = 'v-kepulangan-tak-tercatat';
                 break;
         }
         $layananSms = $em->getRepository('LanggasSisdikBundle:PilihanLayananSms')->findOneBy(['sekolah' => $sekolah, 'jenisLayanan' => $jenisLayananSms, 'status' => true]);
         if (!(is_object($layananSms) && $layananSms instanceof PilihanLayananSms)) {
             $return['responseCode'] = 400;
             $return['responseText'] = "layanan sms tidak aktif atau tidak tersedia";
             $return = json_encode($return);
             return new Response($return, 200, ['Content-Type' => 'application/json']);
         }
         if ($siswa instanceof Siswa) {
             $kepulangan = $em->getRepository('LanggasSisdikBundle:KepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademik, 'kelas' => $kelas, 'siswa' => $siswa, 'statusKepulangan' => $statusKepulangan, 'tanggal' => $tanggalTerpilih]);
             if (!(is_object($kepulangan) && $kepulangan instanceof KepulanganSiswa)) {
                 $return['responseCode'] = 400;
                 $return['responseText'] = "kepulangan siswa yang terpilih tak ditemukan";
                 $return = json_encode($return);
                 return new Response($return, 200, ['Content-Type' => 'application/json']);
             }
             $ortuWaliAktif = $em->getRepository('LanggasSisdikBundle:OrangtuaWali')->findOneBy(['siswa' => $siswa, 'aktif' => true]);
             if (is_object($ortuWaliAktif) && $ortuWaliAktif instanceof OrangtuaWali) {
                 $ponselOrtuWaliAktif = $ortuWaliAktif->getPonsel();
                 if ($ponselOrtuWaliAktif != "") {
                     $tekstemplate = $jadwalKepulangan->getTemplatesms()->getTeks();
                     $tekstemplate = str_replace("%nama%", $kepulangan->getSiswa()->getNamaLengkap(), $tekstemplate);
                     $tekstemplate = str_replace("%nis%", $kepulangan->getSiswa()->getNomorInduk(), $tekstemplate);
                     $tekstemplate = str_replace("%hari%", $translator->trans($namaNamaHari[$mingguanHariKe]), $tekstemplate);
                     $tekstemplate = str_replace("%tanggal%", $tanggalTerpilih->format('d/m/Y'), $tekstemplate);
                     $tekstemplate = str_replace("%jam%", $kepulangan->getJam(), $tekstemplate);
                     $tekstemplate = str_replace("%keterangan%", $kepulangan->getKeteranganStatus(), $tekstemplate);
                     $terkirim = false;
                     $nomorponsel = preg_split("/[\\s,\\/]+/", $ponselOrtuWaliAktif);
                     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);
                             $terkirim = true;
                         }
                     }
                     if ($terkirim) {
                         $kepulangan->setSmsTerproses($terkirim);
                         $em->persist($kepulangan);
                     }
                 } else {
                     $return['responseCode'] = 400;
                     $return['responseText'] = "Nomor ponsel orangtua/wali tak tersedia";
                     $return = json_encode($return);
                     return new Response($return, 200, ['Content-Type' => 'application/json']);
                 }
             } else {
                 $return['responseCode'] = 400;
                 $return['responseText'] = "Orang tua/wali siswa tak ditemukan";
                 $return = json_encode($return);
                 return new Response($return, 200, ['Content-Type' => 'application/json']);
             }
         } else {
             $qbKepulanganSiswa->andWhere('kepulangan.statusKepulangan = :status')->setParameter('status', $statusKepulangan);
             $kepulanganSiswaPerStatus = $qbKepulanganSiswa->getQuery()->getResult();
             foreach ($kepulanganSiswaPerStatus as $kepulangan) {
                 if (is_object($kepulangan) && $kepulangan instanceof KepulanganSiswa) {
                     $ortuWaliAktif = $em->getRepository('LanggasSisdikBundle:OrangtuaWali')->findOneBy(['siswa' => $kepulangan->getSiswa(), 'aktif' => true]);
                     if (is_object($ortuWaliAktif) && $ortuWaliAktif instanceof OrangtuaWali) {
                         $ponselOrtuWaliAktif = $ortuWaliAktif->getPonsel();
                         if ($ponselOrtuWaliAktif != "") {
                             $tekstemplate = $jadwalKepulangan->getTemplatesms()->getTeks();
                             $tekstemplate = str_replace("%nama%", $kepulangan->getSiswa()->getNamaLengkap(), $tekstemplate);
                             $tekstemplate = str_replace("%nis%", $kepulangan->getSiswa()->getNomorInduk(), $tekstemplate);
                             $tekstemplate = str_replace("%hari%", $translator->trans($namaNamaHari[$mingguanHariKe]), $tekstemplate);
                             $tekstemplate = str_replace("%tanggal%", $tanggalTerpilih->format('d/m/Y'), $tekstemplate);
                             $tekstemplate = str_replace("%jam%", $kepulangan->getJam(), $tekstemplate);
                             $tekstemplate = str_replace("%keterangan%", $kepulangan->getKeteranganStatus(), $tekstemplate);
                             $terkirim = false;
                             $nomorponsel = preg_split("/[\\s,\\/]+/", $ponselOrtuWaliAktif);
                             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);
                                     $terkirim = true;
                                 }
                             }
                             if ($terkirim) {
                                 $kepulangan->setSmsTerproses($terkirim);
                                 $em->persist($kepulangan);
                             }
                         }
                     }
                 }
             }
         }
         $prosesKepulanganSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwalKepulangan->getTahunAkademik(), 'kelas' => $jadwalKepulangan->getKelas(), 'tanggal' => $tanggalTerpilih, 'berhasilKirimSms' => false]);
         if (is_object($prosesKepulanganSiswa) && $prosesKepulanganSiswa instanceof ProsesKepulanganSiswa) {
             $prosesKepulanganSiswa->setBerhasilKirimSms(true);
             $em->persist($prosesKepulanganSiswa);
         }
         $em->flush();
         $return['responseCode'] = 200;
         $return['responseText'] = $translator->trans('flash.sms.kepulangan.terkirim');
         $return['berhasilKirimSms'] = 1;
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     } else {
         $return['responseCode'] = 400;
         $return['responseText'] = "form tidak valid";
         $return = json_encode($return);
         return new Response($return, 200, ['Content-Type' => 'application/json']);
     }
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $smsKehadiranTerproses = 0;
     /* @var $em EntityManager */
     $em = $this->getContainer()->get('doctrine')->getManager();
     $translator = $this->getContainer()->get('translator');
     $translator->setLocale("id_ID");
     $text = '';
     $perulangan = JadwalKehadiran::getDaftarPerulangan();
     $namaNamaHari = JadwalKehadiran::getNamaHari();
     $waktuSekarang = new \DateTime();
     $jam = $waktuSekarang->format('H:i') . ':00';
     $mingguanHariKe = $waktuSekarang->format('N');
     $bulananHariKe = $waktuSekarang->format('j');
     if ($input->getOption('paksa')) {
         $jam = '09:00:00';
         $waktuSekarang = new \DateTime(date("Y-m-d {$jam}"));
         $mingguanHariKe = 1;
         // 1 = senin
         $bulananHariKe = 1;
         print "[paksa]: periksa jadwal jam:{$jam}, mingguanHariKe:{$mingguanHariKe}, bulananHariKe:{$bulananHariKe}\n";
     }
     $qbSekolah = $em->createQueryBuilder()->select('sekolah')->from('LanggasSisdikBundle:Sekolah', 'sekolah');
     $semuaSekolah = $qbSekolah->getQuery()->getResult();
     foreach ($semuaSekolah as $sekolah) {
         if (!(is_object($sekolah) && $sekolah instanceof Sekolah)) {
             continue;
         }
         if (!$this->isLocked($sekolah->getNomorUrut())) {
             $vendorSekolah = $em->getRepository('LanggasSisdikBundle:VendorSekolah')->findOneBy(['sekolah' => $sekolah]);
             $tahunAkademikAktif = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['sekolah' => $sekolah, 'aktif' => true]);
             $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $waktuSekarang, 'kbm' => true]);
             if (!(is_object($kalenderPendidikan) && $kalenderPendidikan instanceof KalenderPendidikan)) {
                 continue;
             }
             $qbKehadiranSemua = $em->createQueryBuilder()->select('COUNT(kehadiran.id)')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.tahunAkademik = :tahunakademik')->andWhere('kehadiran.tanggal = :tanggal')->setParameter('sekolah', $sekolah)->setParameter('tahunakademik', $tahunAkademikAktif)->setParameter('tanggal', $waktuSekarang->format("Y-m-d"));
             $jumlahKehadiranSemua = $qbKehadiranSemua->getQuery()->getSingleScalarResult();
             $qbKehadiranPermulaan = $em->createQueryBuilder()->select('COUNT(kehadiran.id)')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.tahunAkademik = :tahunakademik')->andWhere('kehadiran.tanggal = :tanggal')->andWhere('kehadiran.permulaan = :permulaan')->setParameter('sekolah', $sekolah)->setParameter('tahunakademik', $tahunAkademikAktif)->setParameter('tanggal', $waktuSekarang->format("Y-m-d"))->setParameter('permulaan', true);
             $jumlahKehadiranPermulaan = $qbKehadiranPermulaan->getQuery()->getSingleScalarResult();
             // jangan kirim pesan jika semua data kehadiran masih berstatus permulaan
             if ($jumlahKehadiranSemua == $jumlahKehadiranPermulaan) {
                 continue;
             }
             foreach ($perulangan as $key => $value) {
                 $querybuilder = $em->createQueryBuilder()->select('jadwal')->from('LanggasSisdikBundle:JadwalKehadiran', 'jadwal')->leftJoin('jadwal.tahunAkademik', 'tahunAkademik')->where('jadwal.sekolah = :sekolah')->andWhere('jadwal.smsJam <= :jam')->andWhere('jadwal.perulangan = :perulangan')->andWhere('jadwal.kirimSms = :kirimsms')->andWhere('tahunAkademik.aktif = :aktif')->setParameter('sekolah', $sekolah->getId())->setParameter('jam', $jam)->setParameter('perulangan', $key)->setParameter('kirimsms', true)->setParameter('aktif', true);
                 if ($key == 'b-mingguan') {
                     $querybuilder->andWhere('jadwal.mingguanHariKe = :harike')->setParameter('harike', $mingguanHariKe);
                 } elseif ($key == 'c-bulanan') {
                     $querybuilder->andWhere('jadwal.bulananHariKe = :tanggalke')->setParameter('tanggalke', $bulananHariKe);
                 }
                 $jadwalKehadiran = $querybuilder->getQuery()->getResult();
                 foreach ($jadwalKehadiran as $jadwal) {
                     if (!(is_object($jadwal) && $jadwal instanceof JadwalKehadiran)) {
                         continue;
                     }
                     $jenisLayananSms = 'tak-terdefinisi';
                     switch ($jadwal->getStatusKehadiran()) {
                         case 'a-hadir-tepat':
                             $jenisLayananSms = 'l-kehadiran-tepat';
                             break;
                         case 'b-hadir-telat':
                             $jenisLayananSms = 'm-kehadiran-telat';
                             break;
                         case 'c-alpa':
                             $jenisLayananSms = 'k-kehadiran-alpa';
                             break;
                         case 'd-izin':
                             $jenisLayananSms = 'n-kehadiran-izin';
                             break;
                         case 'e-sakit':
                             $jenisLayananSms = 'o-kehadiran-sakit';
                             break;
                     }
                     $layananSms = $em->getRepository('LanggasSisdikBundle:PilihanLayananSms')->findOneBy(['sekolah' => $sekolah, 'jenisLayanan' => $jenisLayananSms, 'status' => true]);
                     if (!(is_object($layananSms) && $layananSms instanceof PilihanLayananSms)) {
                         continue;
                     }
                     $smsJam = $jadwal->getSmsJam();
                     if ($input->getOption('paksa')) {
                         $smsJam = $jam;
                     }
                     $waktuJadwal = strtotime(date('Y-m-d') . " {$smsJam}");
                     $bedaWaktu = $waktuSekarang->getTimestamp() - $waktuJadwal;
                     if ($input->getOption('paksa')) {
                         print "[paksa]: kirim sms jam = " . $jadwal->getSmsJam() . "\n";
                         print "[paksa]: waktu jadwal menjadi = " . date("Y-m-d H:i:s", $waktuJadwal) . "\n";
                         print "[paksa]: waktu sekarang menjadi = " . $waktuSekarang->format("Y-m-d H:i:s") . "\n";
                         print "[paksa]: beda waktu = " . $bedaWaktu . "\n";
                     }
                     if ($bedaWaktu >= 0 && $bedaWaktu <= self::BEDA_WAKTU_MAKS) {
                         $qbKehadiran = $em->createQueryBuilder()->select('kehadiran')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.tahunAkademik = :tahunakademik')->andWhere('kehadiran.kelas = :kelas')->andWhere('kehadiran.tanggal = :tanggal')->andWhere('kehadiran.statusKehadiran = :statuskehadiran')->andWhere('kehadiran.smsTerproses = :terproses')->setParameter('sekolah', $sekolah)->setParameter('tahunakademik', $jadwal->getTahunAkademik())->setParameter('kelas', $jadwal->getKelas())->setParameter('tanggal', $waktuSekarang->format("Y-m-d"))->setParameter('statuskehadiran', $jadwal->getStatusKehadiran())->setParameter('terproses', false);
                         $entitiesKehadiran = $qbKehadiran->getQuery()->getResult();
                         foreach ($entitiesKehadiran as $kehadiran) {
                             if (!(is_object($kehadiran) && $kehadiran instanceof KehadiranSiswa)) {
                                 continue;
                             }
                             $ortuWaliAktif = $em->getRepository('LanggasSisdikBundle:OrangtuaWali')->findOneBy(['siswa' => $kehadiran->getSiswa(), 'aktif' => true]);
                             if (is_object($ortuWaliAktif) && $ortuWaliAktif instanceof OrangtuaWali) {
                                 $ponselOrtuWaliAktif = $ortuWaliAktif->getPonsel();
                                 if ($ponselOrtuWaliAktif != "") {
                                     $tekstemplate = $jadwal->getTemplatesms()->getTeks();
                                     $tekstemplate = str_replace("%nama%", $kehadiran->getSiswa()->getNamaLengkap(), $tekstemplate);
                                     $tekstemplate = str_replace("%nis%", $kehadiran->getSiswa()->getNomorInduk(), $tekstemplate);
                                     $indeksHari = $kehadiran->getTanggal()->format('N');
                                     $tekstemplate = str_replace("%hari%", $translator->trans($namaNamaHari[$indeksHari]), $tekstemplate);
                                     $tekstemplate = str_replace("%tanggal%", $kehadiran->getTanggal()->format('d/m/Y'), $tekstemplate);
                                     if ($kehadiran->isTervalidasi() && str_replace(':', '', $kehadiran->getJam()) <= str_replace(':', '', $jadwal->getParamstatusDariJam())) {
                                         $tekstemplate = str_replace("%jam%", "", $tekstemplate);
                                     } else {
                                         $tekstemplate = str_replace("%jam%", $kehadiran->getJam(), $tekstemplate);
                                     }
                                     $tekstemplate = str_replace("%keterangan%", $kehadiran->getKeteranganStatus(), $tekstemplate);
                                     $terkirim = false;
                                     $nomorponsel = preg_split("/[\\s,\\/]+/", $ponselOrtuWaliAktif);
                                     foreach ($nomorponsel as $ponsel) {
                                         $messenger = $this->getContainer()->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);
                                             if ($input->getOption('debug')) {
                                                 $messenger->populateMessage();
                                                 print "[debug]: " . $messenger->getMessageCommand() . "\n";
                                             } else {
                                                 $messenger->sendMessage($sekolah);
                                             }
                                             $smsKehadiranTerproses++;
                                             if ($input->getOption('paksa')) {
                                                 print $smsKehadiranTerproses . ", ";
                                             }
                                             $terkirim = true;
                                         }
                                     }
                                     if ($terkirim) {
                                         if (!$input->getOption('debug')) {
                                             $kehadiran->setSmsTerproses($terkirim);
                                             $em->persist($kehadiran);
                                         }
                                     }
                                 }
                             }
                         }
                         $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang, 'berhasilKirimSms' => false]);
                         if (is_object($prosesKehadiranSiswa) && $prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) {
                             if (!$input->getOption('debug')) {
                                 $prosesKehadiranSiswa->setBerhasilKirimSms(true);
                                 $em->persist($prosesKehadiranSiswa);
                             }
                         }
                         if (!$input->getOption('debug')) {
                             $em->flush();
                         }
                     }
                 }
             }
             if ($input->getOption('debug')) {
                 $text .= "[debug]: SMS kehadiran terproses = {$smsKehadiranTerproses}";
             }
             if ($text != '') {
                 $output->writeln($text);
             }
         } else {
             print "proses pengiriman pesan kehadiran sekolah " . $sekolah->getNama() . " telah dan sedang berjalan\n";
         }
     }
 }