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']);
}
}
Top comments (0)