From fb308af91bb7ec19652c97665ec2b8554df06b76 Mon Sep 17 00:00:00 2001 From: ibnu Date: Mon, 4 Dec 2023 15:57:52 +0700 Subject: [PATCH] update calculate progress hierarchy --- .../Commands/CalculateProgressGantt.php | 6 +- app/Helpers/MasterFunctionsHelper.php | 480 +++++++++++++----- 2 files changed, 368 insertions(+), 118 deletions(-) diff --git a/app/Console/Commands/CalculateProgressGantt.php b/app/Console/Commands/CalculateProgressGantt.php index 3e9f81c..5ac1e5f 100644 --- a/app/Console/Commands/CalculateProgressGantt.php +++ b/app/Console/Commands/CalculateProgressGantt.php @@ -19,10 +19,10 @@ class CalculateProgressGantt extends Command $hierarchy = HierarchyFtth::findOrFail($hierarchy_id); $project = Project::find($hierarchy->project_id); - $data = MasterFunctionsHelper::CalculateSCurve(null, $hierarchy_id); + $data = MasterFunctionsHelper::calculateSCurveForProgressTree($hierarchy_id); - $hierarchy->bobot_planning = end($data[0]['data']['percentagePlan']); - $hierarchy->progress = end($data[0]['data']['percentageReal']); + $hierarchy->bobot_planning = 100; + $hierarchy->progress =((int) end($data[0]['data']['percentageReal']) / (int) end($data[0]['data']['percentagePlan'])) * 100; $hierarchy->save(); } } diff --git a/app/Helpers/MasterFunctionsHelper.php b/app/Helpers/MasterFunctionsHelper.php index dfc4d89..acf3f69 100644 --- a/app/Helpers/MasterFunctionsHelper.php +++ b/app/Helpers/MasterFunctionsHelper.php @@ -1306,18 +1306,18 @@ class MasterFunctionsHelper return $dataFinal; } - public function calculateSCurve($projectId, $hierarchyId = null) + public function calculateSCurve($projectId) { DB::enableQueryLog(); - $hierarchyGantts = []; - if (isset($hierarchyId)) { - $hierarchy = HierarchyFtth::findOrFail($hierarchyId); - $projectId = $hierarchy->project_id; - if (isset($hierarchy)) { - $hierarchyGantts = VersionGantt::where('hierarchy_ftth_id', $hierarchyId)->get()->toArray(); - } - } + // $hierarchyGantts = []; + // if (isset($hierarchyId)) { + // $hierarchy = HierarchyFtth::findOrFail($hierarchyId); + // $projectId = $hierarchy->project_id; + // // if (isset($hierarchy)) { + // // $hierarchyGantts = VersionGantt::where('hierarchy_ftth_id', $hierarchyId)->get()->toArray(); + // // } + // } $dataFinal = []; $dataPayload = []; @@ -1333,9 +1333,9 @@ class MasterFunctionsHelper } if ($dataHeader) { - $totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $projectId)->sum("rencana_biaya"); + // $totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $projectId)->sum("rencana_biaya"); } else { - $totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $projectId)->sum("rencana_biaya"); + // $totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $projectId)->sum("rencana_biaya"); } $minDate = $dataProject->mulai_proyek; @@ -1382,41 +1382,41 @@ class MasterFunctionsHelper $tempDate[] = array($dt->format("Y-m-d")); $dataPlanM = []; $dataActualM = []; - if (count($hierarchyGantts) > 0) { - foreach ($hierarchyGantts as $key => $gantt) { - $dataPlanM[] = DB::table('m_activity') - ->where('type_activity', 'task') - ->where('bobot_planning', '>', 0) - ->where('version_gantt_id', $gantt['id']) - ->whereDate('planned_start', '<=', $loopDay) - ->whereDate('planned_end', '>=', $loopDay) - ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end') - ->get()->toArray(); - - $dataActualM[] = DB::table('report_activity_material as ram') - ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id') - ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name', - DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'), - DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'), - DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'), - DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report') - ) - ->where('ram.report_date', $loopDay) - ->where('ma.version_gantt_id', $gantt['id']) - ->get()->toArray(); - } - } else { + // if (count($hierarchyGantts) > 0) { + // foreach ($hierarchyGantts as $key => $gantt) { + // $dataPlanM[] = DB::table('m_activity') + // ->where('type_activity', 'task') + // ->where('bobot_planning', '>', 0) + // ->where('version_gantt_id', $gantt['id']) + // ->whereDate('planned_start', '<=', $loopDay) + // ->whereDate('planned_end', '>=', $loopDay) + // ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end') + // ->get()->toArray(); + + // $dataActualM[] = DB::table('report_activity_material as ram') + // ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id') + // ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name', + // DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'), + // DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'), + // DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'), + // DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report') + // ) + // ->where('ram.report_date', $loopDay) + // ->where('ma.version_gantt_id', $gantt['id']) + // ->get()->toArray(); + // } + // } else { - $dataPlanM[] = DB::table('m_activity') + $dataPlanM = DB::table('m_activity') ->where('type_activity', 'task') ->where('bobot_planning', '>', 0) ->where('proyek_id', $projectId) ->whereDate('planned_start', '<=', $loopDay) ->whereDate('planned_end', '>=', $loopDay) ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end') - ->get()->toArray(); + ->get(); - $dataActualM[] = DB::table('report_activity_material as ram') + $dataActualM = DB::table('report_activity_material as ram') ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id') ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name', DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'), @@ -1426,8 +1426,8 @@ class MasterFunctionsHelper ) ->where('ram.report_date', $loopDay) ->where('ma.proyek_id', $projectId) - ->get()->toArray(); - } + ->get(); + // } $dataActivityPlan = []; $dataActivityActual = []; @@ -1442,90 +1442,340 @@ class MasterFunctionsHelper $dateWeek[] = [$loopDay]; } // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek; - if (count($dataPlanM) > 0 && count($dataPlanM[0]) > 0) { - foreach ($dataPlanM as $keyPlanM) { - # hitung untuk persentase progress planning - // if($keyPlanM->duration == 0){ - // $duration = 2; - // Tanggal awal - $startDate = new DateTime($keyPlanM[0]->planned_start); - // Tanggal akhir - $endDate = new DateTime($keyPlanM[0]->planned_end); - // Menghitung selisih hari - $interval = $startDate->diff($endDate); - // Mengambil hasil selisih hari - $duration = (int) $interval->days+1; - // }else{ - // $duration = $keyPlanM->duration + 2; - // } - // $startPlan = new DateTime($keyPlanM->planned_start); - // $endPlan = new DateTime($keyPlanM->planned_end); - // $interval = $startPlan->diff($endPlan); - - // // Mengambil hasil selisih hari - // $duration = $interval->days; - // 2023-07-26 - $progressPlanWeek = $keyPlanM[0]->bobot_planning / $duration; - $dataActivityPlan[] = array( - 'progressPlanDay' => $progressPlanWeek, - 'name' => $keyPlanM[0]->name, - 'bobot_p' => $keyPlanM[0]->bobot_planning, - 'duration' => $keyPlanM[0]->duration - ); - $tmpProgressPlanWeek += $progressPlanWeek; - } - } + // if (count($dataPlanM) > 0 && count($dataPlanM[0]) > 0) { + foreach ($dataPlanM as $keyPlanM) { + # hitung untuk persentase progress planning + // if($keyPlanM->duration == 0){ + // $duration = 2; + // Tanggal awal + $startDate = new DateTime($keyPlanM->planned_start); + // Tanggal akhir + $endDate = new DateTime($keyPlanM->planned_end); + // Menghitung selisih hari + $interval = $startDate->diff($endDate); + // Mengambil hasil selisih hari + $duration = (int) $interval->days+1; + // }else{ + // $duration = $keyPlanM->duration + 2; + // } + // $startPlan = new DateTime($keyPlanM->planned_start); + // $endPlan = new DateTime($keyPlanM->planned_end); + // $interval = $startPlan->diff($endPlan); + + // // Mengambil hasil selisih hari + // $duration = $interval->days; + // 2023-07-26 + $progressPlanWeek = $keyPlanM->bobot_planning / $duration; + $dataActivityPlan[] = array( + 'progressPlanDay' => $progressPlanWeek, + 'name' => $keyPlanM->name, + 'bobot_p' => $keyPlanM->bobot_planning, + 'duration' => $keyPlanM->duration + ); + $tmpProgressPlanWeek += $progressPlanWeek; + } + // } // hitung progress actual - if (count($dataActualM) > 0 && count($dataActualM[0]) > 0) { - foreach ($dataActualM as $keyActualM) { - # hitung untuk persentase progress actual - // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100; - // jika total report > dari planning - if($keyActualM[0]->sum_qty_actual > $keyActualM[0]->qty_plan){ - $progressActualWeek = (($keyActualM[0]->qty_actual / $keyActualM[0]->sum_qty_actual) * 100) *$keyActualM[0]->bobot_planning/100; - }else{ - // jika total report < dari planning - // $progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning; - if($keyActualM[0]->qty_actual == 0){ - $progressActualWeek = 0; + // if (count($dataActualM) > 0 && count($dataActualM[0]) > 0) { + foreach ($dataActualM as $keyActualM) { + # hitung untuk persentase progress actual + // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100; + // jika total report > dari planning + if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){ + $progressActualWeek = (($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) *$keyActualM->bobot_planning/100; }else{ - $progressActualWeek = ($keyActualM[0]->qty_actual / $keyActualM[0]->qty_plan) * $keyActualM[0]->bobot_planning; + // jika total report < dari planning + // $progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning; + if($keyActualM->qty_actual == 0){ + $progressActualWeek = 0; + }else{ + $progressActualWeek = ($keyActualM->qty_actual / $keyActualM->qty_plan) * $keyActualM->bobot_planning; + } + } + if($keyActualM->status_activity == 'done'){ + // if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){ + + // } + // if($progressActualWeek > $keyActualM->bobot_planning){ + // $progressActualWeek = $keyActualM->bobot_planning; + // }else if($keyActualM->qty_actual == 0){ + // $progressActualWeek = $keyActualM->bobot_planning; + // }else if($keyActualM->qty_plan == $keyActualM->sum_qty_actual){ + $progressActualWeek = $keyActualM->bobot_planning / $keyActualM->count_report; + // }else { + // $progressActualWeek = $progressActualWeek; + // } + // $progressActualWeek = $progressActualWeek > $keyActualM->bobot_planning ? $keyActualM->bobot_planning : $progressActualWeek; + // jika report lebih dari 1 x, maka harusnya di bagi sabanyak jumlah report, + // contoh ada 3 report, report ke 1 adalah 5 maka 100/3 dan di looping } + else{ + $progressActualWeek = $progressActualWeek > ($keyActualM->bobot_planning*95)/100 ? ($keyActualM->bobot_planning*95)/100 : $progressActualWeek; + } + $dataActivityActual[] = array( + 'progressActualDay' => $progressActualWeek, + 'qty_act' => $keyActualM->qty_actual, + 'bobot_p' => $keyActualM->bobot_planning, + 'qty_plan' => $keyActualM->qty_plan, + 'status_activity' => $keyActualM->status_activity, + 'sum_qty_actual' => $keyActualM->sum_qty_actual, + 'name' => $keyActualM->name + ); + + $tmpProgressActualWeek += $progressActualWeek; } - if($keyActualM[0]->status_activity == 'done'){ - // if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){ + // } + $dataActivityPlanDate[] = array( + "date" => $loopDay, + "statusWeek" => new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday') ? true : false, + "activity-plan" => $dataActivityPlan, + "activity-actual" => $dataActivityActual, + "tmpProgressActualWeek" => $tmpProgressActualWeek, + "progressPlanWeek" => $tmpProgressPlanWeek + ); + + } + + $dataFinal[] = array( + // "date" => $dateWeek, + "proyek_name" => $dataProject->nama, + "data" => ["date" => $dateWeek, + "percentagePlan" => $progressPlanKomulatifWeek, + "percentageReal" => $progressActualKomulatifWeek + // "data_details" => $dataActivityPlanDate + ] + ); + + return $dataFinal; + } + + public function calculateSCurveForProgressTree($hierarchyId) + { + DB::enableQueryLog(); + + // $hierarchyGantts = []; + if (isset($hierarchyId)) { + $hierarchy = HierarchyFtth::findOrFail($hierarchyId); + $projectId = $hierarchy->project_id; + // if (isset($hierarchy)) { + // $hierarchyGantts = VersionGantt::where('hierarchy_ftth_id', $hierarchyId)->get()->toArray(); + // } + } + + $dataFinal = []; + $dataPayload = []; + $dataPayload['period'] = 'week'; + $totalACWP = 0; + $totalBCWP = 0; + $tempPercentage = []; + + $dataProject = Project::find($projectId); + $dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $projectId)->first(); + if (isset($dataPayload['end_date']) && $dataPayload['end_date'] > $dataProject->akhir_proyek) { + $dataPayload['end_date'] = $dataProject->akhir_proyek; + } + + if ($dataHeader) { + // $totalRencanaBudget = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $projectId)->sum("rencana_biaya"); + } else { + // $totalRencanaBudget = Activity::whereNull('parent_id')->where("proyek_id", $projectId)->sum("rencana_biaya"); + } + + $minDate = $dataProject->mulai_proyek; + + $begin = new \DateTime($minDate); + $begin = $begin->modify('-1 day'); + if (isset($dataPayload['end_date'])) { + $maxDate = $dataPayload['end_date']; + $end = new \DateTime($maxDate . ' Friday'); + // $end->modify('next Friday'); + // $end->modify('next Friday'); + /* $interval = \DateInterval::createFromDateString('1 day'); */// should be using this but its bugged + $interval = new \DateInterval('P1D'); + } else { + $maxDate = $dataProject->akhir_proyek; + $end = new \DateTime($maxDate); + $end = new \DateTime($end->format('Y-m-d') . ' Friday'); + // $end->modify('next Friday'); + // $end->modify('next Friday'); + $interval = new \DateInterval('P1D'); + } + $period = new \DatePeriod($begin, $interval, $end); + + // $arr_ActualM = []; + $tempDate = []; + // $tempPercentagePlan = []; + // $tempPercentagePlanWhr = []; + // $tempPercentageReal = []; + // $tempTtlPercentPlan = 0; + // $tempTtlPercentActual = 0; + + // $currentACWP = 0; + // $currentBCWP = 0; + $dataActivityPlanDate = []; + $progressPlanKomulatifWeek = []; + $progressActualKomulatifWeek = []; + $dateWeek = []; + $tmpProgressPlanWeek = 0; + $tmpProgressActualWeek = 0; + foreach ($period as $dt) { + $loopDay = $dt->format("Y-m-d"); + //new \Datetime($dt->format("Y-m-d")); + // $minSevenDays = $minSevenDays->modify('-7 day')->format("Y-m-d"); + $tempDate[] = array($dt->format("Y-m-d")); + $dataPlanM = []; + $dataActualM = []; + // if (count($hierarchyGantts) > 0) { + // foreach ($hierarchyGantts as $key => $gantt) { + // $dataPlanM[] = DB::table('m_activity') + // ->where('type_activity', 'task') + // ->where('bobot_planning', '>', 0) + // ->where('version_gantt_id', $gantt['id']) + // ->whereDate('planned_start', '<=', $loopDay) + // ->whereDate('planned_end', '>=', $loopDay) + // ->select('name', 'bobot_planning', 'biaya_actual', 'duration', 'persentase_progress', 'id', 'planned_start', 'planned_end') + // ->get()->toArray(); + + // $dataActualM[] = DB::table('report_activity_material as ram') + // ->join('m_activity as ma', 'ma.id', '=', 'ram.activity_id') + // ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name', + // DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'), + // DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'), + // DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'), + // DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report') + // ) + // ->where('ram.report_date', $loopDay) + // ->where('ma.version_gantt_id', $gantt['id']) + // ->get()->toArray(); + // } + // } else { + + $dataPlanM = DB::table('m_hierarchy_ftth as mhf') + ->join('m_version_gantt as mvg', 'mvg.hierarchy_ftth_id', '=', 'mhf.id') + ->join('m_activity as ma', 'ma.version_gantt_id', '=', 'mvg.id') + ->where('ma.type_activity', 'task') + ->where('ma.bobot_planning', '>', 0) + ->where('mhf.project_id', $projectId) + ->whereDate('planned_start', '<=', $loopDay) + ->whereDate('planned_end', '>=', $loopDay) + ->select('ma.name', 'ma.bobot_planning', 'ma.biaya_actual', 'ma.duration', 'ma.persentase_progress', 'ma.id', 'ma.planned_start', 'ma.planned_end') + ->get(); + + $dataActualM = DB::table('m_hierarchy_ftth as mhf') + ->join('m_version_gantt as mvg', 'mvg.hierarchy_ftth_id', '=', 'mhf.id') + ->join('m_activity as ma', 'ma.version_gantt_id', '=', 'mvg.id') + ->join('report_activity_material as ram', 'ram.activity_id', '=', 'ma.id') + ->select('ram.activity_id', 'ram.qty as qty_actual', 'ma.bobot_planning', 'ma.name', + DB::raw('(SELECT SUM(amta.qty_planning) FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS qty_plan'), + DB::raw('(SELECT SUM(ram.qty) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS sum_qty_actual'), + DB::raw('(SELECT DISTINCT status_activity FROM assign_material_to_activity amta WHERE amta.activity_id = ram.activity_id) AS status_activity'), + DB::raw('(SELECT COUNT(id) FROM report_activity_material ram WHERE ram.activity_id = ma.id) AS count_report') + ) + ->where('ram.report_date', $loopDay) + // ->where('ma.proyek_id', $projectId) + ->where('mhf.project_id', $projectId) + ->get(); + // } + + $dataActivityPlan = []; + $dataActivityActual = []; + $today = new DateTime(); + if (new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday')){ + + $progressPlanKomulatifWeek[] += round($tmpProgressPlanWeek,2); + if (new \DateTime($loopDay) < $today) { + // $tempPercentageReal[] = round($tempTtlPercentActual, 2); + $progressActualKomulatifWeek[] += round($tmpProgressActualWeek,2); + } + $dateWeek[] = [$loopDay]; + } + // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek; + // if (count($dataPlanM) > 0 && count($dataPlanM[0]) > 0) { + foreach ($dataPlanM as $keyPlanM) { + # hitung untuk persentase progress planning + // if($keyPlanM->duration == 0){ + // $duration = 2; + // Tanggal awal + $startDate = new DateTime($keyPlanM->planned_start); + // Tanggal akhir + $endDate = new DateTime($keyPlanM->planned_end); + // Menghitung selisih hari + $interval = $startDate->diff($endDate); + // Mengambil hasil selisih hari + $duration = (int) $interval->days+1; + // }else{ + // $duration = $keyPlanM->duration + 2; // } - // if($progressActualWeek > $keyActualM->bobot_planning){ - // $progressActualWeek = $keyActualM->bobot_planning; - // }else if($keyActualM->qty_actual == 0){ - // $progressActualWeek = $keyActualM->bobot_planning; - // }else if($keyActualM->qty_plan == $keyActualM->sum_qty_actual){ - $progressActualWeek = $keyActualM[0]->bobot_planning / $keyActualM[0]->count_report; - // }else { - // $progressActualWeek = $progressActualWeek; - // } - // $progressActualWeek = $progressActualWeek > $keyActualM->bobot_planning ? $keyActualM->bobot_planning : $progressActualWeek; - // jika report lebih dari 1 x, maka harusnya di bagi sabanyak jumlah report, - // contoh ada 3 report, report ke 1 adalah 5 maka 100/3 dan di looping + // $startPlan = new DateTime($keyPlanM->planned_start); + // $endPlan = new DateTime($keyPlanM->planned_end); + // $interval = $startPlan->diff($endPlan); + + // // Mengambil hasil selisih hari + // $duration = $interval->days; + // 2023-07-26 + $progressPlanWeek = $keyPlanM->bobot_planning / $duration; + $dataActivityPlan[] = array( + 'progressPlanDay' => $progressPlanWeek, + 'name' => $keyPlanM->name, + 'bobot_p' => $keyPlanM->bobot_planning, + 'duration' => $keyPlanM->duration + ); + $tmpProgressPlanWeek += $progressPlanWeek; } - else{ - $progressActualWeek = $progressActualWeek > ($keyActualM[0]->bobot_planning*95)/100 ? ($keyActualM[0]->bobot_planning*95)/100 : $progressActualWeek; + // } + + // hitung progress actual + // if (count($dataActualM) > 0 && count($dataActualM[0]) > 0) { + foreach ($dataActualM as $keyActualM) { + # hitung untuk persentase progress actual + // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100; + // jika total report > dari planning + if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){ + $progressActualWeek = (($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) *$keyActualM->bobot_planning/100; + }else{ + // jika total report < dari planning + // $progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning; + if($keyActualM->qty_actual == 0){ + $progressActualWeek = 0; + }else{ + $progressActualWeek = ($keyActualM->qty_actual / $keyActualM->qty_plan) * $keyActualM->bobot_planning; + } + } + if($keyActualM->status_activity == 'done'){ + // if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){ + + // } + // if($progressActualWeek > $keyActualM->bobot_planning){ + // $progressActualWeek = $keyActualM->bobot_planning; + // }else if($keyActualM->qty_actual == 0){ + // $progressActualWeek = $keyActualM->bobot_planning; + // }else if($keyActualM->qty_plan == $keyActualM->sum_qty_actual){ + $progressActualWeek = $keyActualM->bobot_planning / $keyActualM->count_report; + // }else { + // $progressActualWeek = $progressActualWeek; + // } + // $progressActualWeek = $progressActualWeek > $keyActualM->bobot_planning ? $keyActualM->bobot_planning : $progressActualWeek; + // jika report lebih dari 1 x, maka harusnya di bagi sabanyak jumlah report, + // contoh ada 3 report, report ke 1 adalah 5 maka 100/3 dan di looping + } + else{ + $progressActualWeek = $progressActualWeek > ($keyActualM->bobot_planning*95)/100 ? ($keyActualM->bobot_planning*95)/100 : $progressActualWeek; + } + $dataActivityActual[] = array( + 'progressActualDay' => $progressActualWeek, + 'qty_act' => $keyActualM->qty_actual, + 'bobot_p' => $keyActualM->bobot_planning, + 'qty_plan' => $keyActualM->qty_plan, + 'status_activity' => $keyActualM->status_activity, + 'sum_qty_actual' => $keyActualM->sum_qty_actual, + 'name' => $keyActualM->name + ); + + $tmpProgressActualWeek += $progressActualWeek; } - $dataActivityActual[] = array( - 'progressActualDay' => $progressActualWeek, - 'qty_act' => $keyActualM[0]->qty_actual, - 'bobot_p' => $keyActualM[0]->bobot_planning, - 'qty_plan' => $keyActualM[0]->qty_plan, - 'status_activity' => $keyActualM[0]->status_activity, - 'sum_qty_actual' => $keyActualM[0]->sum_qty_actual, - 'name' => $keyActualM[0]->name - ); - - $tmpProgressActualWeek += $progressActualWeek; - } - } + // } $dataActivityPlanDate[] = array( "date" => $loopDay,