@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;
$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 < 80) {
$rating = '3 (Performance Below set targets but within variance (Satisfactory))';
}
}
} else {
// Project completion date is not past
if ($projectCompletion < 100) {
$rating = 'Project on course, rating pending.';
} else {
$rating = 'Project on course. Rating 4: All set objectives met.';
}
}
$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
Progression 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.