perling/app/Models/SaranTanggapan.php

140 lines
2.9 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SaranTanggapan extends Model
{
use HasFactory;
protected $table = 'SaranTanggapan';
protected $primaryKey = 'TanggapanID';
protected $fillable = [
'KegiatanID',
'Nama',
'Peran',
'NIK',
'NoTelepon',
'Email',
'Gender',
'KondisiLingkungan',
'NilaiLokal',
'Kekhawatiran',
'Harapan',
'TingkatKekhawatiran',
'FotoSelfie',
'Status',
'CatatanAdmin',
'TanggalDiajukan',
'TanggalDiproses'
];
protected $casts = [
'TanggalDiajukan' => 'datetime',
'TanggalDiproses' => 'datetime',
'TingkatKekhawatiran' => 'integer'
];
/**
* Get the activity this feedback belongs to
*/
public function informasiKegiatan()
{
return $this->belongsTo(InformasiKegiatan::class, 'KegiatanID');
}
/**
* Scope for pending feedback
*/
public function scopePending($query)
{
return $query->where('Status', 'pending');
}
/**
* Scope for approved feedback
*/
public function scopeApproved($query)
{
return $query->where('Status', 'approved');
}
/**
* Scope for rejected feedback
*/
public function scopeRejected($query)
{
return $query->where('Status', 'rejected');
}
/**
* Scope by role
*/
public function scopeByRole($query, $role)
{
return $query->where('Peran', $role);
}
/**
* Get the rating level description
*/
public function getRatingDescriptionAttribute()
{
$descriptions = [
1 => 'Sangat Khawatir',
2 => 'Khawatir',
3 => 'Netral',
4 => 'Berharap',
5 => 'Sangat Berharap'
];
return $descriptions[$this->TingkatKekhawatiran] ?? 'Tidak Diketahui';
}
/**
* Get formatted submission date
*/
public function getFormattedSubmissionDateAttribute()
{
return $this->TanggalDiajukan->format('d M Y H:i');
}
/**
* Get photo URL
*/
public function getPhotoUrlAttribute()
{
if ($this->FotoSelfie) {
return asset('storage/feedback-photos/' . $this->FotoSelfie);
}
return null;
}
/**
* Approve this feedback
*/
public function approve($adminNote = null)
{
$this->update([
'Status' => 'approved',
'CatatanAdmin' => $adminNote,
'TanggalDiproses' => now()
]);
}
/**
* Reject this feedback
*/
public function reject($adminNote = null)
{
$this->update([
'Status' => 'rejected',
'CatatanAdmin' => $adminNote,
'TanggalDiproses' => now()
]);
}
}