70 lines
2.1 KiB
PHP
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;
|
|
}
|
|
} |