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']); } }

Jun 17, 2025 - 08:50
 0
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 <= $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']);
    }
}