Flag saluran bermasalah + pautan Call/WhatsApp

- Halaman baharu "Saluran Bermasalah": senarai semua saluran dalam DUN
  (dengan KTM & telefonnya), tanda/buang tanda bermasalah berserta
  catatan; admin DUN terhad ke DUN sendiri, superadmin semua DUN
- Dashboard: baris saluran bermasalah diserlahkan kuning berserta
  lencana BERMASALAH dan catatan
- No. telefon KTM kini ada butang "📞 Call" (tel:) dan "WhatsApp"
  (wa.me, dinormalkan ke format 60xxxxxxxxx) di dashboard dan halaman
  saluran bermasalah

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Saufi
2026-07-11 03:55:20 +08:00
parent 57c20353c7
commit 322687c1d1
11 changed files with 400 additions and 3 deletions

View File

@@ -0,0 +1,36 @@
<?php
namespace App\Models;
use App\Models\Sppm\PusatMengundi;
use App\Models\Sppm\Saluran;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class SaluranBermasalah extends Model
{
protected $table = 'saluran_bermasalah';
protected $fillable = [
'saluran_id',
'pusat_mengundi_id',
'dun_id',
'catatan',
'dilapor_oleh_user_id',
];
public function saluran(): BelongsTo
{
return $this->belongsTo(Saluran::class, 'saluran_id');
}
public function pusatMengundi(): BelongsTo
{
return $this->belongsTo(PusatMengundi::class, 'pusat_mengundi_id');
}
public function dilaporOleh(): BelongsTo
{
return $this->belongsTo(User::class, 'dilapor_oleh_user_id');
}
}

View File

@@ -30,6 +30,36 @@ class PetugasPermohonan extends Model
return $this->belongsTo(Dun::class, 'dun_id');
}
/**
* No. telefon dalam digit sahaja (untuk pautan tel:).
*/
public function telefonDigits(): ?string
{
$digit = preg_replace('/\D/', '', (string) $this->no_telefon);
return $digit !== '' ? $digit : null;
}
/**
* Pautan WhatsApp (wa.me) normalkan ke format antarabangsa Malaysia.
*/
public function whatsappUrl(): ?string
{
$digit = $this->telefonDigits();
if ($digit === null) {
return null;
}
if (str_starts_with($digit, '0')) {
$digit = '6'.$digit;
} elseif (! str_starts_with($digit, '60')) {
$digit = '60'.$digit;
}
return 'https://wa.me/'.$digit;
}
public function assignments(): HasMany
{
return $this->hasMany(PetugasAssignment::class, 'permohonan_id');

View File

@@ -3,10 +3,22 @@
namespace App\Models\Sppm;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Saluran extends Model
{
protected $connection = 'sppm';
protected $table = 'saluran';
protected $guarded = [];
public function pusatMengundi(): BelongsTo
{
return $this->belongsTo(PusatMengundi::class, 'pusat_mengundi_id');
}
public function assignments(): HasMany
{
return $this->hasMany(PetugasAssignment::class, 'saluran_id');
}
}