update : API siswa, devices, absensi siswa
This commit is contained in:
parent
c3776bea0b
commit
4c77ade45f
|
@ -1,49 +1,43 @@
|
||||||
<?php
|
<?php
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
use App\Models\AbsensiSiswa;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\AbsensiSiswa;
|
||||||
|
|
||||||
class PresensiController extends Controller
|
class AbsensiSiswaApiController extends Controller
|
||||||
|
{
|
||||||
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
public function indexSiswa(){
|
|
||||||
return view ('admin.presensi.siswa');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function indexGuru(){
|
|
||||||
return view('admin.presensi.guru');
|
|
||||||
}
|
|
||||||
public function store(Request $request){
|
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
'id_siswa' => 'required|exists:siswa,id',
|
'id_siswa' => 'required|exists:siswa,id',
|
||||||
'waktu_absen' => 'required|date_format:Y-m-d H:i:s',
|
'devices_id' => 'required|exists:devices,id',
|
||||||
|
'waktu' => 'required|date_format:Y-m-d H:i:s',
|
||||||
'status' => 'required|in:hadir,tidak_hadir',
|
'status' => 'required|in:hadir,tidak_hadir',
|
||||||
'device_id' => 'required|exists:devices,id'
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$tanggal = date('Y-m-d', strtotime($validated['waktu_absen']));
|
$tanggal = date('Y-m-d', strtotime($validated['waktu']));
|
||||||
|
|
||||||
$sudahAbsen = AbsensiSiswa::where('id_siswa', $validated['id_siswa'])
|
$sudahAbsen = AbsensiSiswa::where('id_siswa', $validated['id_siswa'])
|
||||||
->whereDate('waktu_absen', $tanggal)
|
->whereDate('waktu', $tanggal)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
if ($sudahAbsen) {
|
if ($sudahAbsen) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'Siswa sudah absen pada tanggal ini'
|
'message' => 'Siswa sudah absen pada tanggal ini'
|
||||||
]);
|
], 409);
|
||||||
}
|
}
|
||||||
|
|
||||||
$absensi = AbsensiSiswa::create([
|
$absensi = AbsensiSiswa::create([
|
||||||
'id_siswa' => $validated['id_siswa'],
|
'id_siswa' => $validated['id_siswa'],
|
||||||
'waktu_absen' => $validated['waktu_absen'],
|
'waktu' => $validated['waktu'],
|
||||||
'status' => $validated['status'],
|
'status' => $validated['status'],
|
||||||
'devices_id' => $validated['device_id'],
|
'id_devices' => $validated['devices_id'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'Absensi berhasil dicatat',
|
'message' => 'Absensi berhasil dicatat',
|
||||||
'data' => $absensi
|
'data' => $absensi
|
||||||
], 200);
|
], 201);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Devices;
|
||||||
|
|
||||||
|
class DevicesApiController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$devices = Devices::with(['kelas', 'ruangan'])->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'data' => $devices
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Siswa;
|
||||||
|
|
||||||
|
class SiswaApiController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$siswa = Siswa::with(['kelas', 'jurusan'])->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'data' => $siswa
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\AbsensiGuru;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class AbsensiGuruController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$absensi = AbsensiGuru::with('guru')->latest()->get();
|
||||||
|
return view('admin.presensi.guru', compact('absensi'));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\AbsensiSiswa;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class AbsensiSiswaController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$absensi = AbsensiSiswa::with('siswa')->latest()->get();
|
||||||
|
return view('admin.presensi.siswa', compact('absensi'));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class AbsensiGuru extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
protected $table = 'absensi_guru';
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'id_guru',
|
||||||
|
'id_devices',
|
||||||
|
'waktu',
|
||||||
|
'status',
|
||||||
|
];
|
||||||
|
|
||||||
|
//Relasi ke tabel devices
|
||||||
|
public function devices()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Device::class, 'id_devices');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Relasi ke tabel siswa
|
||||||
|
public function siswa()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Siswa::class, 'id_guru');
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,14 +13,15 @@ class AbsensiSiswa extends Model
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'id_siswa',
|
'id_siswa',
|
||||||
'waktu_absen',
|
'id_devices',
|
||||||
|
'waktu',
|
||||||
'status',
|
'status',
|
||||||
];
|
];
|
||||||
|
|
||||||
//Relasi ke tabel devices
|
//Relasi ke tabel devices
|
||||||
public function devices()
|
public function devices()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Device::class, 'devices_id');
|
return $this->belongsTo(Device::class, 'id_devices');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relasi ke tabel siswa
|
// Relasi ke tabel siswa
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class Device extends Model
|
|
||||||
{
|
|
||||||
protected $fillable = ['nama_device', 'kelas_id'];
|
|
||||||
|
|
||||||
public function kelas(){
|
|
||||||
return $this->belongsTo(Kelas::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function absensi(){
|
|
||||||
return $this->hasMany(AbsensiSiswa::class, 'device_id');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Devices extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['nama_device', 'id_kelas', 'id_ruangan'];
|
||||||
|
|
||||||
|
public function kelas(){
|
||||||
|
return $this->belongsTo(Kelas::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function ruangan(){
|
||||||
|
return $this->belongsTo(Ruangan::class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ public function up(): void
|
||||||
Schema::create('absensi_guru', function (Blueprint $table) {
|
Schema::create('absensi_guru', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignId('id_guru')->constrained('guru')->onDelete('cascade');
|
$table->foreignId('id_guru')->constrained('guru')->onDelete('cascade');
|
||||||
$table->date('tanggal');
|
$table->date('waktu');
|
||||||
$table->string('status');
|
$table->string('status');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|
|
@ -13,11 +13,10 @@ public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('devices', function (Blueprint $table) {
|
Schema::create('devices', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->string('devices_id')->unique();
|
$table->string('nama_device')->unique();
|
||||||
$table->unsignedBigInteger('kelas_id');
|
$table->foreignId('id_kelas')->constrained('kelas')->onDelete('cascade');
|
||||||
|
$table->foreignId('id_ruangan')->constrained('ruangan')->onDelete('cascade');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|
||||||
$table->foreign('kelas_id')->references('id')->on('kelas')->onDelete('cascade');
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,11 @@ public function up(): void
|
||||||
Schema::create('absensi_siswa', function (Blueprint $table) {
|
Schema::create('absensi_siswa', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignId('id_siswa')->constrained('siswa')->onDelete('cascade');
|
$table->foreignId('id_siswa')->constrained('siswa')->onDelete('cascade');
|
||||||
$table->timestamp('waktu_absen');
|
$table->foreignId('id_devices')->nullable()->constrained('devices')->onDelete('set null');
|
||||||
|
$table->timestamp('waktu');
|
||||||
$table->string('status');
|
$table->string('status');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|
||||||
$table->foreignId('device_id')->nullable()->constrained('devices')->onDelete('set null');
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ public function run(): void
|
||||||
UserTableSeeder::class,
|
UserTableSeeder::class,
|
||||||
JurusanSeeder::class,
|
JurusanSeeder::class,
|
||||||
KelasSeeder::class,
|
KelasSeeder::class,
|
||||||
|
RuanganSeeder::class,
|
||||||
|
DevicesSeeder::class,
|
||||||
SiswaTableSeeder::class,
|
SiswaTableSeeder::class,
|
||||||
StatusSeeder::class,
|
StatusSeeder::class,
|
||||||
GuruSeeder::class
|
GuruSeeder::class
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Models\Devices;
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class DevicesSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
Devices::insert([
|
||||||
|
[
|
||||||
|
'nama_device' => 'R_Lab_TKK',
|
||||||
|
'id_kelas' => 1, // Referencing Kelas ID
|
||||||
|
'id_ruangan' => 1, // Referencing Ruangan ID
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'nama_device' => 'R_Lab_TIF',
|
||||||
|
'id_kelas' => 2, // Referencing Kelas ID
|
||||||
|
'id_ruangan' => 2, // Referencing Ruangan ID
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Models\Ruangan;
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class RuanganSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
Ruangan::insert([
|
||||||
|
[
|
||||||
|
'nama_ruangan' => 'Lab_TKK',
|
||||||
|
'id_kelas' => 1, // Referencing Kelas ID
|
||||||
|
'id_jurusan' => 1, // Referencing Jurusan ID
|
||||||
|
'relay_state' => 'off',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'nama_ruangan' => 'Lab_TIF',
|
||||||
|
'id_kelas' => 2, // Referencing Kelas ID
|
||||||
|
'id_jurusan' => 2, // Referencing Jurusan ID
|
||||||
|
'relay_state' => 'off',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,10 @@
|
||||||
use App\Http\Controllers\SiswaController;
|
use App\Http\Controllers\SiswaController;
|
||||||
use App\Http\Controllers\API\BellController;
|
use App\Http\Controllers\API\BellController;
|
||||||
use App\Http\Controllers\AnnouncementController;
|
use App\Http\Controllers\AnnouncementController;
|
||||||
|
use App\Http\Controllers\Api\DevicesApiController;
|
||||||
|
use App\Http\Controllers\Api\SiswaApiController;
|
||||||
|
use App\Http\Controllers\Api\AbsensiSiswaApiController;
|
||||||
|
|
||||||
|
|
||||||
Route::prefix('bel')->group(function () {
|
Route::prefix('bel')->group(function () {
|
||||||
Route::post('/ring', [BelController::class, 'ring'])->name('api.bel.ring');
|
Route::post('/ring', [BelController::class, 'ring'])->name('api.bel.ring');
|
||||||
|
@ -42,8 +46,8 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
#Presensi
|
#Presensi
|
||||||
Route::post('/presensi', [PresensiController::class, 'store']);
|
|
||||||
|
|
||||||
Route::prefix('admin')->group(function () {
|
Route::get('/siswa', [SiswaApiController::class, 'index']);
|
||||||
Route::apiResource('/siswa', SiswaController::class)->only(['index', 'store']);
|
Route::get('/devices', [DevicesApiController::class, 'index']);
|
||||||
});
|
|
||||||
|
Route::post('/absensi-siswa', [AbsensiSiswaApiController::class, 'store']);
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\AbsensiGuruController;
|
||||||
|
use App\Http\Controllers\AbsensiSiswaController;
|
||||||
use App\Http\Controllers\AdminController;
|
use App\Http\Controllers\AdminController;
|
||||||
use App\Http\Controllers\BelController;
|
use App\Http\Controllers\BelController;
|
||||||
use App\Http\Controllers\GuruController;
|
use App\Http\Controllers\GuruController;
|
||||||
|
@ -14,6 +16,8 @@
|
||||||
use App\Http\Controllers\AnnouncementController;
|
use App\Http\Controllers\AnnouncementController;
|
||||||
use App\Http\Controllers\RuanganController;
|
use App\Http\Controllers\RuanganController;
|
||||||
use App\Http\Controllers\BellHistoryController;
|
use App\Http\Controllers\BellHistoryController;
|
||||||
|
use App\Models\AbsensiGuru;
|
||||||
|
use App\Models\AbsensiSiswa;
|
||||||
|
|
||||||
// Public routes
|
// Public routes
|
||||||
Route::get('/', [IndexController::class, 'index'])->name('index');
|
Route::get('/', [IndexController::class, 'index'])->name('index');
|
||||||
|
@ -87,10 +91,14 @@
|
||||||
'update' => 'admin.ruangan.update',
|
'update' => 'admin.ruangan.update',
|
||||||
'destroy' => 'admin.ruangan.destroy',
|
'destroy' => 'admin.ruangan.destroy',
|
||||||
]);
|
]);
|
||||||
// Presensi
|
// Presensi Siswa
|
||||||
Route::controller(PresensiController::class)->group(function () {
|
Route::controller(AbsensiSiswaController::class)->group(function () {
|
||||||
Route::get('/presensi/siswa', 'indexSiswa')->name('admin.presensi.siswa');
|
Route::get('/presensi/siswa', 'index')->name('admin.presensi.siswa');
|
||||||
Route::get('/presensi/guru', 'indexGuru')->name('admin.presensi.guru');
|
});
|
||||||
|
|
||||||
|
// Presensi Guru
|
||||||
|
Route::controller(AbsensiGuruController::class)->group(function () {
|
||||||
|
Route::get('/presensi/guru', 'index')->name('admin.presensi.guru');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Laporan
|
// Laporan
|
||||||
|
|
Loading…
Reference in New Issue