|
|
|
@ -1306,10 +1306,19 @@ class MasterFunctionsHelper
|
|
|
|
|
return $dataFinal; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function calculateSCurve($projectId) |
|
|
|
|
public function calculateSCurve($projectId, $hierarchyId = null) |
|
|
|
|
{ |
|
|
|
|
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'; |
|
|
|
@ -1371,17 +1380,43 @@ class MasterFunctionsHelper
|
|
|
|
|
//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(); |
|
|
|
|
|
|
|
|
|
$dataPlanM = DB::table('m_activity') |
|
|
|
|
$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') |
|
|
|
|
->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(); |
|
|
|
|
->get()->toArray(); |
|
|
|
|
|
|
|
|
|
$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'), |
|
|
|
@ -1391,7 +1426,8 @@ class MasterFunctionsHelper
|
|
|
|
|
) |
|
|
|
|
->where('ram.report_date', $loopDay) |
|
|
|
|
->where('ma.proyek_id', $projectId) |
|
|
|
|
->get(); |
|
|
|
|
->get()->toArray(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$dataActivityPlan = []; |
|
|
|
|
$dataActivityActual = []; |
|
|
|
@ -1406,14 +1442,15 @@ 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->planned_start); |
|
|
|
|
$startDate = new DateTime($keyPlanM[0]->planned_start); |
|
|
|
|
// Tanggal akhir |
|
|
|
|
$endDate = new DateTime($keyPlanM->planned_end); |
|
|
|
|
$endDate = new DateTime($keyPlanM[0]->planned_end); |
|
|
|
|
// Menghitung selisih hari |
|
|
|
|
$interval = $startDate->diff($endDate); |
|
|
|
|
// Mengambil hasil selisih hari |
|
|
|
@ -1428,33 +1465,35 @@ class MasterFunctionsHelper
|
|
|
|
|
// // Mengambil hasil selisih hari |
|
|
|
|
// $duration = $interval->days; |
|
|
|
|
// 2023-07-26 |
|
|
|
|
$progressPlanWeek = $keyPlanM->bobot_planning / $duration; |
|
|
|
|
$progressPlanWeek = $keyPlanM[0]->bobot_planning / $duration; |
|
|
|
|
$dataActivityPlan[] = array( |
|
|
|
|
'progressPlanDay' => $progressPlanWeek, |
|
|
|
|
'name' => $keyPlanM->name, |
|
|
|
|
'bobot_p' => $keyPlanM->bobot_planning, |
|
|
|
|
'duration' => $keyPlanM->duration |
|
|
|
|
'name' => $keyPlanM[0]->name, |
|
|
|
|
'bobot_p' => $keyPlanM[0]->bobot_planning, |
|
|
|
|
'duration' => $keyPlanM[0]->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->sum_qty_actual > $keyActualM->qty_plan){ |
|
|
|
|
$progressActualWeek = (($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) *$keyActualM->bobot_planning/100; |
|
|
|
|
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->qty_actual == 0){ |
|
|
|
|
if($keyActualM[0]->qty_actual == 0){ |
|
|
|
|
$progressActualWeek = 0; |
|
|
|
|
}else{ |
|
|
|
|
$progressActualWeek = ($keyActualM->qty_actual / $keyActualM->qty_plan) * $keyActualM->bobot_planning; |
|
|
|
|
$progressActualWeek = ($keyActualM[0]->qty_actual / $keyActualM[0]->qty_plan) * $keyActualM[0]->bobot_planning; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if($keyActualM->status_activity == 'done'){ |
|
|
|
|
if($keyActualM[0]->status_activity == 'done'){ |
|
|
|
|
// if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){ |
|
|
|
|
|
|
|
|
|
// } |
|
|
|
@ -1463,7 +1502,7 @@ class MasterFunctionsHelper
|
|
|
|
|
// }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; |
|
|
|
|
$progressActualWeek = $keyActualM[0]->bobot_planning / $keyActualM[0]->count_report; |
|
|
|
|
// }else { |
|
|
|
|
// $progressActualWeek = $progressActualWeek; |
|
|
|
|
// } |
|
|
|
@ -1472,20 +1511,21 @@ class MasterFunctionsHelper
|
|
|
|
|
// 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; |
|
|
|
|
$progressActualWeek = $progressActualWeek > ($keyActualM[0]->bobot_planning*95)/100 ? ($keyActualM[0]->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 |
|
|
|
|
'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, |
|
|
|
|