示例#1
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $sekolah = $this->getSekolah();
     $querybuilder = $this->entityManager->createQueryBuilder()->select('kepulangan, siswa')->from('LanggasSisdikBundle:KepulanganSiswa', 'kepulangan')->leftJoin('kepulangan.kelas', 'kelas')->leftJoin('kepulangan.siswa', 'siswa')->where('kelas.sekolah = :sekolah')->orderBy('kelas.kode')->addOrderBy('siswa.namaLengkap')->setParameter('sekolah', $sekolah);
     if ($options['buildparam']['tanggal'] != '') {
         $querybuilder->andWhere('kepulangan.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("kepulangan.kelas = :kelas");
         $querybuilder->setParameter('kelas', $options['buildparam']['kelas']);
     }
     if ($options['buildparam']['statusKepulangan'] != '') {
         $querybuilder->andWhere("kepulangan.statusKepulangan = :statusKepulangan");
         $querybuilder->setParameter('statusKepulangan', $options['buildparam']['statusKepulangan']);
     }
     $entities = $querybuilder->getQuery()->getResult();
     foreach ($entities as $entity) {
         if (is_object($entity) && $entity instanceof KepulanganSiswa) {
             $builder->add('kepulangan_' . $entity->getId(), 'choice', ['required' => true, 'expanded' => true, 'multiple' => false, 'choices' => JadwalKepulangan::getDaftarStatusKepulangan(), 'attr' => ['class' => 'medium'], 'data' => $entity->getStatusKepulangan()])->add('kepulangan_keterangan_' . $entity->getId(), 'text', ['required' => false, 'attr' => ['placeholder' => 'label.keterangan.kepulangan', 'class' => 'keterangan-kepulangan'], 'data' => $entity->getKeteranganStatus()]);
         }
     }
 }
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $sekolah = $this->getSekolah();
     $builder->add('tanggal', 'date', ['label' => 'label.date', 'widget' => 'single_text', 'format' => 'dd/MM/yyyy', 'attr' => ['class' => 'date small', 'placeholder' => 'label.date'], 'required' => true, '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]);
     $builder->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]);
     $builder->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('statusKepulangan', 'choice', ['choices' => JadwalKepulangan::getDaftarStatusKepulangan(), 'label' => 'label.status.kepulangan', 'multiple' => false, 'expanded' => false, 'required' => false, 'label_render' => false, 'attr' => ['class' => 'medium'], 'preferred_choices' => ['c-alpa'], 'placeholder' => 'label.status.kepulangan', 'horizontal' => false]);
 }
