{{ $project['name'] }}

{{ $project['description'] }}

Notification

Dear {{ $project['custodian']['projectowner']['name'] }},

You have been assigned as the new custodian for the project {{ $project['name'] }}. Below are the project details and the current progress:

@php $totalWeight = isset($project['mile_stones']) && is_array($project['mile_stones']) ? array_sum(array_column($project['mile_stones'], 'weight')) : 0; $completedWeight = 0; $completedMilestones = 0; $totalMilestones = count($project['mile_stones']); $lastProgressDate = null; $firstProgressDate = null; if ($totalMilestones > 0) { foreach($project['mile_stones'] as $milestone) { $milestoneProgress = isset($milestone['project_progresses']) && is_array($milestone['project_progresses']) ? array_sum(array_column($milestone['project_progresses'], 'progress')) : 0; $completedWeight += ($milestoneProgress); if ($milestoneProgress >= 100) { $completedMilestones++; } if (isset($milestone['project_progresses']) && is_array($milestone['project_progresses'])) { foreach ($milestone['project_progresses'] as $progress) { $progressDate = \Carbon\Carbon::parse($progress['created_at']); if (is_null($lastProgressDate) || $progressDate->gt($lastProgressDate)) { $lastProgressDate = $progressDate; } if (is_null($firstProgressDate) || $progressDate->lt($firstProgressDate)) { $firstProgressDate = $progressDate; } } } } } $projectCompletion = $totalWeight > 0 ? ($completedWeight / $totalWeight) * 100 : 0; // IRBM rating logic $rating = ''; $targetDate = \Carbon\Carbon::parse($project['target_doc']); $today = \Carbon\Carbon::now(); $isOnCourse = $today->lte($targetDate); if ($today->gt($targetDate)) { // Project completion date has passed if ($projectCompletion == 100) { $daysFromLastUpdateToTarget = $targetDate->diffInDays($lastProgressDate); $totalProjectDays = $targetDate->diffInDays($firstProgressDate); $percentageDaysLeft = ($daysFromLastUpdateToTarget / $totalProjectDays) * 100; if ($percentageDaysLeft > 10) { $rating = '6 (Clearly Exceeds Set targets – beyond variance (Outstanding))'; } elseif ($percentageDaysLeft > 5) { $rating = '5 (Performance above set targets but within variance (Very Good))'; } else { $rating = '4 (Met all Agreed Set targets (Good))'; } } else { if ($projectCompletion == 0) { $rating = '1 (Nothing was accomplished (Unacceptable))'; } elseif ($projectCompletion < 50) { $rating = '2 (Performance Below set targets below variance (Inadequate))'; } elseif ($projectCompletion < 70) { $rating = '3 (Performance Below set targets but within variance (Satisfactory))'; } } } else { // Project completion date is not past if ($projectCompletion == 0) { $rating = '1 (Nothing was accomplished (Unacceptable))'; } elseif ($projectCompletion < 50) { $rating = '2 (Performance Below set targets below variance (Inadequate))'; } elseif ($projectCompletion < 70) { $rating = '3 (Performance Below set targets but within variance (Satisfactory))'; } elseif ($projectCompletion < 90) { $rating = '4 (Met all Agreed Set targets (Good))'; } elseif ($projectCompletion < 100) { $rating = '5 (Performance above set targets but within variance (Very Good))'; } else { $rating = '6 (Clearly Exceeds Set targets – beyond variance (Outstanding))'; } } $daysRemaining = $targetDate->diffInDays($today); $totalDaysElapsed = $firstProgressDate ? $today->diffInDays($firstProgressDate) : 0; $averageDailyProgress = $totalDaysElapsed > 0 ? $projectCompletion / $totalDaysElapsed : 0; $requiredDailyProgress = $daysRemaining > 0 ? (100 - $projectCompletion) / $daysRemaining : 100; $comments = [ "Keep pushing! You are almost there.", "Great progress so far! Let's finish strong.", "Stay focused and keep up the good work.", "Time is tight, but we can do it with a little more effort.", "We're on track, but let's aim to exceed our targets.", ]; $encouragement = ''; if ($isOnCourse) { if ($requiredDailyProgress > $averageDailyProgress) { $encouragement = $comments[array_rand($comments)]; } $comment = "The project is on course. There are {$daysRemaining} days left before the end of the project. {$encouragement}"; } else { $comment = "The project target date has passed."; } // Generate the chart image $chartUrl = route('generateChart', ['completed' => round($projectCompletion, 2), 'remaining' => 100 - round($projectCompletion, 2)]); @endphp

Progress Rating

Current Rating: {{ $rating }}

{{ $comment }}

Overall Project Completion: {{ round($projectCompletion, 2) }}%

@if(isset($project['mile_stones']) && is_array($project['mile_stones'])) @foreach($project['mile_stones'] as $milestone)

Objective: {{ $milestone['description'] }}.
Contributes: {{$milestone['weight']}}% of the Project

Objective Lead by: {{ $milestone['project_owner']['name'] }}. {{$milestone['project_owner']['ministry']['name']}}

Progress:

@if(isset($milestone['project_progresses']) && is_array($milestone['project_progresses'])) @php $milstone_total_progress=0; @endphp @foreach($milestone['project_progresses'] as $progress)
@php $milstone_total_progress+=$progress['progress']; @endphp

Progress: {{ round($progress['progress']/$milestone['weight']*100,2) }}% of the milestone.

{{ $progress['description']}}

@php $challenge = isset($progress['challenges']) ? $progress['challenges'] : "No registered challenges"; @endphp

Challenges:{{ $challenge }}

Updated on: {{ \Carbon\Carbon::parse($progress['created_at'])->isoFormat('dddd D MMM YYYY')}}

@if(isset($progress['evidence']) && !empty($progress['evidence'])) @php $img = "data:image/png;base64," . $progress['evidence']; $preped_imge =$base64Image = str_replace(['+', ' ', "\n", "\r", "\t"], '', $img); @endphp @endif
@endforeach @php $overal= ($milstone_total_progress/$milestone['weight'])*100; @endphp

Milestone Overall Progress: {{round($overal,2)}}%

@else

No progress recorded for this milestone.

@endif
@endforeach @else

No milestones available for this project.

@endif

Project Completion Summary

Overall Project Completion: {{ round($projectCompletion, 2) }}% of the set milestones which is {{$completedWeight}}% of the project completed.