166 lines
5.4 KiB
PHP
166 lines
5.4 KiB
PHP
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
class Cameraqrscan extends CI_Controller {
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->load->model('DynamicModel', 'dm');
|
|
|
|
// Cek apakah user sudah login
|
|
if (!$this->session->userdata('logged_in')) {
|
|
redirect('login');
|
|
}
|
|
}
|
|
|
|
public function index($type = 'masuk')
|
|
{
|
|
// pastikan hanya masuk/keluar
|
|
$type = strtolower($type);
|
|
if (!in_array($type, ['masuk', 'keluar'])) {
|
|
show_404();
|
|
return;
|
|
}
|
|
|
|
$data = [
|
|
"active_menu" => "",
|
|
"scan_type" => $type // passing ke view
|
|
];
|
|
|
|
$this->load->view('partials/header', $data);
|
|
$this->load->view('scan/qr_scan', $data);
|
|
$this->load->view('partials/footer');
|
|
}
|
|
|
|
public function get_data()
|
|
{
|
|
$qr_code = $this->input->post('qr_code');
|
|
$scan_type = $this->input->post('scan_type'); // masuk / keluar
|
|
|
|
if (!$qr_code) {
|
|
echo json_encode(['status' => false, 'message' => 'QR Code tidak ditemukan']);
|
|
return;
|
|
}
|
|
|
|
// ============================================================
|
|
// AMBIL DATA SISWA
|
|
// ============================================================
|
|
$siswa = $this->db->get_where('v_siswa', ['qr_id' => $qr_code])->row_array();
|
|
|
|
if (!$siswa) {
|
|
echo json_encode([
|
|
'status' => false,
|
|
'message' => 'Data siswa tidak ditemukan'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$id_siswa = $siswa['id'];
|
|
$id_kelas = $siswa['id_kelas'];
|
|
$id_kamar = $siswa['id_kamar'];
|
|
|
|
// ============================================================
|
|
// CEGAH DUPLIKAT 5 MENIT (PostgreSQL)
|
|
// ============================================================
|
|
// Hitung waktu 5 menit yang lalu
|
|
$datetimeNow = date('Y-m-d H:i:s');
|
|
$datetime5MenitLalu = date('Y-m-d H:i:s', strtotime('-5 minutes'));
|
|
|
|
$cek = $this->db->query("
|
|
SELECT id
|
|
FROM kunjungan
|
|
WHERE id_siswa = ?
|
|
AND created_at >= ?
|
|
ORDER BY created_at DESC
|
|
LIMIT 1
|
|
", [$id_siswa, $datetime5MenitLalu])->row_array();
|
|
|
|
if ($cek) {
|
|
echo json_encode([
|
|
'status' => true,
|
|
'data' => $siswa,
|
|
'scan_type' => $scan_type,
|
|
'message' => "Sudah tercatat dalam 5 menit terakhir"
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// ============================================================
|
|
// AMBIL TEMPLATE PESAN
|
|
// ============================================================
|
|
$template = $this->db->get_where('template_pesan', ['jenis' => $scan_type])->row_array();
|
|
|
|
if (!$template) {
|
|
echo json_encode([
|
|
'status' => false,
|
|
'message' => 'Template pesan tidak ditemukan => ' . $scan_type
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$pesan = $template['isi_template'];
|
|
$pesanType = $template['type'];
|
|
|
|
|
|
// ============================================================
|
|
// REPLACE TEMPLATE {{column}}
|
|
// ============================================================
|
|
foreach ($siswa as $key => $value) {
|
|
$pesan = str_replace('{{'.$key.'}}', $value, $pesan);
|
|
}
|
|
|
|
// Tambahan otomatis
|
|
$pesan = str_replace('{{tanggal}}', date('Y-m-d'), $pesan);
|
|
$pesan = str_replace('{{jam}}', date('H:i:s'), $pesan);
|
|
|
|
|
|
// ============================================================
|
|
// INSERT KUNJUNGAN
|
|
// ============================================================
|
|
$this->db->insert('kunjungan', [
|
|
'id_siswa' => $id_siswa,
|
|
'type' => $scan_type,
|
|
'id_users' => $this->session->userdata('user_id'),
|
|
'id_kelas' => $id_kelas,
|
|
'id_kamar' => $id_kamar,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'media_type' => 'qr'
|
|
]);
|
|
|
|
$new_id = $this->db->insert_id();
|
|
|
|
|
|
// ============================================================
|
|
// INSERT NOTIFIKASI WA
|
|
// ============================================================
|
|
$this->db->insert('notifikasi', [
|
|
'type' => $pesanType,
|
|
'pesan' => $pesan,
|
|
'status' => 'pending',
|
|
'nomor_whatsapp' => $siswa['nomor_whatsapp'],
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
]);
|
|
|
|
|
|
// ============================================================
|
|
// RESPONSE
|
|
// ============================================================
|
|
$info = ($scan_type === 'masuk')
|
|
? "Berhasil scan MASUK"
|
|
: "Berhasil scan KELUAR";
|
|
|
|
// tampilkan data lengkap dari v_kunjungan
|
|
$dataSiswa = $this->db->get_where('v_kunjungan_detail', ['id' => $new_id])->row();
|
|
|
|
echo json_encode([
|
|
'status' => true,
|
|
'data' => $dataSiswa,
|
|
'scan_type' => $scan_type,
|
|
'message' => $info
|
|
]);
|
|
}
|
|
|
|
|
|
}
|