1️⃣ Buat migrasi tabel jadwal
php artisan make:migration create_jadwal_table
Lalu isi migrasinya seperti ini:
public function up()
{
Schema::create('jadwal', function (Blueprint $table) {
$table->id();
$table->boolean('libur')->default(false);
$table->time('masuk_pagi_start');
$table->time('masuk_pagi_end');
$table->time('masuk_siang_start');
$table->time('masuk_siang_end');
$table->time('pulang_pagi_start');
$table->time('pulang_pagi_end');
$table->time('pulang_siang_start');
$table->time('pulang_siang_end');
$table->timestamps();
});
}
Lalu jalankan:
php artisan migrate
2️⃣ Buat model Jadwal
php artisan make:model Jadwal
Isi modelnya sederhana:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Jadwal extends Model
{
use HasFactory;
protected $table = 'jadwal';
protected $fillable = [
'libur',
'masuk_pagi_start', 'masuk_pagi_end',
'masuk_siang_start', 'masuk_siang_end',
'pulang_pagi_start', 'pulang_pagi_end',
'pulang_siang_start', 'pulang_siang_end',
];
}
3️⃣ Sesuaikan Controller scanBarcode()
Sekarang kita ambil data jadwal dari database:
public function scanBarcode(Request $request)
{
// Cari data siswa berdasarkan barcode yang discan
$student = Student::where('barcode', $request->barcode)->first();
// Jika barcode tidak ditemukan, kembalikan status notfound
if (!$student) {
return response()->json(['status' => 'notfound']);
}
// Ambil waktu saat ini
$now = Carbon::now();
$today = $now->toDateString();
$time = $now->format('H:i');
// Ambil jadwal dari database
$jadwal = Jadwal::first();
// Jika jadwal tidak ditemukan, kembalikan error
if (!$jadwal) {
return response()->json(['status' => 'failed', 'message' => 'Jadwal belum diatur di database']);
}
// ================= CEK LIBUR =================
if ($jadwal->libur) {
// Jika hari libur, langsung kembalikan status libur
return response()->json(['status' => 'holiday', 'message' => 'Hari ini libur']);
}
// ================= CEK JAM MASUK =================
$isMasuk = (
($time >= $jadwal->masuk_pagi_start && $time <= $jadwal->masuk_pagi_end) ||
($time >= $jadwal->masuk_siang_start && $time <= $jadwal->masuk_siang_end)
);
// ================= CEK JAM PULANG =================
$isPulang = (
($time >= $jadwal->pulang_pagi_start && $time <= $jadwal->pulang_pagi_end) ||
($time >= $jadwal->pulang_siang_start && $time <= $jadwal->pulang_siang_end)
);
// Cek apakah siswa sudah punya data absensi hari ini
$absen = Absensi::where('student_id', $student->id)
->whereDate('created_at', $today)
->first();
// ================= PROSES ABSEN MASUK =================
if ($isMasuk) {
if ($absen) {
return response()->json(['status' => 'already', 'message' => 'Sudah absen masuk']);
} else {
Absensi::create([
'student_id' => $student->id,
'masuk' => $now,
]);
return response()->json(['status' => 'success', 'message' => 'Absen masuk berhasil']);
}
}
// ================= PROSES ABSEN PULANG =================
elseif ($isPulang) {
if ($absen) {
if (!$absen->pulang) {
$absen->update(['pulang' => $now]);
return response()->json(['status' => 'success', 'message' => 'Absen pulang berhasil']);
} else {
return response()->json(['status' => 'already', 'message' => 'Sudah absen pulang']);
}
} else {
return response()->json(['status' => 'failed', 'message' => 'Belum absen masuk']);
}
}
// ================= DILUAR JAM ABSEN =================
else {
return response()->json(['status' => 'failed', 'message' => 'Diluar jam absensi']);
}
}
✅ Sekarang seluruh jam diambil dari tabel jadwal.
✅ Lebih fleksibel, tinggal atur lewat database kapan saja.
Top comments (0)