Tutorial Buat Absensi Barcode Laravel

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MyrinNew
    Senior Member
    • Feb 2024
    • 5175

    #1

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










    More...
Working...