示例#3
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $sekolah = $this->getSekolah();
     $builder->addEventSubscriber(new SekolahSubscriber($sekolah));
     $builder->add('sekolah', 'sisdik_entityhidden', ['required' => true, 'class' => 'LanggasSisdikBundle:Sekolah', 'data' => $sekolah->getId()])->add('tahunAkademik', 'entity', ['class' => 'LanggasSisdikBundle:TahunAkademik', 'label' => 'label.year.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('tahunAkademik')->where('tahunAkademik.sekolah = :sekolah')->orderBy('tahunAkademik.urutan', 'DESC')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'medium selectyear']])->add('kelas', 'entity', ['class' => 'LanggasSisdikBundle:Kelas', 'label' => 'label.class.entry', 'multiple' => false, 'expanded' => false, 'property' => 'nama', 'required' => true, 'query_builder' => function (EntityRepository $repository) use($sekolah) {
         $qb = $repository->createQueryBuilder('kelas')->leftJoin('kelas.tingkat', 'tingkat')->where('kelas.sekolah = :sekolah')->orderBy('tingkat.urutan', 'ASC')->addOrderBy('kelas.urutan')->setParameter('sekolah', $sekolah);
         return $qb;
     }, 'attr' => ['class' => 'large selectclass']])->add('statusKepulangan', 'choice', ['choices' => JadwalKepulangan::getDaftarStatusKepulangan(), 'label' => 'label.status.kepulangan', '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('langsungKirimSms', 'checkbox', ['label' => 'label.langsung.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', 'help_block' => 'help.langsung.kirim.sms'])->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.kepulangan', '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.kepulangan', 'required' => false, 'help_block' => 'help.awal.kepulangan', '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('statusKepulangan', 'choice', ['required' => true, 'expanded' => false, 'multiple' => false, 'choices' => JadwalKepulangan::getDaftarStatusKepulangan(), 'attr' => ['class' => 'medium'], 'placeholder' => 'label.pilih.status.kepulangan'])->add('kelas', 'sisdik_entityhidden', ['required' => true, 'class' => 'LanggasSisdikBundle:Kelas', 'data' => $options['kelas']->getId()])->add('tanggal', 'hidden', ['data' => $options['tanggal']]);
     $siswa = [];
     foreach ($options['kepulangan'] as $kepulangan) {
         if ($kepulangan instanceof KepulanganSiswa) {
             $siswa[] = $kepulangan->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']);
     }
 }
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('statusKepulangan', 'choice', ['required' => true, 'expanded' => false, 'multiple' => false, 'choices' => JadwalKepulangan::getDaftarStatusKepulangan(), 'attr' => ['class' => 'medium']])->add('kelas', 'sisdik_entityhidden', ['required' => true, 'class' => 'LanggasSisdikBundle:Kelas', 'data' => $options['kelas']->getId()])->add('tanggal', 'hidden', ['data' => $options['tanggal']]);
 }
 /**
  * @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()];
 }
 /**
  * Memperbarui kepulangan siswa berdasarkan data yang diambil secara manual.
  *
  * @Route("/pembaruan-manual/{urutan}/{daftarJadwal}", name="kepulangan-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']);
     $daftarStatusKepulangan = JadwalKepulangan::getDaftarStatusKepulangan();
     $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:JadwalKepulangan', '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 kepulangan siswa";
         $response->setContent(json_encode($retval));
         return $response;
     }
     $querybuilder = $em->createQueryBuilder()->select('jadwal')->from('LanggasSisdikBundle:JadwalKepulangan', '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);
         }
     }
     $jadwalKepulangan = $querybuilder->getQuery()->getResult();
     foreach ($jadwalKepulangan as $jadwal) {
         if (!(is_object($jadwal) && $jadwal instanceof JadwalKepulangan)) {
             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 . DIRECTORY_SEPARATOR . 'pulang';
         if (!is_dir($logDirectory)) {
             continue;
         }
         $retval['pesan'][] = "Memproses kepulangan siswa untuk jadwal " . $jadwal->getTahunAkademik()->getNama() . ", " . $jadwal->getKelas()->getNama() . ", " . $perulangan[$jadwal->getPerulangan()] . ", " . $this->get('translator')->trans($daftarStatusKepulangan[$jadwal->getStatusKepulangan()]) . ", " . $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);
                 $logKepulangan = json_decode($buffer, true);
                 foreach ($logKepulangan 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) {
                         $kepulanganSiswa = $em->getRepository('LanggasSisdikBundle:KepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'siswa' => $siswa, 'tanggal' => $waktuSekarang, 'permulaan' => true]);
                         if (is_object($kepulanganSiswa) && $kepulanganSiswa instanceof KepulanganSiswa) {
                             /**$retval['pesan'][] = "··· Memperbarui kepulangan siswa "
                                    . $kepulanganSiswa->getSiswa()->getNamaLengkap()
                                    . " ("
                                    . $kepulanganSiswa->getSiswa()->getNomorIndukSistem()
                                    . ")"
                                ;**/
                             $counterJumlahTerproses++;
                             $kepulanganSiswa->setPermulaan(false);
                             $kepulanganSiswa->setStatusKepulangan($jadwal->getStatusKepulangan());
                             $kepulanganSiswa->setJam($logTanggal->format('H:i:s'));
                             $kepulanganSiswa->setTerprosesManual(true);
                             $em->persist($kepulanganSiswa);
                             $em->flush();
                         }
                     }
                 }
                 $prosesKepulanganSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang, 'berhasilDiperbaruiMesin' => false]);
                 if (is_object($prosesKepulanganSiswa) && $prosesKepulanganSiswa instanceof ProsesKepulanganSiswa) {
                     $prosesKepulanganSiswa->setBerhasilDiperbaruiMesin(true);
                     $em->persist($prosesKepulanganSiswa);
                 }
             } 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) {
                             $kepulanganSiswa = $em->getRepository('LanggasSisdikBundle:KepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'siswa' => $siswa, 'tanggal' => $waktuSekarang, 'permulaan' => true]);
                             if (is_object($kepulanganSiswa) && $kepulanganSiswa instanceof KepulanganSiswa) {
                                 /**$retval['pesan'][] = "··· Memperbarui kepulangan siswa "
                                        . $kepulanganSiswa->getSiswa()->getNamaLengkap()
                                        . " ("
                                        . $kepulanganSiswa->getSiswa()->getNomorIndukSistem()
                                        . ")"
                                    ;**/
                                 $counterJumlahTerproses++;
                                 $kepulanganSiswa->setPermulaan(false);
                                 $kepulanganSiswa->setStatusKepulangan($jadwal->getStatusKepulangan());
                                 $kepulanganSiswa->setJam($logTanggal->format('H:i:s'));
                                 $kepulanganSiswa->setTerprosesManual(true);
                                 $em->persist($kepulanganSiswa);
                                 $em->flush();
                             }
                         }
                     }
                     $prosesKepulanganSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang, 'berhasilDiperbaruiMesin' => false]);
                     if (is_object($prosesKepulanganSiswa) && $prosesKepulanganSiswa instanceof ProsesKepulanganSiswa) {
                         $prosesKepulanganSiswa->setBerhasilDiperbaruiMesin(true);
                         $em->persist($prosesKepulanganSiswa);
                     }
                 }
             }
             @unlink($extractedFile);
         }
         $em->flush();
         $retval['pesan'][] = "»»» Jumlah kepulangan siswa terbarui: {$counterJumlahTerproses}";
         $response->setContent(json_encode($retval));
         return $response;
     }
     $response->setContent(json_encode($retval));
     return $response;
 }
 /**
  * Menggandakan jadwal
  *
  * @Route("/jadwal-kepulangan/salin", name="jadwal_kepulangan_duplicate")
  * @Method("POST")
  * @Secure(roles="ROLE_ADMIN")
  */
 public function duplicateSchedule(Request $request)
 {
     $sekolah = $this->getSekolah();
     $em = $this->getDoctrine()->getManager();
     $form = $this->createForm('sisdik_salinjadwal', null, ['sekolahSrc' => $sekolah->getId()]);
     $querybuilder = $em->createQueryBuilder()->select('jadwalKepulangan')->from('LanggasSisdikBundle:JadwalKepulangan', 'jadwalKepulangan')->leftJoin('jadwalKepulangan.tahunAkademik', 'tahunAkademik')->leftJoin('jadwalKepulangan.kelas', 'kelas')->leftJoin('jadwalKepulangan.templatesms', 'templatesms')->where('jadwalKepulangan.sekolah = :sekolah')->setParameter('sekolah', $sekolah->getId());
     $form->submit($request);
     if ($form->isValid()) {
         $data = $form->getData();
         $requestUri = $data['requestUri'];
         // source
         $tahunAkademikSrc = $data['tahunAkademikSrc'];
         $kelasSrc = $data['kelasSrc'];
         $perulanganSrc = $data['perulanganSrc'];
         $mingguanHariKeSrc = $data['mingguanHariKeSrc'];
         $bulananHariKeSrc = $data['bulananHariKeSrc'];
         // target
         $tahunAkademik = $data['tahunAkademik'];
         $kelas = $data['kelas'];
         $perulangan = $data['perulangan'];
         $mingguanHariKe = $data['mingguanHariKe'];
         $bulananHariKe = $data['bulananHariKe'];
         if ($tahunAkademikSrc != '') {
             $querybuilder->andWhere('tahunAkademik.id = :tahunAkademik');
             $querybuilder->setParameter('tahunAkademik', $tahunAkademikSrc);
         }
         if ($kelasSrc != '') {
             $querybuilder->andWhere('kelas.id = :kelas');
             $querybuilder->setParameter('kelas', $kelasSrc);
         }
         if ($perulanganSrc != '') {
             $querybuilder->andWhere("(jadwalKepulangan.perulangan = :perulangan)");
             $querybuilder->setParameter('perulangan', $perulanganSrc);
         }
         if ($perulanganSrc == 'b-mingguan' && array_key_exists('mingguanHariKe', $data)) {
             $querybuilder->andWhere("(jadwalKepulangan.mingguanHariKe = :mingguanHariKe)");
             $querybuilder->setParameter('mingguanHariKe', $mingguanHariKeSrc);
         }
         if ($perulanganSrc == 'c-bulanan' && array_key_exists('bulananHariKe', $data)) {
             $querybuilder->andWhere("(jadwalKepulangan.bulananHariKe = :bulananHariKe)");
             $querybuilder->setParameter('bulananHariKe', $bulananHariKeSrc);
         }
         $results = $querybuilder->getQuery()->getResult();
         foreach ($results as $result) {
             $entity = new JadwalKepulangan();
             $entity->setSekolah($sekolah);
             $entity->setTahunAkademik($tahunAkademik);
             $entity->setKelas($kelas);
             $entity->setTemplatesms($result->getTemplatesms());
             $entity->setStatusKepulangan($result->getStatusKepulangan());
             $entity->setPerulangan($perulangan);
             if ($perulangan == 'b-mingguan') {
                 $entity->setMingguanHariKe($mingguanHariKe);
             }
             if ($perulangan == 'c-bulanan') {
                 $entity->setBulananHariKe($bulananHariKe);
             }
             $entity->setParamstatusDariJam($result->getParamstatusDariJam());
             $entity->setParamstatusHinggaJam($result->getParamstatusHinggaJam());
             $entity->setKirimSms($result->isKirimSms());
             $entity->setSmsJam($result->getSmsJam());
             $entity->setOtomatisTerhubungMesin($result->isOtomatisTerhubungMesin());
             $entity->setPermulaan($result->isPermulaan());
             $em->persist($entity);
         }
         $this->get('session')->getFlashBag()->add('success', $this->get('translator')->trans('flash.presence.schedule.duplicate.success'));
         $em->flush();
     } else {
         $this->get('session')->getFlashBag()->add('error', $this->get('translator')->trans('flash.presence.schedule.duplicate.fail'));
     }
     return $this->redirect($requestUri);
 }