diff --git a/.gitignore b/.gitignore index 8c80041..66ed42a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /vendor /.idea +/assets /storage Homestead.json Homestead.yaml diff --git a/activity_log.txt b/activity_log.txt new file mode 100755 index 0000000..1c6c2d1 --- /dev/null +++ b/activity_log.txt @@ -0,0 +1,20 @@ +2022-07-12 00:13:26: 1379 Penentuan harga project +Added: (10000000 * 1), Cost plan old: 0 | +10000000 +Data type (double * double), double | double +Data type origin (double * NULL), string | double +------ +2022-07-12 00:13:32: 1378 Contract Management +Deleted: (10000000 * 1), Cost plan old: 20000000 | -10000000 +Data type (double * double), double | double +Data type origin (double * double), string | double +------ +2022-07-12 00:13:38: 1377 Brainstorming peningkatan layanan masyarakat +Deleted: (10000000 * 1), Cost plan old: 20000000 | -10000000 +Data type (double * double), double | double +Data type origin (double * double), string | double +------ +2022-07-12 00:13:47: 1379 Penentuan harga project +Deleted: (10000000 * 1), Cost plan old: 10000000 | -0 +Data type (double * double), double | double +Data type origin (double * double), string | double +------ diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index 84e8788..da5c268 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -11,7 +11,6 @@ use App\Models\UserToActivity; use App\Models\CommentActivity; use App\Models\AssignMaterial; use App\Models\AssignTools; -use App\Models\OfficeHours; use App\Models\VersionGantt; use App\Models\Holiday; use App\Models\ReportActivity; @@ -33,7 +32,7 @@ class ActivityController extends Controller } return response()->json(['status'=>'success','data'=>$dataGantt,'code'=>200], 200); - } + } private function getDataActivity($id) { @@ -52,7 +51,7 @@ class ActivityController extends Controller }else{ $data = Activity::where('version_gantt_id', $id)->whereNull('parent_id')->orderBy('id', 'asc')->get(); } - + foreach($data as $objRow){ $objRow->text = $objRow->name; if($objRow->parent_id){ @@ -153,14 +152,14 @@ class ActivityController extends Controller $dataPlan = AssignMaterial::where('activity_id', $id)->get(); $tmpPercentage1 = []; if(!$dataPlan->isEmpty()){ - foreach ($dataPlan as $value) { + foreach ($dataPlan as $value) { $qty_plan = $value->qty_planning; $status_activity = $value->status_activity; $getDataVolActual = ReportActivityMaterial::where('assign_material_id', '=', $value->id)->sum("qty"); $percentage1 = ($getDataVolActual * 100) / $qty_plan; if($status_activity == 'done'){ $tmpPercentage1[] = 100; - } + } else{ $tmpPercentage1[] = $percentage1 >= 100 ? 90 : $percentage1; } @@ -169,7 +168,7 @@ class ActivityController extends Controller $totalPercentage = array_sum($tmpPercentage1) > 0 ? array_sum($tmpPercentage1) / count($tmpPercentage1) : 0; }else{ - + $totalPercentage = 0; } return $totalPercentage; @@ -343,7 +342,7 @@ class ActivityController extends Controller } if($data){ $upactual = false; - $result = $data->update($dataUpdate); + $result = $data->update($dataUpdate); if($result){ if($parent && (int)$parent > 0){ $this->updateCostPlanning($parent); @@ -376,8 +375,8 @@ class ActivityController extends Controller return response()->json(['status'=>'failed','message'=>'data activity not found!','code'=>400], 400); die(); } - - + + if($result){ return response()->json(['status'=>'success','message'=>'data activity successfully updated!','code'=>200], 200); }else{ @@ -427,7 +426,7 @@ class ActivityController extends Controller return response()->json(['status'=>'failed', 'action'=>'error','message'=>'data activity not found!','code'=>400], 400); die(); } - + if($delete){ return response()->json(['status'=>'success', "action"=>"deleted",'message'=>'data activity successfully deleted!','code'=>200], 200); @@ -507,7 +506,7 @@ class ActivityController extends Controller { $biayaActual = Activity::where("parent_id", $id)->sum("biaya_actual"); $dataActivity = Activity::find($id); - + $dataUpdate = array( "biaya_actual" => $biayaActual, "updated_by" => $this->currentName @@ -534,136 +533,21 @@ class ActivityController extends Controller public function calculateAllCost($activity_id, $proyek_id) { - $humanCostPlanning = $this->calculateHuman($activity_id, $proyek_id); $materialCostPlanning = 0; $toolsCostPlanning = 0; - $allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning; + $allCost = $materialCostPlanning + $toolsCostPlanning; return $allCost; } - private function calculateHuman($activity_id, $proyek_id) - { - $dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate")->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id") - ->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) - ->where("ahp.proyek_id", $proyek_id) - ->get(); - - $totalCost = 0; - foreach ($dataHuman as $human) { - $uom = $human->uom_standart_rate; - $totalCost += $this->calculateHumanCost($human, $activity_id); - } - - return $totalCost; - } - - private function calculateHumanCost($human, $activity_id) - { - $activity = Activity::find($activity_id); - $duration = $activity->duration; - $standarRate = $human->standart_rate; - $maxUsed = $human->max_used/100; - $totalCost = ($standarRate*$duration)*$maxUsed; - return $totalCost; - } - - private function calculateHumanDay($human, $activity_id) - { - $activity = Activity::find($activity_id); - $duration = $activity->duration; - $standarRate = $human->standart_rate; - $maxUsed = $human->max_used/100; - $totalCost = ($standarRate*$duration)*$maxUsed; - return $totalCost; - } - - private function calculateHumanHours($human, $activity_id, $proyek_id) - { - $hours = OfficeHours::where("proyek_id", $proyek_id)->first(); - $activity = Activity::find($activity_id); - $ganttId = $activity->version_gantt_id; - $verGantt = VersionGantt::find($ganttId); - $holiday = Holiday::where("version_gantt_id", $ganttId)->where("proyek_id", $proyek_id)->pluck("date"); - $dateHoliday = $holiday->all(); - $configOff = $verGantt->config_dayoff; - if($configOff && $configOff!= ""){ - $dayOff = explode(",", $verGantt->config_dayoff); - $dayOff = array_map( - function($value) { return (int)$value; }, - $dayOff - ); - }else{ - $dayOff = []; - } - $begin = new \DateTime($activity->start_date); - $end = new \DateTime($activity->end_date); - $end = $end->modify( '+1 day' ); - $interval = \DateInterval::createFromDateString('1 day'); - $period = new \DatePeriod($begin, $interval, $end); - $totalCost = 0; - foreach ($period as $dt) { - $weekDay = $dt->format("w"); - $currentDay = $dt->format("Y-m-d"); - if(!in_array($weekDay, $dayOff) && !in_array($currentDay, $dateHoliday)) - { - $totalHours = $this->getHourInDay($hours, $weekDay); - $standarRate = $human->standart_rate; - $maxUsed = $human->max_used/100; - $totalCost += ($standarRate*$totalHours)*$maxUsed; - } - } - return $totalCost; - } - - private function getHourInDay($hours, $day) - { - $totalHours = 0; - switch ($day) { - case 1: - $totalHours = ceil(abs(((strtotime($hours->monday_end)-strtotime($hours->monday_start))/60)/60)); - break; - case 2: - $totalHours = ceil(abs(((strtotime($hours->tuesday_end)-strtotime($hours->tuesday_start))/60)/60)); - break; - case 3: - $totalHours = ceil(abs(((strtotime($hours->wednesday_end)-strtotime($hours->wednesday_start))/60)/60)); - break; - case 4: - $totalHours = ceil(abs(((strtotime($hours->thursday_end)-strtotime($hours->thursday_start))/60)/60)); - break; - case 5: - $totalHours = ceil(abs(((strtotime($hours->friday_end)-strtotime($hours->friday_start))/60)/60)); - break; - case 6: - $totalHours = ceil(abs(((strtotime($hours->saturday_end)-strtotime($hours->saturday_start))/60)/60)); - break; - default: - $totalHours = ceil(abs(((strtotime($hours->sunday_end)-strtotime($hours->sunday_start))/60)/60)); - break; - } - return $totalHours; - } - - private function calculateMaterial($activity_id, $proyek_id) - { - $totalCost = AssignMaterial::selectRaw("ISNULL(qty_planning,0)*ISNULL(budget,0) as totalCost")->where("proyek_id", $proyek_id)->where("activity_id", $activity_id)->sum("totalCost"); - return $totalCost; - } - - private function calculateTools($activity_id, $proyek_id) - { - - } - public function getPercentagePerDay(Request $request) - { + { $dataPayload = $request->all(); $allGantt = []; foreach ($dataPayload['project_id'] as $val) { $allGantt[] = $this->getMaxVersionGantt($val); } - + $dataFinal=[]; foreach ($allGantt as $val) { $dataProject = Project::find($val['proyek_id']); @@ -699,7 +583,7 @@ class ActivityController extends Controller $minDate = Activity::whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->min("start_date"); $maxDate = Activity::whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->max("end_date"); } - + $begin = new \DateTime($minDate); $end = new \DateTime($maxDate); $end = $end->modify( '+1 day' ); @@ -712,14 +596,14 @@ class ActivityController extends Controller }else{ $totalRencanaBudget = Activity::select(DB::raw('sum(cast(rencana_biaya as integer))'))->whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->first(); } - + $totalRencanaBudget = $totalRencanaBudget->sum; $currentPercentage = 0; $dataDate = []; $dataPercen = []; foreach ($period as $dt) { $weekDay = $dt->format("w"); - $currentDate = $dt->format("Y-m-d"); + $currentDate = $dt->format("Y-m-d"); if(!in_array($weekDay, $dayOff) && !in_array($currentDate, $dateHoliday)) { $totalPercentage = 0; @@ -730,7 +614,7 @@ class ActivityController extends Controller }else{ $dataActivity = Activity::whereRaw("'".$currentDate."' BETWEEN DATE(m_activity.start_date) AND DATE(m_activity.end_date)")->whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->get(); } - + foreach ($dataActivity as $activity) { $duration = $activity->duration; if($totalRencanaBudget > 0 && $duration > 0){ @@ -764,12 +648,12 @@ class ActivityController extends Controller public function getCalculateCurvaS(Request $request) // for adw (plan & actual == date) - { + { $dataPayload = $request->all(); $allGantt = []; if(isset($dataPayload['gannt_id'])){ $allGantt = $dataPayload['gannt_id']; - }else{ + }else{ foreach ($dataPayload['project_id'] as $val) { $allGantt[] = $this->getMaxVersionGantt($val); } @@ -790,7 +674,7 @@ class ActivityController extends Controller ->where("ama.proyek_id", $keyGantt['proyek_id']) ->join('m_activity as a', 'a.id', '=', 'ama.activity_id') ->where('a.version_gantt_id', '=', $keyGantt['last_gantt_id']) - ->min("plan_date"); + ->min("plan_date"); $maxDate = DB::table('assign_material_to_activity as ama') ->where("ama.proyek_id", $keyGantt['proyek_id']) @@ -804,7 +688,7 @@ class ActivityController extends Controller $interval = \DateInterval::createFromDateString('1 day'); $period = new \DatePeriod($begin, $interval, $end); $arr_ActualM = []; - $tempDate = []; + $tempDate = []; $tempPercentage = []; $tempTtlPercentPlan=0; $tempTtlPercentActual=0; @@ -814,12 +698,12 @@ class ActivityController extends Controller $currentProgressActivity = 0; $currentBCWP = 0; $budgetControlBCWP = 0; - - foreach ($period as $dt) { + + foreach ($period as $dt) { $dataPlanM = DB::table('assign_material_to_activity as ama') ->select('ama.activity_id', 'ama.qty_planning', 'ama.plan_date', 'ama.start_activity', 'a.bobot_planning', 'a.biaya_actual', 'a.duration', 'a.persentase_progress') ->join('m_activity as a', 'a.id', '=', 'ama.activity_id') - ->where('ama.proyek_id', '=', $keyGantt['proyek_id']) + ->where('ama.proyek_id', '=', $keyGantt['proyek_id']) ->where('a.version_gantt_id', '=', $keyGantt['last_gantt_id']) ->whereDate('ama.plan_date', $dt->format("Y-m-d")) ->get(); @@ -833,7 +717,7 @@ class ActivityController extends Controller $dataTempPlan = []; $x = 0; $sumPercentagePlan=0; - $totalACWP = isset($totalACWP) ? $totalACWP : 0; + $totalACWP = isset($totalACWP) ? $totalACWP : 0; $totalBCWP = isset($totalBCWP) ? $totalBCWP : 0; foreach ($dataPlanM as $keyPlanM) { @@ -845,13 +729,13 @@ class ActivityController extends Controller $dataTempPlan [$x]['activity_id'] = $keyPlanM->activity_id; $dataTempPlan [$x]['qty_plan'] = $keyPlanM->qty_planning; $dataTempPlan [$x]['plan_date'] = $keyPlanM->plan_date; - $dataTempPlan [$x]['start_activity'] = $keyPlanM->start_activity; - $dataTempPlan [$x]['bobot_planning'] = $keyPlanM->bobot_planning; + $dataTempPlan [$x]['start_activity'] = $keyPlanM->start_activity; + $dataTempPlan [$x]['bobot_planning'] = $keyPlanM->bobot_planning; $dataTempPlan [$x]['ttl_plan'] = $sumVolPlan->ttl_qty_plan; $dataTempPlan [$x]['biaya_actual'] = $keyPlanM->biaya_actual; $dataTempPlan [$x]['duration'] = $keyPlanM->duration; - $dataTempPlan [$x]['persentase_progress'] = $keyPlanM->persentase_progress; - $dataTempPlan [$x]['percentage'] = ($keyPlanM->qty_planning/$sumVolPlan->ttl_qty_plan)*$keyPlanM->bobot_planning; + $dataTempPlan [$x]['persentase_progress'] = $keyPlanM->persentase_progress; + $dataTempPlan [$x]['percentage'] = ($keyPlanM->qty_planning/$sumVolPlan->ttl_qty_plan)*$keyPlanM->bobot_planning; $sumPercentagePlan+=($keyPlanM->qty_planning/$sumVolPlan->ttl_qty_plan)*$keyPlanM->bobot_planning; $totalBCWP += (((($keyPlanM->persentase_progress*$keyPlanM->bobot_planning)/100)/$keyPlanM->duration)* $totalRencanaBudget)/100; $dataTempPlan [$x]['totalBCWP'] = $totalBCWP; @@ -869,34 +753,34 @@ class ActivityController extends Controller ->first(); $dataTempReport [$w]['activity_id'] = $keyActualM->activity_id; $dataTempReport [$w]['qty'] = $keyActualM->qty; - $dataTempReport [$w]['report_date'] = $keyActualM->report_date; + $dataTempReport [$w]['report_date'] = $keyActualM->report_date; $dataTempReport [$w]['bobot_planning'] = $keyActualM->bobot_planning; - $dataTempReport [$w]['ttl_plan'] = $sumVolActual->ttl_qty_plan; + $dataTempReport [$w]['ttl_plan'] = $sumVolActual->ttl_qty_plan; $dataTempReport [$w]['biaya_actual'] = $keyActualM->biaya_actual; $dataTempReport [$w]['duration'] = $keyActualM->duration; - $dataTempReport [$w]['persentase_progress'] = $keyActualM->persentase_progress; + $dataTempReport [$w]['persentase_progress'] = $keyActualM->persentase_progress; $dataTempReport [$w]['percentage'] = ($keyActualM->qty/$sumVolActual->ttl_qty_plan)*$keyActualM->bobot_planning; - $sumPercentageActual+=($keyActualM->qty/$sumVolActual->ttl_qty_plan)*$keyActualM->bobot_planning; - $totalACWP += $keyActualM->biaya_actual/$keyActualM->duration; - $dataTempReport [$w]['totalacwp'] = $totalACWP; + $sumPercentageActual+=($keyActualM->qty/$sumVolActual->ttl_qty_plan)*$keyActualM->bobot_planning; + $totalACWP += $keyActualM->biaya_actual/$keyActualM->duration; + $dataTempReport [$w]['totalacwp'] = $totalACWP; $w++; - } - + } + $arr_ActualM[] = array( 'date'=>$dt->format("Y-m-d"), 'percentPlan'=>$sumPercentagePlan, 'percentActual'=>$sumPercentageActual, 'plan'=>$dataTempPlan, - 'actual'=>$dataTempReport, - ); - if(isset($dataPayload['period']) && $dataPayload['period'] == 'week'){ - if($dt->format("w")==1){ + 'actual'=>$dataTempReport, + ); + if(isset($dataPayload['period']) && $dataPayload['period'] == 'week'){ + if($dt->format("w")==1){ if($totalACWP > 0 ){ $budgetControlACWP = $currentACWP + $totalACWP; - } + } if($totalBCWP > 0 ){ $budgetControlBCWP = $currentBCWP + $totalBCWP; - } + } $tempTtlPercentPlan+= $sumPercentagePlan; $tempTtlPercentActual+= $sumPercentageActual; @@ -916,34 +800,39 @@ class ActivityController extends Controller $tempTtlPercentPlan = 0; $tempTtlPercentActual = 0; } - }else{ + }else{ $tempPercentage[] = array(round($sumPercentagePlan,2), round($sumPercentageActual,2)); $tempDate[] = array($dt->format("Y-m-d"), 0, 0); } } if(round($totalACWP,0) > $totalRencanaBudget){ - $estimatedCost = round($totalACWP,0)+0; + $estimatedCost = round($totalACWP,0)+0; }else{ - $estimatedCost = ($totalRencanaBudget+0); + $estimatedCost = ($totalRencanaBudget+0); } $costDeviation = $totalRencanaBudget - $estimatedCost; + if($costDeviation > 0){ + $potential = "SAVING"; + } else { + $potential = $costDeviation == 0 ? "ON BUDGET" : "OVERRUN"; + } $dataResponse = array( "date" =>$tempDate, "percentage" =>$tempPercentage, "data_details" =>$arr_ActualM, - "budget_control" =>array("current_budget"=> $totalRencanaBudget, - "acwp" => round($totalACWP,0), - "bcwp" => round($totalBCWP,0), - "rem_to_complete" => ($totalRencanaBudget - round($totalACWP,0)), - "add_cost_to_complete" => 0, - "estimated_at_completion" => $estimatedCost, - "cost_deviation" => $costDeviation, - "potential" => $costDeviation > 0 ? "SAVING" : $costDeviation == 0 ? "ON BUDGET" : "OVERRUN" + "budget_control" =>array("current_budget"=> $totalRencanaBudget, + "acwp" => round($totalACWP,0), + "bcwp" => round($totalBCWP,0), + "rem_to_complete" => ($totalRencanaBudget - round($totalACWP,0)), + "add_cost_to_complete" => 0, + "estimated_at_completion" => $estimatedCost, + "cost_deviation" => $costDeviation, + "potential" => $potential, ) ); - + $dataFinal[] = array( "proyek_name"=> $dataProject->nama, "data"=>$dataResponse, @@ -952,196 +841,17 @@ class ActivityController extends Controller } return response()->json(['status'=>'success','code'=>200, 'data' => $dataFinal], 200); - - } - public function getCalculateCurvaSBackup(Request $request) - { - $dataPayload = $request->all(); - $allGantt = []; - foreach ($dataPayload['project_id'] as $val) { - $allGantt[] = $this->getMaxVersionGantt($val); - } - - $dataFinal=[]; - foreach ($allGantt as $val) { - $dataProject = Project::find($val['proyek_id']); - $holidays = Holiday::where("version_gantt_id", $val['last_gantt_id'])->where("proyek_id", $val['proyek_id'])->get(); - $dateHoliday = []; //$holiday->all(); - foreach ($holidays as $holiday) { - $startH = new \DateTime($holiday->date); - $endH = clone $startH; - $endH->modify('+'.$holiday->duration.' day'); - $intervalH = \DateInterval::createFromDateString('1 day'); - $periodH = new \DatePeriod($startH, $intervalH, $endH); - foreach ($periodH as $dt) { - $dateHoliday[] = $dt->format("Y-m-d"); - } - } - $verGantt = VersionGantt::find($val['last_gantt_id']); - $configOff = $verGantt->config_dayoff; - if($configOff && $configOff!= ""){ - $dayOff = explode(",", $verGantt->config_dayoff); - $dayOff = array_map( - function($value) { return (int)$value; }, - $dayOff - ); - }else{ - $dayOff = []; - } - $checkHeader = Activity::where('type_activity', 'header')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->count(); - if($checkHeader > 0){ - $dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->first(); - $minDate = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->min("start_date"); - $maxDate = Activity::where('parent_id', $dataHeader->id)->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->max("end_date"); - }else{ - $minDate = Activity::whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->min("start_date"); - $maxDate = Activity::whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->max("end_date"); - } - - $begin = new \DateTime($minDate); - $end = new \DateTime($maxDate); - $end2 = new \DateTime($maxDate); - $end2 = $end2->modify( '-1 day' ); - $interval = \DateInterval::createFromDateString('1 day'); - $period = new \DatePeriod($begin, $interval, $end); - $dataHeader = Activity::where('type_activity', 'header')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->first(); - if($dataHeader){ - $totalRencanaBudget = Activity::select(DB::raw('sum(cast(rencana_biaya as bigint))'))->where('parent_id', $dataHeader->id)->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->first(); - }else{ - $totalRencanaBudget = Activity::select(DB::raw('sum(cast(rencana_biaya as bigint))'))->whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->first(); - } - - - $totalRencanaBudget = $totalRencanaBudget->sum; - $currentPercentage = 0; - $currentACWP = 0; - $budgetControlACWP = 0; - $currentProgressActivity = 0; - $currentBCWP = 0; - $budgetControlBCWP = 0; - $dataDate = []; - $dataPercen = []; - $testdata = []; - $countWeek = 0; - foreach ($period as $dt) { - $weekDay = $dt->format("w"); - $currentDate = $dt->format("Y-m-d"); - $testdata[] = array('weekday' => $weekDay, 'date' =>$currentDate, 'dayof' => $dayOff); - - $totalPercentage = isset($totalPercentage) ? $totalPercentage : 0; - $totalACWP = isset($totalACWP) ? $totalACWP : 0; - $totalProgressActivity = isset($totalProgressActivity) ? $totalProgressActivity : 0; - $totalBCWP = isset($totalBCWP) ? $totalBCWP : 0; - - if(!in_array($weekDay, $dayOff) && !in_array($currentDate, $dateHoliday)) - { - $dataActivity = Activity::whereRaw("'".$currentDate."' BETWEEN DATE(m_activity.start_date) AND DATE(m_activity.end_date) - INTERVAL '1 DAY'")->where('type_activity', 'task')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->get(); - foreach ($dataActivity as $activity) { - - $duration = $activity->duration; - if($totalRencanaBudget > 0 && $duration > 0){ - $totalPercentage += $activity->bobot_planning/$duration; - if($activity->biaya_actual > 0 && $activity->persentase_progress){ - $totalACWP += $activity->biaya_actual/$duration; - $totalProgressActivity += (($activity->persentase_progress*$activity->bobot_planning)/100)/$duration; - $totalBCWP += (((($activity->persentase_progress*$activity->bobot_planning)/100)/$duration)* $totalRencanaBudget)/100; - } - } - } - - - } - - if($currentDate == $end2->format('Y-m-d')){ - $currentPercentage = round(($currentPercentage + $totalPercentage), 0); - if($totalACWP > 0 ){ - $budgetControlACWP = $currentACWP + $totalACWP; - } - if($totalBCWP > 0 ){ - $budgetControlBCWP = $currentBCWP + $totalBCWP; - } - $currentACWP = $totalACWP == 0 ? null : $currentACWP + $totalACWP; - $currentProgressActivity = $totalProgressActivity == 0 ? null : round(($currentProgressActivity + $totalProgressActivity),0); - - $currentBCWP = $totalBCWP == 0 ? null :$currentBCWP + $totalBCWP; - $currentPercentage = $currentPercentage > 100 ? 100 : $currentPercentage; - $currentProgressActivity = $currentProgressActivity > 100 ? 100 : $currentProgressActivity; - - - $dataDate[] = array($currentDate, round($currentBCWP,0), round($currentACWP,0)); - $dataPercen[] = array($currentPercentage, $currentProgressActivity); - - $totalPercentage = 0; - $totalACWP = 0; - $totalProgressActivity = 0; - $totalBCWP = 0; - }else if($weekDay == "0"){ - $currentPercentage = round(($currentPercentage + $totalPercentage), 0); - if($totalACWP > 0 ){ - $budgetControlACWP = $currentACWP + $totalACWP; - } - if($totalBCWP > 0 ){ - $budgetControlBCWP = $currentBCWP + $totalBCWP; - } - $currentACWP = $totalACWP == 0 ? null : $currentACWP + $totalACWP; - $currentProgressActivity = $totalProgressActivity == 0 ? null : round(($currentProgressActivity + $totalProgressActivity),0); - - $currentBCWP = $totalBCWP == 0 ? null :$currentBCWP + $totalBCWP; - $currentPercentage = $currentPercentage > 100 ? 100 : $currentPercentage; - $currentProgressActivity = $currentProgressActivity > 100 ? 100 : $currentProgressActivity; - - - $dataDate[] = array($currentDate, round($currentBCWP,0), round($currentACWP,0)); - $dataPercen[] = array($currentPercentage, $currentProgressActivity); - - $totalPercentage = 0; - $totalACWP = 0; - $totalProgressActivity = 0; - $totalBCWP = 0; - } - } - if(round($budgetControlACWP,0) > $totalRencanaBudget){ - $estimatedCost = round($budgetControlACWP,0)+0; - }else{ - $estimatedCost = ($totalRencanaBudget+0); - } - $costDeviation = $totalRencanaBudget - $estimatedCost; - - $dataResponse = array( - "date" =>$dataDate, - "percentage" =>$dataPercen, - "budget_control" =>array("current_budget"=> $totalRencanaBudget, - "acwp" => round($budgetControlACWP,0), - "bcwp" => round($budgetControlBCWP,0), - "rem_to_complete" => ($totalRencanaBudget - round($budgetControlACWP,0)), - "add_cost_to_complete" => 0, - "estimated_at_completion" => $estimatedCost, - "cost_deviation" => $costDeviation, - "potential" => $costDeviation > 0 ? "SAVING" : $costDeviation == 0 ? "ON BUDGET" : "OVERRUN" - ) - ); - $dataFinal[] = array( - "proyek_name"=> $dataProject->nama, - "data"=>$dataResponse - ); - } - - if($dataFinal){ - return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'test' => array('current'=>$currentDate,'max' =>$end2->format('Y-m-d')), 'totalRecord'=>1], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list percentage day, please try again later!','code'=>400], 400); - } } public function getCalculateCurvaSDays(Request $request) - { + { $dataPayload = $request->all(); $allGantt = []; foreach ($dataPayload['project_id'] as $val) { $allGantt[] = $this->getMaxVersionGantt($val); } - + $dataFinal=[]; foreach ($allGantt as $val) { $dataProject = Project::find($val['proyek_id']); @@ -1176,7 +886,7 @@ class ActivityController extends Controller $minDate = Activity::whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->min("start_date"); $maxDate = Activity::whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->max("end_date"); } - + $begin = new \DateTime($minDate); $end = new \DateTime($maxDate); $interval = \DateInterval::createFromDateString('1 day'); @@ -1187,7 +897,7 @@ class ActivityController extends Controller }else{ $totalRencanaBudget = Activity::select(DB::raw('sum(cast(rencana_biaya as integer))'))->whereNull('parent_id')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->first(); } - + $totalRencanaBudget = $totalRencanaBudget->sum; $currentPercentage = 0; $currentACWP = 0; @@ -1196,7 +906,7 @@ class ActivityController extends Controller $dataDate = []; $dataPercen = []; $testdata = []; - foreach ($period as $dt) { + foreach ($period as $dt) { $weekDay = $dt->format("w"); $currentDate = $dt->format("Y-m-d"); $testdata[] = array('weekday' => $weekDay, 'date' =>$currentDate); @@ -1208,19 +918,19 @@ class ActivityController extends Controller $totalBCWP = 0; $dataActivity = Activity::whereRaw("'".$currentDate."' BETWEEN DATE(m_activity.start_date) AND DATE(m_activity.end_date) - INTERVAL '1 DAY'")->where('type_activity', 'task')->where("proyek_id", $val['proyek_id'])->where("version_gantt_id", $val['last_gantt_id'])->get(); foreach ($dataActivity as $activity) { - + $duration = $activity->duration; - if($totalRencanaBudget > 0 && $duration > 0){ + if($totalRencanaBudget > 0 && $duration > 0){ $totalPercentage += $activity->bobot_planning/$duration; if($activity->biaya_actual > 0 && $activity->persentase_progress){ $totalACWP += $activity->biaya_actual/$duration; $totalProgressActivity += (($activity->persentase_progress*$activity->bobot_planning)/100)/$duration; $totalBCWP += (((($activity->persentase_progress*$activity->bobot_planning)/100)/$duration)* $totalRencanaBudget)/100; } - } + } } - - $currentPercentage = round(($currentPercentage + $totalPercentage), 0); + + $currentPercentage = round(($currentPercentage + $totalPercentage), 0); $currentACWP = $totalACWP == 0 ? null : $currentACWP + $totalACWP; $currentProgressActivity = $totalProgressActivity == 0 ? null : round(($currentProgressActivity + $totalProgressActivity),0); $currentBCWP = $totalBCWP == 0 ? null :$currentBCWP + $totalBCWP; @@ -1230,7 +940,7 @@ class ActivityController extends Controller $dataDate[] = array($currentDate, $currentBCWP, $currentACWP); $dataPercen[] = array($currentPercentage, $currentProgressActivity); - }else{ + }else{ $dataDate[] = $currentDate; $dataPercen[] = array($currentPercentage,$currentProgressActivity); } @@ -1286,7 +996,7 @@ class ActivityController extends Controller foreach($activities as $activity) { $activity_id = $activity->id; - $countReports = ReportActivity::where('activity_id', $activity_id)->count(); + $countReports = ReportActivity::where('activity_id', $activity_id)->count(); if ($countReports === 1) { $dataReports = ReportActivity::where('activity_id', $activity_id)->orderBy('report_date')->get(); foreach($dataReports as $dr) { @@ -1318,4 +1028,4 @@ class ActivityController extends Controller return response()->json(['status'=>'success','message'=>'Synchronize to report success!','code'=>200], 200); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/ActivityDokumenController.php b/app/Http/Controllers/ActivityDokumenController.php index d0add21..f3a1143 100644 --- a/app/Http/Controllers/ActivityDokumenController.php +++ b/app/Http/Controllers/ActivityDokumenController.php @@ -7,93 +7,89 @@ use App\Models\ActivityDokumen; class ActivityDokumenController extends Controller { - public function dokumenByActivityId($id){ - if($id && $id!="" && (int)$id > 0){ - $dataDokumen = ActivityDokumen::where("activity_id", $id)->get(); - - return response()->json(['status'=>'success','data'=>$dataDokumen,'code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'activity id is required!','code'=>400], 400); - } - } - - public function delete($id) - { - if($id && $id!="" && (int)$id > 0){ - $dokumen = ActivityDokumen::find($id); - if($dokumen){ - if(file_exists($this->pathActivityDocument.$dokumen->file)){ - unlink($this->pathActivityDocument.$dokumen->file); - } - $dokumen->delete(); - return response()->json(['status'=>'success','message'=>'Dokumen deleted successfully!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'Dokumen not found!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); - } - } - - public function uploadProjectDokumen(Request $request) - { - if($request->hasFile('dokumen')){ - $activity_id = $request->activity_id; - $dokumen = $request->file('dokumen'); - $extension = $dokumen->extension(); - $name = $dokumen->getClientOriginalName(); - - $result = $dokumen->move($this->pathActivityDocument, $name); - if($result){ - $data = [ - 'activity_id' => (int)$activity_id, - 'file' => $name, - 'description' => $request->description - ]; - - $result = ActivityDokumen::create($data); - - if($result){ - return response()->json(['status'=>'success','message'=>'file upload is successfully!','code'=>200], 200); - }else{ - unlink($this->pathActivityDocument.$name); - return response()->json(['status'=>'failed','message'=>'file upload is failed!','code'=>400], 400); - } - - }else{ - return response()->json(['status'=>'failed','message'=>'file upload is failed!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400); - } - } - - public function searchDocProject(Request $request){ - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_document_activity'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function downloadDokumen($id) - { - if($id && $id!="" && (int)$id > 0){ - $dokumen = ActivityDokumen::find($id); - if($dokumen){ - if(file_exists($this->pathActivityDocument.$dokumen->file)){ - $pathToFile = $this->pathActivityDocument.$dokumen->file; - return response()->download($pathToFile); - }else{ - return response()->json(['status'=>'failed','message'=>'Dokumen not found!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Dokumen not found!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); - } - } + + public function dokumenByActivityId($id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'activity id is required!','code'=>400], 400); + + $dataDokumen = ActivityDokumen::where("activity_id", $id)->get(); + return response()->json(['status'=>'success','data'=>$dataDokumen,'code'=>200], 200); + } + + public function delete($id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); + + $document = ActivityDokumen::find($id); + + if(!$document) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + if(file_exists($this->pathActivityDocument.$document->file)) + unlink($this->pathActivityDocument.$document->file); + + $document->delete(); + return response()->json(['status'=>'success','message'=>'Dokumen deleted successfully!','code'=>200], 200); + } + + public function uploadProjectDokumen(Request $request) + { + if(!$request->hasFile('dokumen')) + return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400); + + $activity_id = $request->activity_id; + $document = $request->file('dokumen'); + $name = $document->getClientOriginalName(); + + $result = $document->move($this->pathActivityDocument, $name); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); + + $data = [ + 'activity_id' => (int)$activity_id, + 'file' => $name, + 'description' => $request->description + ]; + + $result = ActivityDokumen::create($data); + + if(!$result){ + unlink($this->pathActivityDocument.$name); + return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); + } + + return response()->json(['status'=>'success','message'=>'Upload success!','code'=>200], 200); + } + + public function searchDocProject(Request $request){ + $payload = $request->all(); + + $dataBuilder = $this->setUpPayload($payload, 'm_document_activity'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function downloadDokumen($id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); + + $document = ActivityDokumen::find($id); + + if(!$document) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); + + if(file_exists($this->pathActivityDocument.$document->file)){ + $pathToFile = $this->pathActivityDocument.$document->file; + return response()->download($pathToFile); + } + + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); + } } diff --git a/app/Http/Controllers/AssignMaterialController.php b/app/Http/Controllers/AssignMaterialController.php index c656867..7460da9 100644 --- a/app/Http/Controllers/AssignMaterialController.php +++ b/app/Http/Controllers/AssignMaterialController.php @@ -4,277 +4,178 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\AssignMaterial; -use App\Models\MaterialResource; use App\Models\RequestMaterial; -use App\Models\Activity; use App\Models\ReportActivityMaterial; use Datatables; class AssignMaterialController extends Controller { - public function add_backup(Request $request){ - $this->validate($request, [ - 'activity_id' => 'required', - 'material_id' => 'required', - 'qty_planning' => 'required', - 'budget' => 'required' - ]); - $checkStock = MaterialResource::where("id", $request->material_id)->first(); - $currentStock = $checkStock->qty; - if((int)$currentStock < (int)$request->qty_planning){ - return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]); - die(); - } - - - - $data = $request->all(); - - $data['created_by'] = $this->currentName; - - $result = AssignMaterial::create($data); - if($result){ - $checkStock = MaterialResource::find($request->material_id); - $newStock = (int)$checkStock->qty - (int)$request->qty_planning; - $dataUpdate = array( - "qty"=>$newStock, - "updated_by"=>$this->currentName - ); - $checkStock->update($dataUpdate); - - return response()->json(['status'=>'success','message'=>'Assign material successfull created','code'=>200]); - }else{ - return response()->json(['status'=>'failed','message'=>'Assign material failed created','code'=>400]); - } - } - - public function add(Request $request){ - $this->validate($request, [ - 'activity_id' => 'required', - 'material_id' => 'required', - 'qty_planning' => 'required' - ]); - - $checkStock = RequestMaterial::where("id", $request->material_id)->first(); - $currentStock = $checkStock->qty; - $price = $checkStock->price; - if((int)$currentStock < (int)$request->qty_planning){ - return response()->json(['status'=>'failed','message'=>'Not enough stock !','code'=>400]); - die(); - } - - $data = $request->all(); - - $data['created_by'] = $this->currentName; - $data['budget'] = $price; - - $result = AssignMaterial::create($data); - if($result){ - - $updateActivity = Activity::find($request->activity_id); - if($updateActivity){ - $costPlanOld = $updateActivity==null? 0 : (int)$updateActivity->rencana_biaya; - $costPlanNew = $costPlanOld + ($price*$request->qty_planning); - $updateActivity->rencana_biaya = $costPlanNew; - $updateActivity->save(); - return response()->json(['status'=>'success','message'=>'Assign material successfull created, and update cost plan success '.$costPlanNew,'code'=>200]); - }else{ - return response()->json(['status'=>'success','message'=>'Assign material successfull created','code'=>200]); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Assign material failed created','code'=>400]); - } - } - - private function updateFromAdd($data){ - $assignMaterial = AssignMaterial::where("activity_id", $data->activity_id)->where("material_id", $data->material_id)->first(); - - $newQty = (int)$assignMaterial->qty_planning + (int)$data->qty_planning; - - $newBudget = $assignMaterial->budget > $data->budget ? $assignMaterial->budget : $data->budget; - - $dataUpdate = array( - "qty_planning"=>$newQty, - "budget"=>$newBudget, - "updated_by"=>$this->currentName - ); - - $dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("material_id", $data->material_id); - - return $dataWillUpdate->update($dataUpdate); - } - - public function update(Request $request, $id){ - - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - } - $data = AssignMaterial::find($id); - if($data){ - $result = $data->update($request->all()); - }else{ - return response()->json(['status'=>'failed','message'=>'Data Assign material not found!','code'=>400], 400); - die(); - } - - if($result){ - return response()->json(['status'=>'success','message'=>'Assign material successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'Assign material failed updated!','code'=>400], 400); - } - } - - public function delete($id) - { - $data = AssignMaterial::find($id); - - if($data){ - $id = $data->material_id; - $stock = $data->qty_planning; - $materialResource = MaterialResource::find($id); - if($materialResource){ - $oldStock = $materialResource->qty; - $newStock = $oldStock + $stock; - $dataUpdate = array( - "qty"=>$newStock, - "updated_by"=>$this->currentName - ); - $materialResource->update($dataUpdate); - } - $activity = Activity::where('id', $data->activity_id)->first(); - $activity->rencana_biaya -= $data->budget * $data->qty_planning; - $activity->save(); - $delete = $data->delete(); - }else{ - return response()->json(['status'=>'failed','message'=>'Data Assign material not found!','code'=>400], 400); - die(); - } - - if($delete){ - return response()->json(['status'=>'success','message'=>'Assign material successfully deleted!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'Assign material failed deleted!','code'=>400], 400); - } - } - - public function edit($id){ - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - die(); - } - - $result = AssignMaterial::find($id); - - if($result){ - return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get data Assign material, please try again later!','code'=>400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function list() - { - $data = AssignMaterial::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); - } - } - - public function datatables(Request $request){ - $id_activity = $request->query('idact'); - $data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom")->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")->where('assign_material_to_activity.activity_id', $id_activity)->get(); - return Datatables::of($data) - ->addIndexColumn() - ->addColumn('action', function($row){ - $actionBtn = ''; - return $actionBtn; - }) - ->rawColumns(['action'])->make(true); - } - - public function datatablesForReportActivity(Request $request){ - $id_activity = $request->query('idact'); - $data = AssignMaterial::select(AssignMaterial::raw('SUM(qty_planning) as qty_planning'), "m.description as material_name", "assign_material_to_activity.activity_id as activity_id") - ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") - ->groupBy("m.description") - ->groupBy("assign_material_to_activity.activity_id") - ->where("assign_material_to_activity.activity_id", $id_activity)->get(); - return Datatables::of($data) - ->addIndexColumn() - ->addColumn('qty_sum', function($row){ - $val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") - ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") - ->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") - ->groupBy("m.description") - ->where("m.description", strval($row->material_name)) - ->where("ram.activity_id", $row->activity_id)->first(); - return $val_qty_act ? $val_qty_act->qty_sum : '-'; - }) - ->addColumn('status_activity', function($row){ - $val_status = AssignMaterial::select("status_activity") - ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') - ->where('m.description', '=', $row->material_name) - ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); - return $val_status ? $val_status->status_activity : null; - }) - ->addColumn('start_activity', function($row){ - $val_start = AssignMaterial::select("start_activity") - ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') - ->where('m.description', '=', $row->material_name) - ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); - return $val_start ? $val_start->start_activity : null; - }) - ->addColumn('finish_activity', function($row){ - $val_finish = AssignMaterial::select("finish_activity") - ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') - ->where('m.description', '=', $row->material_name) - ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); - return $val_finish ? $val_finish->finish_activity : null; - }) - ->addColumn('uom', function($row){ - $val_uom = RequestMaterial::select("uom") - ->where('description', '=', $row->material_name)->first(); - return $val_uom ? $val_uom->uom : null; - }) - ->addColumn('action', function($row){ - $actionBtn = ''; - $actionBtn .= ''; - return $actionBtn; - }) - ->rawColumns(['action'])->make(true); - } - - public function ForReportActivityByMaterial(Request $request){ - $id_activity = $request->idact; - $data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") - ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") - ->where('assign_material_to_activity.activity_id', $id_activity)->get(); - foreach ($data as $key) { - # code... - - $val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty"); - } - $countData = $data->count(); - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); - } - } + public function add(Request $request){ + $this->validate($request, [ + 'activity_id' => 'required', + 'material_id' => 'required', + 'qty_planning' => 'required' + ]); + + $checkStock = RequestMaterial::where("id", $request->material_id)->first(); + $currentStock = $checkStock->qty; + $price = $checkStock->price; + if((int)$currentStock < (int)$request->qty_planning){ + return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]); + } + + $data = $request->all(); + $data['created_by'] = $this->currentName; + $data['budget'] = $price; + + $result = AssignMaterial::create($data); + if(!$result) + return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]); + + return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200]); + + } + + public function update(Request $request, $id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = AssignMaterial::find($id); + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + $result = $data->update($request->all()); + + if($result) + return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200); + + return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); + } + + public function delete($id) + { + $data = AssignMaterial::where('id', $id)->first(); + + if($data->delete()) + return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200); + + return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); + } + + public function edit($id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $result = AssignMaterial::find($id); + + if($result) + return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); + + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + } + + public function search(Request $request) + { + $payload = $request->all(); + $dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function list() + { + $data = AssignMaterial::all(); + $countData = $data->count(); + + if($data) + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + + return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500); + } + + public function datatables(Request $request){ + $id_activity = $request->query('idact'); + $data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom")->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")->where('assign_material_to_activity.activity_id', $id_activity)->get(); + return Datatables::of($data) + ->addIndexColumn() + ->addColumn('action', function($row){ + $actionBtn = ''; + return $actionBtn; + }) + ->rawColumns(['action'])->make(true); + } + + public function datatablesForReportActivity(Request $request){ + $id_activity = $request->query('idact'); + $data = AssignMaterial::select(AssignMaterial::raw('SUM(qty_planning) as qty_planning'), "m.description as material_name", "assign_material_to_activity.activity_id as activity_id") + ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") + ->groupBy("m.description") + ->groupBy("assign_material_to_activity.activity_id") + ->where("assign_material_to_activity.activity_id", $id_activity)->get(); + return Datatables::of($data) + ->addIndexColumn() + ->addColumn('qty_sum', function($row){ + $val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") + ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") + ->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") + ->groupBy("m.description") + ->where("m.description", strval($row->material_name)) + ->where("ram.activity_id", $row->activity_id)->first(); + return $val_qty_act ? $val_qty_act->qty_sum : '-'; + }) + ->addColumn('status_activity', function($row){ + $val_status = AssignMaterial::select("status_activity") + ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') + ->where('m.description', '=', $row->material_name) + ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); + return $val_status ? $val_status->status_activity : null; + }) + ->addColumn('start_activity', function($row){ + $val_start = AssignMaterial::select("start_activity") + ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') + ->where('m.description', '=', $row->material_name) + ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); + return $val_start ? $val_start->start_activity : null; + }) + ->addColumn('finish_activity', function($row){ + $val_finish = AssignMaterial::select("finish_activity") + ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') + ->where('m.description', '=', $row->material_name) + ->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); + return $val_finish ? $val_finish->finish_activity : null; + }) + ->addColumn('uom', function($row){ + $val_uom = RequestMaterial::select("uom") + ->where('description', '=', $row->material_name)->first(); + return $val_uom ? $val_uom->uom : null; + }) + ->addColumn('action', function($row){ + $actionBtn = ''; + $actionBtn .= ''; + return $actionBtn; + }) + ->rawColumns(['action'])->make(true); + } + + public function ForReportActivityByMaterial(Request $request){ + $id_activity = $request->idact; + $data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") + ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") + ->where('assign_material_to_activity.activity_id', $id_activity)->get(); + foreach ($data as $key) { + # code... + + $val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty"); + } + $countData = $data->count(); + if($data){ + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + }else{ + return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); + } + } } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 6324987..67ad016 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -4,85 +4,70 @@ namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; use App\Models\User; use App\Models\Role; -use App\Models\Project; -use App\Models\UserProject; class AuthController extends Controller { - /** - * Create a new AuthController instance. - * - * @return void - */ - public function __construct() - { - $this->middleware('auth:api', ['except' => ['login']]); - } - - public function login(Request $request) - { - $username = $request->username; - $password = $request->password; - $is_mobile = $request->is_mobile; - - if(empty($username) || empty($password)){ - return response()->json(['status'=>'error','message'=>'You must fill all the fields'], 400); - } - - $credentials = array( - "username"=> $username, - "password"=> md5($password) - ); - - $user = User::where('username', $username)->where('password', md5($password)) - ->first(); - - if($is_mobile){ - $fcm_token = $request->fcm_token; - - if(!$fcm_token || $fcm_token==""){ - return response()->json(['status'=>'error','message'=>'FCM Token is required'], 400); - die(); - } - - $dataUpdateFcm = array( - "fcm_token"=>$fcm_token - ); - - $hr = User::find($user->id); - - if($hr){ - $result = $hr->update($dataUpdateFcm); - } - } - - $dataRole = Role::find($user->role_id); - - if($dataRole){ - $user->role = $dataRole; - } - - - if (! $token =Auth::login($user)) { - return response()->json(['error' => 'Unauthorized'], 401); - } - - return $this->respondWithToken($token, $user); - } - - protected function respondWithToken($token, $user) - { - return response()->json([ - 'code' => 200, - 'data' => array( - 'data_user' => $user, - 'access_token' => $token, - 'token_type' => 'bearer', - 'expires_in' => auth()->factory()->getTTL() * 60 - ), - ]); - } + public function __construct() + { + $this->middleware('auth:api', ['except' => ['login']]); + } + + public function login(Request $request) + { + $username = $request->username; + $password = $request->password; + $remember = $request->remember; + $is_mobile = $request->is_mobile; + + if(empty($username) || empty($password)) + return response()->json(['status'=>'error','message'=>'You must fill all the fields'], 400); + + $user = User::where('username', $username)->where('password', md5($password))->first(); + + if($is_mobile){ + $fcm_token = $request->fcm_token; + + if(!$fcm_token || $fcm_token=="") + return response()->json(['status'=>'error','message'=>'FCM Token is required'], 400); + + $dataUpdateFcm = array( + "fcm_token"=>$fcm_token + ); + + $hr = User::find($user->id); + + if($hr) + $hr->update($dataUpdateFcm); + } + + $dataRole = Role::find($user->role_id); + + if($dataRole) + $user->role = $dataRole; + + if (! $token =Auth::login($user)) + return response()->json(['error' => 'Unauthorized'], 401); + + $ttl = 60; + if($remember) + $ttl = 10080; + + // todo : change existing md5 hashed function to laravel's originally bcrypt + /* $token = auth()->setTTL($ttl)->attempt(['username' => $username, 'password' => Hash::make($password)]); */ + /* dd(response()->json(['code'=>'200', 'token' => $token, 'ttl' => $ttl])); */ + + return response()->json([ + 'code' => 200, + 'data' => array( + 'data_user' => $user, + 'access_token' => $token, + 'token_type' => 'bearer', + 'expires_in' => auth()->factory()->getTTL() * $ttl, + ), + ]); + } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 842dd77..cefe1a4 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -10,7 +10,7 @@ class Controller extends BaseController protected $pathImage = "assets/image/"; protected $pathDocument = "assets/file/project/"; protected $pathActivityDocument = "assets/file/activity/"; - protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth', + protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth']; protected $currentDate; protected $currentName; @@ -35,14 +35,14 @@ class Controller extends BaseController if($condition){ if(isset($condition['joins'])){ $selectColumn = []; - $no = 0; + $no = 0; foreach($condition['joins'] as $join){ $tableJoin = isset($join['name1']) ? $join['name1'] : $alias; $tableName = $join['name']; $columnJoin = $join['column_join']; // foreign key table sini $columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan $columnResult = $join['column_results']; - + foreach($columnResult as $sColumn){ $builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); } @@ -50,7 +50,7 @@ class Controller extends BaseController $no++; } } - + if(isset($condition['columns'])){ $listWhere = $condition['columns']; @@ -71,7 +71,7 @@ class Controller extends BaseController if(isset($condition['group_column'])){ $builder = $this->groupWhere($builder, $condition['group_column'], $alias); } - + $data['count'] = clone $builder; if(isset($condition['paging'])){ @@ -225,7 +225,7 @@ class Controller extends BaseController ->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) ->where("ahp.proyek_id", $proyek_id) ->get(); - + $totalCost = 0; foreach ($dataHuman as $human) { $uom = $human->uom_standart_rate; @@ -242,7 +242,7 @@ class Controller extends BaseController $standarRate = $human->standart_rate; $maxUsed = $human->max_used/100; $totalCost = ($standarRate*$duration)*$maxUsed; - return $totalCost; + return $totalCost; } private function calculateMaterialCost($activity_id, $proyek_id) @@ -251,11 +251,6 @@ class Controller extends BaseController return $totalCost; } - private function calculateToolsCost($activity_id, $proyek_id) - { - - } - protected function updatedCostPlanning($id) { $sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))'))->where("parent_id", $id)->first(); @@ -272,4 +267,4 @@ class Controller extends BaseController } } } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 9a6b278..2623b1c 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -6,247 +6,220 @@ use Illuminate\Http\Request; use App\Models\Project; use App\Models\Activity; use App\Models\ReportActivity; -use App\Models\UserToActivity; -use DB; +use App\Models\Role; class DashboardController extends Controller { - public function costPlanningActual(Request $request) - { - $dataPayload = $request->all(); - $dataMaxVersionGantt = []; - foreach ($dataPayload['project_id'] as $val) { - $dataMaxVersionGantt[] = $this->getMaxVersionGantt($val); - } - - $dataFinal=[]; - foreach ($dataMaxVersionGantt as $val) { - $data = Activity::select('m_activity.id', 'm_activity.proyek_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.rencana_biaya', 'm_activity.biaya_actual', 'mp.nama as proyek_name')->join("m_proyek as mp", "m_activity.proyek_id", "=", "mp.id")->where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->orderBy('id', 'asc')->get(); - $dataFinal[] = array("proyek_id" => $val['proyek_id'], "proyek_name" => isset($data) && count($data) > 0 ? $data[0]['proyek_name'] : "-", "version_gantt_id" => $val['last_version_gantt'], "data" => $data); - } - - if($dataPayload){ - return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'totalRecord'=>1], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); - } - } - - public function getMaxVersionGantt($id){ - $data = Activity::select(Activity::raw('MAX(version_gantt_id) as last_version_gantt'))->where("proyek_id", $id)->first(); - return array("last_version_gantt"=>$data->last_version_gantt, "proyek_id" => $id, "proyek_name" => $data->proyek_name); - } - - public function percentagePlanningActual(Request $request) - { - $dataPayload = $request->all(); - $dataMaxVersionGantt = []; - foreach ($dataPayload['project_id'] as $val) { - $dataMaxVersionGantt[] = $this->getMaxVersionGantt($val); - } - $dataFinal=[]; - foreach ($dataMaxVersionGantt as $val) { - $data = Activity::select('m_activity.id', 'm_activity.proyek_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.persentase_progress', 'm_activity.persentase_bobot', 'm_activity.bobot_planning', 'mp.nama as proyek_name')->join("m_proyek as mp", "m_activity.proyek_id", "=", "mp.id")->where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->orderBy('id', 'asc')->get(); - $dataFinal[] = array("proyek_id" => $val['proyek_id'], "proyek_name" => isset($data) && count($data) > 0 ? $data[0]['proyek_name'] : "-", "version_gantt_id" => $val['last_version_gantt'], "data" => $data); - - } - - if($dataPayload){ - return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'totalRecord'=>1], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); - } - } - - public function list() - { - $data = Role::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); - } - } - - - - - - - public function getActivityByProjectId($projectId) { - $output = []; - $data = Activity::select('id')->where('proyek_id', $projectId)->get(); - if (count($data) > 0) { - foreach ($data as $actData) { - $output[] = $actData->id; - } - } - return $output; - } - - /* for statusProyek, I want something output like this - const statusProyek = [ - { - "id": "1", - "proyek_name": "Pembuatan Aplikasi Survey Covid Varian Baru", // ambil dari m_proyek - "total_task": 80, // ambil dari m_activity -> SUM(jumlah_pekerjaan) where proyek_id berdasarkan proyek_id terpilih - "task_on_progress": 60, // ambil dari report_activity -> SUM(job_count_report) where activity_id berdasarkan activity_id terpilih - "day_left": 7, // ambil dari m_proyek, cari sisa hari (end_date - hari ini) - "percentage": 75 // (task_on_progress / total_task * 100) - }, - { - "id": "2", - "proyek_name": "Pembangunan Jembatan Layang", - "total_task": 70, // SELECT SUM(jumlah_pekerjaan) FROM public.m_activity WHERE proyek_id IN (11); - "task_on_progress": 70, // SELECT SUM(job_count_report) FROM public.report_activity WHERE activity_id IN (349, 355); - "day_left": 0, - "percentage": 100 - }, - ... - ] - */ - public function statusProyek(Request $request) { - $dataPayload = $request->all(); - $reqProject = []; - $dataFinal = []; - - if (!isset($dataPayload['project_id'])) { - return response()->json(['status'=>'failed','message'=>'Undefined project_id','code'=>400], 400); - } - - foreach ($dataPayload['project_id'] as $val) { - $prj["project_id"] = $val; - $prj["activity_id"] = $this->getActivityByProjectId($val); - - $reqProject[] = $prj; - } - - if (count($reqProject) > 0) { - $row = []; - - for ($i=0; $i < count($reqProject); $i++) { - $dataMaxVersionGantt = Activity::select(Activity::raw('MAX(version_gantt_id) as last_version_gantt'))->where("proyek_id", $reqProject[$i]['project_id'])->first(); - $last_version_gantt = $dataMaxVersionGantt->last_version_gantt; - $queryProject = Project::select('id', 'nama', 'mulai_proyek', 'akhir_proyek')->where('id',$reqProject[$i]['project_id'])->first(); - $sum_jumlah_pekerjaan = Activity::where('proyek_id', $reqProject[$i]['project_id'])->where('version_gantt_id', $last_version_gantt)->sum("jumlah_pekerjaan"); - $count_activity = Activity::where('proyek_id', $reqProject[$i]['project_id'])->where('version_gantt_id', $last_version_gantt)->count("id"); - $count_activity_done = Activity::where('proyek_id', $reqProject[$i]['project_id'])->where('persentase_progress', '100')->where('version_gantt_id', $last_version_gantt)->count("id"); - $progress_percentage = Activity::where('proyek_id', $reqProject[$i]['project_id'])->whereNull('parent_id')->where('version_gantt_id', $last_version_gantt)->sum("persentase_progress"); - $count_progress_percentage = Activity::where('proyek_id', $reqProject[$i]['project_id'])->whereNull('parent_id')->where('version_gantt_id', $last_version_gantt)->count("persentase_progress"); - - $progress_actual = Activity::select('id', 'bobot_planning', 'persentase_progress')->where('proyek_id', $reqProject[$i]['project_id'])->whereNull('parent_id')->where('version_gantt_id', $last_version_gantt)->get(); - $current_progress = 0; - foreach($progress_actual as $objRow) { - $current_progress += ($objRow->bobot_planning * $objRow->persentase_progress) / 100; - } - - if (count($reqProject[$i]['activity_id']) > 0) { - for ($j=0; $j < count($reqProject[$i]['activity_id']); $j++) { - $sum_job_count_report = ReportActivity::whereIn('activity_id', $reqProject[$i]['activity_id'])->sum("job_count_report"); - } - } - - if (!isset($queryProject->id)) { - return response()->json(['status'=>'failed','message'=>'Project with id='.$reqProject[$i]['project_id'].' is not found!','code'=>400], 400); - } - - $now = time(); - $akhir_proyek = strtotime($queryProject->akhir_proyek); - $datediff = $akhir_proyek - $now; - - $mulai_proyek = strtotime($queryProject->mulai_proyek); - $total_kontrak = $akhir_proyek - $mulai_proyek; - - $row["id"] = $queryProject->id; - $row["proyek_name"] = $queryProject->nama; - $row["mulai_proyek"] = $queryProject->mulai_proyek; - $row["akhir_proyek"] = $queryProject->akhir_proyek; - $row["total_kontrak"] = round($total_kontrak / (60 * 60 * 24)); - $row["total_task"] = $sum_jumlah_pekerjaan; - $row["task_on_progress"] = $sum_job_count_report; - $row["count_activity"] = $count_activity; - $row["count_activity_done"] = $count_activity_done; - $row["day_left"] = round($datediff / (60 * 60 * 24)); - $row["percentage"] = round($current_progress,3); - $row["count_progress_percentage"] = $count_progress_percentage; - - $dataFinal[] = $row; - } - } - - if($dataFinal){ - return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'totalRecord'=>count($dataFinal)], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get status proyek, please try again later!','code'=>400], 400); - } - - } - - public function curvaS(Request $request) - { - $dataPayload = $request->all(); - $dataMaxVersionGantt = []; - foreach ($dataPayload['project_id'] as $val) { - $dataMaxVersionGantt[] = $this->getMaxVersionGantt($val); - } - $dataFinal=[]; - foreach ($dataMaxVersionGantt as $val) { - $data = Activity::select('m_activity.id', 'm_activity.proyek_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.persentase_progress', 'm_activity.persentase_bobot', 'm_activity.bobot_planning', 'm_activity.biaya_actual', 'mp.nama as proyek_name')->join("m_proyek as mp", "m_activity.proyek_id", "=", "mp.id")->where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->orderBy('id', 'asc')->get(); - $totalCostPlanning = Activity::where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->sum('rencana_biaya'); - $dataBobotPlan =[]; - for ($i=0; $i < count($data); $i++) { - $tmpp = 0; - $tmpa = 0; - $tmpbc = 0; - $tmpac = 0; - for ($x=$i; $x >= 0 ; $x--) { - $tmpp += $data[$x]['bobot_planning']; - $tmpa += ($data[$x]['persentase_progress'] * $data[$x]['bobot_planning'])/100; - $tmpbc += ((($data[$x]['persentase_progress'] * $data[$x]['bobot_planning'])/100)*$totalCostPlanning)/100; - $tmpac += $data[$x]['biaya_actual']; - } - - $data[$i]['cal_bobot_p'] = round($tmpp,2); - if($i > 0 ){ - if($data[$i-1]['cal_bobot_a'] != null){ - if($data[$i-1]['cal_bobot_a'] == round($tmpa,2)){ - $data[$i]['cal_bobot_a'] = null; - }else{ - $data[$i]['cal_bobot_a'] = round($tmpa,2); - } - }else{ - $data[$i]['cal_bobot_a'] = null; - } - }else{ - $data[$i]['cal_bobot_a'] = round($tmpa,2); - } - $data[$i]['cal_budget_cost'] = round($tmpbc,2); - - if($i > 0 ){ - if($data[$i-1]['cal_actual_cost'] != null){ - if($data[$i-1]['cal_actual_cost'] == round($tmpac,2)){ - $data[$i]['cal_actual_cost'] = null; - }else{ - $data[$i]['cal_actual_cost'] = round($tmpac,2); - } - }else{ - $data[$i]['cal_actual_cost'] = null; - } - }else{ - $data[$i]['cal_actual_cost'] = round($tmpac,2); - } - } - - $dataFinal[] = array("proyek_id" => $val['proyek_id'], "proyek_name" => isset($data) && count($data) > 0 ? $data[0]['proyek_name'] : "-", "version_gantt_id" => $val['last_version_gantt'], "data" => $data); - - } - - if($dataPayload){ - return response()->json(['status'=>'success','code'=>200, 'data'=>$dataFinal, 'totalRecord'=>1], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); - } - } -} \ No newline at end of file + public function costPlanningActual(Request $request) + { + $dataPayload = $request->all(); + $dataMaxVersionGantt = []; + foreach ($dataPayload['project_id'] as $val) { + $dataMaxVersionGantt[] = $this->getMaxVersionGantt($val); + } + + $dataFinal=[]; + foreach ($dataMaxVersionGantt as $val) { + $data = Activity::select('m_activity.id', 'm_activity.proyek_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.rencana_biaya', 'm_activity.biaya_actual', 'mp.nama as proyek_name')->join("m_proyek as mp", "m_activity.proyek_id", "=", "mp.id")->where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->orderBy('id', 'asc')->get(); + $dataFinal[] = array("proyek_id" => $val['proyek_id'], "proyek_name" => isset($data) && count($data) > 0 ? $data[0]['proyek_name'] : "-", "version_gantt_id" => $val['last_version_gantt'], "data" => $data); + } + + if(!$dataFinal) + return response()->json(['status'=>'failed','message'=>'Data not found','code'=> 404], 404); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'totalRecord'=>1], 200); + } + + public function getMaxVersionGantt($id){ + $data = Activity::select(Activity::raw('MAX(version_gantt_id) as last_version_gantt'))->where("proyek_id", $id)->first(); + return array("last_version_gantt"=>$data->last_version_gantt, "proyek_id" => $id, "proyek_name" => $data->proyek_name); + } + + public function percentagePlanningActual(Request $request) + { + $dataPayload = $request->all(); + $dataMaxVersionGantt = []; + foreach ($dataPayload['project_id'] as $val) { + $dataMaxVersionGantt[] = $this->getMaxVersionGantt($val); + } + $dataFinal=[]; + foreach ($dataMaxVersionGantt as $val) { + $data = Activity::select('m_activity.id', 'm_activity.proyek_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.persentase_progress', 'm_activity.persentase_bobot', 'm_activity.bobot_planning', 'mp.nama as proyek_name')->join("m_proyek as mp", "m_activity.proyek_id", "=", "mp.id")->where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->orderBy('id', 'asc')->get(); + $dataFinal[] = array("proyek_id" => $val['proyek_id'], "proyek_name" => isset($data) && count($data) > 0 ? $data[0]['proyek_name'] : "-", "version_gantt_id" => $val['last_version_gantt'], "data" => $data); + } + + if(!$dataFinal) + return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'totalRecord'=>1], 200); + } + + public function list() + { + $data = Role::all(); + $countData = $data->count(); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); + + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + } + + public function getActivityByProjectId($projectId) { + $output = []; + $data = Activity::select('id')->where('proyek_id', $projectId)->get(); + foreach ($data as $actData) { + $output[] = $actData->id; + } + return $output; + } + + /* + const statusProyek = [ + { + "id": "1", + "proyek_name": "Pembuatan Aplikasi Survey Covid Varian Baru", // ambil dari m_proyek + "total_task": 80, // ambil dari m_activity -> SUM(jumlah_pekerjaan) where proyek_id berdasarkan proyek_id terpilih + "task_on_progress": 60, // ambil dari report_activity -> SUM(job_count_report) where activity_id berdasarkan activity_id terpilih + "day_left": 7, // ambil dari m_proyek, cari sisa hari (end_date - hari ini) + "percentage": 75 // (task_on_progress / total_task * 100) + }, + { + "id": "2", + "proyek_name": "Pembangunan Jembatan Layang", + "total_task": 70, // SELECT SUM(jumlah_pekerjaan) FROM public.m_activity WHERE proyek_id IN (11); + "task_on_progress": 70, // SELECT SUM(job_count_report) FROM public.report_activity WHERE activity_id IN (349, 355); + "day_left": 0, + "percentage": 100 + }, + ... + ] + */ + public function statusProyek(Request $request) { + $dataPayload = $request->all(); + $reqProject = $dataFinal = []; + + if (!isset($dataPayload['project_id'])) + return response()->json(['status'=>'failed','message'=>'Undefined project_id','code'=>400], 400); + + foreach ($dataPayload['project_id'] as $val) { + $prj["project_id"] = $val; + $prj["activity_id"] = $this->getActivityByProjectId($val); + $reqProject[] = $prj; + } + + if (count($reqProject) > 0) { + $row = []; + + for ($i=0; $i < count($reqProject); $i++) { + $dataMaxVersionGantt = Activity::select(Activity::raw('MAX(version_gantt_id) as last_version_gantt'))->where("proyek_id", $reqProject[$i]['project_id'])->first(); + $last_version_gantt = $dataMaxVersionGantt->last_version_gantt; + $queryProject = Project::select('id', 'nama', 'mulai_proyek', 'akhir_proyek')->where('id',$reqProject[$i]['project_id'])->first(); + $sum_jumlah_pekerjaan = Activity::where('proyek_id', $reqProject[$i]['project_id'])->where('version_gantt_id', $last_version_gantt)->sum("jumlah_pekerjaan"); + $count_activity = Activity::where('proyek_id', $reqProject[$i]['project_id'])->where('version_gantt_id', $last_version_gantt)->count("id"); + $count_activity_done = Activity::where('proyek_id', $reqProject[$i]['project_id'])->where('persentase_progress', '100')->where('version_gantt_id', $last_version_gantt)->count("id"); + $count_progress_percentage = Activity::where('proyek_id', $reqProject[$i]['project_id'])->whereNull('parent_id')->where('version_gantt_id', $last_version_gantt)->count("persentase_progress"); + $progress_actual = Activity::select('id', 'bobot_planning', 'persentase_progress')->where('proyek_id', $reqProject[$i]['project_id'])->whereNull('parent_id')->where('version_gantt_id', $last_version_gantt)->get(); + $current_progress = 0; + + foreach($progress_actual as $objRow) { + $current_progress += ($objRow->bobot_planning * $objRow->persentase_progress) / 100; + } + if (count($reqProject[$i]['activity_id']) > 0) { + for ($j=0; $j < count($reqProject[$i]['activity_id']); $j++) { + $sum_job_count_report = ReportActivity::whereIn('activity_id', $reqProject[$i]['activity_id'])->sum("job_count_report"); + } + } + if (!isset($queryProject->id)) + return response()->json(['status'=>'failed','message'=>'Project with id='.$reqProject[$i]['project_id'].' is not found!','code'=>400], 400); + + $now = time(); + $akhir_proyek = strtotime($queryProject->akhir_proyek); + $datediff = $akhir_proyek - $now; + + $mulai_proyek = strtotime($queryProject->mulai_proyek); + $total_kontrak = $akhir_proyek - $mulai_proyek; + + $row["id"] = $queryProject->id; + $row["proyek_name"] = $queryProject->nama; + $row["mulai_proyek"] = $queryProject->mulai_proyek; + $row["akhir_proyek"] = $queryProject->akhir_proyek; + $row["total_kontrak"] = round($total_kontrak / (60 * 60 * 24)); + $row["total_task"] = $sum_jumlah_pekerjaan; + $row["task_on_progress"] = $sum_job_count_report; + $row["count_activity"] = $count_activity; + $row["count_activity_done"] = $count_activity_done; + $row["day_left"] = round($datediff / (60 * 60 * 24)); + $row["percentage"] = round($current_progress,3); + $row["count_progress_percentage"] = $count_progress_percentage; + + $dataFinal[] = $row; + } + } + + if(empty($dataFinal)) + return response()->json(['status'=>'failed','message'=>'failed get status proyek, please try again later!','code'=>400], 400); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataFinal, 'totalRecord'=>count($dataFinal)], 200); + } + + public function curvaS(Request $request) + { + $dataPayload = $request->all(); + $dataMaxVersionGantt = []; + $dataFinal=[]; + + foreach ($dataPayload['project_id'] as $val) { + $dataMaxVersionGantt[] = $this->getMaxVersionGantt($val); + } + + foreach ($dataMaxVersionGantt as $val) { + $data = Activity::select('m_activity.id', 'm_activity.proyek_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.persentase_progress', 'm_activity.persentase_bobot', 'm_activity.bobot_planning', 'm_activity.biaya_actual', 'mp.nama as proyek_name')->join("m_proyek as mp", "m_activity.proyek_id", "=", "mp.id")->where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->orderBy('id', 'asc')->get(); + $totalCostPlanning = Activity::where('proyek_id', $val['proyek_id'])->where('version_gantt_id', $val['last_version_gantt'])->whereNull('parent_id')->sum('rencana_biaya'); + + for ($i=0; $i < count($data); $i++) { + $tmpp = $tmpa = $tmpbc = $tmpac = 0; + for ($x=$i; $x >= 0 ; $x--) { + $tmpp += $data[$x]['bobot_planning']; + $tmpa += ($data[$x]['persentase_progress'] * $data[$x]['bobot_planning'])/100; + $tmpbc += ((($data[$x]['persentase_progress'] * $data[$x]['bobot_planning'])/100)*$totalCostPlanning)/100; + $tmpac += $data[$x]['biaya_actual']; + } + + $data[$i]['cal_bobot_p'] = round($tmpp,2); + + if($i > 0 ){ + if($data[$i-1]['cal_bobot_a'] != null){ + if($data[$i-1]['cal_bobot_a'] == round($tmpa,2)){ + $data[$i]['cal_bobot_a'] = null; + }else{ + $data[$i]['cal_bobot_a'] = round($tmpa,2); + } + }else{ + $data[$i]['cal_bobot_a'] = null; + } + if($data[$i-1]['cal_actual_cost'] != null){ + if($data[$i-1]['cal_actual_cost'] == round($tmpac,2)){ + $data[$i]['cal_actual_cost'] = null; + }else{ + $data[$i]['cal_actual_cost'] = round($tmpac,2); + } + }else{ + $data[$i]['cal_actual_cost'] = null; + } + }else{ + $data[$i]['cal_bobot_a'] = round($tmpa,2); + $data[$i]['cal_actual_cost'] = round($tmpac,2); + } + $data[$i]['cal_budget_cost'] = round($tmpbc,2); + } + + $dataFinal[] = array("proyek_id" => $val['proyek_id'], "proyek_name" => isset($data) && count($data) > 0 ? $data[0]['proyek_name'] : "-", "version_gantt_id" => $val['last_version_gantt'], "data" => $data); + } + + if(!$dataFinal) + return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); + + return response()->json(['status'=>'success','code'=>200, 'data'=>$dataFinal, 'totalRecord'=>1], 200); + } +} diff --git a/app/Http/Controllers/DivisiController.php b/app/Http/Controllers/DivisiController.php index 864f0eb..aa265d8 100644 --- a/app/Http/Controllers/DivisiController.php +++ b/app/Http/Controllers/DivisiController.php @@ -6,82 +6,81 @@ use Illuminate\Http\Request; use App\Models\Divisi; class DivisiController extends Controller -{ - public function add(Request $request){ - $this->validate($request, [ - 'name' => 'required', - 'description' => 'required' - ]); - $data = $request->all(); - $data['created_by'] = $this->currentName; - - $result = Divisi::create($data); - if($result){ - return response()->json(['status'=>'success','message'=>'Master divisi successfull created','code'=>200]); - }else{ - return response()->json(['status'=>'failed','message'=>'Master divisi failed created','code'=>400]); - } - } - - public function update(Request $request, $id){ - - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - } - $data = Divisi::find($id); - if($data){ - $result = $data->update($request->all()); - }else{ - return response()->json(['status'=>'failed','message'=>'Data Master divisi not found!','code'=>400], 400); - die(); - } - - if($result){ - return response()->json(['status'=>'success','message'=>'Master divisi successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'Master divisi failed updated!','code'=>400], 400); - } - } - - public function delete($id) - { - $data = Divisi::find($id); - - if($data){ - $delete = $data->delete(); - }else{ - return response()->json(['status'=>'failed','message'=>'data Master divisi not found!','code'=>400], 400); - die(); - } - - - if($delete){ - return response()->json(['status'=>'success','message'=>'Master divisi successfully deleted!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'Master divisi failed deleted!','code'=>400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_divisi'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function list() - { - $data = Divisi::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list tools request, please try again later!','code'=>400], 400); - } - } +{ + public function add(Request $request){ + $this->validate($request, [ + 'name' => 'required', + 'description' => 'required' + ]); + + $data = $request->all(); + $data['created_by'] = $this->currentName; + + $result = Divisi::create($data); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500]); + + return response()->json(['status'=>'success','message'=>'Data created!','code'=>200]); + } + + public function update(Request $request, $id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = Divisi::find($id); + + if(!$data) + return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); + + $result = $data->update($request->all()); + + if(!$result) + return response()->json(['status'=>'failed','message'=> 'Update failed!','code'=> 500], 500); + + return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); + } + + public function delete($id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = Divisi::find($id); + + if(!$data) + return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); + + $delete = $data->delete(); + + + if(!$delete) + return response()->json(['status'=>'failed','message'=> 'Delete failed!','code'=> 500], 500); + + return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200); + } + + public function search(Request $request) + { + $payload = $request->all(); + + $dataBuilder = $this->setUpPayload($payload, 'm_divisi'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function list() + { + $data = Divisi::all(); + $countData = $data->count(); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + } } diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 437871c..5402bc8 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -14,12 +14,8 @@ use App\Models\ProjectCharter; use App\Models\ProjectApproval; use App\Models\ProjectMileStone; use App\Models\ProjectParticipants; -use App\Models\UserToVersionGantt; -use App\Models\RequestMaterial; use App\Models\ShowHideColumn; -use App\Models\ToolsProject; use App\Models\VersionGantt; -use App\Models\MaterialProject; use App\Models\Image; use App\Models\CommentActivity; use App\Models\Link; @@ -30,214 +26,205 @@ use App\Models\OfficeHours; class ProjectController extends Controller { - public function add(Request $request) - { - $this->validate($request, [ - 'nama' => 'required', - 'mulai_proyek' => 'required', - 'akhir_proyek' => 'required', - 'rencana_biaya' => 'required', - 'type_proyek_id' => 'required' - ]); - - $data = $request->all(); - - $data['created_by'] = $this->currentName; - - $result = Project::create($data); - - if($result){ - $this->createOfficeHours($result->id); - $dataResultInsert = Project::where('nama', $data['nama'])->where('mulai_proyek', $data['mulai_proyek'])->first(); - return response()->json(['status'=>'success','message'=>'add data project successfully!', 'data_result' =>$dataResultInsert, 'code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'add data project failed!','code'=>400], 400); - } - } - - public function edit($id){ - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - die(); - } - - $result = Project::find($id); - - if($result){ - return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get data project, please try again later!','code'=>400], 400); - } - } - - public function update(Request $request, $id) - { - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - } - - $data = Project::find($id); - - if($data){ - $result = $data->update($request->all()); - }else{ - return response()->json(['status'=>'failed','message'=>'data project not found!','code'=>400], 400); - die(); - } - - - if($result){ - return response()->json(['status'=>'success','message'=>'data project successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'data project failed updated!','code'=>400], 400); - } - } - - private function createOfficeHours($proyek_id) - { - $dataCreate = array( - "proyek_id"=>$proyek_id, - "monday_start"=> "08:00:00", - "monday_end"=> "16:00:00", - "tuesday_start"=> "08:00:00", - "tuesday_end"=> "16:00:00", - "wednesday_start"=> "08:00:00", - "wednesday_end"=> "16:00:00", - "thursday_start"=> "08:00:00", - "thursday_end"=> "16:00:00", - "friday_start"=> "08:00:00", - "friday_end"=> "16:00:00", - "saturday_start"=> "08:00:00", - "saturday_end"=> "16:00:00", - "sunday_start"=> "08:00:00", - "sunday_end"=> "16:00:00", - "created_by"=> $this->currentName - ); - - OfficeHours::create($dataCreate); - - return true; - } - - public function delete($id) - { - $data = Project::find($id); - - if($data){ - $this->deleteRelative($id); - $delete = $data->delete(); - }else{ - return response()->json(['status'=>'failed','message'=>'data project not found!','code'=>400], 400); - die(); - } - - - if($delete){ - return response()->json(['status'=>'success','message'=>'data project successfully deleted!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'data project failed deleted!','code'=>400], 400); - } - } - - private function deleteRelative($project_id) - { - UserToProyek::where('proyek_id', $project_id)->delete(); - UserToActivity::where('proyek_id', $project_id)->delete(); - AssignMaterial::where('proyek_id', $project_id)->delete(); - ProjectCharter::where('proyek_id', $project_id)->delete(); - ProjectApproval::where('proyek_id', $project_id)->delete(); - ProjectMileStone::where('proyek_id', $project_id)->delete(); - ProjectParticipants::where('proyek_id', $project_id)->delete(); - $this->deleteVersionGantt($project_id); - $this->deleteDokumenProject($project_id); - } - - private function deleteVersionGantt($project_id) - { - $dataVg = VersionGantt::where("proyek_id", $project_id)->pluck("id"); - $vhIds = $dataVg->all(); - $activity = Activity::whereIn("version_gantt_id", $vhIds)->pluck('id'); - $activityIds = $activity->all(); - $dataRa = ReportActivity::whereIn("activity_id", $activityIds)->get(); - foreach ($dataRa as $ra) { - $images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get(); - foreach ($images as $image) { - if(file_exists($this->pathImage.$image->image)){ - unlink($this->pathImage.$image->image); - } - } - Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete(); - } - $dataAd = ActivityDokumen::whereIn("activity_id", $activityIds)->get(); - foreach ($dataAd as $ad) { - if(file_exists($this->pathActivityDocument.$ad->file)){ - unlink($this->pathActivityDocument.$ad->file); - } - } - ActivityDokumen::whereIn("activity_id", $activityIds)->delete(); - CommentActivity::whereIn("activity_id", $activityIds)->delete(); - Holiday::where("proyek_id", $project_id)->delete(); - VersionGantt::where("proyek_id", $project_id)->delete(); - Link::whereIn("version_gantt_id", $vhIds)->delete(); - ShowHideColumn::whereIn("version_gantt_id", $vhIds)->delete(); - Activity::whereIn("version_gantt_id", $vhIds)->delete(); - ReportActivity::whereIn("activity_id", $activityIds)->delete(); - } - - private function deleteDokumenProject($project_id) - { - $dataDokumen = DokumenProject::where("type_dokumen", "project-document-out-folder")->where('ref_id', $project_id)->get(); - - foreach ($dataDokumen as $dokumen) { - if(file_exists($this->pathDocument.$dokumen->file)){ - unlink($this->pathDocument.$dokumen->file); - } - } - DokumenProject::where("type_dokumen", "project-document-out-folder")->where('ref_id', $project_id)->delete(); - - $dataFolder = FolderDocumentProyek::where('proyek_id', $project_id)->pluck("id"); - $ref_ids = $dataFolder->all(); - $dataDokumen = DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->get(); - foreach ($dataDokumen as $dokumen) { - if(file_exists($this->pathDocument.$dokumen->file)){ - unlink($this->pathDocument.$dokumen->file); - } - } - - DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->delete(); - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_proyek'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function list() - { - $data = Project::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list project, please try again later!','code'=>400], 400); - } - } - - public function getListProjectTask($id){ - $data = UserToActivity::select("assign_hr_to_activity.user_id as user_id","m_proyek.*")->where("assign_hr_to_activity.user_id", $id)->join('m_proyek', 'assign_hr_to_activity.proyek_id', '=', 'm_proyek.id') - ->groupBy("m_proyek.proyek_id")->get(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list project, please try again later!','code'=>400], 400); - } - } + + public function add(Request $request) + { + $this->validate($request, [ + 'nama' => 'required', + 'mulai_proyek' => 'required', + 'akhir_proyek' => 'required', + 'rencana_biaya' => 'required', + 'type_proyek_id' => 'required' + ]); + + $data = $request->all(); + + $data['created_by'] = $this->currentName; + + $result = Project::create($data); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500], 500); + + $this->createOfficeHours($result->id); + $dataResultInsert = Project::where('nama', $data['nama'])->where('mulai_proyek', $data['mulai_proyek'])->first(); + + return response()->json(['status'=>'success','message'=>'Data added!', 'data_result' =>$dataResultInsert, 'code'=> 200], 200); + } + + public function edit($id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $result = Project::find($id); + + if(!$result) + return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); + + return response()->json(['status'=>'success','code'=> 200,'data'=>$result], 200); + } + + public function update(Request $request, $id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = Project::find($id); + + if(!$data) + return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); + + $result = $data->update($request->all()); + + if(!$result) + return response()->json(['status'=>'failed','message'=> 'Failed to update!','code'=> 500], 500); + + return response()->json(['status'=>'success','message'=>'Data updated!','code' => 200], 200); + } + + private function createOfficeHours($proyek_id) + { + $dataCreate = array( + "proyek_id"=>$proyek_id, + "monday_start"=> "08:00:00", + "monday_end"=> "16:00:00", + "tuesday_start"=> "08:00:00", + "tuesday_end"=> "16:00:00", + "wednesday_start"=> "08:00:00", + "wednesday_end"=> "16:00:00", + "thursday_start"=> "08:00:00", + "thursday_end"=> "16:00:00", + "friday_start"=> "08:00:00", + "friday_end"=> "16:00:00", + "saturday_start"=> "08:00:00", + "saturday_end"=> "16:00:00", + "sunday_start"=> "08:00:00", + "sunday_end"=> "16:00:00", + "created_by"=> $this->currentName + ); + + OfficeHours::create($dataCreate); + + return true; + } + + public function delete($id) + { + $data = Project::find($id); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + $this->deleteRelative($id); + + if(!$data->delete()) + return response()->json(['status'=>'failed','message'=>'Delete failed!','code'=> 500], 500); + + return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); + } + + private function deleteRelative($project_id) + { + UserToProyek::where('proyek_id', $project_id)->delete(); + UserToActivity::where('proyek_id', $project_id)->delete(); + AssignMaterial::where('proyek_id', $project_id)->delete(); + ProjectCharter::where('proyek_id', $project_id)->delete(); + ProjectApproval::where('proyek_id', $project_id)->delete(); + ProjectMileStone::where('proyek_id', $project_id)->delete(); + ProjectParticipants::where('proyek_id', $project_id)->delete(); + $this->deleteVersionGantt($project_id); + $this->deleteDokumenProject($project_id); + } + + private function deleteVersionGantt($project_id) + { + $dataVg = VersionGantt::where("proyek_id", $project_id)->pluck("id"); + $vhIds = $dataVg->all(); + $activity = Activity::whereIn("version_gantt_id", $vhIds)->pluck('id'); + $activityIds = $activity->all(); + $dataRa = ReportActivity::whereIn("activity_id", $activityIds)->get(); + foreach ($dataRa as $ra) { + $images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get(); + foreach ($images as $image) { + if(file_exists($this->pathImage.$image->image)){ + unlink($this->pathImage.$image->image); + } + } + Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete(); + } + $dataAd = ActivityDokumen::whereIn("activity_id", $activityIds)->get(); + foreach ($dataAd as $ad) { + if(file_exists($this->pathActivityDocument.$ad->file)){ + unlink($this->pathActivityDocument.$ad->file); + } + } + ActivityDokumen::whereIn("activity_id", $activityIds)->delete(); + CommentActivity::whereIn("activity_id", $activityIds)->delete(); + Holiday::where("proyek_id", $project_id)->delete(); + VersionGantt::where("proyek_id", $project_id)->delete(); + Link::whereIn("version_gantt_id", $vhIds)->delete(); + ShowHideColumn::whereIn("version_gantt_id", $vhIds)->delete(); + Activity::whereIn("version_gantt_id", $vhIds)->delete(); + ReportActivity::whereIn("activity_id", $activityIds)->delete(); + } + + private function deleteDokumenProject($project_id) + { + $dataDokumen = DokumenProject::where("type_dokumen", "project-document-out-folder")->where('ref_id', $project_id)->get(); + + foreach ($dataDokumen as $dokumen) { + if(file_exists($this->pathDocument.$dokumen->file)){ + unlink($this->pathDocument.$dokumen->file); + } + } + DokumenProject::where("type_dokumen", "project-document-out-folder")->where('ref_id', $project_id)->delete(); + + $dataFolder = FolderDocumentProyek::where('proyek_id', $project_id)->pluck("id"); + $ref_ids = $dataFolder->all(); + $dataDokumen = DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->get(); + foreach ($dataDokumen as $dokumen) { + if(file_exists($this->pathDocument.$dokumen->file)){ + unlink($this->pathDocument.$dokumen->file); + } + } + + DokumenProject::where("type_dokumen", "project-document-in-folder")->whereIn('ref_id', $ref_ids)->delete(); + } + + public function search(Request $request) + { + $payload = $request->all(); + + $dataBuilder = $this->setUpPayload($payload, 'm_proyek'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function list() + { + $data = Project::all(); + $countData = $data->count(); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + } + + public function getListProjectTask($id){ + $data = UserToActivity::select("assign_hr_to_activity.user_id as user_id","m_proyek.*") + ->where("assign_hr_to_activity.user_id", $id) + ->join('m_proyek', 'assign_hr_to_activity.proyek_id', '=', 'm_proyek.id') + ->groupBy("m_proyek.proyek_id") + ->get(); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + return response()->json(['status'=>'success','code'=>200,'data'=>$data], 200); + } } diff --git a/app/Http/Controllers/ProjectDokumenController.php b/app/Http/Controllers/ProjectDokumenController.php index 9b1ab7c..466f09b 100644 --- a/app/Http/Controllers/ProjectDokumenController.php +++ b/app/Http/Controllers/ProjectDokumenController.php @@ -7,93 +7,94 @@ use App\Models\DokumenProject; class ProjectDokumenController extends Controller { - public function dokumenByProyekId($id){ - if($id && $id!="" && (int)$id > 0){ - $dataDokumen = DokumenProject::where("ref_id", $id)->get(); - - return response()->json(['status'=>'success','data'=>$dataDokumen,'code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'project id is required!','code'=>400], 400); - } - } - - public function delete($id) - { - if($id && $id!="" && (int)$id > 0){ - $dokumen = DokumenProject::find($id); - if($dokumen){ - if(file_exists($this->pathDocument.$dokumen->file)){ - unlink($this->pathDocument.$dokumen->file); - } - $dokumen->delete(); - return response()->json(['status'=>'success','message'=>'Dokumen deleted successfully!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'Dokumen not found!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); - } - } - - public function uploadProjectDokumen(Request $request) - { - if($request->hasFile('dokumen')){ - $dokumen = $request->file('dokumen'); - $ref_id = $request->ref_id; - $extension = $dokumen->extension(); - $name = $dokumen->getClientOriginalName(); - - $result = $dokumen->move($this->pathDocument, $name); - if($result){ - $data = [ - 'ref_id' => (int)$ref_id, - 'file' => $name, - 'type_dokumen' => isset($request->type_dokumen) ? $request->type_dokumen : 'project-document' // project-document-in-folder / project-document-out-folder - ]; - - $result = DokumenProject::create($data); - - if($result){ - return response()->json(['status'=>'success','message'=>'file upload is successfully!','code'=>200], 200); - }else{ - unlink($this->pathDocument.$name); - return response()->json(['status'=>'failed','message'=>'file upload is failed!','code'=>400], 400); - } - - }else{ - return response()->json(['status'=>'failed','message'=>'file upload is failed!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400); - } - } - - public function searchDocProject(Request $request){ - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'document_project'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function downloadDokumen($id) - { - if($id && $id!="" && (int)$id > 0){ - $dokumen = DokumenProject::find($id); - if($dokumen){ - if(file_exists($this->pathDocument.$dokumen->file)){ - $pathToFile = $this->pathDocument.$dokumen->file; - return response()->download($pathToFile); - }else{ - return response()->json(['status'=>'failed','message'=>'Dokumen not found!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Dokumen not found!','code'=>400], 400); - } - }else{ - return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); - } - } + public function dokumenByProyekId($id){ + if(empty($id) || !is_int((int)$id)) { + return response()->json(['status'=>'failed','message'=>'project id is required!','code'=>400], 400); + } + + $document = DokumenProject::where("ref_id", $id)->get(); + + if(count($document) == 0) + return response()->json(['status'=>'','message'=>'Data not found!' ,'code'=>404], 404); + + return response()->json(['status'=>'success','data'=> $document ,'code'=>200], 200); + } + + public function delete($id) + { + if(empty($id) || !is_int((int)$id)) { + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + } + + $document = DokumenProject::find($id); + if(!$document){ + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); + } + + if(file_exists($this->pathDocument.$document->file)){ + unlink($this->pathDocument.$document->file); + } + + $document->delete(); + + return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); + } + + public function uploadProjectDokumen(Request $request) + { + if($request->hasFile('dokumen')){ + $document = $request->file('dokumen'); + $ref_id = $request->ref_id; + $name = $document->getClientOriginalName(); + + $result = $document->move($this->pathDocument, $name); + if($result){ + $data = [ + 'ref_id' => (int)$ref_id, + 'file' => $name, + 'type_dokumen' => isset($request->type_dokumen) ? $request->type_dokumen : 'project-document' + ]; + + $result = DokumenProject::create($data); + + if(!$result){ + unlink($this->pathDocument.$name); + return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); + } + return response()->json(['status'=>'success','message'=>'Upload successful!','code'=>200], 200); + + } + return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); + } + return response()->json(['status'=>'failed','message'=>'File is required!','code'=>400], 400); + } + + public function searchDocProject(Request $request){ + $payload = $request->all(); + + $dataBuilder = $this->setUpPayload($payload, 'document_project'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function downloadDokumen($id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); + + $document = DokumenProject::find($id); + + if(!$document) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + if(!file_exists($this->pathDocument.$document->file)) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + $pathToFile = $this->pathDocument.$document->file; + return response()->download($pathToFile); + } } diff --git a/app/Http/Controllers/RequestMaterialController.php b/app/Http/Controllers/RequestMaterialController.php index 7a45ab5..474e2af 100644 --- a/app/Http/Controllers/RequestMaterialController.php +++ b/app/Http/Controllers/RequestMaterialController.php @@ -8,165 +8,140 @@ use App\Models\MaterialResource; class RequestMaterialController extends Controller { - public function add(Request $request){ - - $this->validate($request, [ - 'proyek_id' => 'required', - 'description' => 'required', - 'required_date' => 'required', - 'qty' => 'required', - 'uom' => 'required', - 'fom_date' => 'required', - ]); - - $data = $request->all(); - - $data['status'] = "fom"; - $data['created_by'] = $this->currentName; - - $result = RequestMaterial::create($data); - - if($result){ - return response()->json(['status'=>'success','message'=>'request material successfully!', 'data'=>$result, 'code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'request material failed!','code'=>400], 400); - } - } - - public function edit($id){ - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - die(); - } - - $result = RequestMaterial::find($id); - - if($result){ - return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get data request material, please try again later!','code'=>400], 400); - } - } - - - - - - - - public function delete($id) - { - $data = RequestMaterial::find($id); - - if($data){ - $delete = $data->delete(); - }else{ - return response()->json(['status'=>'failed','message'=>'data request material not found!','code'=>400], 400); - die(); - } - - - if($delete){ - return response()->json(['status'=>'success','message'=>'request material successfully deleted!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'request material failed deleted!','code'=>400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_req_material'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function list() - { - $data = RequestMaterial::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list request material, please try again later!','code'=>400], 400); - } - } - - public function update(Request $request, $id) - { - $dataForm = $request->all(); - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - die(); - } - $data = RequestMaterial::find($id); - if($data){ - if(!isset($dataForm['status'])){ - $resultUpdate = $data->update($request->all()); - if($resultUpdate){ - return response()->json(['status'=>'success','message'=>'request material successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'request material failed updated!','code'=>400], 400); - } - die(); - } - if($dataForm['status']=="receipt to warehouse"){ - $dataM = MaterialResource::where('name', 'ilike', $data->description)->first(); - if($dataM){ - $result = $data->update($request->all()); - $payloadMQty = $dataM->qty + $data->qty_received; - $resultUpdateM = MaterialResource::where('id', $dataM->id)->update(['qty' => $payloadMQty]); - return response()->json(['status'=>'success', 'code'=>200], 200); - }else{ - $result = $data->update($request->all()); - $dataPayloadM = array( - "name" => $dataForm['description'], - "uom" => $dataForm['uom'], - "unit_price" => 0, - "description" => $dataForm['description'], - "qty" => $data->qty_received, - "status" => "Barang tersedia", - "created_by" => $this->currentName - ); - $result = MaterialResource::create($dataPayloadM); - if($result){ - return response()->json(['status'=>'success','message'=>'add data material resource successfully!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'add data material resource failed!','code'=>400], 400); - } - } - - }else if($dataForm['status']=="receipt to site"){ - $result = $data->update($request->all()); - $dataM = MaterialResource::where('name', 'ilike', $data->description)->first(); - if($dataM){ - $result = $data->update($request->all()); - $payloadMQty = $dataM->qty - $data->qty_received; - - if($payloadMQty < 0){ - return response()->json(['status'=>'failed','message'=>'update status receipt to site request material resource failed, because material is not exist in warehouse!','code'=>400], 400); - die(); - } - $resultUpdateM = MaterialResource::where('id', $dataM->id)->update(['qty' => $payloadMQty]); - return response()->json(['status'=>'success', 'message'=>'request material status receipt to site successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'update status receipt to site request material resource failed, because material is not exist in warehouse!','code'=>400], 400); - } - }else{ - $resultUpdate = $data->update($request->all()); - if($resultUpdate){ - return response()->json(['status'=>'success','message'=>'request material successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'request material failed updated!','code'=>400], 400); - } - } - }else{ - return response()->json(['status'=>'failed','message'=>'data request material not found!','code'=>400], 400); - die(); - } - } + public function add(Request $request){ + $this->validate($request, [ + 'proyek_id' => 'required', + 'description' => 'required', + 'required_date' => 'required', + 'qty' => 'required', + 'uom' => 'required', + 'fom_date' => 'required', + ]); + + $data = $request->all(); + + $data['status'] = "fom"; + $data['created_by'] = $this->currentName; + + $result = RequestMaterial::create($data); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Failed to add!','code'=> 500], 500); + + return response()->json(['status'=>'success','message'=>'Data added!', 'data'=>$result, 'code'=>200], 200); + } + + public function edit($id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $result = RequestMaterial::find($id); + + if($result) + return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); + + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + } + + public function delete($id) + { + $data = RequestMaterial::find($id); + + if($data) + $delete = $data->delete(); + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); + + if($delete) + return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); + + return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); + } + + public function search(Request $request) + { + $payload = $request->all(); + $dataBuilder = $this->setUpPayload($payload, 'm_req_material'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function list() + { + $data = RequestMaterial::all(); + $countData = $data->count(); + + if($data) + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + + return response()->json(['status'=>'failed','message'=>'failed get list request material, please try again later!','code'=>400], 400); + } + + public function update(Request $request, $id) + { + $dataForm = $request->all(); + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $reqMaterial = RequestMaterial::find($id); + if(!$reqMaterial) + return response()->json(['status'=>'failed','message'=>'data request material not found!','code'=>400], 400); + + if(!isset($dataForm['status'])){ + if(!$reqMaterial->update($request->all())) + return response()->json(['status'=>'failed','message'=>'request material failed updated!','code'=>400], 400); + return response()->json(['status'=>'success','message'=>'request material successfully updated!','code'=>200], 200); + } + + if($dataForm['status']=="receipt to warehouse"){ + $materialResource = MaterialResource::where('name', 'ilike', $reqMaterial->description)->first(); + if($materialResource){ + $reqMaterial->update($request->all()); + $payloadMQty = $materialResource->qty + $reqMaterial->qty_received; + MaterialResource::where('id', $materialResource->id)->update(['qty' => $payloadMQty]); + return response()->json(['status'=>'success', 'code'=>200], 200); + } + + $reqMaterial->update($request->all()); + + $preparedMaterialResource = array( + "name" => $dataForm['description'], + "uom" => $dataForm['uom'], + "unit_price" => 0, + "description" => $dataForm['description'], + "qty" => $reqMaterial->qty_received, + "status" => "Barang tersedia", + "created_by" => $this->currentName + ); + + if(!MaterialResource::create($preparedMaterialResource )) + return response()->json(['status'=>'failed','message'=>'add data material resource failed!','code'=>400], 400); + + return response()->json(['status'=>'success','message'=>'add data material resource successfully!','code'=>200], 200); + } + + if($dataForm['status']=="receipt to site"){ + $reqMaterial->update($request->all()); + + $materialResource = MaterialResource::where('name', 'ilike', $reqMaterial->description)->first(); + if(!$materialResource) + return response()->json(['status'=>'failed','message'=>'update status receipt to site request material resource failed, because material is not exist in warehouse!','code'=>400], 400); + + $reqMaterial->update($request->all()); + $payloadMQty = $materialResource->qty - $reqMaterial->qty_received; + + if($payloadMQty < 0) + return response()->json(['status'=>'failed','message'=>'update status receipt to site request material resource failed, because material is not exist in warehouse!','code'=>400], 400); + + MaterialResource::where('id', $materialResource->id)->update(['qty' => $payloadMQty]); + return response()->json(['status'=>'success', 'message'=>'request material status receipt to site successfully updated!','code'=>200], 200); + } + + if(!$reqMaterial->update($request->all())) + return response()->json(['status'=>'failed','message'=>'request material failed updated!','code'=>400], 400); + + return response()->json(['status'=>'success','message'=>'request material successfully updated!','code'=>200], 200); + } } diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php index a1787a8..b420107 100644 --- a/app/Http/Controllers/RoleController.php +++ b/app/Http/Controllers/RoleController.php @@ -4,105 +4,98 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Role; + class RoleController extends Controller { - public function add(Request $request) - { - $this->validate($request, [ - 'name' => 'required', - 'description' => 'required' - ]); - - $data = $request->all(); - - $data['created_by'] = $this->currentName; - - $result = Role::create($data); - - if($result){ - return response()->json(['status'=>'success','message'=>'add data role successfully!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'add data role failed!','code'=>400], 400); - } - } - - public function edit($id){ - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - die(); - } - - $result = Role::find($id); - - if($result){ - return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get data role, please try again later!','code'=>400], 400); - } - } - - public function update(Request $request, $id) - { - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - } - - $data = Role::find($id); - - if($data){ - $result = $data->update($request->all()); - }else{ - return response()->json(['status'=>'failed','message'=>'data role not found!','code'=>400], 400); - die(); - } - - - if($result){ - return response()->json(['status'=>'success','message'=>'data role successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'data role failed updated!','code'=>400], 400); - } - } - - public function delete($id) - { - $data = Role::find($id); - - if($data){ - $delete = $data->delete(); - }else{ - return response()->json(['status'=>'failed','message'=>'data role not found!','code'=>400], 400); - die(); - } - - - if($delete){ - return response()->json(['status'=>'success','message'=>'data role successfully deleted!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'data role failed deleted!','code'=>400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_roles'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function list() - { - $data = Role::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); - } - } + + public function add(Request $request) + { + $this->validate($request, [ + 'name' => 'required', + 'description' => 'required' + ]); + + $data = $request->all(); + + $data['created_by'] = $this->currentName; + + $result = Role::create($data); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=>500], 500); + + return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); + } + + public function edit( $id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $result = Role::find($id); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); + + return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); + } + + public function update(Request $request, $id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = Role::find($id); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); + + $result = $data->update($request->all()); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'Failed to update the data!','code'=>500], 500); + + return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); + } + + public function delete($id) + { + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = Role::find($id); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); + + $delete = $data->delete(); + + if(!$delete) + return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=>500], 500); + + return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); + } + + public function search(Request $request) + { + $payload = $request->all(); + + $dataBuilder = $this->setUpPayload($payload, 'm_roles'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function list() + { + $data = Role::all(); + $countData = $data->count(); + + if(!$data) + return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); + + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + } } diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index 4de32b5..2b9b403 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -4,209 +4,151 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\UserToActivity; -use App\Models\ReportActivity; use App\Models\Activity; -use App\Models\Image; -use App\Models\UserToProyek; use Datatables; class UserToActivityController extends Controller -{ - public function add(Request $request){ - $this->validate($request, [ - 'activity_id' => 'required', - 'user_id' => 'required' - ]); - $data = $request->all(); - $data['created_by'] = $this->currentName; - - $result = UserToActivity::create($data); - if($result){ - $updateActivity = Activity::find($request->activity_id); - $getWorkingHours = UserToProyek::where('user_id', $request->user_id)->first(); - if($updateActivity && $getWorkingHours){ - $costPlanOld = $updateActivity==null? 0 : (int)$updateActivity->rencana_biaya; - if($getWorkingHours->uom_standart_rate == "Day"){ - $costUser = $getWorkingHours->standart_rate * $updateActivity->duration; - }else if($getWorkingHours->uom_standart_rate == "Hour"){ - $costUser = ($getWorkingHours->standart_rate * 8) * $updateActivity->duration; // assumption standart working is 8 hours - } - $costPlanNew = $costPlanOld + $costUser; - $updateActivity->rencana_biaya = $costPlanNew; - $updateActivity->save(); - return response()->json(['status'=>'success','message'=>'user to activity gantt Project successfull created, and cost plant successfull update '.$costPlanNew,'code'=>200]); - }else{ - return response()->json(['status'=>'success','message'=>'user to activity gantt Project successfull created','code'=>200]); - } - }else{ - return response()->json(['status'=>'failed','message'=>'user to activity gantt Project failed created','code'=>400]); - } - } - - public function addMultiple(Request $request){ - $users_id = $request->user_id; - - $data = UserToActivity::where("activity_id", $request->activity_id); - - if($data){ - $data->delete(); - } - - if(is_array($users_id) && count($users_id) > 0){ - $countRes = 0; - foreach($users_id as $item){ - - $dataInsert = array( - "user_id" => $item, - "activity_id" => $request->activity_id, - "role_proyek_id" => $request->role_proyek_id, - "proyek_id" => $request->proyek_id, - "created_by" => $this->currentName - ); - - $result = UserToActivity::create($dataInsert); - - if($result){ - $countRes++; - }else{ - $countRes--; - } - } - - if($countRes > 0){ - $allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id); - $dataUpdateCost = array( - "rencana_biaya"=>$allCost, - "updated_by"=> $this->currentName - ); - $actUpdate = Activity::find($request->activity_id); - if($actUpdate){ - $actUpdate->update($dataUpdateCost); - if($actUpdate->parent_id){ - $this->updatedCostPlanning($actUpdate->parent_id); - } - } - - return response()->json(['status'=>'success' ,'message'=>'user to activity gantt Project successfull created','code'=>200]); - }else{ - return response()->json(['status'=>'success' ,'message'=>'user to activity gantt Project failed created','code'=>400]); - } - }else{ - return response()->json(['status'=>'success' ,'message'=>'user to activity gantt Project successfull created','code'=>200]); - } - - } - - public function update(Request $request, $id){ - - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - } - $data = UserToActivity::find($id); - if($data){ - $result = $data->update($request->all()); - }else{ - return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400); - die(); - } - - if($result){ - return response()->json(['status'=>'success','message'=>'user to activity gantt Project successfully updated!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'user to activity gantt Project failed updated!','code'=>400], 400); - } - } - - public function delete($id) - { - $data = UserToActivity::find($id); - if($data){ - $userId = $data->user_id; - $activityId = $data->activity_id; - $delete = $data->delete(); - if($delete){ - $this->deleteRelative($activityId, $userId); - } - }else{ - return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400); - die(); - } - - - if($delete){ - return response()->json(['status'=>'success','message'=>'user to activity gantt Project successfully deleted!','code'=>200], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'user to activity gantt Project failed deleted!','code'=>400], 400); - } - } - - private function deleteRelative($id, $userId) - { - $dataRa = ReportActivity::where("activity_id", $id)->where("user_id", $userId)->get(); - foreach ($dataRa as $ra) { - $image = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get(); - foreach ($image as $value) { - if(file_exists($this->pathImage.$value->image)){ - unlink($this->pathImage.$value->image); - } - } - - Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete(); - } - ReportActivity::where("activity_id", $id)->where("user_id", $userId)->delete(); - } - - public function edit($id){ - if(!$id || (int) $id < 0 || $id==""){ - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); - die(); - } - - $result = UserToActivity::find($id); - - if($result){ - return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity'); - $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; - $dataGet = $builder->get(); - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); - } - - public function list() - { - $data = UserToActivity::all(); - $countData = $data->count(); - - if($data){ - return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); - }else{ - return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400); - } - } - - public function datatables(Request $request){ - $id_activity = $request->query('idact'); - $data = UserToActivity::select("assign_hr_to_activity.id as id", "u.name as user_name", "mrp.name as role_name") - ->join("m_role_proyek as mrp", "mrp.id", "=", "assign_hr_to_activity.role_proyek_id") - ->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") - ->where('assign_hr_to_activity.activity_id', $id_activity) - ->get(); - return Datatables::of($data) - ->addIndexColumn() - ->addColumn('action', function($row){ - $actionBtn = ''; - return $actionBtn; - }) - ->rawColumns(['action'])->make(true); - } +{ + public function add(Request $request){ + $this->validate($request, [ + 'activity_id' => 'required', + 'user_id' => 'required' + ]); + + $data = $request->all(); + $data['created_by'] = $this->currentName; + + if(!UserToActivity::create($data)) + return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]); + + return response()->json(['status'=>'success','message'=>'Data added!', 'code'=> 200]); + } + + public function addMultiple(Request $request){ + $users_id = $request->user_id; + + $data = UserToActivity::where("activity_id", $request->activity_id); + if($data){ + $data->delete(); + } + + if(is_array($users_id) && count($users_id) > 0){ + $countRes = 0; + foreach($users_id as $item){ + $dataInsert = array( + "user_id" => $item, + "activity_id" => $request->activity_id, + "role_proyek_id" => $request->role_proyek_id, + "proyek_id" => $request->proyek_id, + "created_by" => $this->currentName + ); + $result = UserToActivity::create($dataInsert); + if($result){ + $countRes++; + }else{ + $countRes--; + } + } + + if($countRes == 0) + return response()->json(['status'=>'failed' ,'message'=>'Failed to add data!','code'=> 500]); + + $allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id); + $dataUpdateCost = array( + "rencana_biaya"=>$allCost, + "updated_by"=> $this->currentName + ); + $actUpdate = Activity::find($request->activity_id); + if($actUpdate){ + $actUpdate->update($dataUpdateCost); + if($actUpdate->parent_id){ + $this->updatedCostPlanning($actUpdate->parent_id); + } + } + return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); + }else{ + return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); + } + + } + + public function update(Request $request, $id){ + if(empty($id) || !is_int((int)$id)) + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + + $data = UserToActivity::find($id); + if(!$data) + return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + + if(!$data->update($request->all())); + return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); + + return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); + } + + public function delete($id) + { + $data = UserToActivity::find($id); + if(!$data) + return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400); + + if($data->delete()){ + return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); + } + + return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); + } + + public function edit($id){ + if(!$id || (int) $id < 0 || $id==""){ + return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + die(); + } + + $result = UserToActivity::find($id); + + if(!$result) + return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400); + + return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); + } + + public function search(Request $request) + { + $payload = $request->all(); + $dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity'); + $builder = $dataBuilder['builder']; + $countBuilder = $dataBuilder['count']; + $dataGet = $builder->get(); + $totalRecord = $countBuilder->count(); + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + } + + public function list() + { + $data = UserToActivity::all(); + $countData = $data->count(); + + if($data){ + return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); + }else{ + return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400); + } + } + + public function datatables(Request $request){ + $id_activity = $request->query('idact'); + $data = UserToActivity::select("assign_hr_to_activity.id as id", "u.name as user_name", "mrp.name as role_name") + ->join("m_role_proyek as mrp", "mrp.id", "=", "assign_hr_to_activity.role_proyek_id") + ->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") + ->where('assign_hr_to_activity.activity_id', $id_activity) + ->get(); + return Datatables::of($data) + ->addIndexColumn() + ->addColumn('action', function($row){ + $actionBtn = ''; + return $actionBtn; + }) + ->rawColumns(['action'])->make(true); + } } diff --git a/app/Models/AssignMaterial.php b/app/Models/AssignMaterial.php index 4a5706d..297b525 100644 --- a/app/Models/AssignMaterial.php +++ b/app/Models/AssignMaterial.php @@ -3,6 +3,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use App\Models\RequestMaterial; +use App\Models\Activity; +use Carbon\Carbon; class AssignMaterial extends Model { @@ -13,5 +16,47 @@ class AssignMaterial extends Model protected $fillable = [ 'proyek_id', 'activity_id', 'material_id', 'qty_planning', 'budget', 'plan_date','created_at', 'created_by', 'updated_at', 'updated_by' + ]; + + protected $casts = [ + 'id' => 'integer', + 'budget' => 'float', + 'qty_planning' => 'float', ]; + + public static function boot() { + parent::boot(); + + static::created(function($data) { + $activity = Activity::find($data->activity_id); + $material = RequestMaterial::where("id", $data->material_id)->first(); + $old = $activity->rencana_biaya; + $activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning); + $activity->save(); + + $msg = Carbon::now()->toDateTimeString() . ": ".$activity->id." ".$activity->name.PHP_EOL; + $msg .= "Added: ".$material->desc." (".floatval($material->price)." * ".floatval($data->qty_planning)."), Cost plan old: ".$old." | +".$activity->rencana_biaya.PHP_EOL; + $msg .= "Data type (".gettype(floatval($material->price))." * ".gettype(floatval($material->qty_planning))."), ".gettype(floatval($old))." | ".gettype(floatval($activity->rencana_biaya)).PHP_EOL; + $msg .= "Data type origin (".gettype($material->price)." * ".gettype($material->qty_planning)."), ".gettype($old)." | ".gettype($activity->rencana_biaya).PHP_EOL; + $msg .= "------".PHP_EOL; + file_put_contents('activity_log.txt', $msg, FILE_APPEND | LOCK_EX); + + }); + + static::deleted(function($data) { + $activity = Activity::where('id', $data->activity_id)->first(); + $old = $activity->rencana_biaya; + $activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning); + $activity->save(); + $material = RequestMaterial::where("id", $data->material_id)->first(); + + $msg = Carbon::now()->toDateTimeString() . ": ".$activity->id." ".$activity->name.PHP_EOL; + $msg .= "Deleted: ".$material->desc." (".floatval($data->budget)." * ".floatval($data->qty_planning)."), Cost plan old: ".$old." | -".$activity->rencana_biaya.PHP_EOL; + $msg .= "Data type (".gettype(floatval($data->budget))." * ".gettype(floatval($data->qty_planning))."), ".gettype(floatval($old))." | ".gettype(floatval($activity->rencana_biaya)).PHP_EOL; + $msg .= "Data type origin (".gettype($data->budget)." * ".gettype($data->qty_planning)."), ".gettype($old)." | ".gettype($activity->rencana_biaya).PHP_EOL; + $msg .= "------".PHP_EOL; + file_put_contents('activity_log.txt', $msg, FILE_APPEND | LOCK_EX); + }); + + } } diff --git a/app/Models/RequestMaterial.php b/app/Models/RequestMaterial.php index 4686317..df32ec2 100644 --- a/app/Models/RequestMaterial.php +++ b/app/Models/RequestMaterial.php @@ -11,23 +11,29 @@ class RequestMaterial extends Model const CREATED_AT = 'created_at'; const UPDATED_AT = 'updated_at'; + protected $casts = [ + 'id' => 'integer', + 'price' => 'float', + 'qty' => 'float', + ]; + protected $fillable = [ - 'description', - 'required_date', - 'qty', - 'uom', - 'qty_received', - 'fom_date', - 'pr_date', - 'po_date', - 'received_date', - 'delivery_date', - 'status', + 'description', + 'required_date', + 'qty', + 'uom', + 'qty_received', + 'fom_date', + 'pr_date', + 'po_date', + 'received_date', + 'delivery_date', + 'status', 'proyek_id', - 'created_at', - 'created_by', - 'updated_at', - 'updated_by', + 'created_at', + 'created_by', + 'updated_at', + 'updated_by', 'price' ]; } diff --git a/app/Models/UserToActivity.php b/app/Models/UserToActivity.php index c2cc069..3dac828 100644 --- a/app/Models/UserToActivity.php +++ b/app/Models/UserToActivity.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use App\Models\Activity; class UserToActivity extends Model { @@ -17,9 +18,41 @@ class UserToActivity extends Model 'version_gantt_id', 'role_proyek_id', 'activity_id', - 'created_at', - 'created_by', - 'updated_at', + 'created_at', + 'created_by', + 'updated_at', 'updated_by' ]; + + public static function boot() { + parent::boot(); + + static::created(function($data) { + $activity = Activity::find($data->activity_id); + $getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); + + $salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); + + if($getWorkingHours->uom_standart_rate == "Hour") + $salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); + + $activity->rencana_biaya += $salary; + $activity->save(); + }); + + static::deleted(function($data) { + $activity = Activity::find($data->activity_id); + + $getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); + $salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); + if($getWorkingHours->uom_standart_rate == "Hour"){ + $salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); + } + + $activity->rencana_biaya -= $salary; + $activity->save(); + }); + + } + } diff --git a/config/api.php b/config/api.php index 6edc41c..dfe274b 100644 --- a/config/api.php +++ b/config/api.php @@ -1,7 +1,5 @@ - env('API_GOLANG', 'http://127.0.0.1:8090'), - 'paxel' => env('API_PAXEL', 'https://paxel.oslogdev.com/db/search'), 'nominatim' => env('API_NOMINATIM', 'https://nominatim.oslogdev.com') ]; -?> \ No newline at end of file +?> diff --git a/config/auth.php b/config/auth.php index 43c69ca..7828955 100644 --- a/config/auth.php +++ b/config/auth.php @@ -1,4 +1,4 @@ - [ @@ -19,4 +19,4 @@ return [ ] ]; -?> \ No newline at end of file +?> diff --git a/config/jwt.php b/config/jwt.php new file mode 100644 index 0000000..dfe274b --- /dev/null +++ b/config/jwt.php @@ -0,0 +1,5 @@ + env('API_NOMINATIM', 'https://nominatim.oslogdev.com') + ]; +?> diff --git a/sql/001-absensi.sql b/database/sql/001-absensi.sql similarity index 100% rename from sql/001-absensi.sql rename to database/sql/001-absensi.sql diff --git a/routes/web.php b/routes/web.php index 6bf0b77..abd459e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,33 +1,12 @@ get('/', function () use ($router) { return $router->app->version(); }); $router->group(['prefix'=>'api'], function () use ($router) { $router->post('/login', 'AuthController@login'); - - $router->post('/role/search', 'RoleController@search'); - $router->post('/role/add', 'RoleController@add'); - $router->get('/role/edit/{id}', 'RoleController@edit'); - $router->put('/role/update/{id}', 'RoleController@update'); - $router->delete('/role/delete/{id}', 'RoleController@delete'); - $router->get('/role/list', 'RoleController@list'); - - + $router->post('/menu/add', 'MenuController@add'); $router->get('/menu/edit/{id}', 'MenuController@edit'); $router->put('/menu/update/{id}', 'MenuController@update'); @@ -41,22 +20,28 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->delete('/role-menu/delete-byrole/{id}', 'RoleMenuController@deleteByRole'); $router->post('/role-menu/search', 'RoleMenuController@search'); $router->get('/role-menu/get-role/{id}', 'RoleMenuController@listMenu'); - $router->get('/document-project/download/{id}', 'ProjectDokumenController@downloadDokumen'); $router->group(['middleware' => 'auth'], function () use ($router) { + $router->post('/role/search', 'RoleController@search'); + $router->post('/role/add', 'RoleController@add'); + $router->get('/role/edit/{id}', 'RoleController@edit'); + $router->put('/role/update/{id}', 'RoleController@update'); + $router->delete('/role/delete/{id}', 'RoleController@delete'); + $router->get('/role/list', 'RoleController@list'); + $router->post('/document-project/upload', 'ProjectDokumenController@uploadProjectDokumen'); $router->get('/document-project/get/{id}', 'ProjectDokumenController@dokumenByProyekId'); $router->delete('/document-project/delete/{id}', 'ProjectDokumenController@delete'); $router->post('/document-project/search', 'ProjectDokumenController@searchDocProject'); - + $router->get('/document-project/download/{id}', 'ProjectDokumenController@downloadDokumen'); $router->post('/document-activity/upload', 'ActivityDokumenController@uploadProjectDokumen'); $router->get('/document-activity/get/{id}', 'ActivityDokumenController@dokumenByActivityId'); $router->delete('/document-activity/delete/{id}', 'ActivityDokumenController@delete'); $router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject'); $router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen'); - + $router->post('/project/search', 'ProjectController@search'); $router->post('/project/add', 'ProjectController@add'); $router->put('/project/update/{id}', 'ProjectController@update'); @@ -122,9 +107,9 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->get('/request-material/list', 'RequestMaterialController@list'); $router->put('/request-material/update-warehouse-site/{id}', 'RequestMaterialController@updateWarehouseSite'); - + $router->post('/material-to-project/assign', 'MaterialProjectController@assignMaterial'); - + $router->post('/material-resource/add', 'MaterialResourceController@add'); $router->post('/material-resource/search', 'MaterialResourceController@search'); $router->get('/material-resource/update/{id}', 'MaterialResourceController@edit'); @@ -166,7 +151,7 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->delete('/user-to-version-gantt/delete/{id}', 'UserToVersionGanttController@delete'); $router->get('/user-to-version-gantt/list', 'UserToVersionGanttController@list'); $router->get('/user-to-version-gantt/get-by-gantt/{gantt_id}', 'UserToVersionGanttController@getByUserGantt'); - + $router->post('/user-to-activity/add', 'UserToActivityController@add'); $router->post('/user-to-activity/add-multiple', 'UserToActivityController@addMultiple'); $router->get('/user-to-activity/edit/{id}', 'UserToActivityController@edit'); @@ -189,7 +174,7 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->get('/activity/set-baseline/{gantt_id}', 'ActivityController@setBaseline'); $router->post('/activity/get-curva-s', 'ActivityController@getCalculateCurvaS'); $router->get('/activity/synchronize-report/{gantt_id}', 'ActivityController@synchronizeReport'); - + $router->post('/link', 'LinkController@add'); $router->put('/link/{id}', 'LinkController@update'); $router->delete('/link/{id}', 'LinkController@delete'); @@ -296,7 +281,7 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->post('/dashboard/search-user-presence', 'DashboardController@searchUserPresencePoints'); $router->post('/dashboard/status-proyek', 'DashboardController@statusProyek'); $router->post('/dashboard/curva-s', 'DashboardController@curvaS'); - + $router->post('/report-activity/add', 'ReportActivityController@add'); $router->get('/report-activity/edit/{id}', 'ReportActivityController@edit'); $router->put('/report-activity/update/{id}', 'ReportActivityController@update'); @@ -313,7 +298,7 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->get('/report-activity-material/datatables', 'ReportActivityMaterialController@datatables'); $router->post('/report-activity-material/update-status', 'ReportActivityMaterialController@updateStatusStartFinish'); $router->get('/report-activity-material/test', 'ReportActivityMaterialController@countForProgressTest'); - + $router->post('/waypoint/add', 'WaypointController@add'); $router->get('/waypoint/edit/{id}', 'WaypointController@edit'); @@ -420,5 +405,5 @@ $router->group(['prefix'=>'api'], function () use ($router) { $router->delete('/project-to-checklist-k3/delete/{id}', 'ProjectToChecklistK3Controller@delete'); $router->get('/project-to-checklist-k3/list', 'ProjectToChecklistK3Controller@list'); }); - -}); \ No newline at end of file + +});