diff --git a/app/Http/Controllers/DashboardBoDController.php b/app/Http/Controllers/DashboardBoDController.php index ab2a278..90a2375 100644 --- a/app/Http/Controllers/DashboardBoDController.php +++ b/app/Http/Controllers/DashboardBoDController.php @@ -122,9 +122,9 @@ class DashboardBoDController extends Controller ], 200); } - public function getTotalProjectPerScheduleHealth($year = '%') + public function getTotalProjectPerScheduleHealth() { - $year = $this->interpolateYear($year); + // $year = $this->interpolateYear($year); $return = [ 'behind-schedule' => 0, @@ -132,7 +132,7 @@ class DashboardBoDController extends Controller 'on-schedule' => 0, ]; - $projects = Project::where('mulai_proyek', 'like', $year)->get(); + $projects = Project::get(); foreach ($projects as $index => $project) { $project->scurve = MasterFunctionsHelper::getSCurve($project->id); $selisihProgress = 0; @@ -165,9 +165,9 @@ class DashboardBoDController extends Controller return response()->json(['data' => $return, 'q' => $projects], 200); } - public function getTotalProjectScheduleHealthPerDivision($year = '%') + public function getTotalProjectScheduleHealthPerDivision() { - $year = $this->interpolateYear($year); + // $year = $this->interpolateYear($year); $divisions = Divisi::whereNull('parent')->get(); foreach ($divisions as $index => $division) { @@ -175,7 +175,7 @@ class DashboardBoDController extends Controller $scheduleData = new Collection(); $behindSchedule = $warning = $onSchedule = 0; - $projects = Project::where('mulai_proyek', 'like', $year)->where('divisi_id', $division->id)->get(); + $projects = Project::where('divisi_id', $division->id)->get(); foreach ($projects as $project) { $project->scurve = MasterFunctionsHelper::getSCurve($project->id); $selisihProgress = 0; @@ -210,31 +210,30 @@ class DashboardBoDController extends Controller ], 200); } - public function getTotalProjectPerBudgetHealth($year = '%') + public function getTotalProjectPerBudgetHealth() { - $year = $this->interpolateYear($year); return response()->json([ 'data' => [ - 'overrun' => Project::where('mulai_proyek', 'like', $year)->where('budget_health', 'overrun')->count(), - 'warning' => Project::where('mulai_proyek', 'like', $year)->where('budget_health', 'warning')->count(), - 'on-budget' => Project::where('mulai_proyek', 'like', $year)->where('budget_health', 'on-budget')->count(), + 'overrun' => Project::where('budget_health', 'overrun')->count(), + 'warning' => Project::where('budget_health', 'warning')->count(), + 'on-budget' => Project::where('budget_health', 'on-budget')->count(), ] ], 200); } - private function countTotalProjectByBudgetHealthInDivision($divisi, $year, $health) + private function countTotalProjectByBudgetHealthInDivision($divisi, $health) { return Project::where('divisi_id', $divisi) - ->where('mulai_proyek', 'like', $year) + // ->where('mulai_proyek', 'like', $year) /* ->orWhere('akhir_proyek', 'like', $year) */ ->where('budget_health', $health) ->count(); } - public function getTotalProjectBudgetHealthPerDivision($year = '%') + public function getTotalProjectBudgetHealthPerDivision() { - $year = $this->interpolateYear($year); + // $year = $this->interpolateYear($year); $divisions = Divisi::select('id', 'name') ->with('children') ->whereNull('parent') @@ -242,13 +241,13 @@ class DashboardBoDController extends Controller // to do : count in more than 1 level child foreach ($divisions as $division) { $budgetData = new Collection(); - $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'overrun'), 'overrun'); - $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'warning'), 'warning'); - $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'on-budget'), 'on-budget'); + $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, 'overrun'), 'overrun'); + $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, 'warning'), 'warning'); + $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, 'on-budget'), 'on-budget'); foreach ($division->children as $d) { - $budgetData['overrun'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'overrun'); - $budgetData['warning'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'warning'); - $budgetData['on-budget'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'on-budget'); + $budgetData['overrun'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, 'overrun'); + $budgetData['warning'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, 'warning'); + $budgetData['on-budget'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, 'on-budget'); } unset($division->children); $division->budgetData = $budgetData; @@ -262,13 +261,13 @@ class DashboardBoDController extends Controller ], 200); } - public function getTotalProjectPerPhase($year = '%') + public function getTotalProjectPerPhase() { - $year = $this->interpolateYear($year); + // $year = $this->interpolateYear($year); $projectPhases = ProjectPhase::orderBy('order')->get(); foreach ($projectPhases as $phase) { $phase->totalProject = Project::where('phase_id', $phase->id) - ->where('mulai_proyek', 'like', $year) + // ->where('mulai_proyek', 'like', $year) /* ->orWhere('akhir_proyek', 'like', $year) */ ->count(); } @@ -279,16 +278,16 @@ class DashboardBoDController extends Controller ], 200); } - private function countTotalProjectInDivision($id, $year) + private function countTotalProjectInDivision($id) { return Project::where('divisi_id', $id) - ->where('mulai_proyek', 'like', $year) + // ->where('mulai_proyek', 'like', $year) ->count(); } - public function getTotalProjectPerDivision($year = '%') + public function getTotalProjectPerDivision() { - $year = $this->interpolateYear($year); + // $year = $this->interpolateYear($year); $divisions = Divisi::select('id', 'name', 'parent', 'color') ->with('children') @@ -297,9 +296,9 @@ class DashboardBoDController extends Controller // to do : count in more than 1 level child foreach ($divisions as $v) { - $v->total = $this->countTotalProjectInDivision($v->id, $year); + $v->total = $this->countTotalProjectInDivision($v->id); foreach ($v->children as $d) { - $v->total += $this->countTotalProjectInDivision($d->id, $year); + $v->total += $this->countTotalProjectInDivision($d->id); } unset($v->children); } @@ -309,20 +308,18 @@ class DashboardBoDController extends Controller ], 200); } - private function countTotalProjectValueInDivision($id, $year) + private function countTotalProjectValueInDivision($id) { return Project::select(DB::raw("SUM(CAST(REPLACE(rencana_biaya, ',', '.') AS DOUBLE PRECISION))")) - ->where('mulai_proyek', 'like', $year) + // ->where('mulai_proyek', 'like', $year) /* ->orWhere('akhir_proyek', 'like', $year) */ ->where('divisi_id', $id) ->pluck('sum') ->first(); } - public function getTotalProjectValuePerDivision($year = '%') + public function getTotalProjectValuePerDivision() { - $year = $this->interpolateYear($year); - $divisions = Divisi::select('id', 'name', 'color') ->with('children') ->whereNull('parent') @@ -330,9 +327,9 @@ class DashboardBoDController extends Controller // to do : count in more than 1 level child foreach ($divisions as $v) { - $v->total = $this->countTotalProjectValueInDivision($v->id, $year); + $v->total = $this->countTotalProjectValueInDivision($v->id); foreach ($v->children as $d) { - $v->total += $this->countTotalProjectValueInDivision($d->id, $year); + $v->total += $this->countTotalProjectValueInDivision($d->id); } unset($v->children); } @@ -343,12 +340,13 @@ class DashboardBoDController extends Controller } - public function getDetailExpenditure($year = '%') + public function getDetailExpenditure() { - $year = $this->interpolateYear($year); - $projects = Project::select('m_proyek.*', 'md.name as divisi_name') - ->where('mulai_proyek', 'like', $year) - ->join('m_divisi as md', 'md.id', '=', 'm_proyek.divisi_id') + // $year = $this->interpolateYear($year); + $projects = Project::select('m_proyek.*', 'md.name as divisi_name', 'tpy.name as project_type_name') + // ->where('mulai_proyek', 'like', $year) + ->join('m_divisi as md', 'md.id', '=', 'm_proyek.divisi_id') + ->join('m_type_proyek as tpy', 'tpy.id', '=', 'm_proyek.type_proyek_id') ->orderBy('id', 'desc') ->get(); foreach ($projects as $project) { diff --git a/app/Http/Controllers/DivisiController.php b/app/Http/Controllers/DivisiController.php index 2d056aa..2212549 100644 --- a/app/Http/Controllers/DivisiController.php +++ b/app/Http/Controllers/DivisiController.php @@ -8,21 +8,23 @@ use App\Models\Divisi; class DivisiController extends Controller { - private function getAllChildren($divisi, $depth = 0, $array = []) { + private function getAllChildren($divisi, $depth = 0, $array = []) + { $divisi->depth = $depth; array_push($array, $divisi); - foreach($divisi->children as $child){ + foreach ($divisi->children as $child) { $array = $this->getAllChildren($child, $depth + 1, $array); } return $array; } - public function add(Request $request){ + public function add(Request $request) + { $this->validate($request, [ 'name' => 'string|required|unique:m_divisi,name', 'description' => 'nullable|string', 'parent' => 'nullable|integer', - 'color'=>'nullable|string|max:10' + 'color' => 'nullable|string|max:10' ]); $data = $request->all(); @@ -30,15 +32,16 @@ class DivisiController extends Controller $result = Divisi::create($data); - if(!$result) - return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500]); + if (!$result) + return response()->json(['status' => 'failed', 'message' => 'Failed to add data', 'code' => 500]); - return response()->json(['status'=>'success','message'=>'Data created!','code'=>200]); + 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); + 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); $this->validate($request, [ 'name' => 'string|required', @@ -47,46 +50,59 @@ class DivisiController extends Controller ]); $data = Divisi::find($id); - $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_divisi,name']) : ''; + $request->name !== $data['name'] ? $this->validate($request, ['name' => 'unique:m_divisi,name']) : ''; - if(!$data) - return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); + 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); + if (!$result) + return response()->json(['status' => 'failed', 'message' => 'Update failed!', 'code' => 500], 500); - return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); + 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); + 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); + 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); + if (!$delete) + return response()->json(['status' => 'failed', 'message' => 'Delete failed!', 'code' => 500], 500); - return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200); + 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); + { + $parentDivisi = Divisi::whereNull('parent')->with('children')->get(); + $divisions = []; + foreach ($parentDivisi as $objRow) { + $objRow->children = $this->getAllChildren($objRow); + // $objRow->key = rand(1, 1000); + $divisions[] = $objRow; + } + $countData = count($divisions); + if ($countData == 0) + return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); + + return response()->json(['status' => 'success', 'code' => 200, 'data' => $divisions, 'totalRecord' => $countData], 200); + + // $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); //return $this->list(); // cant use builder for this case } @@ -95,20 +111,20 @@ class DivisiController extends Controller { $parentMenus = Divisi::whereNull('parent')->with('children')->get(); $divisions = []; - foreach($parentMenus as $menu){ + foreach ($parentMenus as $menu) { $childs = $this->getAllChildren($menu); - foreach($childs as $d){ + foreach ($childs as $d) { $d->displayName = ' ' . $d->name; - for($i=0; $i < $d->depth; $i++){ - $d->displayName = '--' . $d->displayName ; + for ($i = 0; $i < $d->depth; $i++) { + $d->displayName = '--' . $d->displayName; } array_push($divisions, $d); } } $countData = count($divisions); - if($countData == 0) - return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); + if ($countData == 0) + return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); - return response()->json(['status'=>'success','code'=>200,'data'=> $divisions, 'totalRecord'=> $countData], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $divisions, 'totalRecord' => $countData], 200); } } diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 719908c..7d89879 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -123,7 +123,8 @@ class ProjectController extends Controller 'phase_id', 'calculation_status', 'md.name as divisi_name', - 'nickname' + 'nickname', + 'sponsor' ) ->join('m_divisi as md', 'md.id', '=', 'm_proyek.divisi_id') ->where('m_proyek.id', $id) @@ -322,7 +323,8 @@ class ProjectController extends Controller 'created_at', 'created_by', 'updated_at', - 'updated_by' + 'updated_by', + 'sponsor' )->orderBy('id', 'desc') // ->where("created_by",$this->currentName) ->get(); @@ -620,19 +622,19 @@ class ProjectController extends Controller // } - $plannedStart = Activity::where('version_gantt_id', $ganttId) - ->orderBy('planned_start') - ->value('planned_start'); - $plannedEnd = Activity::where('version_gantt_id', $ganttId) - ->orderByDesc('planned_end') - ->value('planned_end'); + $plannedStart = Activity::where('version_gantt_id', $ganttId) + ->orderBy('planned_start') + ->value('planned_start'); + $plannedEnd = Activity::where('version_gantt_id', $ganttId) + ->orderByDesc('planned_end') + ->value('planned_end'); if (isset($result->header)) { $result->header->start_date = $startDate; $result->header->end_date = $maxEndDate->end_date; $result->header->planned_start = $plannedStart; $result->header->planned_end = $plannedEnd; } - return response()->json(['status'=>'success','code'=> 200,'data'=>$result, 'gantt'=>$ganttId], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $result, 'gantt' => $ganttId], 200); } public function getOverdueActivities(Request $request) diff --git a/app/Models/Project.php b/app/Models/Project.php index 2ac0fd5..55e5f55 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -51,6 +51,7 @@ class Project extends Model 'created_by', 'updated_at', 'updated_by', - 'created_by_id' + 'created_by_id', + 'sponsor' ]; } diff --git a/routes/web.php b/routes/web.php index 5b8aff6..cb953bd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -23,16 +23,16 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro $router->group(['middleware' => ['auth', 'cors']], function () use ($router) { - $router->get('/dashboard/get-company-cashflow[/{year}]', 'DashboardBoDController@getCompanyCashFlow'); // project expenditure - $router->get('/dashboard/get-invoice-outstanding[/{year}]', 'DashboardBoDController@getInvoiceOutstanding'); // project invoice vs cash in - $router->get('/dashboard/get-total-project-per-schedule-health[/{year}]', 'DashboardBoDController@getTotalProjectPerScheduleHealth'); - $router->get('/dashboard/get-total-project-per-budget-health[/{year}]', 'DashboardBoDController@getTotalProjectPerBudgetHealth'); - $router->get('/dashboard/get-total-project-schedule-health-per-division[/{year}]', 'DashboardBoDController@getTotalProjectScheduleHealthPerDivision'); - $router->get('/dashboard/get-total-project-budget-health-per-division[/{year}]', 'DashboardBoDController@getTotalProjectBudgetHealthPerDivision'); - $router->get('/dashboard/get-total-project-per-phase[/{year}]', 'DashboardBoDController@getTotalProjectPerPhase'); - $router->get('/dashboard/get-total-project-per-division[/{year}]', 'DashboardBoDController@getTotalProjectPerDivision'); - $router->get('/dashboard/get-total-project-value-per-division[/{year}]', 'DashboardBoDController@getTotalProjectValuePerDivision'); - $router->get('/dashboard/get-detail-expenditure[/{year}]', 'DashboardBoDController@getDetailExpenditure'); + $router->get('/dashboard/get-company-cashflow', 'DashboardBoDController@getCompanyCashFlow'); // project expenditure + $router->get('/dashboard/get-invoice-outstanding', 'DashboardBoDController@getInvoiceOutstanding'); // project invoice vs cash in + $router->get('/dashboard/get-total-project-per-schedule-health', 'DashboardBoDController@getTotalProjectPerScheduleHealth'); + $router->get('/dashboard/get-total-project-per-budget-health', 'DashboardBoDController@getTotalProjectPerBudgetHealth'); + $router->get('/dashboard/get-total-project-schedule-health-per-division', 'DashboardBoDController@getTotalProjectScheduleHealthPerDivision'); + $router->get('/dashboard/get-total-project-budget-health-per-division', 'DashboardBoDController@getTotalProjectBudgetHealthPerDivision'); + $router->get('/dashboard/get-total-project-per-phase', 'DashboardBoDController@getTotalProjectPerPhase'); + $router->get('/dashboard/get-total-project-per-division', 'DashboardBoDController@getTotalProjectPerDivision'); + $router->get('/dashboard/get-total-project-value-per-division', 'DashboardBoDController@getTotalProjectValuePerDivision'); + $router->get('/dashboard/get-detail-expenditure', 'DashboardBoDController@getDetailExpenditure'); $router->post('/role/search', 'RoleController@search'); $router->post('/role/add', 'RoleController@add');