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"; } } }
/** * Menginisiasi kepulangan siswa. * * @Route("/inisiasi/{kelas_id}/{tanggal}", name="kepulangan-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_kepulangansiswainisiasi', null, ['kelas' => $kelas, 'tanggal' => $tanggal])->submit($this->getRequest()); if ($formInisiasi->isValid()) { $statusKepulangan = $formInisiasi->get('statusKepulangan')->getData(); $qbKepulangan = $em->createQueryBuilder()->select('kepulangan')->from('LanggasSisdikBundle:KepulanganSiswa', 'kepulangan')->where('kepulangan.sekolah = :sekolah')->andWhere('kepulangan.tahunAkademik = :tahunAkademik')->andWhere('kepulangan.kelas = :kelas')->andWhere('kepulangan.tanggal = :tanggal')->setParameter('sekolah', $sekolah)->setParameter('tahunAkademik', $tahunAkademik)->setParameter('kelas', $kelas)->setParameter('tanggal', $tanggal); $entities = $qbKepulangan->getQuery()->getResult(); $jam = new \DateTime(); if (count($entities) > 0) { foreach ($entities as $kepulangan) { if (is_object($kepulangan) && $kepulangan instanceof KepulanganSiswa) { $kepulangan->setKeteranganStatus(null); $kepulangan->setPermulaan(true); $kepulangan->setTervalidasi(false); $kepulangan->setSmsDlr(null); $kepulangan->setSmsDlrtime(null); $kepulangan->setJam($jam->format('H:i') . ':00'); $kepulangan->setSmsTerproses(false); $kepulangan->setStatusKepulangan($statusKepulangan); $em->persist($kepulangan); } } } else { $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', $tahunAkademik)->setParameter('kelas', $kelas)->setParameter('tanggal', $tanggal)->setParameter('tepat', 'a-hadir-tepat')->setParameter('telat', 'b-hadir-telat'); $entitiesKehadiran = $qbKehadiran->getQuery()->getResult(); foreach ($entitiesKehadiran as $kehadiran) { if (!$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', $tanggal); $entityKepulangan = $qbKepulangan->getQuery()->getResult(); if (count($entityKepulangan) >= 1) { continue; } $kepulangan = new KepulanganSiswa(); $kepulangan->setSekolah($sekolah); $kepulangan->setTahunAkademik($tahunAkademik); $kepulangan->setKelas($kelas); $kepulangan->setSiswa($kehadiran->getSiswa()); $kepulangan->setStatusKepulangan($statusKepulangan); $kepulangan->setPermulaan(true); $kepulangan->setTervalidasi(false); $kepulangan->setTanggal(new \DateTime($tanggal)); $kepulangan->setJam($jam->format('H:i') . ':00'); $kepulangan->setSmsTerproses(false); $kepulangan->setKehadiranSiswa($kehadiran); $em->persist($kepulangan); } } $prosesKepulanganSiswa = $em->getRepository('LanggasSisdikBundle:ProsesKepulanganSiswa')->findOneBy(['sekolah' => $sekolah, 'tahunAkademik' => $tahunAkademik, 'kelas' => $kelas, 'tanggal' => new \DateTime($tanggal)]); if (is_object($prosesKepulanganSiswa) && $prosesKepulanganSiswa instanceof ProsesKepulanganSiswa) { $prosesKepulanganSiswa->setBerhasilInisiasi(true); } else { $prosesKepulanganSiswa = new ProsesKepulanganSiswa(); $prosesKepulanganSiswa->setSekolah($sekolah); $prosesKepulanganSiswa->setTahunAkademik($tahunAkademik); $prosesKepulanganSiswa->setKelas($kelas); $prosesKepulanganSiswa->setTanggal(new \DateTime($tanggal)); $prosesKepulanganSiswa->setBerhasilInisiasi(true); } $em->persist($prosesKepulanganSiswa); $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']); }