Tutorial Buat Absensi Barcode Laravel
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->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 = [ '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() public function scanBarcode(Request $request) { // Cari data siswa berdasarkan barcode yang discan $student = Student::where('barcode', $request->barcode)->first(); if (!$student) { return response()->json(['status' => 'notfound']); } $now = Carbon::now(); $today = $now->toDateString(); $time = $now->format('H:i'); // Ambil jadwal dari database (asumsikan hanya ada 1 record jadwal, atau nanti bisa pakai filter) $jadwal = Jadwal::first(); if (!$jadwal) { return response()->json(['status' => 'failed', 'message' => 'Jadwal belum diatur di database']); } // Cek apakah saat ini termasuk jam masuk $isMasuk = ( ($time >= $jadwal->masuk_pagi_start && $time masuk_pagi_end) || ($time >= $jadwal->masuk_siang_start && $time masuk_siang_end) ); // Cek apakah saat ini termasuk jam pulang $isPulang = ( ($time >= $jadwal->pulang_pagi_start && $time pulang_pagi_end) || ($time >= $jadwal->pulang_siang_start && $time pulang_siang_end) ); // Cek absensi hari ini $absen = Absensi::where('student_id', $student->id)->whereDate('created_at', $today)->first(); 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']); } } 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']); } } else { return response()->json(['status' => 'failed', 'message' => 'Diluar jam absensi']); } }

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->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 = [
'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()
public function scanBarcode(Request $request)
{
// Cari data siswa berdasarkan barcode yang discan
$student = Student::where('barcode', $request->barcode)->first();
if (!$student) {
return response()->json(['status' => 'notfound']);
}
$now = Carbon::now();
$today = $now->toDateString();
$time = $now->format('H:i');
// Ambil jadwal dari database (asumsikan hanya ada 1 record jadwal, atau nanti bisa pakai filter)
$jadwal = Jadwal::first();
if (!$jadwal) {
return response()->json(['status' => 'failed', 'message' => 'Jadwal belum diatur di database']);
}
// Cek apakah saat ini termasuk jam masuk
$isMasuk = (
($time >= $jadwal->masuk_pagi_start && $time <= $jadwal->masuk_pagi_end) ||
($time >= $jadwal->masuk_siang_start && $time <= $jadwal->masuk_siang_end)
);
// Cek apakah saat ini termasuk jam pulang
$isPulang = (
($time >= $jadwal->pulang_pagi_start && $time <= $jadwal->pulang_pagi_end) ||
($time >= $jadwal->pulang_siang_start && $time <= $jadwal->pulang_siang_end)
);
// Cek absensi hari ini
$absen = Absensi::where('student_id', $student->id)->whereDate('created_at', $today)->first();
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']);
}
}
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']);
}
}
else {
return response()->json(['status' => 'failed', 'message' => 'Diluar jam absensi']);
}
}