Browse Source

Merge pull request 'staging' (#266) from staging into master

Reviewed-on: ordo/adw-backend#266
pull/1/head
ibnu 1 year ago
parent
commit
c43760520e
  1. 177
      app/Helpers/MasterFunctionsHelper.php

177
app/Helpers/MasterFunctionsHelper.php

@ -565,6 +565,8 @@ class MasterFunctionsHelper
# hitung untuk persentase progress planning # hitung untuk persentase progress planning
if($keyPlanM->duration == 0){ if($keyPlanM->duration == 0){
$duration = 2; $duration = 2;
}else{
$duration = $keyPlanM->duration + 1;
} }
// $startPlan = new DateTime($keyPlanM->planned_start); // $startPlan = new DateTime($keyPlanM->planned_start);
// $endPlan = new DateTime($keyPlanM->planned_end); // $endPlan = new DateTime($keyPlanM->planned_end);
@ -950,7 +952,7 @@ class MasterFunctionsHelper
return $dataFinal; return $dataFinal;
} }
public function calculateSCurve($projectId) public function calculateSCurveOld($projectId)
{ {
DB::enableQueryLog(); DB::enableQueryLog();
@ -1289,6 +1291,179 @@ class MasterFunctionsHelper
return $dataFinal; return $dataFinal;
} }
public function calculateSCurve($projectId)
{
DB::enableQueryLog();
$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($maxDate->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 = 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();
$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')
)
->where('ram.report_date', $loopDay)
->where('ma.proyek_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;
foreach ($dataPlanM as $keyPlanM) {
# hitung untuk persentase progress planning
if($keyPlanM->duration == 0){
$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;
$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
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;
if($keyActualM->sum_qty_actual > $keyActualM->qty_plan){
$progressActualWeek = (($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) *$keyActualM->bobot_planning/100;
}else{
$progressActualWeek = ((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*$keyActualM->bobot_planning;
}
if($keyActualM->status_activity == 'done'){
$progressActualWeek = $progressActualWeek > $keyActualM->bobot_planning ? $keyActualM->bobot_planning : $progressActualWeek;
}
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;
}
$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 calculateProgressBasedOnSimple($keyGantt) public function calculateProgressBasedOnSimple($keyGantt)
{ {
DB::enableQueryLog(); DB::enableQueryLog();

Loading…
Cancel
Save