Commit 60ff1e86 authored by Mahmoud Aglan's avatar Mahmoud Aglan

Fix dashboard crash: trainer_compensations table name + graceful fallback

- Add explicit $table = 'trainer_compensations' to TrainerCompensation
  model (Laravel resolved singular 'trainer_compensation' by default)
- Wrap TrainerDuesWidget query in try/catch so dashboard loads even if
  the compensation migration hasn't been run yet
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 19e94971
...@@ -15,6 +15,8 @@ class TrainerCompensation extends Model ...@@ -15,6 +15,8 @@ class TrainerCompensation extends Model
{ {
use BelongsToAcademy, HasUuid, SoftDeletes; use BelongsToAcademy, HasUuid, SoftDeletes;
protected $table = 'trainer_compensations';
protected $fillable = [ protected $fillable = [
'academy_id', 'academy_id',
'trainer_id', 'trainer_id',
......
...@@ -12,6 +12,11 @@ class TrainerDuesWidget extends Component ...@@ -12,6 +12,11 @@ class TrainerDuesWidget extends Component
{ {
public function render() public function render()
{ {
$totalDues = 0;
$trainerTotals = [];
$topTrainers = collect();
try {
$startOfMonth = now()->startOfMonth()->toDateString(); $startOfMonth = now()->startOfMonth()->toDateString();
$endOfMonth = now()->endOfMonth()->toDateString(); $endOfMonth = now()->endOfMonth()->toDateString();
...@@ -27,8 +32,6 @@ public function render() ...@@ -27,8 +32,6 @@ public function render()
->with('employee:id,salary_amount') ->with('employee:id,salary_amount')
->get(); ->get();
$trainerTotals = [];
foreach ($compensations as $trainerId => $comp) { foreach ($compensations as $trainerId => $comp) {
$trainerTotals[$trainerId] = ($trainerTotals[$trainerId] ?? 0) + $comp->total_amount; $trainerTotals[$trainerId] = ($trainerTotals[$trainerId] ?? 0) + $comp->total_amount;
} }
...@@ -40,16 +43,21 @@ public function render() ...@@ -40,16 +43,21 @@ public function render()
$totalDues = array_sum($trainerTotals); $totalDues = array_sum($trainerTotals);
if ($trainerTotals) {
$topTrainers = Trainer::whereIn('id', array_keys($trainerTotals)) $topTrainers = Trainer::whereIn('id', array_keys($trainerTotals))
->with('employee.person:id,name_ar,name') ->with(['employee.person:id,name_ar,name', 'person:id,name_ar,name'])
->get() ->get()
->map(fn ($t) => [ ->map(fn ($t) => [
'name' => $t->employee?->person?->name_ar ?? $t->trainer_number, 'name' => $t->employee?->person?->name_ar ?? $t->person?->name_ar ?? $t->trainer_number,
'amount' => $trainerTotals[$t->id], 'amount' => $trainerTotals[$t->id],
]) ])
->sortByDesc('amount') ->sortByDesc('amount')
->take(5) ->take(5)
->values(); ->values();
}
} catch (\Illuminate\Database\QueryException $e) {
// Table may not exist yet if migrations haven't run
}
return view('livewire.dashboard.trainer-dues-widget', [ return view('livewire.dashboard.trainer-dues-widget', [
'totalDues' => $totalDues, 'totalDues' => $totalDues,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment