Initial commit for combined ProjectKP

This commit is contained in:
raditarahman5-cloud
2026-06-28 15:14:51 +07:00
commit ac6c3473d4
203 changed files with 41848 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Pegawai extends Model
{
use HasFactory, SoftDeletes;
protected $table = 'pegawai';
protected $primaryKey = 'id';
protected $fillable = [
'nip',
'nama',
'jabatan',
'user_id'
];
// 1. Relasi ke User (Sudah ada)
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
/**
* 2. TAMBAHKAN INI: Relasi ke Penugasan (Many-to-Many)
* Ini supaya Pegawai tahu dia punya banyak tugas melalui tabel pivot
*/
public function penugasan()
{
return $this->belongsToMany(Penugasan::class, 'penugasan_pegawai', 'pegawai_id', 'penugasan_id');
}
}
+70
View File
@@ -0,0 +1,70 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; // WAJIB UNTUK SOFT DELETES
class Penugasan extends Model
{
use HasFactory, SoftDeletes; // Gunakan trait SoftDeletes di sini
// REVISI: Paksa nama tabel menjadi 'penugasan' (tanpa s) sesuai keinginanmu
protected $table = 'penugasan';
protected $fillable = [
'nomor_surat',
'kegiatan',
'lokasi',
'keterangan',
'lampiran',
'tanggal_mulai',
'tanggal_selesai',
'status', // Isinya nanti: 'proses', 'selesai', 'telah_ditinjau'
'status_note', // Catatan progres dari pegawai
'is_archived',
'created_by',
'approved_by',
'approved_at',
'alasan_hapus' // TAMBAHAN: Kolom untuk menyimpan alasan hapus sesuai saran KP
];
// Mengatur kolom deleted_at agar dikenali sebagai instance Carbon/Tanggal
protected $dates = ['deleted_at'];
// 1. Relasi ke Pegawai (Pivot: penugasan_pegawai)
public function petugas()
{
// Sesuaikan nama tabel pivot jika kamu juga mengubahnya nanti
return $this->belongsToMany(User::class, 'penugasan_pegawai', 'penugasan_id', 'pegawai_id');
}
public function progress()
{
return $this->hasMany(PenugasanProgress::class)->latest();
}
// 2. Relasi ke Pembuat (Admin/Kasi)
public function pembuat()
{
return $this->belongsTo(User::class, 'created_by');
}
// 3. Relasi ke Penyetuju (Superadmin/Kabid)
public function penyetuju()
{
return $this->belongsTo(User::class, 'approved_by');
}
// 4. Accessor untuk Status Dinamis (Otomatis Terlambat jika melewati deadline)
public function getStatusAttribute($value)
{
if ($value === 'proses' && !empty($this->attributes['tanggal_selesai'])) {
if (\Carbon\Carbon::now()->startOfDay()->gt(\Carbon\Carbon::parse($this->attributes['tanggal_selesai'])->startOfDay())) {
return 'terlambat';
}
}
return $value;
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PenugasanProgress extends Model
{
protected $table = 'penugasan_progress';
protected $fillable = ['penugasan_id', 'user_id', 'note', 'attachment'];
public function user()
{
return $this->belongsTo(User::class);
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Pegawai;
class UnitKerja extends Model
{
use HasFactory;
protected $table = 'unit_kerja'; // sesuaikan dengan nama tabel di migration
protected $fillable = [
'nama_unit'
];
// 🔗 Relasi: 1 unit kerja punya banyak pegawai
public function pegawai()
{
return $this->hasMany(Pegawai::class);
}
}
+84
View File
@@ -0,0 +1,84 @@
<?php
namespace App\Models;
// Import yang diperlukan
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* Kolom yang bisa diisi secara massal.
*/
protected $fillable = [
'name',
'username',
'email',
'password',
'role',
'jabatan',
];
/**
* Kolom yang disembunyikan saat data dikonversi ke JSON.
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* Casting tipe data kolom.
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
/*
|--------------------------------------------------------------------------
| RELASI ANTAR TABEL
|--------------------------------------------------------------------------
*/
/**
* Relasi 1 User ke 1 Pegawai
*/
public function pegawai()
{
return $this->hasOne(Pegawai::class, 'user_id');
}
/**
* REVISI DI SINI:
* Relasi agar Pegawai bisa melihat daftar tugas yang diberikan kepadanya.
*/
public function penugasan()
{
return $this->belongsToMany(Penugasan::class, 'penugasan_pegawai', 'pegawai_id', 'penugasan_id');
}
/**
* Relasi ke Penugasan (User sebagai pembuat)
*/
public function penugasanDibuat()
{
return $this->hasMany(Penugasan::class, 'created_by');
}
/**
* Relasi ke Penugasan (User sebagai penyetuju/admin)
*/
public function penugasanDisetujui()
{
return $this->hasMany(Penugasan::class, 'approved_by');
}
}