From 837d96df5fb06002aa1d18524150c9b350e4ec6c Mon Sep 17 00:00:00 2001 From: wahyu Date: Mon, 4 Dec 2023 17:04:16 +0700 Subject: [PATCH 01/32] check 0 array on calculate scurve --- app/Helpers/MasterFunctionsHelper.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Helpers/MasterFunctionsHelper.php b/app/Helpers/MasterFunctionsHelper.php index dfc4d89..59c795f 100644 --- a/app/Helpers/MasterFunctionsHelper.php +++ b/app/Helpers/MasterFunctionsHelper.php @@ -1448,6 +1448,9 @@ class MasterFunctionsHelper // if($keyPlanM->duration == 0){ // $duration = 2; // Tanggal awal + if (count($keyPlanM) == 0) { + continue; + } $startDate = new DateTime($keyPlanM[0]->planned_start); // Tanggal akhir $endDate = new DateTime($keyPlanM[0]->planned_end); @@ -1479,6 +1482,9 @@ class MasterFunctionsHelper // hitung progress actual if (count($dataActualM) > 0 && count($dataActualM[0]) > 0) { foreach ($dataActualM as $keyActualM) { + if (count($keyPlanM) == 0) { + continue; + } # hitung untuk persentase progress actual // $progressActualWeek = ((((($keyActualM->qty_actual / $keyActualM->sum_qty_actual) * 100) / $keyActualM->qty_plan)*100)*$keyActualM->bobot_planning)/100; // jika total report > dari planning From 1b52345f54083f985f3f7755d94f3fa0c0041a4d Mon Sep 17 00:00:00 2001 From: ibnu Date: Tue, 5 Dec 2023 13:05:43 +0700 Subject: [PATCH 02/32] update fix quick --- app/Http/Controllers/ProjectController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 66f4724..62bd9ab 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -539,7 +539,7 @@ class ProjectController extends Controller if($result['type_proyek_id'] === 9) { // $actualEndExist = Activity::where('proyek_id', $id)->exists(); - // $query = Activity::where('proyek_id', $id); + $query = Activity::where('proyek_id', $id); $maxEndDate = Activity::where('proyek_id', $id)->select('end_date') ->orderBy('end_date', 'desc') ->first(); From aded36c0ae3f3e02ac4087727b0528eaec783201 Mon Sep 17 00:00:00 2001 From: ibnu Date: Tue, 12 Dec 2023 07:16:34 +0700 Subject: [PATCH 03/32] update for logic update status report on-progress, actual >= plan is 95, actual < plan is calculate --- .../Controllers/ReportActivityMaterialController.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ReportActivityMaterialController.php b/app/Http/Controllers/ReportActivityMaterialController.php index e451129..1712b5b 100644 --- a/app/Http/Controllers/ReportActivityMaterialController.php +++ b/app/Http/Controllers/ReportActivityMaterialController.php @@ -64,10 +64,18 @@ class ReportActivityMaterialController extends Controller } else { $sumAssignMaterial = AssignMaterial::where('activity_id', $request->activity_id)->sum('qty_planning'); $sumReportActivityMaterial = ReportActivityMaterial::where('activity_id', $request->activity_id)->sum('qty'); + // if actual >= plan + if ($sumReportActivityMaterial >= $sumAssignMaterial){ + $persentaseProgress = 95; + }else{ + // actual < plan + $persentaseProgress = $sumReportActivityMaterial/$sumAssignMaterial*100; + } + $dataUpdate = array( "actual_start" => null, - "actual_end" => null, - "persentase_progress" => $sumReportActivityMaterial/$sumAssignMaterial*100, + "actual_end" => null, + "persentase_progress" => $persentaseProgress, "updated_by" => $this->currentName ); if ($sumReportActivityMaterial > 0) { From 9b24833159c2dbfe1ce4fee2e094dbe568829293 Mon Sep 17 00:00:00 2001 From: wahyu Date: Fri, 15 Dec 2023 13:07:51 +0700 Subject: [PATCH 04/32] update report analysis --- app/Http/Controllers/ActivityController.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) mode change 100644 => 100755 app/Http/Controllers/ActivityController.php diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php old mode 100644 new mode 100755 index cbb425e..af5a636 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -697,7 +697,7 @@ class ActivityController extends Controller 'm_version_gantt.name_version', DB::raw('user_names.user_name as user_name'), DB::raw('SUM(report_activity_material.qty) as qty'), - 'assign_material_to_activity.qty_planning', + DB::raw('SUM(assign_material_to_activity.qty_planning) as qty_planning'), 'assign_material_to_activity.id as join_third_id' ) ->join('m_version_gantt', 'm_version_gantt.id', '=', 'selfTable.version_gantt_id') @@ -710,11 +710,9 @@ class ActivityController extends Controller GROUP BY activity_id) as user_names'), function ($join) { $join->on('user_names.activity_id', '=', 'selfTable.id'); }) + ->where('report_activity_material.assign_material_id', '=', DB::raw('assign_material_to_activity.id')) ->groupBy('selfTable.id') - ->groupBy('selfTable.name') - ->groupBy('selfTable.persentase_progress') ->groupBy('m_version_gantt.name_version') - ->groupBy('assign_material_to_activity.qty_planning') ->groupBy('assign_material_to_activity.id') ->groupBy('user_names.user_name') ->get(); From c8162ed09b0ac5d678fc4200a102ee61ac21074c Mon Sep 17 00:00:00 2001 From: wahyu Date: Mon, 18 Dec 2023 13:33:28 +0700 Subject: [PATCH 05/32] update report analysis --- app/Http/Controllers/ActivityController.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index af5a636..e08ff7b 100755 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -697,9 +697,10 @@ class ActivityController extends Controller 'm_version_gantt.name_version', DB::raw('user_names.user_name as user_name'), DB::raw('SUM(report_activity_material.qty) as qty'), - DB::raw('SUM(assign_material_to_activity.qty_planning) as qty_planning'), + // DB::raw('SUM(assign_material_to_activity.qty_planning) as qty_planning'), 'assign_material_to_activity.id as join_third_id' ) + ->addSelect(DB::raw('(SELECT SUM(assign_material_to_activity.qty_planning) FROM assign_material_to_activity WHERE assign_material_to_activity.activity_id = report_activity_material.activity_id) as qty_planning')) ->join('m_version_gantt', 'm_version_gantt.id', '=', 'selfTable.version_gantt_id') ->leftJoin('assign_hr_to_activity', 'assign_hr_to_activity.activity_id', '=', 'selfTable.id') ->leftJoin('report_activity_material', 'report_activity_material.activity_id', '=', 'selfTable.id') @@ -710,11 +711,12 @@ class ActivityController extends Controller GROUP BY activity_id) as user_names'), function ($join) { $join->on('user_names.activity_id', '=', 'selfTable.id'); }) - ->where('report_activity_material.assign_material_id', '=', DB::raw('assign_material_to_activity.id')) + ->where('assign_material_to_activity.id', '=', DB::raw('report_activity_material.assign_material_id')) ->groupBy('selfTable.id') ->groupBy('m_version_gantt.name_version') ->groupBy('assign_material_to_activity.id') ->groupBy('user_names.user_name') + ->groupBy('report_activity_material.activity_id') ->get(); return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet ], 200); } From af67a7a366e5b8e51ca435cb35421b6eb45eac2b Mon Sep 17 00:00:00 2001 From: wahyu Date: Mon, 18 Dec 2023 16:55:02 +0700 Subject: [PATCH 06/32] update handle double quotes --- app/Http/Controllers/ReportActivityMaterialController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ReportActivityMaterialController.php b/app/Http/Controllers/ReportActivityMaterialController.php index 1712b5b..d5fc160 100644 --- a/app/Http/Controllers/ReportActivityMaterialController.php +++ b/app/Http/Controllers/ReportActivityMaterialController.php @@ -143,7 +143,7 @@ class ReportActivityMaterialController extends Controller $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) - ->where('m.description', $materialName) + ->where('m.description', 'LIKE', '%' . $materialName . '%') ->orderBy('assign_material_to_activity.id', 'asc') ->get(); if ($baselineDuration > 0) { @@ -172,7 +172,7 @@ class ReportActivityMaterialController extends Controller ->join("m_req_material as m", "m.id", "=", "amta.material_id") ->join("m_users as u", "u.id", "=", "report_activity_material.user_id") ->where('report_activity_material.activity_id', $id_activity) - ->where('m.description', $materialName) + ->where('m.description', 'LIKE', '%' . $materialName . '%') ->orderBy('report_activity_material.report_date', 'asc') ->get(); if ($baselineDuration > 0) { From 8d33fbae3269afa3446f99896c4469b5fc311ad2 Mon Sep 17 00:00:00 2001 From: wahyu Date: Tue, 19 Dec 2023 11:52:46 +0700 Subject: [PATCH 07/32] update hierarchy progress --- app/Http/Controllers/VersionGanttController.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/Http/Controllers/VersionGanttController.php b/app/Http/Controllers/VersionGanttController.php index c5fabab..7dde377 100644 --- a/app/Http/Controllers/VersionGanttController.php +++ b/app/Http/Controllers/VersionGanttController.php @@ -117,11 +117,9 @@ class VersionGanttController extends Controller ->where('m_activity.parent_id', null) ->get(); foreach($progress as $item) { - if($item->persentase_progress){ $item->progress = $item->persentase_progress; $item->bobot = $item->bobot_planning; $item->save(); - } } } From 7901aa0833906ceb5dc5102ec29797788792b88f Mon Sep 17 00:00:00 2001 From: wahyu Date: Tue, 19 Dec 2023 13:34:21 +0700 Subject: [PATCH 08/32] add gantt name on behind task project --- app/Http/Controllers/ProjectController.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 62bd9ab..5b5f30f 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -602,16 +602,16 @@ class ProjectController extends Controller ->value('end_date'); if(isset($payload['till_date'])) { if (isset($payload['scurve'])) { - $overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); + $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('m_activity.proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); } else { - $overdueActivities = Activity::where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); + $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); } } else { if (isset($payload['scurve'])) { - $overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get(); + $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('m_activity.proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get(); } else { - $overdueActivities = Activity::where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get(); + $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get(); } } $result->overdueActivities = $overdueActivities; From 2d7c424f0fa5e32804d8f329e182d1120e69fa31 Mon Sep 17 00:00:00 2001 From: wahyu Date: Tue, 19 Dec 2023 17:45:13 +0700 Subject: [PATCH 09/32] update dashboard bod error --- app/Http/Controllers/DashboardBoDController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/DashboardBoDController.php b/app/Http/Controllers/DashboardBoDController.php index deb8065..af68816 100644 --- a/app/Http/Controllers/DashboardBoDController.php +++ b/app/Http/Controllers/DashboardBoDController.php @@ -61,7 +61,7 @@ class DashboardBoDController extends Controller $totalExpenditure = $totalInvoice = $totalPaidInvoice = 0; // we can't use eloquent's sum() method because someone decided to use varchar as datatype in rencana_biaya field - $totalBudgets = Project::select(DB::raw('SUM(CAST("rencana_biaya" AS DOUBLE PRECISION))')) + $totalBudgets = Project::select(DB::raw("SUM(CAST(REPLACE(rencana_biaya, ',', '.') AS DOUBLE PRECISION))")) ->where('mulai_proyek', 'like', $year) /* ->orWhere('akhir_proyek', 'like', $year) */ ->pluck('sum') @@ -315,7 +315,7 @@ class DashboardBoDController extends Controller private function countTotalProjectValueInDivision($id, $year) { - return Project::select(DB::raw('SUM(CAST("rencana_biaya" AS DOUBLE PRECISION))')) + return Project::select(DB::raw("SUM(CAST(REPLACE(rencana_biaya, ',', '.') AS DOUBLE PRECISION))")) ->where('mulai_proyek', 'like', $year) /* ->orWhere('akhir_proyek', 'like', $year) */ ->where('divisi_id', $id) From cd2101a108fd41420fffd5fb30312a10ce90c06e Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 20 Dec 2023 13:36:03 +0700 Subject: [PATCH 10/32] update report activity --- app/Http/Controllers/ReportActivityMaterialController.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ReportActivityMaterialController.php b/app/Http/Controllers/ReportActivityMaterialController.php index d5fc160..44b228b 100644 --- a/app/Http/Controllers/ReportActivityMaterialController.php +++ b/app/Http/Controllers/ReportActivityMaterialController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Helpers\MasterFunctionsHelper; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use App\Models\ReportActivityMaterial; use App\Models\Activity; use App\Models\AssignMaterial; @@ -132,6 +133,7 @@ class ReportActivityMaterialController extends Controller public function datatables(Request $request){ $id_activity = $request->query('idAct'); + $id_am = $request->query('idAmi'); $type = $request->query('type'); $materialName = $request->query('materialName'); if($type == 'plan'){ @@ -143,7 +145,7 @@ class ReportActivityMaterialController extends Controller $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) - ->where('m.description', 'LIKE', '%' . $materialName . '%') + ->where('assign_material_to_activity.id', $id_am) ->orderBy('assign_material_to_activity.id', 'asc') ->get(); if ($baselineDuration > 0) { @@ -172,7 +174,7 @@ class ReportActivityMaterialController extends Controller ->join("m_req_material as m", "m.id", "=", "amta.material_id") ->join("m_users as u", "u.id", "=", "report_activity_material.user_id") ->where('report_activity_material.activity_id', $id_activity) - ->where('m.description', 'LIKE', '%' . $materialName . '%') + ->where('report_activity_material.assign_material_id', $id_am) ->orderBy('report_activity_material.report_date', 'asc') ->get(); if ($baselineDuration > 0) { From c67d62003c2f0b36bbe60c282f31f330ee1d82c1 Mon Sep 17 00:00:00 2001 From: ibnu Date: Wed, 20 Dec 2023 15:21:14 +0700 Subject: [PATCH 11/32] update user-to-activity --- .../Controllers/UserToActivityController.php | 22 ++++++++++++++++--- routes/web.php | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index b387c24..e491e22 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -158,7 +158,7 @@ class UserToActivityController extends Controller $dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity'); $builder = $dataBuilder['builder']; - $countBuilder = $dataBuilder['count']; + // $countBuilder = $dataBuilder['count']; if (isset($join_column)) { $startDate = $join_column['start_date']; $endDate = $join_column['end_date']; @@ -187,8 +187,24 @@ class UserToActivityController extends Controller } $dataGet = $filteredData; } - $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + // $totalRecord = $countBuilder->count(); + return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>count($dataGet)], 200); + } + + public function activityUser(Request $request){ + $payload = $request->all(); + $query = DB::table('m_activity as ma') + ->select('ahta.id', 'ma.id as activity_id', 'ma.proyek_id', 'ma.name as join_second_name', 'ma.start_date as join_second_start_date', + 'ma.end_date as join_second_end_date', 'ma.persentase_progress', 'mvg.name_version', 'mp.nama as nama_proyek', 'mp.type_proyek_id') + ->join('assign_hr_to_activity as ahta', 'ahta.activity_id', '=', 'ma.id') + ->join('m_version_gantt as mvg', 'mvg.id', '=', 'ma.version_gantt_id') + ->join('m_proyek as mp', 'mp.id', '=', 'ma.proyek_id') + ->where('ahta.user_id', $payload['user_id']) + ->where('ma.start_date', '<=', $payload['start_date']) + ->where('ma.end_date', '>=', $payload['end_date']) + ->get(); + + return response()->json(['status'=>'success','code'=>200,'data'=>$query, 'totalRecord'=>count($request->all())], 200); } public function list() diff --git a/routes/web.php b/routes/web.php index f82f295..9f6c0e4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -198,7 +198,7 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout $router->post('/user-to-activity/add-multiple', 'UserToActivityController@addMultiple'); $router->get('/user-to-activity/edit/{id}', 'UserToActivityController@edit'); $router->put('/user-to-activity/update/{id}', 'UserToActivityController@update'); - $router->post('/user-to-activity/search', 'UserToActivityController@search'); + $router->post('/user-to-activity/search', 'UserToActivityController@activityUser'); $router->post('/user-to-activity/search-analysis', 'UserToActivityController@searchAnalysis'); $router->post('/user-to-activity/list-filtered', 'UserToActivityController@listFiltered'); $router->delete('/user-to-activity/delete/{id}', 'UserToActivityController@delete'); From 907b660b5e7b53fc7b3dae01a22eeecee652df9b Mon Sep 17 00:00:00 2001 From: ibnu Date: Wed, 20 Dec 2023 16:56:45 +0700 Subject: [PATCH 12/32] update search activity for mobile --- .../Controllers/UserToActivityController.php | 16 +++++++++++++--- routes/web.php | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index e491e22..9703946 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -193,18 +193,28 @@ class UserToActivityController extends Controller public function activityUser(Request $request){ $payload = $request->all(); - $query = DB::table('m_activity as ma') + $activity = DB::table('m_activity as ma') ->select('ahta.id', 'ma.id as activity_id', 'ma.proyek_id', 'ma.name as join_second_name', 'ma.start_date as join_second_start_date', 'ma.end_date as join_second_end_date', 'ma.persentase_progress', 'mvg.name_version', 'mp.nama as nama_proyek', 'mp.type_proyek_id') ->join('assign_hr_to_activity as ahta', 'ahta.activity_id', '=', 'ma.id') ->join('m_version_gantt as mvg', 'mvg.id', '=', 'ma.version_gantt_id') - ->join('m_proyek as mp', 'mp.id', '=', 'ma.proyek_id') + ->join('m_proyek as mp', 'mp.id', '=', 'ma.proyek_id') ->where('ahta.user_id', $payload['user_id']) ->where('ma.start_date', '<=', $payload['start_date']) ->where('ma.end_date', '>=', $payload['end_date']) ->get(); - return response()->json(['status'=>'success','code'=>200,'data'=>$query, 'totalRecord'=>count($request->all())], 200); + if ($payload['status'] != "") { + $filteredData = []; + foreach ($activity as $value) { + $assignMaterial = AssignMaterial::where('activity_id', $value->activity_id)->first(); + if ($assignMaterial->status_activity == $payload['status']) { + $filteredData[] = $value; + } + } + $activity = $filteredData; + } + return response()->json(['status'=>'success','code'=>200,'data'=>$activity, 'totalRecord'=>count($activity)], 200); } public function list() diff --git a/routes/web.php b/routes/web.php index 9f6c0e4..3938ef8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -198,7 +198,8 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout $router->post('/user-to-activity/add-multiple', 'UserToActivityController@addMultiple'); $router->get('/user-to-activity/edit/{id}', 'UserToActivityController@edit'); $router->put('/user-to-activity/update/{id}', 'UserToActivityController@update'); - $router->post('/user-to-activity/search', 'UserToActivityController@activityUser'); + $router->post('/user-to-activity/search', 'UserToActivityController@search'); + $router->post('/user-to-activity/by-date-status', 'UserToActivityController@activityUser'); $router->post('/user-to-activity/search-analysis', 'UserToActivityController@searchAnalysis'); $router->post('/user-to-activity/list-filtered', 'UserToActivityController@listFiltered'); $router->delete('/user-to-activity/delete/{id}', 'UserToActivityController@delete'); From a0f487fd328e07f5627a0d316f9b7e820a9cc730 Mon Sep 17 00:00:00 2001 From: wahyuun Date: Thu, 21 Dec 2023 01:11:06 +0700 Subject: [PATCH 13/32] project charter --- app/Http/Controllers/ProjectController.php | 5 +++-- app/Models/Project.php | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 5b5f30f..104b128 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -53,7 +53,8 @@ class ProjectController extends Controller 'mulai_proyek' => 'required', 'akhir_proyek' => 'required', 'rencana_biaya' => 'required', - 'type_proyek_id' => 'required' + 'type_proyek_id' => 'required', + 'value_proyek' => 'required' ]); $data = $request->all(); @@ -543,7 +544,7 @@ class ProjectController extends Controller $maxEndDate = Activity::where('proyek_id', $id)->select('end_date') ->orderBy('end_date', 'desc') ->first(); - + }else{ // $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists(); $maxEndDate = Activity::where('version_gantt_id', $ganttId)->select('end_date') diff --git a/app/Models/Project.php b/app/Models/Project.php index cf2d0ad..2226419 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -25,6 +25,7 @@ class Project extends Model 'pm_id', 'type_proyek_id', 'divisi_id', + 'value_proyek', 'persentase_progress', 'keterangan', 'durasi_proyek', From 8b3bece9c08b8d24e205c5d03640a3f3bd0d479a Mon Sep 17 00:00:00 2001 From: wahyuun Date: Thu, 21 Dec 2023 11:53:50 +0700 Subject: [PATCH 14/32] add scoupe of work & fillable --- app/Http/Controllers/UserToProyekController.php | 3 ++- app/Models/Project.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/UserToProyekController.php b/app/Http/Controllers/UserToProyekController.php index f6fca59..a0606ea 100644 --- a/app/Http/Controllers/UserToProyekController.php +++ b/app/Http/Controllers/UserToProyekController.php @@ -50,7 +50,8 @@ class UserToProyekController extends Controller "user_id" => $item, "proyek_id" => $request->proyek_id, "created_by" => $this->currentName, - 'is_customer'=>true + 'is_customer'=>true, + 'project_role'=> $request->project_role ); $result = UserToProyek::create($dataInsert); diff --git a/app/Models/Project.php b/app/Models/Project.php index 2226419..1e575d6 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -23,6 +23,7 @@ class Project extends Model 'biaya_actual', 'company', 'pm_id', + 'scoupe_of_work', 'type_proyek_id', 'divisi_id', 'value_proyek', From d023856cb3980040efc2239eae057e4946d15ee4 Mon Sep 17 00:00:00 2001 From: ibnu Date: Thu, 21 Dec 2023 16:37:45 +0700 Subject: [PATCH 15/32] update where proyek_id --- app/Http/Controllers/UserToActivityController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index 9703946..5a2238d 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -202,6 +202,7 @@ class UserToActivityController extends Controller ->where('ahta.user_id', $payload['user_id']) ->where('ma.start_date', '<=', $payload['start_date']) ->where('ma.end_date', '>=', $payload['end_date']) + ->where('ma.proyek', '>=', $payload['proyek_id']) ->get(); if ($payload['status'] != "") { From 8110897a3b1338de914ab14acd0ba32b59d23e40 Mon Sep 17 00:00:00 2001 From: ibnu Date: Thu, 21 Dec 2023 17:06:49 +0700 Subject: [PATCH 16/32] update add divisi name --- app/Http/Controllers/DashboardBoDController.php | 5 +++-- app/Models/Project.php | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/DashboardBoDController.php b/app/Http/Controllers/DashboardBoDController.php index af68816..70bb309 100644 --- a/app/Http/Controllers/DashboardBoDController.php +++ b/app/Http/Controllers/DashboardBoDController.php @@ -350,8 +350,9 @@ class DashboardBoDController extends Controller public function getDetailExpenditure($year = '%') { $year = $this->interpolateYear($year); - $projects = Project::where('mulai_proyek', 'like', $year) - /* ->orWhere('akhir_proyek', 'like', $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') ->orderBy('id', 'desc') ->get(); foreach ($projects as $project) { diff --git a/app/Models/Project.php b/app/Models/Project.php index 1e575d6..2721944 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -15,6 +15,7 @@ class Project extends Model 'kode_sortname', 'jumlah_stakeholder', 'nama', + 'nickname', 'mulai_proyek', 'akhir_proyek', 'area_kerja', From 657095bfddef75b2ce8cada1798cac9f1f589e48 Mon Sep 17 00:00:00 2001 From: ibnu Date: Thu, 21 Dec 2023 17:50:45 +0700 Subject: [PATCH 17/32] add nickname add logic get data --- app/Http/Controllers/ProjectController.php | 30 +++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 104b128..dd215ce 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -80,18 +80,24 @@ class ProjectController extends Controller if (empty($id) || !is_int((int)$id)) return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); - $result = Project::query() - ->from('m_proyek AS mp') - ->where('mp.id', $id) - ->selectRaw('value_proyek,scoupe_of_work,kode_sortname,jumlah_stakeholder,nama,mulai_proyek,akhir_proyek,area_kerja,rencana_biaya,biaya_actual,company,pm_id,type_proyek_id,divisi_id,persentase_progress,keterangan,durasi_proyek,progress_by_worklog,currency_symbol,late_consequence,assumtion,currency_code,currency_name,project_objectives,considered_success_when,potential_risk,testing_environment,budget_health,phase_id,calculation_status'); - - if (!is_null($result->first()['divisi_id'])) { - $result->leftJoin('m_divisi', 'mp.divisi_id', '=', 'm_divisi.id') - ->addSelect(DB::raw('m_divisi.name AS nama_divisi')); - } - - $result = $result->first(); - + // $result = Project::query() + // ->from('m_proyek AS mp') + // ->where('mp.id', $id) + // ->selectRaw('value_proyek,scoupe_of_work,kode_sortname,jumlah_stakeholder,nama,mulai_proyek,akhir_proyek, + // area_kerja,rencana_biaya,biaya_actual,company,pm_id,type_proyek_id,divisi_id,persentase_progress,keterangan,durasi_proyek,progress_by_worklog,currency_symbol,late_consequence,assumtion,currency_code,currency_name,project_objectives,considered_success_when,potential_risk,testing_environment,budget_health,phase_id,calculation_status'); + + // if (!is_null($result->first()['divisi_id'])) { + // $result->leftJoin('m_divisi', 'mp.divisi_id', '=', 'm_divisi.id') + // ->addSelect(DB::raw('m_divisi.name AS nama_divisi')); + // } + $result = Project::select('value_proyek','scoupe_of_work','kode_sortname','jumlah_stakeholder','nama','mulai_proyek','akhir_proyek', + 'area_kerja','rencana_biaya','biaya_actual','company','pm_id','type_proyek_id','divisi_id','persentase_progress', + 'keterangan','durasi_proyek','progress_by_worklog','currency_symbol','late_consequence','assumtion','currency_code', + 'currency_name','project_objectives','considered_success_when','potential_risk','testing_environment','budget_health', + 'phase_id','calculation_status','md.name as divisi_name', 'nickname') + ->join('m_divisi as md','md.id', '=', 'm_proyek.divisi_id') + ->where('m_proyek.id', $id) + ->first(); if(!$result) return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); From 59b170c7b9fb82a3744bab9e6ebc27f7f953d5bf Mon Sep 17 00:00:00 2001 From: ibnu Date: Thu, 21 Dec 2023 18:05:03 +0700 Subject: [PATCH 18/32] update user-activity --- app/Http/Controllers/UserToActivityController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index 5a2238d..c8a4f38 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -202,7 +202,7 @@ class UserToActivityController extends Controller ->where('ahta.user_id', $payload['user_id']) ->where('ma.start_date', '<=', $payload['start_date']) ->where('ma.end_date', '>=', $payload['end_date']) - ->where('ma.proyek', '>=', $payload['proyek_id']) + ->where('ma.proyek', $payload['proyek_id']) ->get(); if ($payload['status'] != "") { From d512aad318c5cc199f053cb73b2512866649018a Mon Sep 17 00:00:00 2001 From: ibnu Date: Thu, 21 Dec 2023 18:12:32 +0700 Subject: [PATCH 19/32] update user-activity --- app/Http/Controllers/UserToActivityController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index c8a4f38..bbd1b40 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -202,7 +202,7 @@ class UserToActivityController extends Controller ->where('ahta.user_id', $payload['user_id']) ->where('ma.start_date', '<=', $payload['start_date']) ->where('ma.end_date', '>=', $payload['end_date']) - ->where('ma.proyek', $payload['proyek_id']) + ->where('ma.proyek_id', $payload['proyek_id']) ->get(); if ($payload['status'] != "") { From 0ecacd65d8714f62f3792c811baff0423907de44 Mon Sep 17 00:00:00 2001 From: wahyu Date: Thu, 21 Dec 2023 20:41:10 +0700 Subject: [PATCH 20/32] use nickname --- app/Http/Controllers/DashboardBoDController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Controllers/DashboardBoDController.php b/app/Http/Controllers/DashboardBoDController.php index af68816..f07fff4 100644 --- a/app/Http/Controllers/DashboardBoDController.php +++ b/app/Http/Controllers/DashboardBoDController.php @@ -110,6 +110,7 @@ class DashboardBoDController extends Controller array_push($return, [ 'project' => $project->nama, 'project_code' => $project->kode_sortname, + 'nickname' => $project->nickname, 'invoiced' => $resp->data->total_invoice_amount ?? 0, 'paid' => $resp->data->total_invoice_paid_amount ?? 0, 'response' => $resp, From 20326961e36d5204f38f0594d92b29b877affbbd Mon Sep 17 00:00:00 2001 From: wahyu Date: Fri, 22 Dec 2023 11:07:02 +0700 Subject: [PATCH 21/32] fix open scurve error --- app/Http/Controllers/ProjectController.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 104b128..b4d963d 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -581,10 +581,12 @@ class ProjectController extends Controller $plannedEnd = Activity::where('version_gantt_id', $ganttId) ->orderByDesc('planned_end') ->value('planned_end'); - $result->header->start_date = $startDate; - $result->header->end_date = $maxEndDate->end_date; - $result->header->planned_start = $plannedStart; - $result->header->planned_end = $plannedEnd; + 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); } From c313683113ced3059af66fd37c335fff1770b93e Mon Sep 17 00:00:00 2001 From: farhantock Date: Wed, 27 Dec 2023 10:18:29 +0700 Subject: [PATCH 22/32] add Hierarchy --- app/Http/Controllers/AuthController.php | 37 +- app/Http/Controllers/Controller.php | 2 +- app/Http/Controllers/ProjectController.php | 600 +++++++++++---------- app/Models/Project.php | 2 + 4 files changed, 351 insertions(+), 290 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index bb31e8c..37ae48f 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -11,6 +11,7 @@ use App\Models\Role; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Password; use Illuminate\Validation\ValidationException; + class AuthController extends Controller { public function __construct() @@ -25,46 +26,50 @@ class AuthController extends Controller $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); + if (empty($username) || empty($password)) + return response()->json(['status' => 'error', 'message' => 'You must fill all the fields'], 400); $usernameCheck = false; $passwordCheck = false; - - if (User::where('username', $username)->exists()) + + if (User::where('username', $username)->exists()) $usernameCheck = true; - if (User::where('password', md5($password))->exists()) + if (User::where('password', md5($password))->exists()) $passwordCheck = true; - if ($usernameCheck & $passwordCheck){ + if ($usernameCheck & $passwordCheck) { $user = User::where('username', $username)->where('password', md5($password))->first(); - if($is_mobile){ + if ($is_mobile) { $fcm_token = $request->fcm_token; - if(!$fcm_token || $fcm_token=="") - return response()->json(['status'=>'error','message'=>'FCM Token is required'], 400); + if (!$fcm_token || $fcm_token == "") + return response()->json(['status' => 'error', 'message' => 'FCM Token is required'], 400); $dataUpdateFcm = array( - "fcm_token"=>$fcm_token + "fcm_token" => $fcm_token ); $hr = User::find($user->id); - if($hr) + if ($hr) $hr->update($dataUpdateFcm); } $dataRole = Role::find($user->role_id); + $dataHierarchy = $this->getDataHierarchy($user->divisi_id, $user->id); - if($dataRole) + if ($dataRole) $user->role = $dataRole; - if (! $token =Auth::login($user)) + if ($dataHierarchy) + $user->hierarchy = $dataHierarchy; + + if (!$token = Auth::login($user)) return response()->json(['error' => 'Unauthorized'], 401); $ttl = 60; - if($remember) + if ($remember) $ttl = 10080; // todo : change existing md5 hashed function to laravel's originally bcrypt @@ -80,13 +85,13 @@ class AuthController extends Controller 'expires_in' => auth()->factory()->getTTL() * $ttl, ), ]); - }else { + } else { if (!$usernameCheck && !$passwordCheck) return response()->json(['code' => 201, 'message' => "username and password doesn't match"], 201); if (!$passwordCheck) return response()->json(['code' => 201, 'message' => "password doesn't match"], 201); if (!$usernameCheck) return response()->json(['code' => 201, 'message' => "username doesn't match"], 201); - } + } } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 02049ab..50966ce 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -7,8 +7,8 @@ use Illuminate\Support\Facades\Http; use App\Models\UserToActivity; use App\Models\Activity; use App\Models\AssignMaterial; -use App\Models\User; use App\Models\Divisi; +use App\Models\User; use Laravel\Lumen\Routing\Controller as BaseController; use App\Models\ReportK3Detail; diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index ca92810..ed9603e 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -50,7 +50,7 @@ class ProjectController extends Controller { $this->validate($request, [ 'nama' => 'required', - 'mulai_proyek' => 'required', + 'mulai_proyek' => 'required', 'akhir_proyek' => 'required', 'rencana_biaya' => 'required', 'type_proyek_id' => 'required' @@ -59,81 +59,82 @@ class ProjectController extends Controller $data = $request->all(); $data['created_by'] = $this->currentName; + $data['created_by_id'] = $this->currentId; - if(empty($data['phase_id'])) + if (empty($data['phase_id'])) $data['phase_id'] = 1; $result = Project::create($data); - if(!$result) - return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500], 500); + 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); + 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); + 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::query() - ->from('m_proyek AS mp') - ->where('mp.id', $id) - ->selectRaw('value_proyek,scoupe_of_work,kode_sortname,jumlah_stakeholder,nama,mulai_proyek,akhir_proyek,area_kerja,rencana_biaya,biaya_actual,company,pm_id,type_proyek_id,divisi_id,persentase_progress,keterangan,durasi_proyek,progress_by_worklog,currency_symbol,late_consequence,assumtion,currency_code,currency_name,project_objectives,considered_success_when,potential_risk,testing_environment,budget_health,phase_id,calculation_status'); + $result = Project::query() + ->from('m_proyek AS mp') + ->where('mp.id', $id) + ->selectRaw('value_proyek,scoupe_of_work,kode_sortname,jumlah_stakeholder,nama,mulai_proyek,akhir_proyek,area_kerja,rencana_biaya,biaya_actual,company,pm_id,type_proyek_id,divisi_id,persentase_progress,keterangan,durasi_proyek,progress_by_worklog,currency_symbol,late_consequence,assumtion,currency_code,currency_name,project_objectives,considered_success_when,potential_risk,testing_environment,budget_health,phase_id,calculation_status'); - if (!is_null($result->first()['divisi_id'])) { - $result->leftJoin('m_divisi', 'mp.divisi_id', '=', 'm_divisi.id') - ->addSelect(DB::raw('m_divisi.name AS nama_divisi')); - } + if (!is_null($result->first()['divisi_id'])) { + $result->leftJoin('m_divisi', 'mp.divisi_id', '=', 'm_divisi.id') + ->addSelect(DB::raw('m_divisi.name AS nama_divisi')); + } - $result = $result->first(); + $result = $result->first(); - if(!$result) - return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); + if (!$result) + return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); - return response()->json(['status'=>'success','code'=> 200,'data'=>$result], 200); + 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); + 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); + 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); + 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); + 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 + "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); @@ -145,15 +146,15 @@ class ProjectController extends Controller { $data = Project::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); $this->deleteRelative($id); - if(!$data->delete()) - return response()->json(['status'=>'failed','message'=>'Delete failed!','code'=> 500], 500); + 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); + return response()->json(['status' => 'success', 'message' => 'Data deleted!', 'code' => 200], 200); } private function deleteRelative($project_id) @@ -168,12 +169,12 @@ class ProjectController extends Controller ProjectChecklists::where('proyek_id', $project_id)->delete(); ProjectIssues::where('proyek_id', $project_id)->delete(); ProjectRisks::where('proyek_id', $project_id)->delete(); - ProjectToChecklistK3::where('proyek_id', $project_id)->delete(); - HierarchyFtth::where('project_id', $project_id)->delete(); - AssignTools::where('proyek_id', $project_id)->delete(); - OfficeHours::where('proyek_id', $project_id)->delete(); - ReportK3::where('proyek_id', $project_id)->delete(); - RequestMaterial::where('proyek_id', $project_id)->delete(); + ProjectToChecklistK3::where('proyek_id', $project_id)->delete(); + HierarchyFtth::where('project_id', $project_id)->delete(); + AssignTools::where('proyek_id', $project_id)->delete(); + OfficeHours::where('proyek_id', $project_id)->delete(); + ReportK3::where('proyek_id', $project_id)->delete(); + RequestMaterial::where('proyek_id', $project_id)->delete(); $this->deleteVersionGantt($project_id); $this->deleteDokumenProject($project_id); } @@ -188,16 +189,16 @@ class ProjectController extends Controller 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); + 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); + if (file_exists($this->pathActivityDocument . $ad->file)) { + unlink($this->pathActivityDocument . $ad->file); } } ActivityDokumen::whereIn("activity_id", $activityIds)->delete(); @@ -215,8 +216,8 @@ class ProjectController extends Controller $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); + 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(); @@ -225,8 +226,8 @@ class ProjectController extends Controller $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); + if (file_exists($this->pathDocument . $dokumen->file)) { + unlink($this->pathDocument . $dokumen->file); } } @@ -240,11 +241,11 @@ class ProjectController extends Controller $dataBuilder = $this->setUpPayload($payload, 'm_proyek'); $builder = $dataBuilder['builder']; $countBuilder = $dataBuilder['count']; - // $builder->where("selfTable.created_by",$this->currentName); + // $builder->where("selfTable.created_by",$this->currentName); $dataGet = $builder->get(); $totalRecord = $countBuilder->count(); - return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200); } public function list() @@ -286,101 +287,116 @@ class ProjectController extends Controller 'created_by', 'updated_at', 'updated_by' - )->orderBy('id', 'desc') - // ->where("created_by",$this->currentName) - ->get(); + )->orderBy('id', 'desc') + // ->where("created_by",$this->currentName) + ->get(); $countData = $data->count(); - 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); - $totalPlannedCost = array_sum(array_map('intval', array_column($data->toArray(), 'plannedCost'))); - $totalActualCost = $data->sum('actualCost'); + $totalPlannedCost = array_sum(array_map('intval', array_column($data->toArray(), 'plannedCost'))); + $totalActualCost = $data->sum('actualCost'); $manpowers = User::count(); $projectsOnDanger = Project::where('budget_health', 'overrun')->count(); - $projectPhases = ProjectPhase::orderBy('order', 'asc')->pluck('name'); - $projectTypes = ProjectType::orderBy('id', 'asc')->pluck('name'); - try { - $projectsByPhase = DB::table('m_proyek') - ->select('m_proyek_phase.name', 'm_proyek_phase.color', DB::raw('count(*) as total')) - ->join('m_proyek_phase', 'm_proyek_phase.id', '=', 'm_proyek.phase_id') - ->groupBy('m_proyek_phase.name', 'm_proyek_phase.color') - ->get(); - } catch (\Exception $e) { - return response()->json(['message' => $e->getMessage()]); - } - try { - $projectsByType = DB::table('m_proyek') - ->select('m_type_proyek.name', DB::raw('count(m_type_proyek.id) as total')) - ->join('m_type_proyek', 'm_type_proyek.id', '=', 'm_proyek.type_proyek_id') - ->groupBy('m_type_proyek.name') - ->get(); - } catch (\Exception $e) { - return response()->json(['message' => $e->getMessage()]); - } + $projectPhases = ProjectPhase::orderBy('order', 'asc')->pluck('name'); + $projectTypes = ProjectType::orderBy('id', 'asc')->pluck('name'); + try { + $projectsByPhase = DB::table('m_proyek') + ->select('m_proyek_phase.name', 'm_proyek_phase.color', DB::raw('count(*) as total')) + ->join('m_proyek_phase', 'm_proyek_phase.id', '=', 'm_proyek.phase_id') + ->groupBy('m_proyek_phase.name', 'm_proyek_phase.color') + ->get(); + } catch (\Exception $e) { + return response()->json(['message' => $e->getMessage()]); + } + try { + $projectsByType = DB::table('m_proyek') + ->select('m_type_proyek.name', DB::raw('count(m_type_proyek.id) as total')) + ->join('m_type_proyek', 'm_type_proyek.id', '=', 'm_proyek.type_proyek_id') + ->groupBy('m_type_proyek.name') + ->get(); + } catch (\Exception $e) { + return response()->json(['message' => $e->getMessage()]); + } return response()->json( - [ - 'status'=>'success', - 'code'=>200, - 'data'=>$data, - 'totalRecord'=>$countData, - 'totalPlannedCost' => $totalPlannedCost, - 'totalActualCost' => $totalActualCost, - 'totalRevenue' => $totalPlannedCost - $totalActualCost, - 'manpowers' => $manpowers, - 'projectsOnDanger'=> $projectsOnDanger, - 'projectPhases' => $projectPhases, - 'projectsByPhase' => $projectsByPhase, - 'projectTypes' => $projectTypes, - 'projectsByType' => $projectsByType, - ], 200); + [ + 'status' => 'success', + 'code' => 200, + 'data' => $data, + 'totalRecord' => $countData, + 'totalPlannedCost' => $totalPlannedCost, + 'totalActualCost' => $totalActualCost, + 'totalRevenue' => $totalPlannedCost - $totalActualCost, + 'manpowers' => $manpowers, + 'projectsOnDanger' => $projectsOnDanger, + 'projectPhases' => $projectPhases, + 'projectsByPhase' => $projectsByPhase, + 'projectTypes' => $projectTypes, + 'projectsByType' => $projectsByType, + ], + 200 + ); } - public function getListProjectTask($id){ - $data = UserToActivity::select("assign_hr_to_activity.user_id as user_id","m_proyek.*") + 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); + if (!$data) + return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); - return response()->json(['status'=>'success','code'=>200,'data'=>$data], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200); } - public function getSCurve(Request $request){ + public function getSCurve(Request $request) + { $data = MasterFunctionsHelper::getSCurve($request); - return response()->json(['status'=>'success','code'=>200, 'data' => $data], 200); - } + return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200); + } - public function calculateSCurve(Request $request){ - $sCurve = Project::select('scurve')->where('id', $request->project_id)->first(); - return response()->json(['status'=>'success','code'=>200, 'data' => json_decode($sCurve->scurve)], 200); - } + // testing + public function calculateSCurvetest(Request $request) + { + $data = MasterFunctionsHelper::calculateSCurve($request->project_id); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200); + } - public function sCurveCommand(Request $request){ - Artisan::call('calculate:scurve', [ - 'project_id' => $request->project_id - ]); - // $project = Project::find($request->project_id); + public function calculateSCurve(Request $request) + { + $sCurve = Project::select('scurve')->where('id', $request->project_id)->first(); + return response()->json(['status' => 'success', 'code' => 200, 'data' => json_decode($sCurve->scurve)], 200); + } - // if ($project) { - // dispatch(new ProcessSCurve($project)); + public function sCurveCommand(Request $request) + { + Artisan::call('calculate:scurve', [ + 'project_id' => $request->project_id + ]); + // $project = Project::find($request->project_id); + + // if ($project) { + // dispatch(new ProcessSCurve($project)); - // return response()->json(['message' => 'S Curve calculation queued']); - // } + // return response()->json(['message' => 'S Curve calculation queued']); + // } - // return response()->json(['message' => 'Project not found'], 404); - } + // return response()->json(['message' => 'Project not found'], 404); + } - public function getLinearSCurve(Request $request){ + public function getLinearSCurve(Request $request) + { $data = MasterFunctionsHelper::getLinearSCurve($request); - return response()->json(['status'=>'success','code'=>200, 'data' => $data], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200); } - public static function setSyncDate($activity_id, $activity, $report) { + public static function setSyncDate($activity_id, $activity, $report) + { $status = AssignMaterial::where('activity_id', $activity_id)->first(); if (!isset($status)) { $reports = array( @@ -412,17 +428,17 @@ class ProjectController extends Controller return $reports; } - public function synchronizeReport($gantt_id) + public function synchronizeReport($gantt_id) { $activities = Activity::where("version_gantt_id", $gantt_id)->get(); $reports = []; - foreach($activities as $activity) { + foreach ($activities as $activity) { $activity_id = $activity->id; $countReports = ReportActivityMaterial::where('activity_id', $activity_id)->count(); if ($countReports === 1) { $dataReports = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->get(); - foreach($dataReports as $dr) { + foreach ($dataReports as $dr) { $reports[] = ProjectController::setSyncDate($activity_id, $activity, $dr); } } @@ -443,15 +459,15 @@ class ProjectController extends Controller /* return response()->json(['status'=>'success','data'=> $reports,'code'=>200], 200); */ /* return response()->json(['status'=>'success','data'=> $activities,'code'=>200], 200); */ - for ($i=0; $i < count($reports); $i++) { + for ($i = 0; $i < count($reports); $i++) { $activity = Activity::find($reports[$i]['activity_id']); - if($reports[$i]['status'] != 'done'){ + if ($reports[$i]['status'] != 'done') { $reports[$i]['max_date']->modify('-1 day'); - }else if($reports[$i]['status'] == 'done'){ - $activity->actual_end = $reports[$i]['max_date']->setTime(23,59,59); + } else if ($reports[$i]['status'] == 'done') { + $activity->actual_end = $reports[$i]['max_date']->setTime(23, 59, 59); } $activity->start_date = $reports[$i]['min_date']; //same early - $activity->end_date = $reports[$i]['max_date']->setTime(23,59,59); // same early + $activity->end_date = $reports[$i]['max_date']->setTime(23, 59, 59); // same early $startDate = new DateTime($activity->start_date); $endDate = new DateTime($activity->end_date); $duration = MasterFunctionsHelper::countDays($activity->version_gantt_id, $startDate, $endDate); @@ -460,7 +476,7 @@ class ProjectController extends Controller $activity->save(); } - return response()->json(['status'=>'success','message'=>'Synchronize to report success!','code'=>200], 200); + return response()->json(['status' => 'success', 'message' => 'Synchronize to report success!', 'code' => 200], 200); } public function setBaseline($gantt_id) @@ -469,127 +485,139 @@ class ProjectController extends Controller foreach ($activities as $activity) { $activity->update([ - "planned_start"=>$activity->start_date, - "planned_end"=>$activity->end_date, - "early_start"=>$activity->start_date, - "early_end"=>$activity->end_date, + "planned_start" => $activity->start_date, + "planned_end" => $activity->end_date, + "early_start" => $activity->start_date, + "early_end" => $activity->end_date, ]); } - return response()->json(['status'=>'success','message'=>'Set baseline success!','code'=> 200], 200); + return response()->json(['status' => 'success', 'message' => 'Set baseline success!', 'code' => 200], 200); } - public function getInvoiceIntegration(Request $request) { - $ganttCount = VersionGantt::where('proyek_id', $request->id)->count(); + public function getInvoiceIntegration(Request $request) + { + $ganttCount = VersionGantt::where('proyek_id', $request->id)->count(); $search = urlencode($request->search); - if(empty($search)) - return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400); - $url = str_replace("SEARCH", $search, config('api.adw').'/project_cost?project_no=SEARCH'); + if (empty($search)) + return response()->json(['status' => 'error', 'message' => 'Empty query string!'], 400); + $url = str_replace("SEARCH", $search, config('api.adw') . '/project_cost?project_no=SEARCH'); $response = MasterFunctionsHelper::curlReq($url); - if (isset($request->gantt_id)) { - $response->data->total_cost = $response->data->total_cost / $ganttCount; - } + if (isset($request->gantt_id)) { + $response->data->total_cost = $response->data->total_cost / $ganttCount; + } + + return response()->json(['status' => 'success', 'data' => $response, 'code' => 200], 200); + } + public function getByUser($id) + { + $alias = "utp"; + $userProyek = UserToProyek::query() + ->from('assign_hr_to_proyek AS ' . $alias) + ->where([ + ['is_customer', true], + ['user_id', $id] + ]) + ->leftJoin('m_users', $alias . '.user_id', '=', 'm_users.id') + ->leftJoin('m_proyek', $alias . '.proyek_id', '=', 'm_proyek.id') + ->leftJoin('m_type_proyek', 'm_proyek.type_proyek_id', '=', 'm_type_proyek.id') + ->select('m_proyek.*', 'm_type_proyek.name AS join_second_name', 'm_users.name AS join_first_name') + ->get(); + $totalRecord = $userProyek->count(); - return response()->json(['status'=>'success', 'data'=> $response, 'code'=>200], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $userProyek, 'totalRecord' => $totalRecord], 200); } - public function getByUser($id) - { - $alias = "utp"; - $userProyek = UserToProyek::query() - ->from('assign_hr_to_proyek AS ' . $alias) - ->where([ - ['is_customer', true], - ['user_id', $id] - ]) - ->leftJoin('m_users', $alias.'.user_id', '=', 'm_users.id') - ->leftJoin('m_proyek', $alias.'.proyek_id', '=', 'm_proyek.id') - ->leftJoin('m_type_proyek', 'm_proyek.type_proyek_id', '=', 'm_type_proyek.id') - ->select('m_proyek.*', 'm_type_proyek.name AS join_second_name','m_users.name AS join_first_name') - ->get(); - $totalRecord = $userProyek->count(); - - return response()->json(['status' => 'success', 'code' => 200, 'data' => $userProyek, 'totalRecord' => $totalRecord], 200); - } - public function detail(Request $request, $id, $gantt_id = null, $s_curve = null){ - if(empty($id) || !is_int((int)$id)) - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + public function detail(Request $request, $id, $gantt_id = null, $s_curve = null) + { + 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); - if (!isset($gantt_id)) { - $gantt = MasterFunctionsHelper::getLatestGantt($id); - $ganttId = $gantt['last_gantt_id']; - } else { - $ganttId = $gantt_id; - } + if (!$result) + return response()->json(['status' => 'failed', 'message' => 'Data not found!', 'code' => 404], 404); + if (!isset($gantt_id)) { + $gantt = MasterFunctionsHelper::getLatestGantt($id); + $ganttId = $gantt['last_gantt_id']; + } else { + $ganttId = $gantt_id; + } $result->projectManager = User::where('id', $result->pm_id)->value('name'); - if (isset($s_curve)) { - $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->first(); - $actualStartExist = Activity::where('proyek_id', $id)->whereNotNull('actual_start')->exists(); - if($result['type_proyek_id'] === 9) - { - $actualEndExist = Activity::where('proyek_id', $id)->exists(); - $query = Activity::where('proyek_id', $id); - }else{ - $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists(); - $query = Activity::where('version_gantt_id', $ganttId); - } - } else { - $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->where("version_gantt_id", $ganttId)->first(); - $actualStartExist = Activity::where('version_gantt_id', $ganttId)->whereNotNull('actual_start')->exists(); - $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists(); - $query = Activity::where('version_gantt_id', $ganttId); - } - - if ($actualStartExist) { - $startDate = $query->orderBy('actual_start')->value('start_date'); - } else { - $startDate = $query->orderBy('start_date')->value('start_date'); - } - if($actualEndExist) - { - $maxEndDate = $query->max('id'); - $endDate = $query->where('id',$maxEndDate)->first()->end_date; - } - - $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'); - $result->header->start_date = $startDate; - $result->header->end_date = $endDate; - $result->header->planned_start = $plannedStart; - $result->header->planned_end = $plannedEnd; - return response()->json(['status'=>'success','code'=> 200,'data'=>$result, 'gantt'=>$ganttId], 200); + if (isset($s_curve)) { + $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->first(); + $actualStartExist = Activity::where('proyek_id', $id)->whereNotNull('actual_start')->exists(); + if ($result['type_proyek_id'] === 9) { + // $actualEndExist = Activity::where('proyek_id', $id)->exists(); + $query = Activity::where('proyek_id', $id); + $maxEndDate = Activity::where('proyek_id', $id)->select('end_date') + ->orderBy('end_date', 'desc') + ->first(); + } else { + // $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists(); + $maxEndDate = Activity::where('version_gantt_id', $ganttId)->select('end_date') + ->orderBy('end_date', 'desc') + ->first(); + $query = Activity::where('version_gantt_id', $ganttId); + } + } else { + $result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->where("version_gantt_id", $ganttId)->first(); + $actualStartExist = Activity::where('version_gantt_id', $ganttId)->whereNotNull('actual_start')->exists(); + // $actualEndExist = Activity::where('version_gantt_id', $ganttId)->exists(); + $maxEndDate = Activity::where('version_gantt_id', $ganttId)->select('end_date') + ->orderBy('end_date', 'desc') + ->first(); + $query = Activity::where('version_gantt_id', $ganttId); + } + + if ($actualStartExist) { + $startDate = $query->orderBy('actual_start')->value('start_date'); + } else { + $startDate = $query->orderBy('start_date')->value('start_date'); + } + // if($actualEndExist) + // { + // // $maxEndDate = $query->max('id'); + // // get last end_date + // // $endDate = $query->where('id',$maxEndDate)->first()->end_date; + + // } + + $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'); + $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); } - public function getOverdueActivities(Request $request){ + public function getOverdueActivities(Request $request) + { $payload = $request->all(); - if(empty($payload['id']) || !is_int((int)$payload['id'])) - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + if (empty($payload['id']) || !is_int((int)$payload['id'])) + return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); $result = Project::find($payload['id']); - if(!$result) - return response()->json(['status'=>'failed','message'=> 'Project not found!','code'=> 404], 404); + if (!$result) + return response()->json(['status' => 'failed', 'message' => 'Project not found!', 'code' => 404], 404); //TODO possible overdue bug $endDate = Activity::where('proyek_id', $payload['id']) ->orderByDesc('end_date') ->value('end_date'); - if(isset($payload['till_date'])) { + if (isset($payload['till_date'])) { if (isset($payload['scurve'])) { - $overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); + $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('m_activity.proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date', '<=', $endDate)->orderBy('end_date', 'asc')->get(); } else { - $overdueActivities = Activity::where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); + $overdueActivities = Activity::join('m_version_gantt', 'm_activity.version_gantt_id', '=', 'm_version_gantt.id')->where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date', '<=', $endDate)->orderBy('end_date', 'asc')->get(); } - } - else { + } else { if (isset($payload['scurve'])) { $overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get(); } else { @@ -598,53 +626,75 @@ class ProjectController extends Controller } $result->overdueActivities = $overdueActivities; - return response()->json(['status'=>'success','code'=> 200,'data'=>$result], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200); } - public function getReportDistribution(Request $request){ + public function getReportDistribution(Request $request) + { $payload = $request->all(); - if(empty($payload['project_id']) || !is_int((int)$payload['project_id'])) - return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); + if (empty($payload['project_id']) || !is_int((int)$payload['project_id'])) + return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); $reports = DB::table('assign_material_to_activity as ama') - ->select('u.name', 'a.name as activity_name', 'ama.qty_planning', 'ram.qty as qty_real','rm.description as material_name', 'rm.uom as material_unit', - 'ram.lat', 'ram.lon', 'ram.description as report_notes', 'ram.report_date') + ->select( + 'u.name', + 'a.name as activity_name', + 'ama.qty_planning', + 'ram.qty as qty_real', + 'rm.description as material_name', + 'rm.uom as material_unit', + 'ram.lat', + 'ram.lon', + 'ram.description as report_notes', + 'ram.report_date' + ) ->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id') ->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id') ->join('m_activity as a', 'a.id', '=', 'ama.activity_id') ->join('m_users as u', 'u.id', '=', 'ram.user_id') ->where('ama.proyek_id', '=', $payload['project_id']) ->whereNotNull('ram.lat') - ->whereBetween('ram.report_date', [$payload['start_date'], $payload['end_date']]); + ->whereBetween('ram.report_date', [$payload['start_date'], $payload['end_date']]); - return response()->json(['status'=>'success', 'code'=> 200, 'data'=> $reports], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $reports], 200); } - public function getManpower($proyek_id){ + public function getManpower($proyek_id) + { $manCount = UserToProyek::where('proyek_id', $proyek_id)->count(); - return response()->json(['totalRecord'=>$manCount]); + return response()->json(['totalRecord' => $manCount]); } - public function getAssignedHR($gantt_id){ + public function getAssignedHR($gantt_id) + { $results = UserToActivity::select('assign_hr_to_activity.proyek_id', 'assign_hr_to_activity.user_id', 'm_activity.id', 'm_activity.name', 'm_activity.start_date', 'm_activity.end_date') ->join('m_activity', 'm_activity.id', '=', 'assign_hr_to_activity.activity_id') ->where('assign_hr_to_activity.version_gantt_id', $gantt_id) ->get(); - return response()->json(['data'=>$results]); + return response()->json(['data' => $results]); } public function dashboard($id) { $data = DB::table('m_proyek as mp') - ->select('mp.kode_sortname', 'mp.nama as name_project', 'mp.mulai_proyek as start', 'mp.akhir_proyek as finish', - 'mp.rencana_biaya', 'mp.company', 'mp.currency_symbol', 'mu.name as pm', 'mp.budget_health') - ->join('m_users as mu', 'mu.id', '=', 'mp.pm_id') - ->where('mp.id', $id) - ->first(); - - if(!$data) - return response()->json(['status'=>'failed','message'=>'Data tidak ditemukan!','code'=> 404], 404); + ->select( + 'mp.kode_sortname', + 'mp.nama as name_project', + 'mp.mulai_proyek as start', + 'mp.akhir_proyek as finish', + 'mp.rencana_biaya', + 'mp.company', + 'mp.currency_symbol', + 'mu.name as pm', + 'mp.budget_health' + ) + ->join('m_users as mu', 'mu.id', '=', 'mp.pm_id') + ->where('mp.id', $id) + ->first(); + + if (!$data) + return response()->json(['status' => 'failed', 'message' => 'Data tidak ditemukan!', 'code' => 404], 404); $manpowers = UserToProyek::where('proyek_id', $id)->count(); $rootActivity = Activity::whereNull('parent_id')->where('proyek_id', $id)->orderBy('version_gantt_id', 'desc')->first(); @@ -653,38 +703,42 @@ class ProjectController extends Controller $progress = @$rootActivity->persentase_progress ?? 0; $commentActivity = DB::table('m_comment_activity as mca') - ->select('mca.activity_id', 'mca.comment as comment', 'mca.created_by as comment_by', 'mca.created_at as comment_created', - 'ma.name as activity') - ->join('m_activity as ma', 'ma.id', '=', 'mca.activity_id') - ->where('ma.proyek_id', $id) - ->orderBy('comment_by') - ->take(2) - ->get(); + ->select( + 'mca.activity_id', + 'mca.comment as comment', + 'mca.created_by as comment_by', + 'mca.created_at as comment_created', + 'ma.name as activity' + ) + ->join('m_activity as ma', 'ma.id', '=', 'mca.activity_id') + ->where('ma.proyek_id', $id) + ->orderBy('comment_by') + ->take(2) + ->get(); $data->actual_cost = $actualCost; $data->progress = $progress; $data->comment = $commentActivity; $data->man_power = $manpowers; - return response()->json(['status'=>'success','code'=>200,'data'=> $data], 200); + return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200); } - private function httpReq($search){ - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, str_replace("ADDR", $search, API_GEOLOCATION)); + private function httpReq($search) + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, str_replace("ADDR", $search, API_GEOLOCATION)); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_STDERR, fopen('php://stderr', 'w')); $info = curl_getinfo($ch); - $output = curl_exec($ch); - curl_close($ch); + $output = curl_exec($ch); + curl_close($ch); - return json_decode($output); + return json_decode($output); } - } - diff --git a/app/Models/Project.php b/app/Models/Project.php index 115c9b6..5ac9382 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -23,8 +23,10 @@ class Project extends Model 'biaya_actual', 'company', 'pm_id', + 'scoupe_of_work', 'type_proyek_id', 'divisi_id', + 'value_proyek', 'persentase_progress', 'keterangan', 'durasi_proyek', From 11cda6e40cf4efcf04fa33bc157757006634ce8f Mon Sep 17 00:00:00 2001 From: farhantock Date: Wed, 27 Dec 2023 10:18:45 +0700 Subject: [PATCH 23/32] update early warning to 20% --- .../Controllers/DashboardBoDController.php | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/DashboardBoDController.php b/app/Http/Controllers/DashboardBoDController.php index deb8065..65f6a39 100644 --- a/app/Http/Controllers/DashboardBoDController.php +++ b/app/Http/Controllers/DashboardBoDController.php @@ -41,14 +41,14 @@ class DashboardBoDController extends Controller private function getInvoiceIntegration($search) { - if(empty($search)) - return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400); + if (empty($search)) + return response()->json(['status' => 'error', 'message' => 'Empty query string!'], 400); - $url = str_replace("SEARCH", $search, config('api.adw').'/project_cost?project_no=SEARCH'); + $url = str_replace("SEARCH", $search, config('api.adw') . '/project_cost?project_no=SEARCH'); $token = config('api.adw_token'); $response = $this->curlReq($url, $token); - if(@$response->data->project_no == "") + if (@$response->data->project_no == "") return null; return $response; @@ -83,7 +83,6 @@ class DashboardBoDController extends Controller $totalInvoice += $resp->data->total_invoice_amount ?? 0; $totalPaidInvoice += $resp->data->total_invoice_paid_amount ?? 0; } - } return response()->json([ @@ -147,15 +146,13 @@ class DashboardBoDController extends Controller } $selisihProgress = $planningProgress - $actualProgress; try { - if ($selisihProgress > 0 && $selisihProgress <= 5){ + if ($selisihProgress > 0 && $selisihProgress <= 20) { $return['warning'] += 1; $projects[$index]->status = 'warning'; - } - elseif ($selisihProgress == 0){ + } elseif ($selisihProgress == 0) { $return['on-schedule'] += 1; $projects[$index]->status = 'on-schedule'; - } - else { + } else { $return['behind-schedule'] += 1; $projects[$index]->status = 'behind-schedule'; } @@ -191,13 +188,11 @@ class DashboardBoDController extends Controller $actualProgress = !empty($actualArray) ? $actualArray[count($actualArray) - 1] : 0; } $selisihProgress = $planningProgress - $actualProgress; - if ($selisihProgress > 0 && $selisihProgress <= 5){ + if ($selisihProgress > 0 && $selisihProgress <= 5) { $warning++; - } - elseif ($selisihProgress == 0){ + } elseif ($selisihProgress == 0) { $onSchedule++; - } - else { + } else { $behindSchedule++; } } @@ -294,7 +289,7 @@ class DashboardBoDController extends Controller { $year = $this->interpolateYear($year); - $divisions = Divisi::select('id', 'name','parent','color') + $divisions = Divisi::select('id', 'name', 'parent', 'color') ->with('children') ->whereNull('parent') ->get(); From d87899eddad4c84c02a9a180a86f0a8c6af5a15a Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 27 Dec 2023 10:49:59 +0700 Subject: [PATCH 24/32] scurve daily --- app/Helpers/MasterFunctionsHelper.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/Helpers/MasterFunctionsHelper.php b/app/Helpers/MasterFunctionsHelper.php index b2ff5f7..be83cf1 100644 --- a/app/Helpers/MasterFunctionsHelper.php +++ b/app/Helpers/MasterFunctionsHelper.php @@ -556,7 +556,6 @@ class MasterFunctionsHelper // if (new \DateTime($loopDay) < $today) { // $statusCutOfDate = true; // } - if (new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday')){ $progressPlanKomulatifWeek[] += round($tmpProgressPlanWeek,2); if (new \DateTime($loopDay . ' Friday') <= new \DateTime($today . ' Friday')) { @@ -564,7 +563,6 @@ class MasterFunctionsHelper $progressActualKomulatifWeek[] += round($tmpProgressActualWeek,2); } $dateWeek[] = [$loopDay]; - } // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek; foreach ($dataPlanM as $keyPlanM) { # hitung untuk persentase progress planning @@ -1436,7 +1434,6 @@ class MasterFunctionsHelper $dataActivityPlan = []; $dataActivityActual = []; $today = date('Y-m-d'); - if (new \DateTime($loopDay) == new \DateTime($loopDay . ' Friday')){ $progressPlanKomulatifWeek[] += round($tmpProgressPlanWeek,2); if (new \DateTime($loopDay . ' Friday') <= new \DateTime($today . ' Friday')) { @@ -1444,7 +1441,6 @@ class MasterFunctionsHelper $progressActualKomulatifWeek[] += round($tmpProgressActualWeek,2); } $dateWeek[] = [$loopDay]; - } // $progressPlanKomulatifWeek[] += $tmpProgressPlanWeek; // if (count($dataPlanM) > 0 && count($dataPlanM[0]) > 0) { foreach ($dataPlanM as $keyPlanM) { From 14d75efdc52d7fc672c36715e1a0ba1ebbdd8bbb Mon Sep 17 00:00:00 2001 From: farhantock Date: Wed, 27 Dec 2023 19:06:09 +0700 Subject: [PATCH 25/32] remove company_id ospro general --- app/Http/Controllers/CompanyController.php | 110 ---------- app/Http/Controllers/Controller.php | 1 - .../Controllers/MenuCompanyController.php | 195 ------------------ app/Models/Company.php | 37 ---- app/Models/HumanResource.php | 1 - app/Models/MenuCompany.php | 27 --- app/Models/ProjectRole.php | 2 +- app/Models/Role.php | 2 +- app/Models/RoleMenu.php | 2 +- app/Models/Satuan.php | 2 +- 10 files changed, 4 insertions(+), 375 deletions(-) delete mode 100644 app/Http/Controllers/CompanyController.php delete mode 100644 app/Http/Controllers/MenuCompanyController.php delete mode 100644 app/Models/Company.php delete mode 100644 app/Models/MenuCompany.php diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php deleted file mode 100644 index 7e8938d..0000000 --- a/app/Http/Controllers/CompanyController.php +++ /dev/null @@ -1,110 +0,0 @@ -validate($request, [ - 'name' => 'required', - 'description' => 'required' - ]); - - $data = $request->all(); - - $data['created_by'] = $this->currentName; - - $result = Company::create($data); - - if ($result) { - return response()->json(['status' => 'success', 'message' => 'add Company successfully!', 'code' => 200], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'add data Company 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 = Company::find($id); - - if ($result) { - return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'failed get data Company, 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 = Company::find($id); - - if ($data) { - $result = $data->update($request->all()); - } else { - return response()->json(['status' => 'failed', 'message' => 'data Company not found!', 'code' => 400], 400); - die(); - } - - - if ($result) { - return response()->json(['status' => 'success', 'message' => 'data Company successfully updated!', 'code' => 200], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'data Company failed updated!', 'code' => 400], 400); - } - } - - public function delete($id) - { - $data = Company::find($id); - - if ($data) { - $delete = $data->delete(); - } else { - return response()->json(['status' => 'failed', 'message' => 'data Company not found!', 'code' => 400], 400); - die(); - } - - - if ($delete) { - return response()->json(['status' => 'success', 'message' => 'data Company successfully deleted!', 'code' => 200], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'data Company failed deleted!', 'code' => 400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_company'); - $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 = Company::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 Company, please try again later!', 'code' => 400], 400); - } - } -} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 50966ce..a084601 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -33,7 +33,6 @@ class Controller extends BaseController $this->currentDate = date("Y-m-d H:i:s"); $this->currentName = auth()->user() ? auth()->user()->name : "system"; $this->currentId = auth()->user() ? auth()->user()->id : 0; - $this->companyId = auth()->user() ? auth()->user()->company_id : 0; $this->pathImage = config('assets.image'); $this->pathDocument = config('assets.project'); $this->pathActivityDocument = config('assets.activity'); diff --git a/app/Http/Controllers/MenuCompanyController.php b/app/Http/Controllers/MenuCompanyController.php deleted file mode 100644 index 2b79748..0000000 --- a/app/Http/Controllers/MenuCompanyController.php +++ /dev/null @@ -1,195 +0,0 @@ -validate($request, [ - // 'icon' => 'required', - // 'name' => 'string|required', - // 'url' => 'required|unique:m_company_menu,url', - // 'sequence' => 'required|integer', - // ]); - - // $data = $request->all(); - - // $data['created_by'] = $this->currentName; - - // $result = MenuCompany::create($data); - - // if ($result) { - // return response()->json(['status' => 'success', 'message' => 'add data menu successfully!', 'code' => 200], 200); - // } else { - // return response()->json(['status' => 'failed', 'message' => 'add data menu failed!', 'code' => 400], 400); - // } - // } - - public function addMultiple(Request $request) - { - $menus = $request->all(); - - if (is_array($menus) && count($menus) > 0) { - $countRes = 0; - foreach ($menus as $menu) { - - $dataInsert = array( - "menu_id" => $menu['menu_id'], - "parent_menu_id" => $menu['parent_id'], - "company_id" => $menu['company_id'], - "icon" => $menu['icon'], - "alias_name" => $menu['alias_name'], - "url" => $menu['url'], - "sequence" => $menu['sequence'], - "created_by" => $this->currentName - ); - - $result = MenuCompany::create($dataInsert); - - if ($result) { - $countRes++; - } else { - $countRes--; - } - } - - if ($countRes > 0) { - return response()->json(['status' => 'success', 'message' => 'add data menu successfully!', 'code' => 200]); - } else { - return response()->json(['status' => 'failed', 'message' => 'add data menu failed created!', 'code' => 400]); - } - } else { - return response()->json(['status' => 'failed', 'message' => 'add data menu failed created!', 'code' => 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 = MenuCompany::find($id); - - if ($result) { - return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'failed get data menu, 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); - } - $this->validate($request, [ - 'icon' => 'required', - 'sequence' => 'required|integer', - ]); - $data = MenuCompany::find($id); - - - if ($data) { - $result = $data->update($request->all()); - } else { - return response()->json(['status' => 'failed', 'message' => 'data menu not found!', 'code' => 400], 400); - die(); - } - - - if ($result) { - return response()->json(['status' => 'success', 'message' => 'data menu successfully updated!', 'code' => 200], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'data menu failed updated!', 'code' => 400], 400); - } - } - - public function delete($id) - { - $data = MenuCompany::find($id); - - if ($data) { - $delete = $data->delete(); - } else { - return response()->json(['status' => 'failed', 'message' => 'data menu not found!', 'code' => 400], 400); - die(); - } - - - if ($delete) { - return response()->json(['status' => 'success', 'message' => 'data menu successfully deleted!', 'code' => 200], 200); - } else { - return response()->json(['status' => 'failed', 'message' => 'data menu failed deleted!', 'code' => 400], 400); - } - } - - public function search(Request $request) - { - $payload = $request->all(); - $dataBuilder = $this->setUpPayload($payload, 'm_company_menu'); - $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 listMenu($id) - { - $dataParent = RoleMenu::select("m_company_menu.*") - ->join('m_company_menu', 'm_company_menu.id', '=', 't_roles_menu.menu_id') - ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id') - ->whereNull('m_company_menu.parent_id') - ->where('m_roles.id', $id) - ->orderBy('m_company_menu.sequence', 'ASC') - ->get(); - - $finalData = []; - foreach ($dataParent as $data) { - $data->children = $this->getChildrenMenu($data->id, $id); - $finalData[] = $data; - } - - return response()->json(['status' => 'success', 'code' => 200, 'data' => $finalData], 200); - } - - protected function getChildrenMenu($id, $role_id) - { - $dataChildren = RoleMenu::select("m_company_menu.*") - ->join('m_company_menu', 'm_company_menu.id', '=', 't_roles_menu.menu_id') - ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id') - ->where('m_roles.id', $role_id) - ->where('m_company_menu.parent_id', $id) - ->orderBy('m_company_menu.sequence', 'ASC') - ->get(); - $children = []; - if ($dataChildren) { - foreach ($dataChildren as $data) { - $data->children = $this->getChildrenMenu($data->id, $role_id); - $children[] = $data; - } - } - return $children; - } - - public function list() - { - $data = MenuCompany::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 menu, please try again later!', 'code' => 400], 400); - } - } -} diff --git a/app/Models/Company.php b/app/Models/Company.php deleted file mode 100644 index db52f7d..0000000 --- a/app/Models/Company.php +++ /dev/null @@ -1,37 +0,0 @@ - Date: Wed, 27 Dec 2023 19:09:30 +0700 Subject: [PATCH 26/32] make new end point for project-cost --- app/Http/Controllers/ProjectController.php | 11 +++++++++++ routes/web.php | 1 + 2 files changed, 12 insertions(+) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 74dfd8d..a1feb5f 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -760,6 +760,17 @@ class ProjectController extends Controller return response()->json(['status' => 'success', 'code' => 200, 'data' => $data], 200); } + public function getProjectCostIntegration($name) + { + $search = urlencode($name); + if (empty($search)) + return response()->json(['status' => 'error', 'message' => 'Empty query string!'], 400); + $url = str_replace("SEARCH", $search, config('api.adw') . '/project_cost?project_no=SEARCH'); + + $response = MasterFunctionsHelper::curlReq($url); + return response()->json(['status' => 'success', 'data' => $response, 'code' => 200], 200); + } + private function httpReq($search) { $ch = curl_init(); diff --git a/routes/web.php b/routes/web.php index 7adfb7a..5b8aff6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -74,6 +74,7 @@ $router->group(['prefix' => 'api', 'middleware' => 'cors'], function () use ($ro $router->post('/project/get-overdue-activities', 'ProjectController@getOverdueActivities'); $router->post('/project/get-integration-invoice', 'ProjectController@getInvoiceIntegration'); $router->post('/project/get-report-distribution', 'ProjectController@getReportDistribution'); + $router->get('/project/get-integration-project-cost={name}', 'ProjectController@getProjectCostIntegration'); /* $router->get('/project/get-expenditure/{id}/{date?}', 'ProjectController@getExpenditure'); */ From 3cdae71bd7dd9ebadc881e823d34555cf9b5fc86 Mon Sep 17 00:00:00 2001 From: wahyu Date: Thu, 28 Dec 2023 11:09:20 +0700 Subject: [PATCH 27/32] user to activity update filter --- app/Http/Controllers/UserToActivityController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/UserToActivityController.php b/app/Http/Controllers/UserToActivityController.php index bbd1b40..bfe4f22 100644 --- a/app/Http/Controllers/UserToActivityController.php +++ b/app/Http/Controllers/UserToActivityController.php @@ -200,8 +200,8 @@ class UserToActivityController extends Controller ->join('m_version_gantt as mvg', 'mvg.id', '=', 'ma.version_gantt_id') ->join('m_proyek as mp', 'mp.id', '=', 'ma.proyek_id') ->where('ahta.user_id', $payload['user_id']) - ->where('ma.start_date', '<=', $payload['start_date']) - ->where('ma.end_date', '>=', $payload['end_date']) + ->where('ma.start_date', '<=', $payload['end_date']) + ->where('ma.end_date', '>=', $payload['start_date']) ->where('ma.proyek_id', $payload['proyek_id']) ->get(); From 6e66ad594ebd74974dc5397dcb133729aaeef3d2 Mon Sep 17 00:00:00 2001 From: farhantock Date: Thu, 11 Jan 2024 22:47:13 +0700 Subject: [PATCH 28/32] update filter project --- .../Controllers/DashboardBoDController.php | 82 +++++++++---------- 1 file changed, 40 insertions(+), 42 deletions(-) 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) { From 215142ec386b95376fe34b88c37a3f6fb415a105 Mon Sep 17 00:00:00 2001 From: farhantock Date: Thu, 11 Jan 2024 22:47:20 +0700 Subject: [PATCH 29/32] add childern --- app/Http/Controllers/DivisiController.php | 92 +++++++++++++---------- 1 file changed, 54 insertions(+), 38 deletions(-) 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); } } From caac6506f89eb6207d4f78d40d37f05ede646b00 Mon Sep 17 00:00:00 2001 From: farhantock Date: Thu, 11 Jan 2024 22:47:30 +0700 Subject: [PATCH 30/32] add sponsor --- app/Http/Controllers/ProjectController.php | 20 +++++++++++--------- app/Models/Project.php | 3 ++- routes/web.php | 20 ++++++++++---------- 3 files changed, 23 insertions(+), 20 deletions(-) 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'); From 588305ebafdf0d4305d24152d84d9f5095228b0b Mon Sep 17 00:00:00 2001 From: wahyu Date: Fri, 19 Jan 2024 13:50:46 +0700 Subject: [PATCH 31/32] update report datatable --- app/Http/Controllers/ActivityController.php | 1 + .../Controllers/AssignMaterialController.php | 34 +++++++++++-------- .../ReportActivityMaterialController.php | 4 ++- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index e08ff7b..7b44585 100755 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -688,6 +688,7 @@ class ActivityController extends Controller 'selfTable.name', 'persentase_progress', 'selfTable.start_date', + 'selfTable.id', 'selfTable.end_date', 'selfTable.planned_start', 'selfTable.planned_end', diff --git a/app/Http/Controllers/AssignMaterialController.php b/app/Http/Controllers/AssignMaterialController.php index 3d78384..8916063 100644 --- a/app/Http/Controllers/AssignMaterialController.php +++ b/app/Http/Controllers/AssignMaterialController.php @@ -7,6 +7,7 @@ use App\Models\AssignMaterial; use App\Models\RequestMaterial; use App\Models\Activity; use App\Models\ReportActivityMaterial; +use Illuminate\Support\Facades\DB; use Datatables; class AssignMaterialController extends Controller @@ -140,28 +141,31 @@ class AssignMaterialController extends Controller $id_activity = $request->query('idact'); $data = AssignMaterial::select( - AssignMaterial::raw('SUM(qty_planning) as qty_planning'), + DB::raw('(SELECT SUM(assign_material_to_activity.qty_planning) FROM assign_material_to_activity WHERE assign_material_to_activity.activity_id = ram.activity_id) as qty_planning'), + DB::raw('SUM(ram.qty) as qty_sum'), "m.description as material_name", "assign_material_to_activity.activity_id", - "assign_material_to_activity.type" - // "assign_material_to_activity.material_id", + "assign_material_to_activity.material_id", ) ->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") + ->groupBy("ram.activity_id") ->groupBy("assign_material_to_activity.activity_id") - ->groupBy("assign_material_to_activity.type") + ->groupBy("assign_material_to_activity.material_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('qty_planning', function($row){ + // $val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1","m.id") + // ->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") + // ->groupBy("m.id") + // ->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') @@ -196,8 +200,8 @@ class AssignMaterialController extends Controller ->addColumn('action', function($row){ $dataPlan = AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); - $actionBtn = ''; - $actionBtn .= ''; + $actionBtn = ''; + $actionBtn .= ''; return $actionBtn; }) ->rawColumns(['action'])->make(true); diff --git a/app/Http/Controllers/ReportActivityMaterialController.php b/app/Http/Controllers/ReportActivityMaterialController.php index 44b228b..b10cba7 100644 --- a/app/Http/Controllers/ReportActivityMaterialController.php +++ b/app/Http/Controllers/ReportActivityMaterialController.php @@ -136,6 +136,7 @@ class ReportActivityMaterialController extends Controller $id_am = $request->query('idAmi'); $type = $request->query('type'); $materialName = $request->query('materialName'); + $materialId = $request->query('materialId'); if($type == 'plan'){ $activity = Activity::findOrFail($id_activity); $baselineDuration = 0; @@ -146,6 +147,7 @@ class ReportActivityMaterialController extends Controller ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('assign_material_to_activity.activity_id', $id_activity) ->where('assign_material_to_activity.id', $id_am) + ->where('m.id', $materialId) ->orderBy('assign_material_to_activity.id', 'asc') ->get(); if ($baselineDuration > 0) { @@ -174,7 +176,7 @@ class ReportActivityMaterialController extends Controller ->join("m_req_material as m", "m.id", "=", "amta.material_id") ->join("m_users as u", "u.id", "=", "report_activity_material.user_id") ->where('report_activity_material.activity_id', $id_activity) - ->where('report_activity_material.assign_material_id', $id_am) + ->where('m.id', $materialId) ->orderBy('report_activity_material.report_date', 'asc') ->get(); if ($baselineDuration > 0) { From 537c532b77f9b16dd998a0473cf241577d47dad6 Mon Sep 17 00:00:00 2001 From: wahyu Date: Fri, 19 Jan 2024 16:27:56 +0700 Subject: [PATCH 32/32] update report datatable --- app/Http/Controllers/AssignMaterialController.php | 2 -- app/Http/Controllers/ReportActivityMaterialController.php | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/AssignMaterialController.php b/app/Http/Controllers/AssignMaterialController.php index 8916063..0d7b303 100644 --- a/app/Http/Controllers/AssignMaterialController.php +++ b/app/Http/Controllers/AssignMaterialController.php @@ -145,14 +145,12 @@ class AssignMaterialController extends Controller DB::raw('SUM(ram.qty) as qty_sum'), "m.description as material_name", "assign_material_to_activity.activity_id", - "assign_material_to_activity.material_id", ) ->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") ->groupBy("ram.activity_id") ->groupBy("assign_material_to_activity.activity_id") - ->groupBy("assign_material_to_activity.material_id") ->where("assign_material_to_activity.activity_id", $id_activity)->get(); return Datatables::of($data) ->addIndexColumn() diff --git a/app/Http/Controllers/ReportActivityMaterialController.php b/app/Http/Controllers/ReportActivityMaterialController.php index b10cba7..a55e15f 100644 --- a/app/Http/Controllers/ReportActivityMaterialController.php +++ b/app/Http/Controllers/ReportActivityMaterialController.php @@ -147,7 +147,7 @@ class ReportActivityMaterialController extends Controller ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->where('assign_material_to_activity.activity_id', $id_activity) ->where('assign_material_to_activity.id', $id_am) - ->where('m.id', $materialId) + ->where('m.description', $materialName) ->orderBy('assign_material_to_activity.id', 'asc') ->get(); if ($baselineDuration > 0) { @@ -176,7 +176,7 @@ class ReportActivityMaterialController extends Controller ->join("m_req_material as m", "m.id", "=", "amta.material_id") ->join("m_users as u", "u.id", "=", "report_activity_material.user_id") ->where('report_activity_material.activity_id', $id_activity) - ->where('m.id', $materialId) + ->where('m.description', $materialName) ->orderBy('report_activity_material.report_date', 'asc') ->get(); if ($baselineDuration > 0) {