/** * Menginisiasi kehadiran siswa. * * @Route("/inisiasi/{kelas_id}/{tanggal}", name="kehadiran-siswa_inisiasi") * @Method("POST") * @Secure(roles="ROLE_GURU_PIKET") */ public function inisiasiAction($kelas_id, $tanggal) { $sekolah = $this->getSekolah(); /* @var $em EntityManager */ $em = $this->getDoctrine()->getManager(); $tahunAkademik = $em->getRepository('LanggasSisdikBundle:TahunAkademik')->findOneBy(['aktif' => true, 'sekolah' => $sekolah]); $kelas = $em->getRepository('LanggasSisdikBundle:Kelas')->find($kelas_id); $formInisiasi = $this->createForm('sisdik_kehadiransiswainisiasi', null, ['kelas' => $kelas, 'tanggal' => $tanggal])->submit($this->getRequest()); if ($formInisiasi->isValid()) { $statusKehadiran = $formInisiasi->get('statusKehadiran')->getData(); $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')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademik)->setParameter('kelas', $kelas)->setParameter('tanggal', $tanggal); $entities = $qbKehadiran->getQuery()->getResult(); if (count($entities) > 0) { foreach ($entities as $kehadiran) { if (is_object($kehadiran) && $kehadiran instanceof KehadiranSiswa) { $kehadiran->setKeteranganStatus(null); $kehadiran->setPermulaan(true); $kehadiran->setTervalidasi(false); $kehadiran->setSmsDlr(null); $kehadiran->setSmsDlrtime(null); $kehadiran->setSmsTerproses(false); $kehadiran->setJam(null); $kehadiran->setStatusKehadiran($statusKehadiran); $em->persist($kehadiran); } } } else { $qbSiswaKelas = $em->createQueryBuilder()->select('siswaKelas')->from('LanggasSisdikBundle:SiswaKelas', 'siswaKelas')->where('siswaKelas.tahunAkademik = :tahunakademik')->andWhere('siswaKelas.kelas = :kelas')->andWhere('siswaKelas.aktif = :aktif')->setParameter('tahunakademik', $tahunAkademik)->setParameter('kelas', $kelas)->setParameter('aktif', true); $entitiesSiswaKelas = $qbSiswaKelas->getQuery()->getResult(); foreach ($entitiesSiswaKelas as $siswaKelas) { if (!(is_object($siswaKelas) && $siswaKelas instanceof SiswaKelas)) { continue; } $qbKehadiran = $em->createQueryBuilder()->select('kehadiran')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.siswa = :siswa')->andWhere('kehadiran.tanggal = :tanggal')->setParameter('sekolah', $sekolah)->setParameter('siswa', $siswaKelas->getSiswa())->setParameter('tanggal', $tanggal); $entityKehadiran = $qbKehadiran->getQuery()->getResult(); if (count($entityKehadiran) >= 1) { continue; } $kehadiran = new KehadiranSiswa(); $kehadiran->setSekolah($sekolah); $kehadiran->setTahunAkademik($tahunAkademik); $kehadiran->setKelas($kelas); $kehadiran->setSiswa($siswaKelas->getSiswa()); $kehadiran->setStatusKehadiran($statusKehadiran); $kehadiran->setPermulaan(true); $kehadiran->setTervalidasi(false); $kehadiran->setTanggal(new \DateTime($tanggal)); $kehadiran->setSmsTerproses(false); $em->persist($kehadiran); } } $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademik, 'kelas' => $kelas, 'tanggal' => new \DateTime($tanggal)]); if (is_object($prosesKehadiranSiswa) && $prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) { $prosesKehadiranSiswa->setBerhasilInisiasi(true); } else { $prosesKehadiranSiswa = new ProsesKehadiranSiswa(); $prosesKehadiranSiswa->setSekolah($sekolah); $prosesKehadiranSiswa->setTahunAkademik($tahunAkademik); $prosesKehadiranSiswa->setKelas($kelas); $prosesKehadiranSiswa->setTanggal(new \DateTime($tanggal)); $prosesKehadiranSiswa->setBerhasilInisiasi(true); } $em->persist($prosesKehadiranSiswa); $em->flush(); $return = ["responseCode" => 200, "responseText" => $this->get('translator')->trans('flash.inisiasi.berhasil.dijalankan'), "data" => 'refresh']; } else { $return = ["responseCode" => 400, "responseText" => $this->get('translator')->trans('flash.inisiasi.gagal.dijalankan'), "data" => 'norefresh']; } $return = json_encode($return); return new Response($return, 200, ['Content-Type' => 'application/json']); }
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 = '05: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 ($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:JadwalKehadiran', '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); } $jadwalKehadiran = $querybuilder->getQuery()->getResult(); foreach ($jadwalKehadiran as $jadwal) { if (!(is_object($jadwal) && $jadwal instanceof JadwalKehadiran)) { continue; } $prosesKehadiranSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKehadiranSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $jadwal->getTahunAkademik(), 'kelas' => $jadwal->getKelas(), 'tanggal' => $waktuSekarang]); if (is_object($prosesKehadiranSiswa) && $prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) { if ($prosesKehadiranSiswa->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) { $qbSiswaKelas = $em->createQueryBuilder()->select('siswaKelas')->from('LanggasSisdikBundle:SiswaKelas', 'siswaKelas')->where('siswaKelas.tahunAkademik = :tahunakademik')->andWhere('siswaKelas.kelas = :kelas')->andWhere('siswaKelas.aktif = :aktif')->setParameter('tahunakademik', $jadwal->getTahunAkademik())->setParameter('kelas', $jadwal->getKelas())->setParameter('aktif', true); $entitiesSiswaKelas = $qbSiswaKelas->getQuery()->getResult(); foreach ($entitiesSiswaKelas as $siswaKelas) { if (!(is_object($siswaKelas) && $siswaKelas instanceof SiswaKelas)) { continue; } $qbKehadiran = $em->createQueryBuilder()->select('kehadiran')->from('LanggasSisdikBundle:KehadiranSiswa', 'kehadiran')->where('kehadiran.sekolah = :sekolah')->andWhere('kehadiran.siswa = :siswa')->andWhere('kehadiran.tanggal = :tanggal')->setParameter('sekolah', $sekolah->getId())->setParameter('siswa', $siswaKelas->getSiswa()->getId())->setParameter('tanggal', $waktuSekarang->format('Y-m-d')); $entityKehadiran = $qbKehadiran->getQuery()->getResult(); if (count($entityKehadiran) >= 1) { continue; } $kehadiran = new KehadiranSiswa(); $kehadiran->setSekolah($jadwal->getSekolah()); $kehadiran->setTahunAkademik($jadwal->getTahunAkademik()); $kehadiran->setKelas($jadwal->getKelas()); $kehadiran->setSiswa($siswaKelas->getSiswa()); $kehadiran->setStatusKehadiran($jadwal->getStatusKehadiran()); $kehadiran->setPermulaan($jadwal->isPermulaan()); $kehadiran->setTanggal($waktuSekarang); $kehadiran->setSmsTerproses(false); $em->persist($kehadiran); } if (is_object($prosesKehadiranSiswa) && $prosesKehadiranSiswa instanceof ProsesKehadiranSiswa) { $prosesKehadiranSiswa->setBerhasilInisiasi(true); } else { $prosesKehadiranSiswa = new ProsesKehadiranSiswa(); $prosesKehadiranSiswa->setSekolah($jadwal->getSekolah()); $prosesKehadiranSiswa->setTahunAkademik($jadwal->getTahunAkademik()); $prosesKehadiranSiswa->setKelas($jadwal->getKelas()); $prosesKehadiranSiswa->setTanggal($waktuSekarang); $prosesKehadiranSiswa->setBerhasilInisiasi(true); } $em->persist($prosesKehadiranSiswa); $em->flush(); } } } if ($text != '') { $output->writeln($text); } } else { print "proses inisiasi kehadiran sekolah " . $sekolah->getNama() . " telah dan sedang berjalan\n"; } } }