validate($request, [ 'activity_id' => 'required', 'qty' => 'required' ]); $data = $request->all(); $data['created_by'] = $this->currentName; $data['assign_material_id'] = AssignMaterial::where('activity_id', $request->activity_id)->pluck('id')->first(); $data['qty'] = $this->sanitizeDecimal($data['qty']); if(!ReportActivityMaterial::create($data)) return response()->json(['status'=>'failed','message'=>'Input progress report activity failed created','code'=>400]); $this->countForProgress($request->activity_id); return response()->json(['status'=>'success','message'=>'Input progress report activity created','code'=>200]); } public function updateStatusStartFinish(Request $request){ $payloadUpdate = array( 'start_activity' => $request->start_activity, 'finish_activity' => $request->finish_activity, 'status_activity' => $request->status_activity ); $updateData = AssignMaterial::where('activity_id',$request->activity_id) ->update($payloadUpdate); if($updateData){ if($request->status_activity == 'done'){ $dataUpdate = array( "persentase_progress" => 100, "updated_by" => $this->currentName ); Activity::where('id', $request->activity_id)->update($dataUpdate); } return response()->json(['status'=>'success','message'=>'Update data status successfully ', 'code'=>200]); } else{ return response()->json(['status'=>'failed','message'=>'Update data status failed', 'code'=>400]); } } public function delete($id) { if(!ReportActivityMaterial::findOrFail($id)->delete()) return response()->json(['status'=>'failed','message'=>'Failed to deleted the data!','code'=> 500], 500); return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=>200], 200); } private function countForProgress($id) { $dataActivity = Activity::find($id); $dataPlan = AssignMaterial::where('activity_id', $id)->get(); $tmpPercentage1 = []; if(!$dataPlan->isEmpty()){ foreach ($dataPlan as $value) { # code... $price = $value->material_id; $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[] = $percentage1 > 100 ? 100 : $percentage1; }else if($status_activity == 'on-progress'){ $tmpPercentage1[] = $percentage1 >= 100 ? 90 : $percentage1; }else{ $tmpPercentage1[] = $percentage1 >= 100 ? 90 : $percentage1; } } $totalPercentage = array_sum($tmpPercentage1) / count($tmpPercentage1); }else{ $totalPercentage = 0; } $dataUpdate = array( "persentase_progress" => $totalPercentage, "updated_by" => $this->currentName ); return $dataActivity->update($dataUpdate); } public function countForProgressTest() { $dataPlan = AssignMaterial::where('activity_id', 807)->get(); $tmpPercentage1 = []; if(!$dataPlan->isEmpty()){ foreach ($dataPlan as $value) { # code... $price = $value->material_id; $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; $percentage1 = ($getDataVolActual * 100) / $qty_plan; if($status_activity == 'done'){ $tmpPercentage1[] = $percentage1 > 100 ? 100 : $percentage1; }else if($status_activity == 'on-progress'){ $tmpPercentage1[] = $percentage1 >= 100 ? 90 : $percentage1; }else{ $tmpPercentage1[] = $percentage1 >= 100 ? 90 : $percentage1; } } $totalPercentage = array_sum($tmpPercentage1) / count($tmpPercentage1); }else{ $totalPercentage = 0; } return response()->json(['status'=>'success','code'=>200,'data'=>$dataPlan, 'tmpPercentage1'=> $tmpPercentage1, 'totalPercentage'=> $totalPercentage], 200); } public function search(Request $request) { $payload = $request->all(); $dataBuilder = $this->setUpPayload($payload, 'report_activity_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 = ReportActivityMaterial::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 Repport Activity material, please try again later!','code'=>400], 400); } } public function datatables(Request $request){ $id_activity = $request->query('idAct'); $id_assign_material_id= $request->query('idAmi'); $type = $request->query('type'); if($type == 'plan'){ $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) ->orderBy('assign_material_to_activity.id', 'asc') ->get(); return Datatables::of($data) ->addIndexColumn() ->addColumn('action', function($row){ $actionBtn = ''; return $actionBtn; }) ->rawColumns(['action'])->make(true); }else{ $data = ReportActivityMaterial::select("report_activity_material.*", "u.name as human_resource") ->join("m_users as u", "u.id", "=", "report_activity_material.user_id") ->where('report_activity_material.activity_id', $id_activity) ->orderBy('report_activity_material.report_date', 'asc') ->get(); return Datatables::of($data) ->addIndexColumn() ->addColumn('action', function($row){ $actionBtn = ''; return $actionBtn; }) ->rawColumns(['action'])->make(true); } } }