Initial commit for combined ProjectKP
This commit is contained in:
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user