/** * @Route("/{year}/{month}", name="siswa__kehadiran") * @Template("LanggasSisdikBundle:KehadiranSiswa:tabulasi.html.twig") */ public function indexAction($year = 0, $month = 0) { $waktuSekarang = new \DateTime(); $year = $year != 0 ? $year : $waktuSekarang->format('Y'); $month = $month != 0 ? $month : $waktuSekarang->format('m'); $tanggalTerpilih = new \DateTime("{$year}-{$month}-01"); $sekolah = $this->getSekolah(); $em = $this->getDoctrine()->getManager(); $tahunAkademik = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['sekolah' => $sekolah, 'aktif' => true]); if (!$tahunAkademik instanceof TahunAkademik) { throw $this->createNotFoundException($this->get('translator')->trans('flash.tahun.akademik.tidak.ada.yang.aktif')); } $siswa = $this->getUser()->getSiswa(); $siswaKelas = $em->getRepository('LanggasSisdikBundle:SiswaKelas')->findOneBy(['siswa' => $siswa, 'tahunAkademik' => $tahunAkademik, 'aktif' => true]); if (!$siswaKelas instanceof SiswaKelas) { throw $this->createNotFoundException($this->get('translator')->trans('flash.siswa.tidak.terdaftar.aktif.di.kelas')); } $objectCalendar = new Calendar(); $calendar = $objectCalendar->createMonthlyCalendar($tanggalTerpilih->format('Y'), $tanggalTerpilih->format('m')); $nextmonth = date('Y-m-d', mktime(0, 0, 0, $tanggalTerpilih->format('m') + 1, 1, $tanggalTerpilih->format('Y'))); $kehadiran = $em->createQueryBuilder()->select('kehadiran')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.tahunAkademik = :tahunAkademik')->andWhere('kehadiran.kelas = :kelas')->andWhere('kehadiran.siswa = :siswa')->andWhere('kehadiran.tanggal >= :firstday AND kehadiran.tanggal < :nextmonth')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademik)->setParameter('kelas', $siswaKelas->getKelas())->setParameter('siswa', $siswa)->setParameter('firstday', $tanggalTerpilih->format('Y-m-01'))->setParameter('nextmonth', $nextmonth)->getQuery()->getResult(); $tanggalTerpilih->modify('first day of -1 month'); $tahunBulanSebelumnya = $tanggalTerpilih->format('Y'); $bulanSebelumnya = $tanggalTerpilih->format('m'); $tanggalTerpilih->modify('first day of +2 month'); $tahunBulanBerikutnya = $tanggalTerpilih->format('Y'); $bulanBerikutnya = $tanggalTerpilih->format('m'); return ['tahunAkademik' => $tahunAkademik, 'kelas' => $siswaKelas, 'siswa' => $siswa, 'kehadiran' => $kehadiran, 'daftarStatusKehadiran' => JadwalKehadiran::getDaftarStatusKehadiran(), 'calendar' => $calendar, 'tanggalTerpilih' => $tanggalTerpilih, 'tahunBulanSebelumnya' => $tahunBulanSebelumnya, 'bulanSebelumnya' => $bulanSebelumnya, 'tahunBulanBerikutnya' => $tahunBulanBerikutnya, 'bulanBerikutnya' => $bulanBerikutnya]; }
public function buildForm(FormBuilderInterface $builder, array $options) { $sekolah = $this->getSekolah(); $querybuilder = $this->entityManager->createQueryBuilder()->select('kehadiran, siswa')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->leftJoin('kehadiran.kelas', 'kelas')->leftJoin('kehadiran.siswa', 'siswa')->where('kelas.sekolah = :sekolah')->orderBy('kelas.kode')->addOrderBy('siswa.namaLengkap')->setParameter('sekolah', $sekolah); if ($options['buildparam']['tanggal'] != '') { $querybuilder->andWhere('kehadiran.tanggal = :tanggal'); $querybuilder->setParameter('tanggal', $options['buildparam']['tanggal']); } if ($options['buildparam']['searchkey'] != '') { $querybuilder->andWhere("siswa.namaLengkap LIKE :searchkey OR siswa.nomorInduk LIKE :searchkey OR siswa.nomorIndukSistem = :searchkey2"); $querybuilder->setParameter('searchkey', '%' . $options['buildparam']['searchkey'] . '%'); $querybuilder->setParameter('searchkey2', $options['buildparam']['searchkey']); } if ($options['buildparam']['tingkat'] != '') { $querybuilder->andWhere("kelas.tingkat = :tingkat"); $querybuilder->setParameter('tingkat', $options['buildparam']['tingkat']); } if ($options['buildparam']['kelas'] != '') { $querybuilder->andWhere("kehadiran.kelas = :kelas"); $querybuilder->setParameter('kelas', $options['buildparam']['kelas']); } if ($options['buildparam']['statusKehadiran'] != '') { $querybuilder->andWhere("kehadiran.statusKehadiran = :statusKehadiran"); $querybuilder->setParameter('statusKehadiran', $options['buildparam']['statusKehadiran']); } $entities = $querybuilder->getQuery()->getResult(); foreach ($entities as $entity) { if (is_object($entity) && $entity instanceof KehadiranSiswa) { $builder->add('kehadiran_' . $entity->getId(), 'choice', ['required' => true, 'expanded' => true, 'multiple' => false, 'choices' => JadwalKehadiran::getDaftarStatusKehadiran(), 'attr' => ['class' => 'medium'], 'data' => $entity->getStatusKehadiran()])->add('kehadiran_keterangan_' . $entity->getId(), 'text', ['required' => false, 'attr' => ['placeholder' => 'label.keterangan.kehadiran', 'class' => 'keterangan-kehadiran'], 'data' => $entity->getKeteranganStatus()]); } } }
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->add('dariTanggal', 'date', ['label' => 'label.date', 'widget' => 'single_text', 'format' => 'dd/MM/yyyy', 'attr' => ['class' => 'date1 small', 'placeholder' => 'dari.tanggal'], 'required' => false, 'label_render' => false, 'horizontal' => false])->add('hinggaTanggal', 'date', ['label' => 'label.date', 'widget' => 'single_text', 'format' => 'dd/MM/yyyy', 'attr' => ['class' => 'date2 small', 'placeholder' => 'hingga.tanggal'], 'required' => true, 'label_render' => false, 'horizontal' => false])->add('tingkat', 'entity', ['class' => 'LanggasSisdikBundle:Tingkat', 'label' => 'label.class.entry', 'multiple' => false, 'expanded' => false, 'required' => true, 'property' => 'optionLabel', 'query_builder' => function (EntityRepository $repository) use($sekolah) { $qb = $repository->createQueryBuilder('tingkat')->where('tingkat.sekolah = :sekolah')->orderBy('tingkat.urutan')->addOrderBy('tingkat.kode')->setParameter('sekolah', $sekolah); return $qb; }, 'attr' => ['class' => 'medium pilih-tingkat'], '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')->leftJoin('kelas.tahunAkademik', 'tahunAkademik')->where('kelas.sekolah = :sekolah')->andWhere('tahunAkademik.aktif = :aktif')->orderBy('tingkat.urutan')->addOrderBy('kelas.urutan')->setParameter('sekolah', $sekolah)->setParameter('aktif', true); return $qb; }, 'attr' => ['class' => 'medium pilih-kelas'], 'label_render' => false, 'horizontal' => false])->add('searchkey', null, ['label' => 'label.searchkey', 'required' => false, 'attr' => ['class' => 'search-query medium', 'placeholder' => 'label.searchkey'], 'label_render' => false, 'horizontal' => false])->add('statusKehadiran', 'choice', ['choices' => JadwalKehadiran::getDaftarStatusKehadiran(), 'label' => 'label.presence.status.entry', 'multiple' => false, 'expanded' => false, 'required' => false, 'label_render' => false, 'attr' => ['class' => 'medium'], 'placeholder' => 'label.presencestatus', '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']); }
/** * @Route("/{id}/show", name="fee_recur_show") * @Template() * @Secure(roles="ROLE_BENDAHARA") */ public function showAction($id) { $this->setCurrentMenu(); $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('LanggasSisdikBundle:BiayaRutin')->find($id); if (!$entity) { throw $this->createNotFoundException('Entity BiayaRutin tak ditemukan.'); } if ($this->get('security.authorization_checker')->isGranted('view', $entity) === false) { throw new AccessDeniedException($this->get('translator')->trans('akses.ditolak')); } $deleteForm = $this->createDeleteForm($id); return ['entity' => $entity, 'delete_form' => $deleteForm->createView(), 'daftarPerulangan' => BiayaRutin::getDaftarPerulangan(), 'daftarBulan' => BiayaRutin::getDaftarNamaBulan(), 'daftarHari' => JadwalKehadiran::getNamaHari()]; }
public function buildForm(FormBuilderInterface $builder, array $options) { $sekolah = $this->getSekolah(); $builder->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']); }
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('statusKehadiran', 'choice', ['required' => true, 'expanded' => false, 'multiple' => false, 'choices' => JadwalKehadiran::getDaftarStatusKehadiran(), 'attr' => ['class' => 'medium'], 'placeholder' => 'label.pilih.status.kehadiran'])->add('kelas', 'sisdik_entityhidden', ['required' => true, 'class' => 'LanggasSisdikBundle:Kelas', 'data' => $options['kelas']->getId()])->add('tanggal', 'hidden', ['data' => $options['tanggal']]); $siswa = []; foreach ($options['kehadiran'] as $kehadiran) { if ($kehadiran instanceof KehadiranSiswa) { $siswa[] = $kehadiran->getSiswa()->getId(); } } if (count($siswa) > 0) { $builder->add('siswa', 'entity', ['class' => 'LanggasSisdikBundle:Siswa', 'label' => 'label.student.entry', 'multiple' => false, 'expanded' => false, 'required' => false, 'property' => 'namaLengkap', 'query_builder' => function (EntityRepository $repository) use($siswa) { $qb = $repository->createQueryBuilder('siswa')->where('siswa.id IN (:id)')->orderBy('siswa.namaLengkap', 'ASC')->setParameter('id', $siswa); return $qb; }, 'attr' => ['class' => 'xlarge'], 'placeholder' => 'label.pilih.siswa']); } }
/** * @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]); } } }
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("/{tanggal}", name="siswa__kehadiran_grafik") * @Template("LanggasSisdikBundle:KehadiranSiswa:grafik.html.twig") */ public function indexAction($tanggal = null) { $sekolah = $this->getSekolah(); /* @var $em EntityManager */ $em = $this->getDoctrine()->getManager(); $tahunAkademikAktif = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['sekolah' => $sekolah, 'aktif' => true]); $tanggalTampil = new \DateTime($tanggal); $tanggalSebelumnya = $tanggalTampil->modify('-1 day')->format('Y-m-d'); $tanggalBerikutnya = $tanggalTampil->modify('+2 day')->format('Y-m-d'); $tanggalTampil->modify('-1 day'); $daftarStatusKehadiran = JadwalKehadiran::getDaftarStatusKehadiran(); $daftarStatusKepulangan = JadwalKepulangan::getDaftarStatusKepulangan(); $daftarTingkat = $em->getRepository('LanggasSisdikBundle:Tingkat')->findBy(['sekolah' => $sekolah], ['nama' => 'ASC', 'kode' => 'ASC', 'urutan' => 'ASC']); $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $tanggalTampil, 'kbm' => true]); $kehadiranSiswaTotal = null; $kepulanganSiswaTotal = null; $kehadiran = []; $kepulangan = []; if (is_object($kalenderPendidikan) && $kalenderPendidikan instanceof KalenderPendidikan) { foreach ($daftarStatusKehadiran as $key => $val) { $result = $em->createQueryBuilder()->select('COUNT(kehadiranSiswa.id)')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiranSiswa')->where('kehadiranSiswa.sekolah = :sekolah')->andWhere('kehadiranSiswa.tahunAkademik = :tahunAkademik')->andWhere('kehadiranSiswa.tanggal = :tanggal')->andWhere('kehadiranSiswa.statusKehadiran = :statusKehadiran')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademikAktif)->setParameter('tanggal', $tanggalTampil->format("Y-m-d"))->setParameter('statusKehadiran', $key)->getQuery()->getSingleScalarResult(); $kehadiran[$key] = $result; } foreach ($daftarStatusKepulangan as $key => $val) { $result = $em->createQueryBuilder()->select('COUNT(kepulanganSiswa.id)')->from('LanggasSisdikBundle:KepulanganSiswa', 'kepulanganSiswa')->where('kepulanganSiswa.sekolah = :sekolah')->andWhere('kepulanganSiswa.tahunAkademik = :tahunAkademik')->andWhere('kepulanganSiswa.tanggal = :tanggal')->andWhere('kepulanganSiswa.statusKepulangan = :statusKepulangan')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademikAktif)->setParameter('tanggal', $tanggalTampil->format("Y-m-d"))->setParameter('statusKepulangan', $key)->getQuery()->getSingleScalarResult(); $kepulangan[$key] = $result; } } else { foreach ($daftarStatusKehadiran as $key => $val) { $kehadiran[$key] = 0; } foreach ($daftarStatusKepulangan as $key => $val) { $kepulangan[$key] = 0; } } $kehadiranSiswaTotal = $kehadiran; $kepulanganSiswaTotal = $kepulangan; $daftarKelasPerTingkat = []; $kehadiranSiswaPerKelas = []; $kepulanganSiswaPerKelas = []; foreach ($daftarTingkat as $tingkat) { $daftarKelas = $em->getRepository('LanggasSisdikBundle:Kelas')->findBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademikAktif, 'tingkat' => $tingkat], ['nama' => 'ASC', 'kode' => 'ASC', 'urutan' => 'ASC']); $daftarKelasPerTingkat[$tingkat->getId()] = $daftarKelas; foreach ($daftarKelas as $kelas) { if ($kelas instanceof Kelas) { $kehadiran = []; $kepulangan = []; if (is_object($kalenderPendidikan) && $kalenderPendidikan instanceof KalenderPendidikan) { foreach ($daftarStatusKehadiran as $key => $val) { $result = $em->createQueryBuilder()->select('COUNT(kehadiranSiswa.id)')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiranSiswa')->where('kehadiranSiswa.sekolah = :sekolah')->andWhere('kehadiranSiswa.tahunAkademik = :tahunAkademik')->andWhere('kehadiranSiswa.kelas = :kelas')->andWhere('kehadiranSiswa.tanggal = :tanggal')->andWhere('kehadiranSiswa.statusKehadiran = :statusKehadiran')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademikAktif)->setParameter('kelas', $kelas)->setParameter('tanggal', $tanggalTampil->format("Y-m-d"))->setParameter('statusKehadiran', $key)->getQuery()->getSingleScalarResult(); $kehadiran[$key] = $result; } foreach ($daftarStatusKepulangan as $key => $val) { $result = $em->createQueryBuilder()->select('COUNT(kepulanganSiswa.id)')->from('LanggasSisdikBundle:KepulanganSiswa', 'kepulanganSiswa')->where('kepulanganSiswa.sekolah = :sekolah')->andWhere('kepulanganSiswa.tahunAkademik = :tahunAkademik')->andWhere('kepulanganSiswa.kelas = :kelas')->andWhere('kepulanganSiswa.tanggal = :tanggal')->andWhere('kepulanganSiswa.statusKepulangan = :statusKepulangan')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademikAktif)->setParameter('kelas', $kelas)->setParameter('tanggal', $tanggalTampil->format("Y-m-d"))->setParameter('statusKepulangan', $key)->getQuery()->getSingleScalarResult(); $kepulangan[$key] = $result; } } else { foreach ($daftarStatusKehadiran as $key => $val) { $kehadiran[$key] = 0; } foreach ($daftarStatusKepulangan as $key => $val) { $kepulangan[$key] = 0; } } $kehadiranSiswaPerKelas[$kelas->getId()] = $kehadiran; $kepulanganSiswaPerKelas[$kelas->getId()] = $kepulangan; } } } $searchform = $this->createForm('sisdik_kehadiransiswasearch'); $searchform->setData(['tanggal' => $tanggalTampil]); return ['tahunAkademikAktif' => $tahunAkademikAktif, 'tanggalTampil' => $tanggalTampil, 'tanggalSebelumnya' => $tanggalSebelumnya, 'tanggalBerikutnya' => $tanggalBerikutnya, 'daftarStatusKehadiran' => $daftarStatusKehadiran, 'daftarStatusKepulangan' => $daftarStatusKepulangan, 'daftarTingkat' => $daftarTingkat, 'daftarKelasPerTingkat' => $daftarKelasPerTingkat, 'kehadiranSiswaTotal' => $kehadiranSiswaTotal, 'kepulanganSiswaTotal' => $kepulanganSiswaTotal, 'kehadiranSiswaPerKelas' => $kehadiranSiswaPerKelas, 'kepulanganSiswaPerKelas' => $kepulanganSiswaPerKelas, 'searchform' => $searchform->createView()]; }
protected function execute(InputInterface $input, OutputInterface $output) { /* @var $em EntityManager */ $em = $this->getContainer()->get('doctrine')->getManager(); $waktuSekarang = new \DateTime(); $perulangan = JadwalKehadiran::getDaftarPerulangan(); $workload['waktu_sekarang'] = $waktuSekarang; $workload['paksa'] = $input->getOption('paksa'); $semuaSekolah = $em->getRepository('LanggasSisdikBundle:Sekolah')->findAll(); foreach ($semuaSekolah as $sekolah) { if (!(is_object($sekolah) && $sekolah instanceof Sekolah)) { continue; } $workload['sekolah'] = $sekolah->getId(); if (!$input->getOption('paksa')) { $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $waktuSekarang, 'kbm' => true]); if (!(is_object($kalenderPendidikan) && $kalenderPendidikan instanceof KalenderPendidikan)) { continue; } } $mesinKehadiran = $em->getRepository('LanggasSisdikBundle:MesinKehadiran')->findBy(['sekolah' => $sekolah, 'aktif' => true]); foreach ($perulangan as $key => $value) { $workload['perulangan'] = $key; $logDirectory = $this->getContainer()->get('kernel')->getRootDir() . DIRECTORY_SEPARATOR . 'fingerprintlogs' . DIRECTORY_SEPARATOR . $sekolah->getId() . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . $key . DIRECTORY_SEPARATOR . $waktuSekarang->format('Y-m-d'); if (!is_dir($logDirectory)) { continue; } foreach ($mesinKehadiran as $mesin) { if (!(is_object($mesin) && $mesin instanceof MesinKehadiran)) { continue; } if ($mesin->getAlamatIp() == '') { continue; } $logFiles = []; exec("cd {$logDirectory} && ls -1t {$mesin->getAlamatIp()}*", $logFiles); $logFile = ''; foreach ($logFiles as $logFile) { if ($logFile == '') { continue; } if (!$input->getOption('paksa')) { $prosesLog = $em->createQueryBuilder()->select('COUNT(prosesLog.id)')->from('LanggasSisdikBundle:ProsesLogKehadiran', 'prosesLog')->where('prosesLog.sekolah = :sekolah')->andWhere('prosesLog.namaFile = :namaFile')->setParameter('sekolah', $sekolah)->setParameter('namaFile', $logFile)->getQuery()->getSingleScalarResult(); if ($prosesLog > 0) { continue; } } $workload['log_file'] = $logDirectory . DIRECTORY_SEPARATOR . $logFile; /* @var $logger Logger */ $logger = $this->getContainer()->get('monolog.logger.attendance'); $gearman = new \GearmanClient(); $gearman->addServer(); $jobFunction = "LanggasSisdikBundleWorkerPembaruanKehadiranWorker~pembaruan"; $proses = new ProsesLogKehadiran(); $proses->setAwalProses($waktuSekarang); $proses->setNamaFile($logFile); $proses->setSekolah($sekolah); $proses->setStatusAntrian('a-masuk-antrian'); $proses->setPrioritas($input->getOption('prioritas')); $em->persist($proses); $em->flush(); $workload['proses_log'] = $proses->getId(); switch ($input->getOption('prioritas')) { case "tinggi": $gearman->doHighBackground($jobFunction, serialize($workload)); $logger->addInfo($sekolah->getId() . ' | ' . $sekolah->getNama() . ' | kehadiran | prioritas-tinggi | ' . $workload['log_file']); break; case "normal": $gearman->doBackground($jobFunction, serialize($workload)); $logger->addInfo($sekolah->getId() . ' | ' . $sekolah->getNama() . ' | kehadiran | prioritas-normal | ' . $workload['log_file']); break; case "rendah": $gearman->doLowBackground($jobFunction, serialize($workload)); $logger->addInfo($sekolah->getId() . ' | ' . $sekolah->getNama() . ' | kehadiran | prioritas-rendah | ' . $workload['log_file']); break; } } } } } }
/** * Memperbarui kehadiran siswa berdasarkan data yang diambil secara manual. * * @Route("/pembaruan-manual/{urutan}/{daftarJadwal}", name="kehadiran-siswa_manual") * @Secure(roles="ROLE_GURU_PIKET") */ public function pembaruanManualAction($urutan = 0, $daftarJadwal = "0") { $sekolah = $this->getSekolah(); /* @var $em EntityManager */ $em = $this->getDoctrine()->getManager(); $retval = []; $response = new Response('', 200, ['Content-Type' => 'application/json']); $daftarStatusKehadiran = JadwalKehadiran::getDaftarStatusKehadiran(); $perulangan = JadwalKehadiran::getDaftarPerulangan(); $waktuSekarang = new \DateTime(); $tanggalSekarang = $waktuSekarang->format('Y-m-d'); $jam = $waktuSekarang->format('H:i') . ':00'; $mingguanHariKe = $waktuSekarang->format('N'); $bulananHariKe = $waktuSekarang->format('j'); $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $waktuSekarang, 'kbm' => true]); if (!(is_object($kalenderPendidikan) && $kalenderPendidikan instanceof KalenderPendidikan)) { $retval['selesai'] = 1; $retval['pesan'][] = "Hari sekarang bukan hari yang ditandai sebagai KBM aktif"; $response->setContent(json_encode($retval)); return $response; } $qbJadwalTotal = $em->createQueryBuilder()->select('COUNT(jadwal.id)')->from('LanggasSisdikBundle:JadwalKehadiran', 'jadwal')->leftJoin('jadwal.tahunAkademik', 'tahunAkademik')->andWhere('jadwal.sekolah = :sekolah')->andWhere('jadwal.paramstatusHinggaJam <= :jam')->andWhere('tahunAkademik.aktif = :aktif')->setParameter('sekolah', $sekolah)->setParameter('jam', $jam)->setParameter('aktif', true); $jadwalTotal = $qbJadwalTotal->getQuery()->getSingleScalarResult(); if ($urutan >= $jadwalTotal) { $retval['selesai'] = 1; $retval['pesan'][] = "Selesai memperbarui kehadiran siswa"; $response->setContent(json_encode($retval)); return $response; } $querybuilder = $em->createQueryBuilder()->select('jadwal')->from('LanggasSisdikBundle:JadwalKehadiran', 'jadwal')->leftJoin('jadwal.tahunAkademik', 'tahunAkademik')->andWhere('jadwal.sekolah = ?1')->andWhere('jadwal.paramstatusHinggaJam <= ?2')->andWhere('tahunAkademik.aktif = ?3')->andWhere('jadwal.id NOT IN (?4)')->andWhere("jadwal.perulangan = ?5 OR (jadwal.perulangan = ?6 AND jadwal.mingguanHariKe = ?8) OR (jadwal.perulangan = ?7 AND jadwal.bulananHariKe = ?9)")->andWhere("jadwal.paramstatusDariJam != '' OR jadwal.paramstatusHinggaJam != ''")->setParameter(1, $sekolah)->setParameter(2, $jam)->setParameter(3, true)->setParameter(4, preg_split('/,/', $daftarJadwal))->orderBy('jadwal.paramstatusHinggaJam', 'ASC'); $tempCounter = 5; foreach ($perulangan as $key => $value) { $querybuilder->setParameter($tempCounter, $key); $tempCounter++; if ($key == 'b-mingguan') { $querybuilder->setParameter(8, $mingguanHariKe); } elseif ($key == 'c-bulanan') { $querybuilder->setParameter(9, $bulananHariKe); } } $jadwalKehadiran = $querybuilder->getQuery()->getResult(); foreach ($jadwalKehadiran as $jadwal) { if (!(is_object($jadwal) && $jadwal instanceof JadwalKehadiran)) { continue; } if ($jadwal->getParamstatusHinggaJam() == '') { continue; } $dariJam = $jadwal->getParamstatusDariJam(); $hinggaJam = $jadwal->getParamstatusHinggaJam(); $tanggalJadwalDari = new \DateTime(date("Y-m-d {$dariJam}")); $tanggalJadwalHingga = new \DateTime(date("Y-m-d {$hinggaJam}")); $logDirectory = $this->container->get('kernel')->getRootDir() . DIRECTORY_SEPARATOR . "fingerprintlogs" . DIRECTORY_SEPARATOR . $sekolah->getId() . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'manual' . DIRECTORY_SEPARATOR . $tanggalSekarang; if (!is_dir($logDirectory)) { continue; } $retval['pesan'][] = "Memproses kehadiran siswa untuk jadwal " . $jadwal->getTahunAkademik()->getNama() . ", " . $jadwal->getKelas()->getNama() . ", " . $perulangan[$jadwal->getPerulangan()] . ", " . $this->get('translator')->trans($daftarStatusKehadiran[$jadwal->getStatusKehadiran()]) . ", " . $jadwal->getParamstatusDariJam(false) . " - " . $jadwal->getParamstatusHinggaJam(false); $retval['daftarJadwal'] = $daftarJadwal == '' ? $jadwal->getId() : $daftarJadwal . ',' . $jadwal->getId(); $retval['urutan'] = ++$urutan; $mesinFingerprint = $em->getRepository('LanggasSisdikBundle:MesinKehadiran')->findBy(['sekolah' => $sekolah, 'aktif' => true]); $counterJumlahTerproses = 0; foreach ($mesinFingerprint as $mesin) { if (!(is_object($mesin) && $mesin instanceof MesinKehadiran)) { continue; } if ($mesin->getAlamatIp() == '') { continue; } $logFile = exec("cd {$logDirectory} && ls -1 {$mesin->getAlamatIp()}* | tail -1"); $sourceFile = $logDirectory . DIRECTORY_SEPARATOR . $logFile; $targetFile = self::TMP_DIR . DIRECTORY_SEPARATOR . $sekolah->getId() . '-sisdik-' . uniqid(mt_rand(), true) . $logFile; if (!@copy($sourceFile, $targetFile)) { continue; } $output = []; exec("gunzip --force {$targetFile}", $output); $extractedFile = substr($targetFile, 0, -3); if (strstr($targetFile, 'json') !== false) { $buffer = file_get_contents($extractedFile); $logKehadiran = json_decode($buffer, true); foreach ($logKehadiran as $item) { $logTanggal = new \DateTime($item['datetime']); // +60 detik perbedaan if (!($logTanggal->getTimestamp() >= $tanggalJadwalDari->getTimestamp() && $logTanggal->getTimestamp() <= $tanggalJadwalHingga->getTimestamp() + 60)) { continue; } if ($logTanggal->format('Ymd') != $waktuSekarang->format('Ymd')) { continue; } $siswa = $em->getRepository('LanggasSisdikBundle:Siswa')->findOneBy(['nomorIndukSistem' => $item['id']]); if (is_object($siswa) && $siswa instanceof Siswa) { $kehadiranSiswa = $em->getRepository('LanggasSisdikBundle:KehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'siswa' => $siswa, 'tanggal' => $waktuSekarang, 'permulaan' => true]); if (is_object($kehadiranSiswa) && $kehadiranSiswa instanceof KehadiranSiswa) { /**$retval['pesan'][] = "··· Memperbarui kehadiran siswa " . $kehadiranSiswa->getSiswa()->getNamaLengkap() . " (" . $kehadiranSiswa->getSiswa()->getNomorIndukSistem() . ")" ;**/ $counterJumlahTerproses++; $kehadiranSiswa->setPermulaan(false); $kehadiranSiswa->setStatusKehadiran($jadwal->getStatusKehadiran()); $kehadiranSiswa->setJam($logTanggal->format('H:i:s')); $kehadiranSiswa->setTerprosesManual(true); $em->persist($kehadiranSiswa); $em->flush(); } } } $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang, 'berhasilDiperbaruiMesin' => false]); if (is_object($prosesKehadiranSiswa) && $prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) { $prosesKehadiranSiswa->setBerhasilDiperbaruiMesin(true); $em->persist($prosesKehadiranSiswa); } } else { exec("sed -i -n '/<.*>/,\$p' {$extractedFile}"); $buffer = file_get_contents($extractedFile); $buffer = preg_replace("/\\s+/", ' ', trim($buffer)); $xmlstring = "<?xml version='1.0'?>\n" . $buffer; $xmlobject = @simplexml_load_string($xmlstring); if ($xmlobject) { foreach ($xmlobject->xpath('Row') as $item) { $logTanggal = new \DateTime($item->DateTime); // +60 detik perbedaan if (!($logTanggal->getTimestamp() >= $tanggalJadwalDari->getTimestamp() && $logTanggal->getTimestamp() <= $tanggalJadwalHingga->getTimestamp() + 60)) { continue; } if ($logTanggal->format('Ymd') != $waktuSekarang->format('Ymd')) { continue; } $siswa = $em->getRepository('LanggasSisdikBundle:Siswa')->findOneBy(['nomorIndukSistem' => $item->PIN]); if (is_object($siswa) && $siswa instanceof Siswa) { $kehadiranSiswa = $em->getRepository('LanggasSisdikBundle:KehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'siswa' => $siswa, 'tanggal' => $waktuSekarang, 'permulaan' => true]); if (is_object($kehadiranSiswa) && $kehadiranSiswa instanceof KehadiranSiswa) { /**$retval['pesan'][] = "··· Memperbarui kehadiran siswa " . $kehadiranSiswa->getSiswa()->getNamaLengkap() . " (" . $kehadiranSiswa->getSiswa()->getNomorIndukSistem() . ")" ;**/ $counterJumlahTerproses++; $kehadiranSiswa->setPermulaan(false); $kehadiranSiswa->setStatusKehadiran($jadwal->getStatusKehadiran()); $kehadiranSiswa->setJam($logTanggal->format('H:i:s')); $kehadiranSiswa->setTerprosesManual(true); $em->persist($kehadiranSiswa); $em->flush(); } } } $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang, 'berhasilDiperbaruiMesin' => false]); if (is_object($prosesKehadiranSiswa) && $prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) { $prosesKehadiranSiswa->setBerhasilDiperbaruiMesin(true); $em->persist($prosesKehadiranSiswa); } } } @unlink($extractedFile); } $em->flush(); $retval['pesan'][] = "»»» Jumlah kehadiran siswa terbarui: {$counterJumlahTerproses}"; $response->setContent(json_encode($retval)); return $response; } $response->setContent(json_encode($retval)); return $response; }
protected function execute(InputInterface $input, OutputInterface $output) { /* @var $em EntityManager */ $em = $this->getContainer()->get('doctrine')->getManager(); $text = ''; $perulangan = JadwalKehadiran::getDaftarPerulangan(); $waktuSekarang = new \DateTime(); $jam = $waktuSekarang->format('H:i') . ':00'; $mingguanHariKe = $waktuSekarang->format('N'); $bulananHariKe = $waktuSekarang->format('j'); if ($input->getOption('paksa')) { $jam = '13: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"; } $semuaSekolah = $em->getRepository('LanggasSisdikBundle:Sekolah')->findAll(); foreach ($semuaSekolah as $sekolah) { if (!(is_object($sekolah) && $sekolah instanceof Sekolah)) { continue; } if ($input->getOption('paksa')) { print "[paksa]: " . $sekolah->getNama() . "\n"; } $kalenderPendidikan = $em->getRepository('LanggasSisdikBundle:KalenderPendidikan')->findOneBy(['sekolah' => $sekolah, 'tanggal' => $waktuSekarang, 'kbm' => true]); if (!(is_object($kalenderPendidikan) && $kalenderPendidikan instanceof KalenderPendidikan)) { continue; } if (!$this->isLocked($sekolah->getNomorUrut())) { foreach ($perulangan as $key => $value) { $querybuilder = $em->createQueryBuilder()->select('jadwal')->from('LanggasSisdikBundle:JadwalKepulangan', 'jadwal')->leftJoin('jadwal.tahunAkademik', 'tahunAkademik')->andWhere('jadwal.sekolah = :sekolah')->andWhere('jadwal.paramstatusDariJam <= :jam')->andWhere('jadwal.perulangan = :perulangan')->andWhere('jadwal.permulaan = :permulaan')->andWhere('tahunAkademik.aktif = :aktif')->setParameter('sekolah', $sekolah)->setParameter('jam', $jam)->setParameter('perulangan', $key)->setParameter('permulaan', 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); } $jadwalKepulangan = $querybuilder->getQuery()->getResult(); foreach ($jadwalKepulangan as $jadwal) { if (!(is_object($jadwal) && $jadwal instanceof JadwalKepulangan)) { continue; } $prosesKepulanganSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang]); if (is_object($prosesKepulanganSiswa) && $prosesKepulanganSiswa instanceof ProsesKepulanganSiswa) { if ($prosesKepulanganSiswa->isBerhasilInisiasi()) { continue; } } $dariJam = $jadwal->getParamstatusDariJam(); if ($input->getOption('paksa')) { $dariJam = $jam; } $waktuJadwal = strtotime(date('Y-m-d') . " {$dariJam}"); $bedaWaktu = $waktuSekarang->getTimestamp() - $waktuJadwal; if ($input->getOption('paksa')) { print "[paksa]: param status dari jam = " . $jadwal->getParamstatusDariJam() . "\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 = :tepat OR kehadiran.statusKehadiran = :telat')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $jadwal->getTahunAkademik())->setParameter('kelas', $jadwal->getKelas())->setParameter('tanggal', $waktuSekarang->format('Y-m-d'))->setParameter('tepat', 'a-hadir-tepat')->setParameter('telat', 'b-hadir-telat'); $entitiesKehadiran = $qbKehadiran->getQuery()->getResult(); foreach ($entitiesKehadiran as $kehadiran) { if (!(is_object($kehadiran) && $kehadiran instanceof KehadiranSiswa)) { continue; } $qbKepulangan = $em->createQueryBuilder()->select('kepulangan')->from('LanggasSisdikBundle:KepulanganSiswa', 'kepulangan')->where('kepulangan.sekolah = :sekolah')->andWhere('kepulangan.siswa = :siswa')->andWhere('kepulangan.tanggal = :tanggal')->setParameter('sekolah', $sekolah)->setParameter('siswa', $kehadiran->getSiswa())->setParameter('tanggal', $waktuSekarang->format('Y-m-d')); $entityKepulangan = $qbKepulangan->getQuery()->getResult(); if (count($entityKepulangan) >= 1) { continue; } $kepulangan = new KepulanganSiswa(); $kepulangan->setSekolah($jadwal->getSekolah()); $kepulangan->setTahunAkademik($jadwal->getTahunAkademik()); $kepulangan->setKelas($jadwal->getKelas()); $kepulangan->setSiswa($kehadiran->getSiswa()); $kepulangan->setStatusKepulangan($jadwal->getStatusKepulangan()); $kepulangan->setPermulaan($jadwal->isPermulaan()); $kepulangan->setTervalidasi(false); $kepulangan->setTanggal($waktuSekarang); $kepulangan->setSmsTerproses(false); $kepulangan->setKehadiranSiswa($kehadiran); $em->persist($kepulangan); } if (is_object($prosesKepulanganSiswa) && $prosesKepulanganSiswa instanceof ProsesKepulanganSiswa) { $prosesKepulanganSiswa->setBerhasilInisiasi(true); } else { $prosesKepulanganSiswa = new ProsesKepulanganSiswa(); $prosesKepulanganSiswa->setSekolah($jadwal->getSekolah()); $prosesKepulanganSiswa->setTahunAkademik($jadwal->getTahunAkademik()); $prosesKepulanganSiswa->setKelas($jadwal->getKelas()); $prosesKepulanganSiswa->setTanggal($waktuSekarang); $prosesKepulanganSiswa->setBerhasilInisiasi(true); } $em->persist($prosesKepulanganSiswa); $em->flush(); } } } if ($text != '') { $output->writeln($text); } } else { print "proses inisiasi kepulangan sekolah " . $sekolah->getNama() . " telah dan sedang berjalan\n"; } } }
/** * @Route("/ekspor", name="laporan-kehadiran-siswa_ekspor") * @Method("POST") */ public function eksporAction() { $sekolah = $this->getSekolah(); $em = $this->getDoctrine()->getManager(); $tahunAkademik = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['aktif' => true, 'sekolah' => $sekolah]); if (!(is_object($tahunAkademik) && $tahunAkademik instanceof TahunAkademik)) { $return = ["error" => $this->get('translator')->trans('flash.tahun.akademik.tidak.ada.yang.aktif')]; $return = json_encode($return); return new Response($return, 200, ['Content-Type' => 'application/json']); } $siswaKelas = $em->createQueryBuilder()->select('siswaKelas, siswa, orangtuaWali')->from('LanggasSisdikBundle:SiswaKelas', 'siswaKelas')->leftJoin('siswaKelas.tahunAkademik', 'tahunAkademik')->leftJoin('siswaKelas.siswa', 'siswa')->leftJoin('siswa.orangtuaWali', 'orangtuaWali')->where('tahunAkademik.sekolah = :sekolah')->andWhere('siswaKelas.tahunAkademik = :tahunAkademik')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademik)->orderBy('siswa.nomorInduk', 'ASC')->addOrderBy('siswa.namaLengkap', 'ASC'); $kehadiranSiswa = $em->createQueryBuilder()->select('kehadiranSiswa')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiranSiswa')->where('kehadiranSiswa.sekolah = :sekolah')->andWhere('kehadiranSiswa.tahunAkademik = :tahunAkademik')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademik); $searchform = $this->createForm('sisdik_cari_laporankehadiransiswa'); $searchform->submit($this->getRequest()); $searchdata = $searchform->getData(); if ($searchform->isValid()) { if ($searchdata['kelas'] instanceof Kelas) { $siswaKelas->andWhere('siswaKelas.kelas = :kelas')->setParameter('kelas', $searchdata['kelas']); $kehadiranSiswa->andWhere('kehadiranSiswa.kelas = :kelas')->setParameter('kelas', $searchdata['kelas']); } $dariTanggal = $searchdata['dariTanggal']; $hinggaTanggal = $searchdata['hinggaTanggal']; if ($dariTanggal instanceof \DateTime && $hinggaTanggal instanceof \DateTime) { $kehadiranSiswa->andWhere('kehadiranSiswa.tanggal >= :dariTanggal AND kehadiranSiswa.tanggal <= :hinggaTanggal')->setParameter('dariTanggal', $dariTanggal->format("Y-m-d 00:00:00"))->setParameter('hinggaTanggal', $hinggaTanggal->format("Y-m-d 24:00:00")); } elseif (!$dariTanggal instanceof \DateTime && $hinggaTanggal instanceof \DateTime) { $kehadiranSiswa->andWhere('kehadiranSiswa.tanggal = :hinggaTanggal')->setParameter('hinggaTanggal', $hinggaTanggal->format("Y-m-d")); } else { $searchdata['hinggaTanggal'] = $hariIni = new \DateTime(); $kehadiranSiswa->andWhere('kehadiranSiswa.tanggal = :hinggaTanggal')->setParameter('hinggaTanggal', $hariIni->format("Y-m-d")); } if ($searchdata['searchkey'] != '') { $siswaKelas->andWhere("siswa.namaLengkap LIKE :searchkey OR siswa.nomorInduk LIKE :searchkey OR siswa.nomorIndukSistem = :searchkey2")->setParameter('searchkey', "%{$searchdata['searchkey']}%")->setParameter('searchkey2', $searchdata['searchkey']); } if ($searchdata['statusKehadiran'] != '') { $kehadiranSiswa->andWhere("kehadiranSiswa.statusKehadiran = :statusKehadiran")->setParameter('statusKehadiran', $searchdata['statusKehadiran']); } } else { $return = ["error" => $this->get('translator')->trans('parameter.pencarian.laporan.tidak.boleh.kosong')]; $return = json_encode($return); return new Response($return, 200, ['Content-Type' => 'application/json']); } $daftarStatusKehadiran = JadwalKehadiran::getDaftarStatusKehadiran(); $daftarKehadiran = []; $daftarSiswaDiKelas = $siswaKelas->getQuery()->getResult(); foreach ($daftarSiswaDiKelas as $siswaDiKelas) { $tmpKehadiran = []; if ($siswaDiKelas instanceof SiswaKelas) { $kehadiranSiswa->andWhere('kehadiranSiswa.siswa = :siswa')->setParameter('siswa', $siswaDiKelas->getSiswa()); $kehadiranPerSiswa = $kehadiranSiswa->getQuery()->getResult(); if (count($kehadiranPerSiswa) > 0) { foreach ($daftarStatusKehadiran as $key => $value) { $tmpJumlahStatus = 0; foreach ($kehadiranPerSiswa as $kehadiran) { if ($kehadiran instanceof KehadiranSiswa) { if ($key == $kehadiran->getStatusKehadiran()) { $tmpJumlahStatus++; } } } $tmpKehadiran[$key] = $tmpJumlahStatus; } $tmpKehadiran['siswa'] = $siswaDiKelas->getSiswa(); $tmpKehadiran['kelasAktif'] = $siswaDiKelas->getAktif(); $tmpKehadiran['keteranganKelasAktif'] = $siswaDiKelas->getKeterangan(); $tmpKehadiran['jumlahHadir'] = $tmpKehadiran['a-hadir-tepat'] + $tmpKehadiran['b-hadir-telat']; $tmpKehadiran['jumlahTidakHadir'] = $tmpKehadiran['c-alpa'] + $tmpKehadiran['d-izin'] + $tmpKehadiran['e-sakit']; $daftarKehadiran[] = $tmpKehadiran; } } } $documentbase = $this->get('kernel')->getRootDir() . self::DOCUMENTS_BASEDIR . self::BASEFILE; $outputdir = self::DOCUMENTS_OUTPUTDIR; $filenameoutput = self::OUTPUTFILE . date("Y-m-d h:i") . ".sisdik"; $outputfiletype = "ods"; $extensiontarget = $extensionsource = ".{$outputfiletype}"; $filesource = $filenameoutput . $extensionsource; $filetarget = $filenameoutput . $extensiontarget; $fs = new Filesystem(); if (!$fs->exists($outputdir . $sekolah->getId() . '/')) { $fs->mkdir($outputdir . $sekolah->getId() . '/'); } $documentsource = $outputdir . $sekolah->getId() . '/' . $filesource; $documenttarget = $outputdir . $sekolah->getId() . '/' . $filetarget; if ($outputfiletype == 'ods') { if (copy($documentbase, $documenttarget) === true) { $ziparchive = new \ZipArchive(); $ziparchive->open($documenttarget); $ziparchive->addFromString('styles.xml', $this->renderView("LanggasSisdikBundle:KehadiranSiswa:styles.xml.twig")); $ziparchive->addFromString('content.xml', $this->renderView("LanggasSisdikBundle:KehadiranSiswa:laporan.xml.twig", ['searchkey' => $searchdata['searchkey'], 'kelas' => $searchdata['kelas'], 'tahunAkademik' => $tahunAkademik, 'dariTanggal' => $searchdata['dariTanggal'], 'hinggaTanggal' => $searchdata['hinggaTanggal'], 'daftarStatusKehadiran' => $daftarStatusKehadiran, 'kehadiranSiswa' => $daftarKehadiran])); if ($ziparchive->close() === true) { $return = ["redirectUrl" => $this->generateUrl("laporan-kehadiran-siswa_unduh", ['filename' => $filetarget]), "filename" => $filetarget]; $return = json_encode($return); return new Response($return, 200, ['Content-Type' => 'application/json']); } } } $return = ["error" => $this->get('translator')->trans('errorinfo.tak.ada.kehadiran.siswa')]; $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]; }
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('statusKehadiran', 'choice', ['required' => true, 'expanded' => false, 'multiple' => false, 'choices' => JadwalKehadiran::getDaftarStatusKehadiran(), 'attr' => ['class' => 'medium']])->add('kelas', 'sisdik_entityhidden', ['required' => true, 'class' => 'LanggasSisdikBundle:Kelas', 'data' => $options['kelas']->getId()])->add('tanggal', 'hidden', ['data' => $options['tanggal']]); }
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"; } } }
/** * @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; }
/** * API untuk mengunduh jadwal kehadiran berdasarkan token mesin wakil * * @Route("/_api/jadwal-kehadiran/{token}.{_format}", name="jadwal_kehadiran_unduh-jadwal", defaults={"_format"="json"}, requirements={"_format"="(xml|json)"}) * @Method("GET") */ public function unduhJadwalKehadiranAction($token) { /* @var $em EntityManager */ $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('LanggasSisdikBundle:TokenSekolah')->findByMesinProxy($token); if (count($entity) == 1) { $tokenSekolah = $entity[0]; if ($tokenSekolah instanceof TokenSekolah) { $sekolah = $tokenSekolah->getSekolah(); $jadwal = []; foreach (JadwalKehadiran::getDaftarPerulangan() as $key => $value) { $querybuilder = $em->createQueryBuilder()->select('jadwalKehadiran')->from('LanggasSisdikBundle:JadwalKehadiran', 'jadwalKehadiran')->leftJoin('jadwalKehadiran.tahunAkademik', 'tahunAkademik')->where('jadwalKehadiran.sekolah = :sekolah')->andWhere('tahunAkademik.aktif = :aktif')->andWhere('jadwalKehadiran.perulangan = :perulangan')->andWhere("jadwalKehadiran.paramstatusDariJam != '' OR jadwalKehadiran.paramstatusHinggaJam != ''")->addOrderBy('jadwalKehadiran.mingguanHariKe', 'ASC')->addOrderBy('jadwalKehadiran.paramstatusDariJam', 'ASC')->addOrderBy('jadwalKehadiran.paramstatusHinggaJam', 'DESC')->addOrderBy('jadwalKehadiran.bulananHariKe')->setParameter('sekolah', $sekolah)->setParameter('aktif', true)->setParameter('perulangan', $key); $result = $querybuilder->getQuery()->getResult(); if ($result) { $jadwal[$key] = $result; } } $querybuilder2 = $em->createQueryBuilder()->select('mesinKehadiran')->from('LanggasSisdikBundle:MesinKehadiran', 'mesinKehadiran')->where('mesinKehadiran.sekolah = :sekolah')->setParameter('sekolah', $sekolah->getId()); $mesinKehadiran = $querybuilder2->getQuery()->getResult(); $userAdmin = $em->getRepository('LanggasSisdikBundle:User')->findByRole($sekolah, 'ROLE_ADMIN'); return ['jadwal' => $jadwal, 'mesinKehadiran' => $mesinKehadiran, 'userAdmin' => $userAdmin]; } } else { throw new NotFoundHttpException($this->get('translator')->trans('exception.token.tak.sahih')); } }
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"; } } }