select('m_proyek.*', 'm_type_proyek.is_multiLocation') ->get(); foreach ($projects as $project) { if ($project->is_multiLocation == 1) { // untuk project multi location $versionGantt = VersionGantt::join('m_proyek', 'm_version_gantt.proyek_id', 'm_proyek.id') ->select('m_version_gantt.*') ->where('m_version_gantt.proyek_id', $project->id) ->get(); foreach ($versionGantt as $key => $gantt) { $hierarchy = HierarchyFtth::where('id',$gantt->hierarchy_ftth_id)->count(); // Perhitungan jika project memiliki gantt tetapi tidak ada hierarchy (Kasus perpindahan tipe project dari single location ke multi location) if($hierarchy == 0){ $progress[$key] = 0; } else { $progress[$key] = $gantt->progress; } } $actualProgress = round(array_sum($progress) / count($versionGantt), 2); $progress = array(); // unset/kosongkan array progress untuk project selanjutnya } else { // untuk project single location $gantt = MasterFunctionsHelper::getLatestGantt($project->id); isset($gantt['last_gantt_id']) ? $lastGantt = $gantt['last_gantt_id'] : $lastGantt = 0; $arr = [ 'project_id' => $project->id, 'gantt_id' => $lastGantt, 'periode' => 'week' ]; // kondisi jika tidak ada gantt_id if (empty($arr['gantt_id'])) { $actualProgress = 0; } else { $project->scurve = MasterFunctionsHelper::getSCurve(collect($arr)); $actualArray = $project->scurve[0]['data']['percentageReal']; $actualProgress = !empty($actualArray) ? round(end($actualArray), 2) : 0; } } Project::where('id', $project->id)->update(['persentase_progress' => $actualProgress]); } } }