Files
2026-06-28 15:14:51 +07:00

70 lines
2.1 KiB
PHP

<?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;
}
}