Browse Source

Merge branch 'staging' of https://git.oslog.id/ordo/adw-backend into Dev-Farhan

pull/3/head
farhan048 11 months ago
parent
commit
0d8752646b
  1. 3
      Dockerfile
  2. 29
      app/Console/Commands/CalculateSCurve.php
  3. 6
      app/Console/Commands/syncHumanResourceIntegration.php
  4. 3
      app/Console/Kernel.php
  5. 1529
      app/Helpers/MasterFunctionsHelper.php
  6. 1686
      app/Http/Controllers/ActivityController.php
  7. 436
      app/Http/Controllers/AssignMaterialController.php
  8. 186
      app/Http/Controllers/BroadcastController.php
  9. 619
      app/Http/Controllers/Controller.php
  10. 174
      app/Http/Controllers/DashboardBoDController.php
  11. 213
      app/Http/Controllers/DivisiController.php
  12. 31
      app/Http/Controllers/HierarchyFtthController.php
  13. 377
      app/Http/Controllers/HumanResourceController.php
  14. 96
      app/Http/Controllers/MapMonitoringController.php
  15. 310
      app/Http/Controllers/MenuController.php
  16. 1113
      app/Http/Controllers/PresenceController.php
  17. 136
      app/Http/Controllers/ProjectChecklistsController.php
  18. 364
      app/Http/Controllers/ProjectController.php
  19. 136
      app/Http/Controllers/ProjectIssuesController.php
  20. 137
      app/Http/Controllers/ProjectRisksController.php
  21. 327
      app/Http/Controllers/ReportActivityMaterialController.php
  22. 2
      app/Http/Controllers/RequestMaterialController.php
  23. 210
      app/Http/Controllers/RoleController.php
  24. 204
      app/Http/Controllers/RoleMenuController.php
  25. 6
      app/Http/Controllers/ShowHideColumnController.php
  26. 432
      app/Http/Controllers/UserToActivityController.php
  27. 470
      app/Http/Controllers/UserToProyekController.php
  28. 239
      app/Http/Controllers/VersionGanttController.php
  29. 36
      app/Jobs/ProcessSCurve.php
  30. 480
      app/Models/Activity.php
  31. 90
      app/Models/AssignMaterial.php
  32. 2
      app/Models/Broadcast.php
  33. 83
      app/Models/Divisi.php
  34. 13
      app/Models/HierarchyFtth.php
  35. 106
      app/Models/Project.php
  36. 23
      app/Models/ProjectChecklists.php
  37. 23
      app/Models/ProjectIssues.php
  38. 24
      app/Models/ProjectRisks.php
  39. 153
      app/Models/ReportActivityMaterial.php
  40. 34
      app/Models/Role.php
  41. 124
      app/Models/UserToActivity.php
  42. 38
      app/Models/UserToProyek.php
  43. 46
      app/Models/VersionGantt.php
  44. 49
      app/Services/FCMService.php
  45. 1
      bootstrap/app.php
  46. 2
      config/api.php
  47. 5
      config/fcm.php
  48. 36
      database/migrations/2023_08_29_130624_create_jobs_table.php
  49. 9
      docker/nginx/conf.d/default.conf
  50. 1947
      docker/php/php.ini
  51. 72
      rest-client.http
  52. 62
      routes/web.php

3
Dockerfile

@ -29,6 +29,9 @@ RUN docker-php-ext-install \
pgsql \ pgsql \
tokenizer tokenizer
# Copy php.ini to the container
COPY /docker/php/php.ini /usr/local/etc/php/
#Install Extensions #Install Extensions
RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql

29
app/Console/Commands/CalculateSCurve.php

@ -0,0 +1,29 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Helpers\MasterFunctionsHelper;
use App\Models\Project;
class CalculateSCurve extends Command
{
protected $signature = 'calculate:scurve {project_id}';
protected $description = 'Calculate S Curve';
public function handle()
{
$project_id = $this->argument('project_id');
$project = Project::find($project_id);
$project->calculation_status = true;
$project->save();
$data = MasterFunctionsHelper::CalculateSCurve($project_id);
$project->scurve = json_encode($data);
$project->calculation_status = true;
$project->save();
}
}

6
app/Console/Commands/syncHumanResourceIntegration.php

@ -39,9 +39,9 @@ class syncHumanResourceIntegration extends Command
*/ */
public function handle() public function handle()
{ {
// $url = config('api.adw').'/employees?page=1'; $url = config('api.adw').'/employees?page=1';
// echo "Requesting to " . $url; echo "Requesting to " . $url;
$response = null; $response = MasterFunctionsHelper::curlReq($url);
if(!$response) if(!$response)
return; return;

3
app/Console/Kernel.php

@ -13,7 +13,8 @@ class Kernel extends ConsoleKernel
* @var array * @var array
*/ */
protected $commands = [ protected $commands = [
Commands\syncHumanResourceIntegration::class Commands\syncHumanResourceIntegration::class,
Commands\CalculateSCurve::class
]; ];
/** /**

1529
app/Helpers/MasterFunctionsHelper.php

File diff suppressed because it is too large Load Diff

1686
app/Http/Controllers/ActivityController.php

File diff suppressed because it is too large Load Diff

436
app/Http/Controllers/AssignMaterialController.php

@ -1,215 +1,221 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\AssignMaterial; use App\Models\AssignMaterial;
use App\Models\RequestMaterial; use App\Models\RequestMaterial;
use App\Models\Activity; use App\Models\Activity;
use App\Models\ReportActivityMaterial; use App\Models\ReportActivityMaterial;
use Datatables; use Datatables;
class AssignMaterialController extends Controller class AssignMaterialController extends Controller
{ {
private function sanitizeDecimal($number) { private function sanitizeDecimal($number) {
$number = str_replace(".","",$number); $number = str_replace(".","",$number);
$number = str_replace(",",".",$number); $number = str_replace(",",".",$number);
return $number; return $number;
} }
public function add(Request $request){ public function add(Request $request){
$this->validate($request, [ $this->validate($request, [
'activity_id' => 'required', 'activity_id' => 'required',
'material_id' => 'required', 'material_id' => 'required',
'qty_planning' => 'required' 'qty_planning' => 'required'
]); ]);
$activity = Activity::where('id', $request->activity_id)->first(); $activity = Activity::where('id', $request->activity_id)->first();
$checkStock = RequestMaterial::where("id", $request->material_id)->first(); $checkStock = RequestMaterial::where("id", $request->material_id)->first();
$currentStock = $checkStock->qty; $currentStock = $checkStock->qty;
if((int)$currentStock < (int)$request->qty_planning){ if((int)$currentStock < (int)$request->qty_planning){
return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]); return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]);
} }
$start_date = $activity->start_date; $start_date = $activity->start_date;
$start_date = substr($start_date, 0, 19); // remove the timezone offset $start_date = substr($start_date, 0, 19); // remove the timezone offset
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); $startDate = new \DateTime(date("Y-m-d", strtotime($start_date)));
$planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date))); $planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date)));
$data = $request->all(); $data = $request->all();
$data['created_by'] = $this->currentName; $data['created_by'] = $this->currentName;
$data['budget'] = $checkStock->price; $data['budget'] = $checkStock->price;
$data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']); $data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']);
if ($planDate > $startDate) { if ($planDate >= $startDate) {
$result = AssignMaterial::create($data); $result = AssignMaterial::create($data);
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200); return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400); return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400);
} }
} }
public function update(Request $request, $id){ public function update(Request $request, $id){
if(empty($id) || !is_int((int)$id)) if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
$data = AssignMaterial::find($id); $data = AssignMaterial::find($id);
if(!$data) if(!$data)
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
$result = $data->update($request->all()); $result = $data->update($request->all());
if($result) if($result)
return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200); return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200);
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500);
} }
public function delete($id) public function delete($id)
{ {
$data = AssignMaterial::where('id', $id)->first(); $data = AssignMaterial::where('id', $id)->first();
$reports = ReportActivityMaterial::where('assign_material_id', $data->id)->get();
if($data->delete()) if (isset($reports)) {
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200); foreach ($reports as $report) {
$report->delete();
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); }
} }
public function edit($id){ if($data->delete())
if(empty($id) || !is_int((int)$id)) return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200);
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500);
$result = AssignMaterial::find($id); }
if($result) public function edit($id){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
} $result = AssignMaterial::find($id);
public function search(Request $request) if($result)
{ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
$builder = $dataBuilder['builder']; }
$countBuilder = $dataBuilder['count'];
$dataGet = $builder->get(); public function search(Request $request)
$totalRecord = $countBuilder->count(); {
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); $payload = $request->all();
} $dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity');
$builder = $dataBuilder['builder'];
public function list() $countBuilder = $dataBuilder['count'];
{ $dataGet = $builder->get();
$data = AssignMaterial::all(); $totalRecord = $countBuilder->count();
$countData = $data->count(); return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
}
if($data)
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); public function list()
{
return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500); $data = AssignMaterial::all();
} $countData = $data->count();
public function datatables(Request $request){ if($data)
$id_activity = $request->query('idact'); return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
$type = $request->query('type') ?? "material";
$data = AssignMaterial::select( return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500);
"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") public function datatables(Request $request){
->where('assign_material_to_activity.activity_id', $id_activity) $id_activity = $request->query('idact');
->where('assign_material_to_activity.type', $type) $type = $request->query('type') ?? "material";
->orderBy('plan_date', 'desc') $data = AssignMaterial::select(
->get(); "assign_material_to_activity.*","m.description as material_name", "m.uom as uom"
return Datatables::of($data) )
->addIndexColumn() ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->addColumn('action', function($row){ ->where('assign_material_to_activity.activity_id', $id_activity)
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-material-delete"><i class="fa fa-trash"></i></a>'; ->where('assign_material_to_activity.type', $type)
return $actionBtn; ->orderBy('plan_date', 'desc')
}) ->get();
->rawColumns(['action'])->make(true); return Datatables::of($data)
} ->addIndexColumn()
->addColumn('action', function($row){
public function datatablesForReportActivity(Request $request){ $actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-material-delete"><i class="fa fa-trash"></i></a>';
$id_activity = $request->query('idact'); return $actionBtn;
$data = })
AssignMaterial::select( ->rawColumns(['action'])->make(true);
AssignMaterial::raw('SUM(qty_planning) as qty_planning'), }
"m.description as material_name",
"assign_material_to_activity.activity_id", public function datatablesForReportActivity(Request $request){
"assign_material_to_activity.type" $id_activity = $request->query('idact');
// "assign_material_to_activity.material_id", $data =
) AssignMaterial::select(
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") AssignMaterial::raw('SUM(qty_planning) as qty_planning'),
->groupBy("m.description") "m.description as material_name",
->groupBy("assign_material_to_activity.activity_id") "assign_material_to_activity.activity_id",
->groupBy("assign_material_to_activity.type") "assign_material_to_activity.type"
->where("assign_material_to_activity.activity_id", $id_activity)->get(); // "assign_material_to_activity.material_id",
return Datatables::of($data) )
->addIndexColumn() ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->addColumn('qty_sum', function($row){ ->groupBy("m.description")
$val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") ->groupBy("assign_material_to_activity.activity_id")
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->groupBy("assign_material_to_activity.type")
->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") ->where("assign_material_to_activity.activity_id", $id_activity)->get();
->groupBy("m.description") return Datatables::of($data)
->where("m.description", strval($row->material_name)) ->addIndexColumn()
->where("ram.activity_id", $row->activity_id)->first(); ->addColumn('qty_sum', function($row){
return $val_qty_act ? $val_qty_act->qty_sum : '-'; $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")
->addColumn('status_activity', function($row){ ->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id")
$val_status = AssignMaterial::select("status_activity") ->groupBy("m.description")
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') ->where("m.description", strval($row->material_name))
->where('m.description', '=', $row->material_name) ->where("ram.activity_id", $row->activity_id)->first();
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); return $val_qty_act ? $val_qty_act->qty_sum : '-';
return $val_status ? $val_status->status_activity : null; })
}) ->addColumn('status_activity', function($row){
->addColumn('start_activity', function($row){ $val_status = AssignMaterial::select("status_activity")
$val_start = AssignMaterial::select("start_activity") ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id')
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') ->where('m.description', '=', $row->material_name)
->where('m.description', '=', $row->material_name) ->where("assign_material_to_activity.activity_id", $row->activity_id)->first();
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); return $val_status ? $val_status->status_activity : null;
return $val_start ? $val_start->start_activity : null; })
}) ->addColumn('start_activity', function($row){
->addColumn('finish_activity', function($row){ $val_start = AssignMaterial::select("start_activity")
$val_finish = AssignMaterial::select("finish_activity") ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id')
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') ->where('m.description', '=', $row->material_name)
->where('m.description', '=', $row->material_name) ->where("assign_material_to_activity.activity_id", $row->activity_id)->first();
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); return $val_start ? $val_start->start_activity : null;
return $val_finish ? $val_finish->finish_activity : null; })
}) ->addColumn('finish_activity', function($row){
->addColumn('uom', function($row){ $val_finish = AssignMaterial::select("finish_activity")
$val_uom = RequestMaterial::select("uom") ->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id')
->where('description', '=', $row->material_name)->first(); ->where('m.description', '=', $row->material_name)
return $val_uom ? $val_uom->uom : null; ->where("assign_material_to_activity.activity_id", $row->activity_id)->first();
}) return $val_finish ? $val_finish->finish_activity : null;
->addColumn('assign_material_id', function($row){ })
$assignMaterial =AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") ->addColumn('uom', function($row){
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); $val_uom = RequestMaterial::select("uom")
return $assignMaterial ? $assignMaterial->id : null; ->where('description', '=', $row->material_name)->first();
}) return $val_uom ? $val_uom->uom : null;
->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") ->addColumn('assign_material_id', function($row){
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); $assignMaterial =AssignMaterial::select('assign_material_to_activity.id')->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
$actionBtn = '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="primary btn btn-primary btn-sm btn-lihat-plan" data-toggle="tooltip" title="Lihat Plan" data-placement="top"><i class="fa fa-align-justify"></i></a>'; ->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first();
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="warning btn btn-warning btn-sm btn-lihat-actual" data-toggle="tooltip" title="Input Progress" data-placement="top"><i class="fa fa-edit" aria-hidden="true"></i></a>'; return $assignMaterial ? $assignMaterial->id : null;
return $actionBtn; })
}) ->addColumn('action', function($row){
->rawColumns(['action'])->make(true); $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 = '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="primary btn btn-primary btn-sm btn-lihat-plan" data-toggle="tooltip" title="Lihat Plan" data-placement="top"><i class="fa fa-align-justify"></i></a>';
public function ForReportActivityByMaterial(Request $request){ $actionBtn .= '<a href="javascript:void(0)" data-id="'.$dataPlan->id.'" data-activity_id="'.$row->activity_id.'" data-material-name="'.$row->material_name.'" class="warning btn btn-warning btn-sm btn-lihat-actual" data-toggle="tooltip" title="Input Progress" data-placement="top"><i class="fa fa-edit" aria-hidden="true"></i></a>';
$id_activity = $request->idact; return $actionBtn;
$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") ->rawColumns(['action'])->make(true);
->where('assign_material_to_activity.activity_id', $id_activity)->get(); }
foreach ($data as $key) {
$val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty"); public function ForReportActivityByMaterial(Request $request){
} $id_activity = $request->idact;
$countData = $data->count(); $data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom")
if($data){ ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); ->where('assign_material_to_activity.activity_id', $id_activity)->get();
}else{ foreach ($data as $key) {
return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400); $val_qty_sum = ReportActivityMaterial::where('assign_material_id', '=', $key->id)->sum("qty");
} }
} $countData = $data->count();
} if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get Assign material, please try again later!','code'=>400], 400);
}
}
}

186
app/Http/Controllers/BroadcastController.php

@ -1,9 +1,177 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Broadcast;
class BroadcastController extends Controller use App\Models\User;
{ use App\Services\FCMService;
}
class BroadcastController extends Controller
{
public function add(Request $request)
{
$data = $request->all();
$data['created_by'] = $this->currentName;
if (isset($data['send_to_id'])) {
$idArray = $data['send_to_id'];
if (is_array($data['send_to_id'])) {
$data['send_to_id'] = implode(", ", $idArray);
}
}
$result = Broadcast::create($data);
if($result){
$data['status_send'] !== "registered" ? $this->sendNotification($data) : '';
return response()->json(['status'=>'success','message'=>'add broadcast successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'add broadcast 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 = Broadcast::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data broadcast, 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 = Broadcast::find($id);
$status_send = $request->status_send;
if($status_send === 'resend' || $status_send === 'send' && !empty($data))
{
$data['status_send'] = $status_send;
$this->sendNotification($data);
}
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'data broadcast not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'data broadcast successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data broadcast failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = Broadcast::find($id);
if($data){
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'data broadcast not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success','message'=>'data broadcast successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data broadcast failed deleted!','code'=>400], 400);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'm_broadcast');
$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 = Broadcast::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 broadcast, please try again later!','code'=>400], 400);
}
}
public function sendNotification($data)
{
// send_to_type (all, roles, user)
if (isset($data['send_to_type'])) {
switch ($data['send_to_type']) {
case 'all':
$users = User::whereNotNull('fcm_token')->get();
if (isset($users)) {
foreach ($users as $user) {
FCMService::send(
$user->fcm_token,
[
'title' => $data['title_notif'],
'body' => $data['message_notif'],
]
);
}
}
break;
case 'roles':
$users = User::where("role_id", $data['send_to_id'])->whereNotNull('fcm_token')->get();
if (isset($users)) {
foreach ($users as $user) {
FCMService::send(
$user->fcm_token,
[
'title' => $data['title_notif'],
'body' => $data['message_notif'],
]
);
}
}
break;
case 'users':
$idArray = explode(", ", $data['send_to_id']);
foreach ($idArray as $key => $value) {
$user = User::where("id", $value)->whereNotNull('fcm_token')->first();
if (isset($user)) {
FCMService::send(
$user->fcm_token,
[
'title' => $data['title_notif'],
'body' => $data['message_notif'],
]
);
}
}
break;
default:
# code...
break;
}
}
}
}

619
app/Http/Controllers/Controller.php

@ -1,306 +1,313 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use App\Models\UserToActivity; use App\Models\UserToActivity;
use App\Models\Activity; use App\Models\Activity;
use App\Models\AssignMaterial; use App\Models\AssignMaterial;
use Laravel\Lumen\Routing\Controller as BaseController; use Laravel\Lumen\Routing\Controller as BaseController;
use App\Models\ReportK3Detail; use App\Models\ReportK3Detail;
class Controller extends BaseController class Controller extends BaseController
{ {
protected $pathImage = "assets/image/"; protected $pathImage = "assets/image/";
protected $pathDocument = "assets/file/project/"; protected $pathDocument = "assets/file/project/";
protected $pathTmpImport = "assets/file/tmpimport/"; protected $pathTmpImport = "assets/file/tmpimport/";
protected $pathActivityDocument = "assets/file/activity/"; protected $pathActivityDocument = "assets/file/activity/";
protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth', protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth',
'sixth', 'seventh', 'eighth', 'ninth', 'tenth']; 'sixth', 'seventh', 'eighth', 'ninth', 'tenth'];
protected $currentDate; protected $currentDate;
protected $currentName; protected $currentName;
protected $currentId; protected $currentId;
public function __construct() public function __construct()
{ {
$this->currentDate = date("Y-m-d H:i:s"); $this->currentDate = date("Y-m-d H:i:s");
$this->currentName = auth()->user() ? auth()->user()->name : "system"; $this->currentName = auth()->user() ? auth()->user()->name : "system";
$this->currentId = auth()->user() ? auth()->user()->id : 0; $this->currentId = auth()->user() ? auth()->user()->id : 0;
$this->pathImage = config('assets.image'); $this->pathImage = config('assets.image');
$this->pathDocument = config('assets.project'); $this->pathDocument = config('assets.project');
$this->pathActivityDocument = config('assets.activity'); $this->pathActivityDocument = config('assets.activity');
} }
protected function setUpPayload($condition, $tableSelf) protected function setUpPayload($condition, $tableSelf)
{ {
$alias = "selfTable"; $alias = "selfTable";
$builder = DB::table($tableSelf." AS ".$alias); $builder = DB::table($tableSelf." AS ".$alias);
$builder = $builder->select($alias.".*"); // $builder = $builder->select($alias.".*");
if($condition){ if($condition){
if(isset($condition['joins'])){ if(isset($condition['select'])){
$selectColumn = []; foreach($condition['select'] as $select){
$no = 0; $builder = $builder->addSelect($alias.".".$select);
foreach($condition['joins'] as $join){ }
$tableJoin = isset($join['name1']) ? $join['name1'] : $alias; }else{
$tableName = $join['name']; $builder = $builder->addSelect($alias.".*");
$columnJoin = $join['column_join']; // foreign key table sini }
$columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan if(isset($condition['joins'])){
$columnResult = $join['column_results']; $selectColumn = [];
$no = 0;
foreach($columnResult as $sColumn){ foreach($condition['joins'] as $join){
$builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); $tableJoin = isset($join['name1']) ? $join['name1'] : $alias;
} $tableName = $join['name'];
$builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf); $columnJoin = $join['column_join']; // foreign key table sini
$no++; $columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan
} $columnResult = $join['column_results'];
}
foreach($columnResult as $sColumn){
if(isset($condition['columns'])){ $builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn);
$listWhere = $condition['columns']; }
$builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf);
$builder = $builder->where(function ($query) use($listWhere, $alias){ $no++;
foreach($listWhere as $where){ }
$value = $where['value']; }
if($value && $value!="" && $value!=" "){
$column = $where['name']; if(isset($condition['columns'])){
$operator = strtolower($where['logic_operator']); // like, =, <>, range $listWhere = $condition['columns'];
$value2 = isset($where['value1']) ? $where['value1'] : "";
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; $builder = $builder->where(function ($query) use($listWhere, $alias){
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); foreach($listWhere as $where){
} $value = $where['value'];
} if($value && $value!="" && $value!=" "){
}); $column = $where['name'];
} $operator = strtolower($where['logic_operator']); // like, =, <>, range
$value2 = isset($where['value1']) ? $where['value1'] : "";
if(isset($condition['group_column'])){ $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias;
$builder = $this->groupWhere($builder, $condition['group_column'], $alias); $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
} }
}
$data['count'] = clone $builder; });
}
if(isset($condition['paging'])){
$builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']); if(isset($condition['group_column'])){
} $builder = $this->groupWhere($builder, $condition['group_column'], $alias);
}
if(isset($condition['orders'])){
$orders = $condition['orders']; $data['count'] = clone $builder;
$sortBy = $orders['ascending'] ? "ASC" : "DESC";
$columnOrder = $orders['columns']; if(isset($condition['paging'])){
foreach($columnOrder as $column){ $builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']);
$builder = $builder->orderBy($alias.".".$column, $sortBy); }
}
} if(isset($condition['orders'])){
} $orders = $condition['orders'];
$data['builder'] = $builder; $sortBy = $orders['ascending'] ? "ASC" : "DESC";
return $data; $columnOrder = $orders['columns'];
} foreach($columnOrder as $column){
$builder = $builder->orderBy($alias.".".$column, $sortBy);
private function groupWhere($oldBuilder, $groupWhere, $alias) }
{ }
$builder = $oldBuilder; }
$listGroupWhere = $groupWhere; $data['builder'] = $builder;
$operator = $listGroupWhere['operator']; return $data;
$operatorGroup = $listGroupWhere['group_operator']; }
$listWhere = $listGroupWhere['where'];
if(strtolower($operator)=="and"){ private function groupWhere($oldBuilder, $groupWhere, $alias)
$builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){ {
$no = 1; $builder = $oldBuilder;
foreach ($listWhere as $where) { $listGroupWhere = $groupWhere;
$value = $where['value']; $operator = $listGroupWhere['operator'];
$column = $where['name']; $operatorGroup = $listGroupWhere['group_operator'];
$operator = strtolower($where['logic_operator']); $listWhere = $listGroupWhere['where'];
$value2 = isset($where['value1']) ? $where['value1'] : ""; if(strtolower($operator)=="and"){
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; $builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){
if($value && $value!="" && $value!=" "){ $no = 1;
if($operatorGroup=="and"){ foreach ($listWhere as $where) {
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $value = $where['value'];
}else{ $column = $where['name'];
if($no==1){ $operator = strtolower($where['logic_operator']);
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $value2 = isset($where['value1']) ? $where['value1'] : "";
}else{ $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias;
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); if($value && $value!="" && $value!=" "){
} if($operatorGroup=="and"){
} $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
} }else{
$no = $no+1; if($no==1){
} $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
}); }else{
}else if(strtolower($operator)=="or"){ $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2);
$builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){ }
$no = 1; }
foreach ($listWhere as $where) { }
$value = $where['value']; $no = $no+1;
$column = $where['name']; }
$operator = strtolower($where['logic_operator']); });
$value2 = isset($where['value1']) ? $where['value1'] : ""; }else if(strtolower($operator)=="or"){
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; $builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){
if($value && $value!="" && $value!=" "){ $no = 1;
if($operatorGroup=="and"){ foreach ($listWhere as $where) {
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $value = $where['value'];
}else{ $column = $where['name'];
if($no==1){ $operator = strtolower($where['logic_operator']);
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); $value2 = isset($where['value1']) ? $where['value1'] : "";
}else{ $tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias;
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); if($value && $value!="" && $value!=" "){
} if($operatorGroup=="and"){
} $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
} }else{
$no++; if($no==1){
} $query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2);
}); }else{
} $query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2);
return $builder; }
} }
}
private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) $no++;
{ }
$query = $oldQuery; });
if($operator=="range"){ }
$query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]); return $builder;
}else if($operator=="like"){ }
$query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%');
}else if($operator=="ilike"){ private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2)
$query = $query->where($tableColumn.".".$column, '~*', $value); {
}else if($operator=="="){ $query = $oldQuery;
$query = $query->where($tableColumn.".".$column, $value); if($operator=="range"){
}else if($operator=="in"){ $query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]);
$query = $query->whereIn($tableColumn.".".$column, $value); }else if($operator=="like"){
}else if($operator=="notin"){ $query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%');
$query = $query->whereNotIn($tableColumn.".".$column, $value); }else if($operator=="ilike"){
}else{ $query = $query->where($tableColumn.".".$column, '~*', $value);
$query = $query->where($tableColumn.".".$column, $operator, $value); }else if($operator=="="){
} $query = $query->where($tableColumn.".".$column, $value);
return $query; }else if($operator=="in"){
} $query = $query->whereIn($tableColumn.".".$column, $value);
}else if($operator=="notin"){
private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){ $query = $query->whereNotIn($tableColumn.".".$column, $value);
$query = $oldQuery; }else{
if($operator=="range"){ $query = $query->where($tableColumn.".".$column, $operator, $value);
$query = $query->whereBetween($column, [$value, $value2]); }
}else if($operator=="like"){ return $query;
$query = $query->where($column, 'like', '%'.$value.'%'); }
}else if($operator=="ilike"){
$query = $query->where($column, '~*', $value); private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){
}else if($operator=="="){ $query = $oldQuery;
$query = $query->where($column, $value); if($operator=="range"){
}else if($operator=="in"){ $query = $query->whereBetween($column, [$value, $value2]);
$query = $query->whereIn($column, $value); }else if($operator=="like"){
}else if($operator=="notin"){ $query = $query->where($column, 'like', '%'.$value.'%');
$query = $query->whereNotIn($column, $value); }else if($operator=="ilike"){
}else{ $query = $query->where($column, '~*', $value);
$query = $query->where($column, $operator, $value); }else if($operator=="="){
} $query = $query->where($column, $value);
return $query; }else if($operator=="in"){
} $query = $query->whereIn($column, $value);
}else if($operator=="notin"){
private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) $query = $query->whereNotIn($column, $value);
{ }else{
$query = $oldQuery; $query = $query->where($column, $operator, $value);
if($operator=="range"){ }
$query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]); return $query;
}else if($operator=="like"){ }
$query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%');
}else if($operator=="ilike"){ private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2)
$query = $query->where($tableColumn.".".$column, '~*', $value); {
}else if($operator=="="){ $query = $oldQuery;
$query = $query->orWhere($tableColumn.".".$column, $value); if($operator=="range"){
}else if($operator=="in"){ $query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]);
$query = $query->orWhereIn($tableColumn.".".$column, $value); }else if($operator=="like"){
}else if($operator=="notin"){ $query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%');
$query = $query->orWhereNotIn($tableColumn.".".$column, $value); }else if($operator=="ilike"){
}else{ $query = $query->where($tableColumn.".".$column, '~*', $value);
$query = $query->orWhere($tableColumn.".".$column, $operator, $value); }else if($operator=="="){
} $query = $query->orWhere($tableColumn.".".$column, $value);
return $query; }else if($operator=="in"){
} $query = $query->orWhereIn($tableColumn.".".$column, $value);
}else if($operator=="notin"){
protected function calculateAllCost($activity_id, $proyek_id){ $query = $query->orWhereNotIn($tableColumn.".".$column, $value);
$humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id); }else{
$materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id); $query = $query->orWhere($tableColumn.".".$column, $operator, $value);
$toolsCostPlanning = 0; }
return $query;
$allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning; }
return $allCost;
} protected function calculateAllCost($activity_id, $proyek_id){
$humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id);
private function calculateAllHumanCost($activity_id, $proyek_id) $materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id);
{ $toolsCostPlanning = 0;
$dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate")
->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id") $allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning;
->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) return $allCost;
->where("ahp.proyek_id", $proyek_id) }
->get();
private function calculateAllHumanCost($activity_id, $proyek_id)
$totalCost = 0; {
foreach ($dataHuman as $human) { $dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate")
$totalCost += $this->calculateHumanCost($human, $activity_id); ->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id")
} ->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id)
->where("ahp.proyek_id", $proyek_id)
return $totalCost; ->get();
}
$totalCost = 0;
private function calculateHumanCost($human, $activity_id) foreach ($dataHuman as $human) {
{ $totalCost += $this->calculateHumanCost($human, $activity_id);
$activity = Activity::find($activity_id); }
$duration = $activity->duration;
$standarRate = $human->standart_rate; return $totalCost;
$maxUsed = $human->max_used/100; }
if ($human->uom_standart_rate == "Hour") {
$totalCost = ($standarRate*8*$duration)*$maxUsed; private function calculateHumanCost($human, $activity_id)
return $totalCost; {
} $activity = Activity::find($activity_id);
$totalCost = ($standarRate*$duration)*$maxUsed; $duration = $activity->duration;
return $totalCost; $standarRate = $human->standart_rate;
} $maxUsed = $human->max_used/100;
if ($human->uom_standart_rate == "Hour") {
private function calculateMaterialCost($activity_id, $proyek_id) $totalCost = ($standarRate*8*$duration)*$maxUsed;
{ return $totalCost;
$totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost") }
->where("proyek_id", $proyek_id) $totalCost = ($standarRate*$duration)*$maxUsed;
->where("activity_id", $activity_id) return $totalCost;
->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)")); }
return $totalCost;
} private function calculateMaterialCost($activity_id, $proyek_id)
{
protected function getLoc($lat, $lng){ $totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost")
// $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"); ->where("proyek_id", $proyek_id)
// return $response->json; ->where("activity_id", $activity_id)
->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)"));
$url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"; return $totalCost;
// $token = config('api.adw_token'); }
$response = $this->curlRequest($url);
return $response; protected function getLoc($lat, $lng){
} // $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json");
// return $response->json;
private function curlRequest($url){
$ch = curl_init(); $url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json";
// $headers = [ // $token = config('api.adw_token');
// 'Authorization: '.$token $response = $this->curlRequest($url);
// ]; return $response;
curl_setopt($ch, CURLOPT_URL, $url); }
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); private function curlRequest($url){
$ch = curl_init();
$response = curl_exec($ch); // $headers = [
if ($response === false) // 'Authorization: '.$token
$response = curl_error($ch); // ];
curl_close($ch); curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
return json_decode($response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
}
$response = curl_exec($ch);
protected function addDetailK3($dataDetail, $report_id){ if ($response === false)
foreach ($dataDetail as $value) { $response = curl_error($ch);
$dataNew = array( curl_close($ch);
"report_k3_id"=>$report_id,
"checklist_k3_id"=>$value['checklist_id'], return json_decode($response);
"name_checklist_k3"=>$value['checklist_name'], }
"created_by"=>$this->currentName
); protected function addDetailK3($dataDetail, $report_id){
foreach ($dataDetail as $value) {
ReportK3Detail::create($dataNew); $dataNew = array(
} "report_k3_id"=>$report_id,
} "checklist_k3_id"=>$value['checklist_id'],
} "name_checklist_k3"=>$value['checklist_name'],
"created_by"=>$this->currentName
);
ReportK3Detail::create($dataNew);
}
}
}

174
app/Http/Controllers/DashboardBoDController.php

@ -10,19 +10,22 @@ use App\Models\User;
use App\Models\UserToVersionGantt; use App\Models\UserToVersionGantt;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class DashboardBoDController extends Controller class DashboardBoDController extends Controller
{ {
private function interpolateYear($year){ private function interpolateYear($year)
if($year) {
$year = '%'.$year.'%'; if ($year)
$year = '%' . $year . '%';
return $year; return $year;
} }
private function curlReq($url, $token){ private function curlReq($url, $token)
{
$ch = curl_init(); $ch = curl_init();
$headers = [ $headers = [
'Authorization: '.$token 'Authorization: ' . $token
]; ];
curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
@ -36,45 +39,47 @@ class DashboardBoDController extends Controller
return json_decode($response); return json_decode($response);
} }
private function getInvoiceIntegration($search) { 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');
// $token = config('api.adw_token'); $url = str_replace("SEARCH", $search, config('api.adw').'/project_cost?project_no=SEARCH');
// $response = $this->curlReq($url, $token); $token = config('api.adw_token');
// $response = $this->curlReq($url, $token);
// if(@$response->data->project_no == "")
// return null; if(@$response->data->project_no == "")
// return null;
return null;
return $response;
} }
// to do // to do
public function getCompanyCashFlow($year = '%') { public function getCompanyCashFlow($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$totalExpenditure = $totalInvoice = $totalPaidInvoice = 0; $totalExpenditure = $totalInvoice = $totalPaidInvoice = 0;
// we can't use eloquent's sum() method because someone decided to use varchar as datatype in rencana_biaya field // 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("rencana_biaya" AS DOUBLE PRECISION))'))
->where('mulai_proyek', 'like', $year) ->where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->pluck('sum') ->pluck('sum')
->first(); ->first();
$projects = Project::where('mulai_proyek', 'like', $year) $projects = Project::where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->get(); ->get();
foreach($projects as $project){ foreach ($projects as $project) {
$project->expenses = 0; $project->expenses = 0;
$resp = null; $resp = null;
if($project->kode_sortname != ""){ if ($project->kode_sortname != "") {
$resp = $this->getInvoiceIntegration($project->kode_sortname); $resp = $this->getInvoiceIntegration($project->kode_sortname);
/* $resp = $project->kode_sortname; */ /* $resp = $project->kode_sortname; */
$cost = $resp->data->total_cost ?? 0; $cost = $resp->data->total_cost ?? 0;
$cost = substr($cost, 0, strpos($cost, ".")); $cost = substr($cost, 0, strpos($cost, "."));
$totalExpenditure+= (int) $cost; $totalExpenditure += (int) $cost;
$totalInvoice += $resp->data->total_invoice_amount ?? 0; $totalInvoice += $resp->data->total_invoice_amount ?? 0;
$totalPaidInvoice += $resp->data->total_invoice_paid_amount ?? 0; $totalPaidInvoice += $resp->data->total_invoice_paid_amount ?? 0;
} }
@ -86,20 +91,21 @@ class DashboardBoDController extends Controller
'total_budget' => (int) $totalBudgets ?? 0, 'total_budget' => (int) $totalBudgets ?? 0,
'total_expenditure' => $totalExpenditure, 'total_expenditure' => $totalExpenditure,
'total_invoice' => $totalInvoice, 'total_invoice' => $totalInvoice,
'total_paid_invoice' => $totalPaidInvoice , 'total_paid_invoice' => $totalPaidInvoice,
] ]
], 200); ], 200);
} }
public function getInvoiceOutstanding($year = '%'){ public function getInvoiceOutstanding($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$projects = Project::where('mulai_proyek', 'like', $year) $projects = Project::where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->get(); ->get();
$return = []; $return = [];
foreach($projects as $project){ foreach ($projects as $project) {
$resp = null; $resp = null;
if($project->kode_sortname != ""){ if ($project->kode_sortname != "") {
$resp = $this->getInvoiceIntegration($project->kode_sortname); $resp = $this->getInvoiceIntegration($project->kode_sortname);
array_push($return, [ array_push($return, [
'project' => $project->nama, 'project' => $project->nama,
@ -116,7 +122,8 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
public function getTotalProjectPerScheduleHealth($year = '%'){ public function getTotalProjectPerScheduleHealth($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$return = [ $return = [
@ -126,40 +133,49 @@ class DashboardBoDController extends Controller
]; ];
$projects = Project::where('mulai_proyek', 'like', $year)->get(); $projects = Project::where('mulai_proyek', 'like', $year)->get();
foreach($projects as $project) { foreach ($projects as $project) {
$project->scurve = MasterFunctionsHelper::getSCurve($project->id); $project->scurve = MasterFunctionsHelper::getSCurve($project->id);
$selisihProgress = 0;
if ($project->scurve && $project->scurve[0]) {
$planningArray = $project->scurve[0]['data']['percentagePlan'];
$actualArray = $project->scurve[0]['data']['percentageReal'];
$planningProgress = !empty($planningArray) ? $planningArray[count($planningArray) - 1] : 0;
$actualProgress = !empty($actualArray) ? $actualArray[count($actualArray) - 1] : 0;
}
$selisihProgress = $planningProgress - $actualProgress;
try { try {
if(@$project->scurve['difference'] > 0 && @$project->scurve['difference'] <= 5) if ($selisihProgress > 0 && $selisihProgress <= 5)
$return['warning'] += 1; $return['warning'] += 1;
elseif(@$project->scurve['difference'] > 5 && @$project->scurve['difference'] <= 100) elseif ($selisihProgress == 0)
$return['behind-schedule'] += 1; $return['on-schedule'] += 1;
elseif(@$project->scurve['difference'] == 0) else
$return['on-schedule'] += 1; $return['behind-schedule'] += 1;
} catch (\Error $e) { } catch (\Error $e) {
return response()->json(['msg' => $e->getMessage(), 'data' => $project], 200); return response()->json(['msg' => $e->getMessage(), 'data' => $project], 200);
} }
} }
return response()->json(['data' => $return, 'q' => $projects], 200); return response()->json(['data' => $return, 'q' => $projects], 200);
} }
public function getTotalProjectScheduleHealthPerDivision($year = '%'){ public function getTotalProjectScheduleHealthPerDivision($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$divisions = Divisi::whereNull('parent')->get(); $divisions = Divisi::whereNull('parent')->get();
foreach($divisions as $division){ foreach ($divisions as $division) {
$scheduleData = new Collection(); $scheduleData = new Collection();
$behindSchedule = $warning = $onSchedule = 0; $behindSchedule = $warning = $onSchedule = 0;
$projects = Project::where('mulai_proyek', 'like', $year)->where('divisi_id', $division->id)->get(); $projects = Project::where('mulai_proyek', 'like', $year)->where('divisi_id', $division->id)->get();
foreach($projects as $project) { foreach ($projects as $project) {
$project->scurve = MasterFunctionsHelper::getSCurve($project->id); $project->scurve = MasterFunctionsHelper::getSCurve($project->id);
if(@$project->scurve['difference'] > 0 && @$project->scurve['difference'] <= 5) if (@$project->scurve['difference'] > 0 && @$project->scurve['difference'] <= 5)
$warning++; $warning++;
elseif(@$project->scurve['difference'] > 5 && @$project->scurve['difference'] <= 100) elseif (@$project->scurve['difference'] > 5 && @$project->scurve['difference'] <= 100)
$behindSchedule++; $behindSchedule++;
elseif(@$project->scurve['difference'] == 0) elseif (@$project->scurve['difference'] == 0)
$onSchedule++; $onSchedule++;
} }
@ -175,7 +191,8 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
public function getTotalProjectPerBudgetHealth($year = '%'){ public function getTotalProjectPerBudgetHealth($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
return response()->json([ return response()->json([
'data' => [ 'data' => [
@ -186,28 +203,30 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
private function countTotalProjectByBudgetHealthInDivision($divisi, $year, $health){ private function countTotalProjectByBudgetHealthInDivision($divisi, $year, $health)
{
return Project::where('divisi_id', $divisi) return Project::where('divisi_id', $divisi)
->where('mulai_proyek', 'like', $year) ->where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->where('budget_health', $health) ->where('budget_health', $health)
->count(); ->count();
} }
public function getTotalProjectBudgetHealthPerDivision($year = '%'){ public function getTotalProjectBudgetHealthPerDivision($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$divisions = Divisi::select('id','name') $divisions = Divisi::select('id', 'name')
->with('children') ->with('children')
->whereNull('parent') ->whereNull('parent')
->get(); ->get();
// to do : count in more than 1 level child // to do : count in more than 1 level child
foreach($divisions as $division){ foreach ($divisions as $division) {
$budgetData = new Collection(); $budgetData = new Collection();
$budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'overrun'), 'overrun'); $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, 'warning'), 'warning');
$budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'on-budget'), 'on-budget'); $budgetData->prepend($this->countTotalProjectByBudgetHealthInDivision($division->id, $year, 'on-budget'), 'on-budget');
foreach($division->children as $d){ foreach ($division->children as $d) {
$budgetData['overrun'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'overrun'); $budgetData['overrun'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'overrun');
$budgetData['warning'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'warning'); $budgetData['warning'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'warning');
$budgetData['on-budget'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'on-budget'); $budgetData['on-budget'] += $this->countTotalProjectByBudgetHealthInDivision($d->id, $year, 'on-budget');
@ -215,7 +234,7 @@ class DashboardBoDController extends Controller
unset($division->children); unset($division->children);
$division->budgetData = $budgetData; $division->budgetData = $budgetData;
} }
foreach($divisions as $division){ foreach ($divisions as $division) {
} }
return response()->json([ return response()->json([
'data' => [ 'data' => [
@ -224,14 +243,15 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
public function getTotalProjectPerPhase($year = '%'){ public function getTotalProjectPerPhase($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$projectPhases = ProjectPhase::orderBy('order')->get(); $projectPhases = ProjectPhase::orderBy('order')->get();
foreach($projectPhases as $phase){ foreach ($projectPhases as $phase) {
$phase->totalProject = Project::where('phase_id', $phase->id) $phase->totalProject = Project::where('phase_id', $phase->id)
->where('mulai_proyek', 'like', $year) ->where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->count(); ->count();
} }
return response()->json([ return response()->json([
'data' => [ 'data' => [
@ -240,24 +260,26 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
private function countTotalProjectInDivision($id, $year){ private function countTotalProjectInDivision($id, $year)
{
return Project::where('divisi_id', $id) return Project::where('divisi_id', $id)
->where('mulai_proyek', 'like', $year) ->where('mulai_proyek', 'like', $year)
->count(); ->count();
} }
public function getTotalProjectPerDivision($year = '%') { public function getTotalProjectPerDivision($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$divisions = Divisi::select('id','name') $divisions = Divisi::select('id', 'name','parent','color')
->with('children') ->with('children')
->whereNull('parent') ->whereNull('parent')
->get(); ->get();
// to do : count in more than 1 level child // to do : count in more than 1 level child
foreach($divisions as $v){ foreach ($divisions as $v) {
$v->total = $this->countTotalProjectInDivision($v->id, $year); $v->total = $this->countTotalProjectInDivision($v->id, $year);
foreach($v->children as $d){ foreach ($v->children as $d) {
$v->total += $this->countTotalProjectInDivision($d->id, $year); $v->total += $this->countTotalProjectInDivision($d->id, $year);
} }
unset($v->children); unset($v->children);
@ -268,27 +290,29 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
private function countTotalProjectValueInDivision($id, $year){ private function countTotalProjectValueInDivision($id, $year)
{
return Project::select(DB::raw('SUM(CAST("rencana_biaya" AS DOUBLE PRECISION))')) return Project::select(DB::raw('SUM(CAST("rencana_biaya" AS DOUBLE PRECISION))'))
->where('mulai_proyek', 'like', $year) ->where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->where('divisi_id', $id) ->where('divisi_id', $id)
->pluck('sum') ->pluck('sum')
->first(); ->first();
} }
public function getTotalProjectValuePerDivision($year = '%') { public function getTotalProjectValuePerDivision($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$divisions = Divisi::select('id','name') $divisions = Divisi::select('id', 'name')
->with('children') ->with('children')
->whereNull('parent') ->whereNull('parent')
->get(); ->get();
// to do : count in more than 1 level child // to do : count in more than 1 level child
foreach($divisions as $v){ foreach ($divisions as $v) {
$v->total = $this->countTotalProjectValueInDivision($v->id, $year); $v->total = $this->countTotalProjectValueInDivision($v->id, $year);
foreach($v->children as $d){ foreach ($v->children as $d) {
$v->total += $this->countTotalProjectValueInDivision($d->id, $year); $v->total += $this->countTotalProjectValueInDivision($d->id, $year);
} }
unset($v->children); unset($v->children);
@ -300,16 +324,17 @@ class DashboardBoDController extends Controller
} }
public function getDetailExpenditure($year = '%'){ public function getDetailExpenditure($year = '%')
{
$year = $this->interpolateYear($year); $year = $this->interpolateYear($year);
$projects = Project::where('mulai_proyek', 'like', $year) $projects = Project::where('mulai_proyek', 'like', $year)
/* ->orWhere('akhir_proyek', 'like', $year) */ /* ->orWhere('akhir_proyek', 'like', $year) */
->orderBy('id', 'desc') ->orderBy('id', 'desc')
->get(); ->get();
foreach($projects as $project){ foreach ($projects as $project) {
$lastGantt = MasterFunctionsHelper::getLatestGantt($project->id); $lastGantt = MasterFunctionsHelper::getLatestGantt($project->id);
if($project->kode_sortname != ""){ if ($project->kode_sortname != "") {
$resp = $this->getInvoiceIntegration($project->kode_sortname); $resp = $this->getInvoiceIntegration($project->kode_sortname);
$project->invoice = [ $project->invoice = [
'invoiced' => $resp->data->total_invoice_amount ?? 0, 'invoiced' => $resp->data->total_invoice_amount ?? 0,
@ -319,12 +344,12 @@ class DashboardBoDController extends Controller
$project->pm = User::find($project->pm_id); $project->pm = User::find($project->pm_id);
/* $project->header = Activity::where('proyek_id', $project->id)->where('version_gantt_id', $lastGantt['last_gantt_id'])->whereNull('parent_id')->first(); */ /* $project->header = Activity::where('proyek_id', $project->id)->where('version_gantt_id', $lastGantt['last_gantt_id'])->whereNull('parent_id')->first(); */
if(!isset($lastGantt['last_gantt_id'])){ if (!isset($lastGantt['last_gantt_id'])) {
$project->manPowers = 0; $project->manPowers = 0;
} else { } else {
$project->manPowers = UserToVersionGantt::where('version_gantt_id', $lastGantt['last_gantt_id'])->count(); $project->manPowers = UserToVersionGantt::where('version_gantt_id', $lastGantt['last_gantt_id'])->count();
$project->scurve = MasterFunctionsHelper::getSCurve($project->id); $project->scurve = MasterFunctionsHelper::getSCurve($project->id);
} }
$project->lastGanttId = MasterFunctionsHelper::getLatestGantt($project->id); $project->lastGanttId = MasterFunctionsHelper::getLatestGantt($project->id);
} }
@ -334,4 +359,3 @@ class DashboardBoDController extends Controller
], 200); ], 200);
} }
} }

213
app/Http/Controllers/DivisiController.php

@ -1,99 +1,114 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Divisi; use App\Models\Divisi;
class DivisiController extends Controller class DivisiController extends Controller
{ {
private function getAllChildren($divisi, $depth = 0, $array = []) { private function getAllChildren($divisi, $depth = 0, $array = []) {
$divisi->depth = $depth; $divisi->depth = $depth;
array_push($array, $divisi); array_push($array, $divisi);
foreach($divisi->children as $child){ foreach($divisi->children as $child){
$array = $this->getAllChildren($child, $depth + 1, $array); $array = $this->getAllChildren($child, $depth + 1, $array);
} }
return $array; return $array;
} }
public function add(Request $request){ public function add(Request $request){
$this->validate($request, [ $this->validate($request, [
'name' => 'required', 'name' => 'string|required|unique:m_divisi,name',
'description' => 'string', 'description' => 'nullable|string',
'parent' => 'integer' 'parent' => 'nullable|integer',
]); 'color'=>'nullable|string|max:10'
]);
$data = $request->all();
$data['created_by'] = $this->currentName; $data = $request->all();
$data['created_by'] = $this->currentName;
$result = Divisi::create($data);
$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)) public function update(Request $request, $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);
$this->validate($request, [
if(!$data) 'name' => 'string|required',
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); 'description' => 'nullable|string',
'parent' => 'nullable|integer'
$result = $data->update($request->all()); ]);
$data = Divisi::find($id);
if(!$result)
return response()->json(['status'=>'failed','message'=> 'Update failed!','code'=> 500], 500); $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_divisi,name']) : '';
return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); if(!$data)
} return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404);
public function delete($id) $result = $data->update($request->all());
{
if(empty($id) || !is_int((int)$id)) if(!$result)
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=> 'Update failed!','code'=> 500], 500);
$data = Divisi::find($id); return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200);
}
if(!$data)
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); public function delete($id)
{
$delete = $data->delete(); if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
if(!$delete)
return response()->json(['status'=>'failed','message'=> 'Delete failed!','code'=> 500], 500); $data = Divisi::find($id);
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200); if(!$data)
} return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404);
public function search() $delete = $data->delete();
{
return $this->list(); if(!$delete)
// cant use builder for this case return response()->json(['status'=>'failed','message'=> 'Delete failed!','code'=> 500], 500);
}
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200);
public function list() }
{
$parentMenus = Divisi::whereNull('parent')->with('children')->get(); public function search(Request $request)
$divisions = []; {
foreach($parentMenus as $menu){ $payload = $request->all();
$childs = $this->getAllChildren($menu); $dataBuilder = $this->setUpPayload($payload, 'm_divisi');
foreach($childs as $d){ $builder = $dataBuilder['builder'];
$d->displayName = ' ' . $d->name; $countBuilder = $dataBuilder['count'];
for($i=0; $i < $d->depth; $i++){ $dataGet = $builder->get();
$d->displayName = '--' . $d->displayName ; $totalRecord = $countBuilder->count();
} return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
array_push($divisions, $d); //return $this->list();
} // cant use builder for this case
} }
$countData = count($divisions);
if($countData == 0) public function list()
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); {
$parentMenus = Divisi::whereNull('parent')->with('children')->get();
return response()->json(['status'=>'success','code'=>200,'data'=> $divisions, 'totalRecord'=> $countData], 200); $divisions = [];
} foreach($parentMenus as $menu){
} $childs = $this->getAllChildren($menu);
foreach($childs as $d){
$d->displayName = ' ' . $d->name;
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);
return response()->json(['status'=>'success','code'=>200,'data'=> $divisions, 'totalRecord'=> $countData], 200);
}
}

31
app/Http/Controllers/HierarchyFtthController.php

@ -110,12 +110,15 @@ class HierarchyFtthController extends Controller
if($ftthIds){ if($ftthIds){
foreach ($ftthIds as $ftthId) { foreach ($ftthIds as $ftthId) {
$gantts = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('progress'); $gantts = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('progress');
$bobot_planning = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('bobot');
$ganttCount = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->count(); $ganttCount = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->count();
$ftth = HierarchyFtth::find($ftthId->hierarchy_ftth_id); $ftth = HierarchyFtth::find($ftthId->hierarchy_ftth_id);
if($ftth){ if($ftth){
$round = $gantts/$ganttCount; $round = $gantts/$ganttCount;
$round_bobot = $bobot_planning/$ganttCount;
$ftth->progress = round($round, 2); $ftth->progress = round($round, 2);
$ftth->bobot_planning = round($round_bobot, 2);
try { try {
$ftth->save(); $ftth->save();
} catch (\Exception $e) { } catch (\Exception $e) {
@ -149,6 +152,30 @@ class HierarchyFtthController extends Controller
} }
} }
} }
public function getTreeByGantt($gantt_id)
{
$finalData = [];
$gantt = VersionGantt::find($gantt_id);
if ($gantt->hierarchy_ftth_id) {
$ftth = HierarchyFtth::find($gantt->hierarchy_ftth_id);
array_push($finalData, $ftth);
if($ftth->parent_id){
$this->getParents($finalData, $ftth->parent_id);
}
} else {
return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
}
return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
}
public function getParents(&$data, $id){
$ftth = HierarchyFtth::find($id);
array_push($data, $ftth);
if ($ftth->parent_id) {
$this->getParents($data, $ftth->parent_id);
}
}
public function getTreeByProject($project_id) public function getTreeByProject($project_id)
{ {
@ -165,6 +192,7 @@ class HierarchyFtthController extends Controller
foreach ($progress as $p) { foreach ($progress as $p) {
if ($p->id == $gantt->id) { if ($p->id == $gantt->id) {
$gantt->progress = $p->persentase_progress; $gantt->progress = $p->persentase_progress;
$gantt->bobot_planning = $p->bobot_planning ? $p->bobot_planning : 0;
} }
} }
} }
@ -192,6 +220,7 @@ class HierarchyFtthController extends Controller
foreach ($progress as $p) { foreach ($progress as $p) {
if ($p->id == $gantt->id) { if ($p->id == $gantt->id) {
$gantt->progress = $p->persentase_progress; $gantt->progress = $p->persentase_progress;
$gantt->bobot_planning = $p->bobot_planning ? $p->bobot_planning : 0;
} }
} }
} }
@ -204,7 +233,7 @@ class HierarchyFtthController extends Controller
} }
public function ganttProgress($column, $value){ public function ganttProgress($column, $value){
$progress = VersionGantt::select('m_version_gantt.id','m_activity.persentase_progress') $progress = VersionGantt::select('m_version_gantt.id','m_activity.persentase_progress', 'm_activity.bobot_planning')
->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id') ->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id')
->where("m_version_gantt.".$column, $value) ->where("m_version_gantt.".$column, $value)
->where('m_activity.type_activity', "project") ->where('m_activity.type_activity', "project")

377
app/Http/Controllers/HumanResourceController.php

@ -1,178 +1,199 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\HumanResource; use App\Models\HumanResource;
use App\Models\UserToActivity; use App\Models\UserToActivity;
use App\Models\UserToProyek; use App\Models\UserToProyek;
use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Artisan;
class HumanResourceController extends Controller class HumanResourceController extends Controller
{ {
public function add(Request $request){ public function add(Request $request)
$this->validate($request, [ {
'role_id' => 'required', $this->validate($request, [
'name' => 'required', 'role_id' => 'required',
'ktp_number' => 'required', 'name' => 'required',
'employee_type' => 'required' 'ktp_number' => 'required|numeric|unique:m_users,ktp_number',
]); 'employee_type' => 'required'
]);
$data = $request->all();
$data = $request->all();
if(isset($request->password) && $request->password!=""){
$data['password'] = md5($request->password); if (isset($request->password) && $request->password != "") {
} $data['password'] = md5($request->password);
}
$result = HumanResource::create($data);
$result = HumanResource::create($data);
if($result){
return response()->json(['status'=>'success','message'=>'Human Resource Pool successfull created','code'=>200]); if ($result) {
}else{ return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfull created', 'code' => 200]);
return response()->json(['status'=>'failed','message'=>'Human Resource Pool failed created','code'=>400]); } else {
} return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed created', 'code' => 400]);
} }
}
public function edit($id){
if(!$id || (int) $id < 0 || $id==""){ public function edit($id)
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); {
die(); if (!$id || (int) $id < 0 || $id == "") {
} return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
die();
$result = HumanResource::find($id); }
if($result){ $result = HumanResource::find($id);
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{ if ($result) {
return response()->json(['status'=>'failed','message'=>'failed get data human resource, please try again later!','code'=>400], 400); return response()->json(['status' => 'success', 'code' => 200, 'data' => $result], 200);
} } else {
} return response()->json(['status' => 'failed', 'message' => 'failed get data human resource, please try again later!', 'code' => 400], 400);
}
public function update(Request $request, $id){ }
if(!$id || (int) $id < 0 || $id==""){ public function update(Request $request, $id)
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); {
}
if (!$id || (int) $id < 0 || $id == "") {
$humanresource = HumanResource::find($id); return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
}
$data = $request->all(); $humanresource = HumanResource::find($id);
if(isset($request->password) && $request->password!="" ){ $request->ktp_number !== $humanresource['ktp_number'] ? $this->validate($request,['ktp_number'=>'unique:m_users,ktp_number|numeric']) : '';
$data['password'] = md5($request->password); $request->email !== $humanresource['email'] ? $this->validate($request,['email'=>'unique:m_users,email|email']) : '';
} $request->password ? $this->validate($request,['password'=>'required|min:8']) : '';
if(isset($data['username']) && HumanResource::where('username', $data['username'])->where('id', '<>', $id)->exists()){ $data = $request->all();
return response()->json(['status'=>'failed','message'=>'Username already exists!','code'=>400], 400);
} if (isset($request->password) && $request->password != "") {
$data['password'] = md5($request->password);
if($humanresource){ }
$result = $humanresource->update($data);
}else{ if (isset($data['username']) && HumanResource::where('username', $data['username'])->where('id', '<>', $id)->exists()) {
return response()->json(['status'=>'failed','message'=>'data Human Resource Pool not found!','code'=>400], 400); return response()->json(['status' => 'failed', 'message' => 'Username already exists!', 'code' => 400], 400);
die(); }
}
if ($humanresource) {
if($result){ $result = $humanresource->update($data);
return response()->json(['status'=>'success','message'=>'Human Resource Pool successfully updated!','code'=>200], 200); } else {
}else{ return response()->json(['status' => 'failed', 'message' => 'data Human Resource Pool not found!', 'code' => 400], 400);
return response()->json(['status'=>'failed','message'=>'Human Resource Pool failed updated!','code'=>400], 400); die();
} }
}
if ($result) {
public function delete($id) return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfully updated!', 'code' => 200], 200);
{ } else {
$data = HumanResource::find($id); return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed updated!', 'code' => 400], 400);
}
if($data){ }
$delete = $data->delete();
}else{ public function delete($id)
return response()->json(['status'=>'failed','message'=>'data Human Resource Pool not found!','code'=>400], 400); {
die(); $data = HumanResource::find($id);
}
if ($data) {
$delete = $data->delete();
if($delete){ } else {
return response()->json(['status'=>'success','message'=>'Human Resource Pool successfully deleted!','code'=>200], 200); return response()->json(['status' => 'failed', 'message' => 'data Human Resource Pool not found!', 'code' => 400], 400);
}else{ die();
return response()->json(['status'=>'failed','message'=>'Human Resource Pool failed deleted!','code'=>400], 400); }
}
}
if ($delete) {
public function search(Request $request) return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfully deleted!', 'code' => 200], 200);
{ } else {
$payload = $request->all(); return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed deleted!', 'code' => 400], 400);
$dataBuilder = $this->setUpPayload($payload, 'm_users'); }
$builder = $dataBuilder['builder']; }
$countBuilder = $dataBuilder['count'];
$dataGet = $builder->get(); public function search(Request $request)
$totalRecord = $countBuilder->count(); {
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); $payload = $request->all();
} $dataBuilder = $this->setUpPayload($payload, 'm_users');
$builder = $dataBuilder['builder'];
public function list() $countBuilder = $dataBuilder['count'];
{ $dataGet = $builder->get();
$data = HumanResource::all(); $totalRecord = $countBuilder->count();
$countData = $data->count(); return response()->json(['status' => 'success', 'code' => 200, 'data' => $dataGet, 'totalRecord' => $totalRecord], 200);
}
if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); public function list()
}else{ {
return response()->json(['status'=>'failed','message'=>'failed get list human resource, please try again later!','code'=>400], 400); $data = HumanResource::select('id', 'name', 'role_id')->get();
} $countData = $data->count();
}
if ($data) {
public function select(Request $request){ return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
} else {
$search = $request->query('search'); return response()->json(['status' => 'failed', 'message' => 'failed get list human resource, please try again later!', 'code' => 400], 400);
}
$idActivity = (int)$request->query('idact'); }
$idProyek = (int)$request->query('idProyek');
public function select(Request $request)
$forbidden = []; {
if($idActivity && $idActivity > 0){ $search = $request->query('search');
$dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get();
foreach($dataF as $val){ $idActivity = (int)$request->query('idact');
$forbidden[] = $val->user_id; $idProyek = (int)$request->query('idProyek');
}
} $forbidden = [];
if($search && !empty($search)){ if ($idActivity && $idActivity > 0) {
$data = UserToProyek::select("m_users.id as id", "m_users.name as name", "assign_hr_to_proyek.project_role as proyek_role")->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id') $dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get();
->where("assign_hr_to_proyek.proyek_id", $idProyek)->where("m_users.name", 'like', '%'.$search.'%')->whereNotIn("m_users.id", $forbidden)->get(); foreach ($dataF as $val) {
}else{ $forbidden[] = $val->user_id;
$data = UserToProyek::select("m_users.id as id", "m_users.name as name", "assign_hr_to_proyek.project_role as proyek_role")->where("assign_hr_to_proyek.proyek_id", $idProyek)->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id')->whereNotIn("m_users.id", $forbidden)->get(); }
} }
return response()->json($data); if ($search && !empty($search)) {
} $data = UserToProyek::select("m_users.id as id", "m_users.name as name", "assign_hr_to_proyek.project_role as proyek_role")
->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id')
public function checkOldPassword(Request $request, $id) ->where("assign_hr_to_proyek.proyek_id", $idProyek)
{ ->where(function ($query) {
if(!$id || (int) $id < 0 || $id==""){ $query->where("assign_hr_to_proyek.is_customer", "!=", true)
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); ->orWhereNull("assign_hr_to_proyek.is_customer");
die(); })
} ->where("m_users.name", 'like', '%' . $search . '%')
->whereNotIn("m_users.id", $forbidden)->get();
$data = $request->all(); } else {
$data = UserToProyek::select("m_users.id as id", "m_users.name as name", "assign_hr_to_proyek.project_role as proyek_role")
if(isset($request->old_password) && $request->old_password!="" ){ ->where("assign_hr_to_proyek.proyek_id", $idProyek)
$result = HumanResource::find($id); ->where(function ($query) {
$data['old_password'] = md5($request->old_password); $query->where("assign_hr_to_proyek.is_customer", "!=", true)
if($data['old_password'] !== $result->password) { ->orWhereNull("assign_hr_to_proyek.is_customer");
return response()->json(['status'=>'failed','message'=>"old password seems doesn't match in records. please try again.",'code'=>400], 400); })
} ->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id')
elseif($data['old_password'] === $result->password) { ->whereNotIn("m_users.id", $forbidden)
return response()->json(['status'=>'success','message'=>"old password match",'data'=>$result,'code'=>200], 200); ->get();
} }
}
else { return response()->json($data);
return response()->json(['status'=>'failed','message'=>'old_password is required!','code'=>400], 400); }
}
} public function checkOldPassword(Request $request, $id)
{
public function sync(){ if (!$id || (int) $id < 0 || $id == "") {
Artisan::call('sync:integration-human-resources'); return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400);
} die();
} }
$data = $request->all();
if (isset($request->old_password) && $request->old_password != "") {
$result = HumanResource::find($id);
$data['old_password'] = md5($request->old_password);
if ($data['old_password'] !== $result->password) {
return response()->json(['status' => 'failed', 'message' => "old password seems doesn't match in records. please try again.", 'code' => 400], 400);
} elseif ($data['old_password'] === $result->password) {
return response()->json(['status' => 'success', 'message' => "old password match", 'data' => $result, 'code' => 200], 200);
}
} else {
return response()->json(['status' => 'failed', 'message' => 'old_password is required!', 'code' => 400], 400);
}
}
public function sync()
{
Artisan::call('sync:integration-human-resources');
}
}

96
app/Http/Controllers/MapMonitoringController.php

@ -15,56 +15,62 @@ class MapMonitoringController extends Controller
// default map monitoring shows today's presence lat lon in the map // default map monitoring shows today's presence lat lon in the map
public function search(Request $request) public function search(Request $request)
{ {
$dateNow = Carbon::today()->addHour(7)->format('Y-m-d'); $dateNow = Carbon::today()->addHour(7)->format('Y-m-d');
// get distinct human assign project // get distinct human assign project
$hr_assign_project = DB::table('assign_hr_to_proyek') $hr_assign_project = DB::table('assign_hr_to_proyek')
->select('user_id') ->select('user_id')
->whereIn('proyek_id', $request->project_id) ->whereIn('proyek_id', $request->project_id)
->distinct() ->distinct()
->get(); ->get();
// get position hr in presensi // get position hr in presensi
$tmp = []; $tmp = [];
foreach($hr_assign_project as $key){ foreach ($hr_assign_project as $key) {
$presensi = DB::table('t_clock_in_out as tcio') $presensi = DB::table('t_clock_in_out as tcio')
->select('tcio.id as clock_in_out_id','mu.id as user_id', 'mu.name as fullname', 'tcio.clock_in', 'tcio.clock_out', 'tcio.clock_in_lat', 'tcio.clock_in_lng', ->select(
'tcio.clock_out_lat', 'tcio.clock_out_lng', 'tcio.clock_in_loc', 'tcio.clock_out_loc', 'tcio.clock_in_boundary', 'tcio.id as clock_in_out_id',
'tcio.clock_out_boundary', 'mu.username', 'tcio.date_presence', 'tcio.created_at') 'mu.id as user_id',
->join('m_users as mu', 'mu.id', '=', 'tcio.user_id') 'mu.name as fullname',
->where('mu.id', $key->user_id) 'tcio.clock_in',
->orderBy('tcio.id', 'DESC') 'tcio.clock_out',
->first(); 'tcio.clock_in_lat',
$project = DB::table('assign_hr_to_proyek as ahtp') 'tcio.clock_in_lng',
->select('ahtp.proyek_id as id', 'mp.nama as project_name') 'tcio.clock_in_loc',
->join('m_proyek as mp', 'mp.id', '=', 'ahtp.proyek_id') 'tcio.clock_out_loc',
->whereIn('ahtp.proyek_id', $request->project_id) 'tcio.date_presence'
->where('ahtp.user_id', $key->user_id) )
->get(); ->join('m_users as mu', 'mu.id', '=', 'tcio.user_id')
if($presensi && isset($presensi->user_id)){ ->where('mu.id', $key->user_id)
->orderBy('tcio.clock_in', 'DESC')
->first();
$project = DB::table('assign_hr_to_proyek as ahtp')
->select('ahtp.proyek_id as id', 'mp.nama as project_name')
->join('m_proyek as mp', 'mp.id', '=', 'ahtp.proyek_id')
->whereIn('ahtp.proyek_id', $request->project_id)
->where('ahtp.user_id', $key->user_id)
->get();
if ($presensi && isset($presensi->user_id)) {
$image = DB::table('m_image')->select('image')->where('category', 'presensi')->where('ref_id', $presensi->clock_in_out_id)->first(); $image = DB::table('m_image')->select('image')->where('category', 'presensi')->where('ref_id', $presensi->clock_in_out_id)->first();
$waypoint = DB::table('m_waypoint')->select('lat', 'lon', 'wptime')->where('user_id', $presensi->user_id)->orderBy('wptime', 'DESC')->first();
$tmp[] = array( $tmp[] = array(
'user_id' => $presensi->user_id, 'user_id' => $presensi->user_id,
'clock_in' => $presensi->clock_in, 'wp_lat' => isset($waypoint) ? $waypoint->lat : $presensi->clock_in_lat,
'clock_out' => $presensi->clock_out, 'wp_lon' => isset($waypoint) ? $waypoint->lon : $presensi->clock_in_lng,
'date_presence' => $presensi->date_presence, 'wp_time' => isset($waypoint) ? $waypoint->wptime : $presensi->clock_in,
'clock_in_lat' => $presensi->clock_in_lat, 'clock_in' => $presensi->clock_in,
'clock_in_lng' => $presensi->clock_in_lng, 'clock_out' => $presensi->clock_out,
'clock_out_lat' => $presensi->clock_out_lat, 'clock_in_lat' => $presensi->clock_in_lat,
'clock_out_lng' => $presensi->clock_out_lng, 'clock_in_lng' => $presensi->clock_in_lng,
'clock_in_loc' => $presensi->clock_in_loc, 'clock_in_loc' => $presensi->clock_in_loc,
'clock_out_loc' => $presensi->clock_out_loc, 'clock_out_loc' => $presensi->clock_out_loc,
'clock_in_boundary' => $presensi->clock_in_boundary, 'name' => $presensi->fullname,
'clock_out_boundary' => $presensi->clock_out_boundary, 'image_selfie' => isset($image->image) ? $image->image : '-',
'username' => $presensi->username, 'presence_status' => $presensi->date_presence == $dateNow ? true : false, //true, //status date_presence,
'name' => $presensi->fullname, 'projects' => $project
'image_selfie' => isset($image->image) ? $image->image : '-',
'created_at' => $presensi->created_at,
'presence_status' => $presensi->date_presence == $dateNow ? true : false,//true, //status date_presence,
'projects' => $project
); );
} }
} }
return response()->json(['status'=>'success','code'=>200, 'data' => $tmp, 'totalRecord'=>count($tmp)], 200); return response()->json(['status' => 'success', 'code' => 200, 'data' => $tmp, 'totalRecord' => count($tmp)], 200);
} }
public function list() public function list()
@ -72,12 +78,12 @@ class MapMonitoringController extends Controller
$data = Presence::all(); $data = Presence::all();
$countData = $data->count(); $countData = $data->count();
if($data){ if ($data) {
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); return response()->json(['status' => 'success', 'code' => 200, 'data' => $data, 'totalRecord' => $countData], 200);
}else{ } else {
return response()->json(['status'=>'failed','message'=>'failed get list presence, please try again later!','code'=>400], 400); return response()->json(['status' => 'failed', 'message' => 'failed get list presence, please try again later!', 'code' => 400], 400);
} }
} }
} }

310
app/Http/Controllers/MenuController.php

@ -1,151 +1,159 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Menu; use App\Models\Menu;
use App\Models\RoleMenu; use App\Models\RoleMenu;
class MenuController extends Controller class MenuController extends Controller
{ {
public function add(Request $request) public function add(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'icon' => 'required', 'icon' => 'required',
'name' => 'required', 'name' => 'string|required|unique:m_menu,name',
'url' => 'required', 'url' => 'required|unique:m_menu,url',
'sequence' => 'required', 'sequence' => 'required|integer',
]); ]);
$data = $request->all(); $data = $request->all();
$data['created_by'] = $this->currentName; $data['created_by'] = $this->currentName;
$result = Menu::create($data); $result = Menu::create($data);
if($result){ if($result){
return response()->json(['status'=>'success','message'=>'add data menu successfully!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'add data menu successfully!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'add data menu failed!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'add data menu failed!','code'=>400], 400);
} }
} }
public function edit($id){ public function edit($id){
if(!$id || (int) $id < 0 || $id==""){ if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die(); die();
} }
$result = Menu::find($id); $result = Menu::find($id);
if($result){ if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'failed get data menu, please try again later!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'failed get data menu, please try again later!','code'=>400], 400);
} }
} }
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
if(!$id || (int) $id < 0 || $id==""){ if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
} }
$this->validate($request, [
$data = Menu::find($id); 'icon' => 'required',
'name' => 'string|required',
if($data){ 'url' => 'required',
$result = $data->update($request->all()); 'sequence' => 'required|integer',
}else{ ]);
return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400); $data = Menu::find($id);
die();
} $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_menu,name']) : '';
$request->url !== $data['url'] ? $this->validate($request,['url'=>'unique:m_menu,url']) : '';
if($result){ if($data){
return response()->json(['status'=>'success','message'=>'data menu successfully updated!','code'=>200], 200); $result = $data->update($request->all());
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data menu failed updated!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400);
} die();
} }
public function delete($id)
{ if($result){
$data = Menu::find($id); return response()->json(['status'=>'success','message'=>'data menu successfully updated!','code'=>200], 200);
}else{
if($data){ return response()->json(['status'=>'failed','message'=>'data menu failed updated!','code'=>400], 400);
$delete = $data->delete(); }
}else{ }
return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400);
die(); public function delete($id)
} {
$data = Menu::find($id);
if($delete){ if($data){
return response()->json(['status'=>'success','message'=>'data menu successfully deleted!','code'=>200], 200); $delete = $data->delete();
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data menu failed deleted!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400);
} die();
} }
public function search(Request $request)
{ if($delete){
$payload = $request->all(); return response()->json(['status'=>'success','message'=>'data menu successfully deleted!','code'=>200], 200);
$dataBuilder = $this->setUpPayload($payload, 'm_menu'); }else{
$builder = $dataBuilder['builder']; return response()->json(['status'=>'failed','message'=>'data menu failed deleted!','code'=>400], 400);
$countBuilder = $dataBuilder['count']; }
$dataGet = $builder->get(); }
$totalRecord = $countBuilder->count();
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); public function search(Request $request)
} {
$payload = $request->all();
public function listMenu($id) $dataBuilder = $this->setUpPayload($payload, 'm_menu');
{ $builder = $dataBuilder['builder'];
$dataParent = RoleMenu::select("m_menu.*") $countBuilder = $dataBuilder['count'];
->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id') $dataGet = $builder->get();
->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id') $totalRecord = $countBuilder->count();
->whereNull('m_menu.parent_id') return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
->where('m_roles.id', $id) }
->orderBy('m_menu.sequence', 'ASC')
->get(); public function listMenu($id)
{
$finalData = []; $dataParent = RoleMenu::select("m_menu.*")
foreach($dataParent as $data){ ->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id')
$data->children = $this->getChildrenMenu($data->id, $id); ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
$finalData[] = $data; ->whereNull('m_menu.parent_id')
} ->where('m_roles.id', $id)
->orderBy('m_menu.sequence', 'ASC')
return response()->json(['status'=>'success','code'=>200,'data'=>$finalData], 200); ->get();
}
$finalData = [];
protected function getChildrenMenu($id, $role_id) foreach($dataParent as $data){
{ $data->children = $this->getChildrenMenu($data->id, $id);
$dataChildren = RoleMenu::select("m_menu.*") $finalData[] = $data;
->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id') }
->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
->where('m_roles.id', $role_id) return response()->json(['status'=>'success','code'=>200,'data'=>$finalData], 200);
->where('m_menu.parent_id', $id) }
->orderBy('m_menu.sequence', 'ASC')
->get(); protected function getChildrenMenu($id, $role_id)
$children = []; {
if($dataChildren){ $dataChildren = RoleMenu::select("m_menu.*")
foreach($dataChildren as $data) ->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id')
{ ->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id')
$data->children = $this->getChildrenMenu($data->id, $role_id); ->where('m_roles.id', $role_id)
$children[] = $data; ->where('m_menu.parent_id', $id)
} ->orderBy('m_menu.sequence', 'ASC')
} ->get();
return $children; $children = [];
} if($dataChildren){
foreach($dataChildren as $data)
public function list() {
{ $data->children = $this->getChildrenMenu($data->id, $role_id);
$data = Menu::all(); $children[] = $data;
$countData = $data->count(); }
}
if($data){ return $children;
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); public function list()
} {
} $data = Menu::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);
}
}
}

1113
app/Http/Controllers/PresenceController.php

File diff suppressed because it is too large Load Diff

136
app/Http/Controllers/ProjectChecklistsController.php

@ -0,0 +1,136 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\ProjectChecklists;
class ProjectChecklistsController extends Controller
{
public function add(Request $request)
{
if ($request->status_exist==="") {
$request->merge(['status_exist' => true]);
}
$this->validate($request, [
'proyek_id' => 'required',
'item' => 'required|string',
'status_exist' => 'boolean'
]);
$data = $request->all();
$data['created_by'] = $this->currentName;
$result = ProjectChecklists::create($data);
if($result){
return response()->json(['status'=>'success','message'=>'add data project participants successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'add data project participants 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 = ProjectChecklists::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data project participants, 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 = ProjectChecklists::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'data project participants not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'data project participants successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data project participants failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = ProjectChecklists::find($id);
if($data){
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'data project participants not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success','message'=>'data project participants successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data project participants failed deleted!','code'=>400], 400);
}
}
public function deleteByProyek($id)
{
$data = ProjectChecklists::where('proyek_id', $id)->delete();
if($data){
return response()->json(['status'=>'success','message'=>'data project participants successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'success','message'=>'data project participants failed deleted, because data not found!','code'=>200], 200);
}
}
public function customWhere($where, $val)
{
$data = ProjectChecklists::where($where, $val)->orderBy('id', 'asc')->get();
if($data){
return response()->json(['status'=>'success','data'=> $data,'code'=>200], 200);
}else{
return response()->json(['status'=>'success','message'=>'data project participants not found!','code'=>400], 40);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'project_charter_checklist');
$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 = ProjectChecklists::all();
$countData = $data->count();
if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get list project participants, please try again later!','code'=>400], 400);
}
}
}

364
app/Http/Controllers/ProjectController.php

@ -2,33 +2,39 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use DateTime;
use App\Models\Link;
use App\Models\User;
use App\Models\Image;
use App\Models\Holiday;
use App\Models\Project; use App\Models\Project;
use App\Models\UserToProyek;
use App\Models\Activity; use App\Models\Activity;
use App\Models\UserToActivity; use App\Jobs\ProcessSCurve;
use App\Models\User; use App\Models\OfficeHours;
use App\Models\ProjectType;
use App\Models\ProjectPhase;
use App\Models\UserToProyek;
use App\Models\VersionGantt;
use Illuminate\Http\Request;
use App\Models\ProjectIssues;
use App\Models\AssignMaterial; use App\Models\AssignMaterial;
use App\Models\DokumenProject; use App\Models\DokumenProject;
use App\Models\FolderDocumentProyek;
use App\Models\ProjectCharter; use App\Models\ProjectCharter;
use App\Models\ProjectApproval; use App\Models\ReportActivity;
use App\Models\ProjectPhase;
use App\Models\ProjectType;
use App\Models\ProjectMileStone;
use App\Models\ProjectParticipants;
use App\Models\ShowHideColumn; use App\Models\ShowHideColumn;
use App\Models\VersionGantt; use App\Models\UserToActivity;
use App\Models\Image;
use App\Models\CommentActivity;
use App\Models\Link;
use App\Models\ActivityDokumen; use App\Models\ActivityDokumen;
use App\Models\Holiday; use App\Models\CommentActivity;
use App\Models\ReportActivity; use App\Models\ProjectApproval;
use App\Models\OfficeHours; use App\Models\ProjectMileStone;
use App\Models\ProjectChecklists;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use App\Models\ProjectParticipants;
use App\Models\FolderDocumentProyek;
use App\Helpers\MasterFunctionsHelper; use App\Helpers\MasterFunctionsHelper;
use App\Models\ProjectRisks;
use App\Models\ReportActivityMaterial; use App\Models\ReportActivityMaterial;
use Illuminate\Support\Facades\Artisan;
const API_GEOLOCATION = "https://nominatim.oslogdev.com/search/ADDR?format=json&addressdetails=1&limit=1"; const API_GEOLOCATION = "https://nominatim.oslogdev.com/search/ADDR?format=json&addressdetails=1&limit=1";
@ -63,11 +69,22 @@ class ProjectController extends Controller
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){ public function edit($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);
$result = Project::find($id); $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();
if(!$result) if(!$result)
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404);
@ -143,6 +160,9 @@ class ProjectController extends Controller
ProjectApproval::where('proyek_id', $project_id)->delete(); ProjectApproval::where('proyek_id', $project_id)->delete();
ProjectMileStone::where('proyek_id', $project_id)->delete(); ProjectMileStone::where('proyek_id', $project_id)->delete();
ProjectParticipants::where('proyek_id', $project_id)->delete(); ProjectParticipants::where('proyek_id', $project_id)->delete();
ProjectChecklists::where('proyek_id', $project_id)->delete();
ProjectIssues::where('proyek_id', $project_id)->delete();
ProjectRisks::where('proyek_id', $project_id)->delete();
$this->deleteVersionGantt($project_id); $this->deleteVersionGantt($project_id);
$this->deleteDokumenProject($project_id); $this->deleteDokumenProject($project_id);
} }
@ -217,64 +237,53 @@ class ProjectController extends Controller
public function list() public function list()
{ {
$data = Project::orderBy('id', 'desc')->get(); $data = Project::select(
'id',
'kode_sortname',
'jumlah_stakeholder',
'nama',
'mulai_proyek',
'akhir_proyek',
'area_kerja',
'lokasi_kantor',
'rencana_biaya',
'biaya_actual',
'company',
'pm_id',
'type_proyek_id',
'divisi_id',
'persentase_progress',
'keterangan',
'durasi_proyek',
'progress_by_worklog',
'status',
'currency_symbol',
'currency_code',
'currency_name',
'project_objectives',
'considered_success_when',
'potential_risk',
'testing_environment',
'currency_code',
'currency_symbol',
'currency_name',
'budget_health',
'phase_id',
'calculation_status',
'created_at',
'created_by',
'updated_at',
'updated_by'
)->orderBy('id', 'desc')->get();
$countData = $data->count(); $countData = $data->count();
if(!$data) if(!$data)
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
$scheduleWarningThreshold = 10;
$scheduleDangerThreshold = 5;
foreach($data as $d){
$progress = $costVariance = $actualCost = 0;
$lastActivity = null;
$scheduleHealth = "on-track";
$rootActivity = Activity::whereNull('parent_id')->where('proyek_id', $d->id)->orderBy('version_gantt_id', 'desc')->first();
if($rootActivity){
$costVariance = (int)$d->rencana_biaya - (int)$rootActivity->biaya_actual;
$actualCost = $rootActivity->biaya_actual ?? 0;
$progress = $rootActivity->persentase_progress ?? 0;
$timeleft = strtotime($d->mulai_proyek) - strtotime($rootActivity->end_date);
$date1 = new \DateTime(date("Y-m-d", strtotime($d->mulai_proyek)));
$date2 = new \DateTime(date("Y-m-d", strtotime($rootActivity->end_date)));
$daysRemaining = $date2->diff($date1);
$daysRemaining = $daysRemaining->d;
if($daysRemaining <= $scheduleDangerThreshold) {
$scheduleHealth = "danger";
} elseif ($daysRemaining <= $scheduleWarningThreshold) {
$scheduleHealth = "warning";
}
$lastActivity = date("d/m/Y", strtotime($rootActivity->end_date));
}
$d->plannedInterval = date("d/m/Y", strtotime($d->mulai_proyek)) . " - " . date("d/m/Y", strtotime($d->akhir_proyek));
$d->plannedCost = $d->rencana_biaya;
$d->actualCost = $actualCost;
$d->lastActivity = $lastActivity ?? "-";
$d->costVariance = $costVariance;
$d->costHealth = $d->budget_health;
$d->scheduleHealth = $scheduleHealth;
$d->progress = $progress;
$d->lastGanttId = VersionGantt::where("proyek_id", $d->id)->orderBy('id', 'desc')->first()->id ?? null;
$d->manpower = UserToProyek::where("proyek_id", $d->id)->count() ?? 0;
$d->projectManager = DB::table('m_proyek')
->join('m_users', 'm_users.id', '=', 'm_proyek.pm_id')
->where('m_proyek.id', $d->id)
->pluck('m_users.name')
->first();
if($d->area_kerja != ''){
$d->geolocation = $this->httpReq($d->area_kerja);
$d->geolocation = [];
} else {
$d->geolocation = [];
}
}
$totalPlannedCost = array_sum(array_map('intval', array_column($data->toArray(), 'plannedCost'))); $totalPlannedCost = array_sum(array_map('intval', array_column($data->toArray(), 'plannedCost')));
$totalActualCost = $data->sum('actualCost'); $totalActualCost = $data->sum('actualCost');
$manpowers = User::count(); $manpowers = User::count();
$projectsOnDanger = Project::where('budget_health', 'danger')->count(); $projectsOnDanger = Project::where('budget_health', 'overrun')->count();
$projectPhases = ProjectPhase::orderBy('order', 'asc')->pluck('name'); $projectPhases = ProjectPhase::orderBy('order', 'asc')->pluck('name');
$projectTypes = ProjectType::orderBy('id', 'asc')->pluck('name'); $projectTypes = ProjectType::orderBy('id', 'asc')->pluck('name');
try { try {
@ -288,7 +297,7 @@ class ProjectController extends Controller
} }
try { try {
$projectsByType = DB::table('m_proyek') $projectsByType = DB::table('m_proyek')
->select('m_type_proyek.name', DB::raw('count(*) as total')) ->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') ->join('m_type_proyek', 'm_type_proyek.id', '=', 'm_proyek.type_proyek_id')
->groupBy('m_type_proyek.name') ->groupBy('m_type_proyek.name')
->get(); ->get();
@ -330,6 +339,63 @@ class ProjectController extends Controller
public function getSCurve(Request $request){ public function getSCurve(Request $request){
$data = MasterFunctionsHelper::getSCurve($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);
}
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' => 'Project not found'], 404);
}
public function getLinearSCurve(Request $request){
$data = MasterFunctionsHelper::getLinearSCurve($request);
return response()->json(['status'=>'success','code'=>200, 'data' => $data], 200);
}
public static function setSyncDate($activity_id, $activity, $report) {
$status = AssignMaterial::where('activity_id', $activity_id)->first();
if (!isset($status)) {
$reports = array(
'activity_id' => $activity_id,
'min_date' => new DateTime($activity->start_date),
'max_date' => new DateTime($activity->end_date),
'status' => 'open'
);
return $reports;
}
if (!isset($status->status_activity)) {
$status->status_activity = 'open';
}
if ($status->status_activity != 'done') {
$minDate = date_create($report->report_date);
$maxDate = date_create($report->report_date);
date_add($maxDate, date_interval_create_from_date_string($activity->duration . " days"));
} else {
$material = AssignMaterial::where('activity_id', $activity_id)->first();
$minDate = date_create($material->start_activity);
$maxDate = date_create($material->finish_activity);
}
$reports = array(
'activity_id' => $activity_id,
'min_date' => $minDate,
'max_date' => $maxDate,
'status' => $status->status_activity
);
return $reports;
} }
public function synchronizeReport($gantt_id) public function synchronizeReport($gantt_id)
@ -343,31 +409,40 @@ class ProjectController extends Controller
if ($countReports === 1) { if ($countReports === 1) {
$dataReports = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->get(); $dataReports = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->get();
foreach($dataReports as $dr) { foreach($dataReports as $dr) {
$reports[] = array( $reports[] = ProjectController::setSyncDate($activity_id, $activity, $dr);
'activity_id'=>$activity_id,
'min_date'=>$dr->report_date,
'max_date'=>date_modify(date_create($dr->report_date), "1 days")
);
} }
} }
if ($countReports > 1) { if ($countReports > 1) {
$firstReport = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->first(); $firstReport = ReportActivityMaterial::where('activity_id', $activity_id)->orderBy('report_date')->first();
$lastReport = ReportActivityMaterial::where('activity_id', $activity_id)->orderByDesc('report_date')->first(); $reports[] = ProjectController::setSyncDate($activity_id, $activity, $firstReport);
$reports[] = array( }
'activity_id'=>$activity_id, $successor = Link::where('t_activity_id', $activity->id)->first();
'min_date'=>$firstReport->report_date, if ($successor) {
'max_date'=>date_modify(date_create($lastReport->report_date), "1 days") $predecessor = Activity::find($successor->s_activity_id);
); $activity->start_date = $predecessor->end_date;
$end_date = new DateTime($activity->start_date);
$end_date->modify("+" . $activity->duration . " days");
$activity->end_date = $end_date->format("Y-m-d H:i:sO");
} }
$activity->reports = $reports; $activity->save();
} }
/* return response()->json(['status'=>'success','data'=> $reports,'code'=>200], 200); */ /* return response()->json(['status'=>'success','data'=> $reports,'code'=>200], 200); */
/* return response()->json(['status'=>'success','data'=> $activities,'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']); $activity = Activity::find($reports[$i]['activity_id']);
$activity->start_date = $reports[$i]['min_date']; if($reports[$i]['status'] != 'done'){
$activity->end_date = $reports[$i]['max_date']; $reports[$i]['max_date']->modify('-1 day');
}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
$startDate = new DateTime($activity->start_date);
$endDate = new DateTime($activity->end_date);
$duration = MasterFunctionsHelper::countDays($activity->version_gantt_id, $startDate, $endDate);
$activity->duration = $duration;
$activity->actual_start = $reports[$i]['min_date'];
$activity->save(); $activity->save();
} }
@ -382,6 +457,8 @@ class ProjectController extends Controller
$activity->update([ $activity->update([
"planned_start"=>$activity->start_date, "planned_start"=>$activity->start_date,
"planned_end"=>$activity->end_date, "planned_end"=>$activity->end_date,
"early_start"=>$activity->start_date,
"early_end"=>$activity->end_date,
]); ]);
} }
@ -389,18 +466,38 @@ class ProjectController extends Controller
} }
public function getInvoiceIntegration(Request $request) { public function getInvoiceIntegration(Request $request) {
// $search = urlencode($request->search); $ganttCount = VersionGantt::where('proyek_id', $request->id)->count();
// if(empty($search)) $search = urlencode($request->search);
// return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400); if(empty($search))
// $url = str_replace("SEARCH", $search, config('api.adw').'/project_cost?project_no=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 = null;
$response = MasterFunctionsHelper::curlReq($url);
if (isset($request->gantt_id)) {
$response->data->total_cost = $response->data->total_cost / $ganttCount;
}
return response()->json(['status'=>'success', 'data'=> $response, 'code'=>200], 200); return response()->json(['status'=>'success', 'data'=> $response, 'code'=>200], 200);
} }
public function getByUser($id)
public function detail($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)) if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
@ -408,13 +505,51 @@ class ProjectController extends Controller
if(!$result) if(!$result)
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404);
if (!isset($gantt_id)) {
$gantt = MasterFunctionsHelper::getLatestGantt($id); $gantt = MasterFunctionsHelper::getLatestGantt($id);
$ganttId = $gantt['last_gantt_id'];
} else {
$ganttId = $gantt_id;
}
$result->projectManager = User::where('id', $result->pm_id)->value('name'); $result->projectManager = User::where('id', $result->pm_id)->value('name');
$result->header = Activity::whereNull('parent_id')->where("proyek_id", $id)->where("version_gantt_id", $gantt['last_gantt_id'])->first();
return response()->json(['status'=>'success','code'=> 200,'data'=>$result], 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();
$actualEndExist = Activity::where('proyek_id', $id)->whereNotNull('actual_end')->exists();
$query = Activity::where('proyek_id', $id);
} 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)->whereNotNull('actual_end')->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) {
$endDate = $query->orderByDesc('actual_end')->value('end_date');
} else {
$endDate = $query->orderByDesc('end_date')->value('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);
} }
public function getOverdueActivities(Request $request){ public function getOverdueActivities(Request $request){
$payload = $request->all(); $payload = $request->all();
if(empty($payload['id']) || !is_int((int)$payload['id'])) if(empty($payload['id']) || !is_int((int)$payload['id']))
@ -425,11 +560,23 @@ class ProjectController extends Controller
if(!$result) if(!$result)
return response()->json(['status'=>'failed','message'=> 'Project not found!','code'=> 404], 404); return response()->json(['status'=>'failed','message'=> 'Project not found!','code'=> 404], 404);
//TODO possible overdue bug //TODO possible overdue bug
if(isset($payload['till_date'])) $endDate = Activity::where('proyek_id', $payload['id'])
$overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$payload['till_date'])->orderBy('end_date', 'asc')->get(); ->orderByDesc('end_date')
else ->value('end_date');
$overdueActivities = Activity::where('proyek_id', $payload['id'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get(); 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();
} 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();
}
}
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 {
$overdueActivities = Activity::where('version_gantt_id', $payload['gantt'])->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->orderBy('end_date', 'asc')->get();
}
}
$result->overdueActivities = $overdueActivities; $result->overdueActivities = $overdueActivities;
return response()->json(['status'=>'success','code'=> 200,'data'=>$result], 200); return response()->json(['status'=>'success','code'=> 200,'data'=>$result], 200);
@ -451,14 +598,13 @@ class ProjectController extends Controller
->where('ama.proyek_id', '=', $payload['project_id']) ->where('ama.proyek_id', '=', $payload['project_id'])
->whereNotNull('ram.lat') ->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){
$manPower = UserToProyek::where('proyek_id', $proyek_id)->get(); $manCount = UserToProyek::where('proyek_id', $proyek_id)->count();
$manCount = $manPower->count(); return response()->json(['totalRecord'=>$manCount]);
return response()->json(['data'=>$manPower, 'totalRecord'=>$manCount]);
} }
public function getAssignedHR($gantt_id){ public function getAssignedHR($gantt_id){

136
app/Http/Controllers/ProjectIssuesController.php

@ -0,0 +1,136 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\ProjectIssues;
class ProjectIssuesController extends Controller
{
public function add(Request $request)
{
if ($request->level_issue === "") {
$request->merge(['level_issue' => 0]);
}
$this->validate($request, [
'proyek_id' => 'required',
'description' => 'required|string',
'level_issue' => 'required|integer'
]);
$data = $request->all();
$data['created_by'] = $this->currentName;
$result = ProjectIssues::create($data);
if($result){
return response()->json(['status'=>'success','message'=>'add data project participants successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'add data project participants 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 = ProjectIssues::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data project participants, 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 = ProjectIssues::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'data project participants not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'data project participants successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data project participants failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = ProjectIssues::find($id);
if($data){
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'data project participants not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success','message'=>'data project participants successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data project participants failed deleted!','code'=>400], 400);
}
}
public function deleteByProyek($id)
{
$data = ProjectIssues::where('proyek_id', $id)->delete();
if($data){
return response()->json(['status'=>'success','message'=>'data project participants successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'success','message'=>'data project participants failed deleted, because data not found!','code'=>200], 200);
}
}
public function customWhere($where, $val)
{
$data = ProjectIssues::where($where, $val)->orderBy('id', 'asc')->get();
if($data){
return response()->json(['status'=>'success','data'=> $data,'code'=>200], 200);
}else{
return response()->json(['status'=>'success','message'=>'data project participants not found!','code'=>400], 40);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'project_charter_issue');
$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 = ProjectIssues::all();
$countData = $data->count();
if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get list project participants, please try again later!','code'=>400], 400);
}
}
}

137
app/Http/Controllers/ProjectRisksController.php

@ -0,0 +1,137 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\ProjectRisks;
class ProjectRisksController extends Controller
{
public function add(Request $request)
{
if ($request->level_risk === "") {
$request->merge(['level_risk' => 0]);
}
$this->validate($request, [
'proyek_id' => 'required',
'level_risk' => 'required|integer',
'description' => 'required|string',
'preventive_risk' => 'required|string'
]);
$data = $request->all();
$data['created_by'] = $this->currentName;
$result = ProjectRisks::create($data);
if($result){
return response()->json(['status'=>'success','message'=>'add data project participants successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'add data project participants 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 = ProjectRisks::find($id);
if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data project participants, 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 = ProjectRisks::find($id);
if($data){
$result = $data->update($request->all());
}else{
return response()->json(['status'=>'failed','message'=>'data project participants not found!','code'=>400], 400);
die();
}
if($result){
return response()->json(['status'=>'success','message'=>'data project participants successfully updated!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data project participants failed updated!','code'=>400], 400);
}
}
public function delete($id)
{
$data = ProjectRisks::find($id);
if($data){
$delete = $data->delete();
}else{
return response()->json(['status'=>'failed','message'=>'data project participants not found!','code'=>400], 400);
die();
}
if($delete){
return response()->json(['status'=>'success','message'=>'data project participants successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'data project participants failed deleted!','code'=>400], 400);
}
}
public function deleteByProyek($id)
{
$data = ProjectRisks::where('proyek_id', $id)->delete();
if($data){
return response()->json(['status'=>'success','message'=>'data project participants successfully deleted!','code'=>200], 200);
}else{
return response()->json(['status'=>'success','message'=>'data project participants failed deleted, because data not found!','code'=>200], 200);
}
}
public function customWhere($where, $val)
{
$data = ProjectRisks::where($where, $val)->orderBy('id', 'asc')->get();
if($data){
return response()->json(['status'=>'success','data'=> $data,'code'=>200], 200);
}else{
return response()->json(['status'=>'success','message'=>'data project participants not found!','code'=>400], 40);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'project_charter_risk');
$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 = ProjectRisks::all();
$countData = $data->count();
if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get list project participants, please try again later!','code'=>400], 400);
}
}
}

327
app/Http/Controllers/ReportActivityMaterialController.php

@ -1,140 +1,187 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use App\Helpers\MasterFunctionsHelper;
use App\Models\ReportActivityMaterial; use Illuminate\Http\Request;
use App\Models\Activity; use App\Models\ReportActivityMaterial;
use App\Models\AssignMaterial; use App\Models\Activity;
use Datatables; use App\Models\AssignMaterial;
use Datatables;
class ReportActivityMaterialController extends Controller use DateTime;
{
private function sanitizeDecimal($number) { class ReportActivityMaterialController extends Controller
$number = str_replace(".","",$number); {
$number = str_replace(",",".",$number); private function sanitizeDecimal($number) {
return $number; $number = str_replace(".","",$number);
} $number = str_replace(",",".",$number);
return $number;
}
public function add(Request $request){
$this->validate($request, [
'activity_id' => 'required', public function add(Request $request){
'qty' => 'required' $this->validate($request, [
]); 'activity_id' => 'required',
'qty' => 'required'
$activity = Activity::where('id', $request->activity_id)->first(); ]);
$start_date = $activity->start_date; $activity = Activity::where('id', $request->activity_id)->first();
$start_date = substr($start_date, 0, 19); // remove the timezone offset
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); $start_date = $activity->start_date;
$reportDate = new \DateTime(date("Y-m-d", strtotime($request->report_date))); $start_date = substr($start_date, 0, 19); // remove the timezone offset
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date)));
$data = $request->all(); $reportDate = new \DateTime(date("Y-m-d", strtotime($request->report_date)));
$data['created_by'] = $this->currentName;
/* $data['assign_material_id'] = AssignMaterial::where('activity_id', $request->activity_id)->pluck('id')->first(); */ $data = $request->all();
$data['assign_material_id'] = $request->assign_material_id; $data['created_by'] = $this->currentName;
$data['qty'] = $this->sanitizeDecimal($data['qty']); /* $data['assign_material_id'] = AssignMaterial::where('activity_id', $request->activity_id)->pluck('id')->first(); */
if($reportDate > $startDate){ $data['assign_material_id'] = $request->assign_material_id;
$created = ReportActivityMaterial::create($data); $data['qty'] = $this->sanitizeDecimal($data['qty']);
return response()->json(['status'=>'success','message'=>'Input progress report activity created','code'=>200,'data'=>array('report_id'=>$created->id)]); if($reportDate >= $startDate || isset($data['force']) && $data['force'] == "true"){
} else { $created = ReportActivityMaterial::create($data);
return response()->json(['status'=>'failed','message'=>'Input progress report activity failed created','code'=>400,'data'=>null], 400); return response()->json(['status'=>'success','message'=>'Input progress report activity created','code'=>200,'data'=>array('report_id'=>$created->id)]);
} } else {
} return response()->json(['status'=>'failed','message'=>'Report date is before early start, still wanna add data ?','code'=>400,'data'=>$data], 400);
}
public function updateStatusStartFinish(Request $request){ }
$payloadUpdate = array( public function updateStatusStartFinish(Request $request){
'start_activity' => $request->start_activity,
'finish_activity' => $request->finish_activity, $payloadUpdate = array(
'status_activity' => $request->status_activity 'start_activity' => $request->start_activity,
); 'finish_activity' => $request->finish_activity,
$updateData = AssignMaterial::where('activity_id',$request->activity_id) 'status_activity' => $request->status_activity
->update($payloadUpdate); );
if($updateData){ $updateData = AssignMaterial::where('activity_id',$request->activity_id)
if($request->status_activity == 'done'){ ->update($payloadUpdate);
$dataUpdate = array( if($updateData){
"persentase_progress" => 100, if($request->status_activity == 'done'){
"updated_by" => $this->currentName $dataUpdate = array(
); "persentase_progress" => 100,
Activity::where('id', $request->activity_id)->update($dataUpdate); "updated_by" => $this->currentName
} );
Activity::where('id', $request->activity_id)->update($dataUpdate);
return response()->json(['status'=>'success','message'=>'Update data status successfully ', 'code'=>200]); } else {
} $sumAssignMaterial = AssignMaterial::where('activity_id', $request->activity_id)->sum('qty_planning');
else{ $sumReportActivityMaterial = ReportActivityMaterial::where('activity_id', $request->activity_id)->sum('qty');
return response()->json(['status'=>'failed','message'=>'Update data status failed', 'code'=>400]); $dataUpdate = array(
} "actual_start" => null,
} "actual_end" => null,
"persentase_progress" => $sumReportActivityMaterial/$sumAssignMaterial*100,
public function delete($id) "updated_by" => $this->currentName
{ );
if(!ReportActivityMaterial::findOrFail($id)->delete()) if ($sumReportActivityMaterial > 0) {
return response()->json(['status'=>'failed','message'=>'Failed to deleted the data!','code'=> 500], 500); $data = [];
$reportActivityMaterial = ReportActivityMaterial::where('activity_id', $request->activity_id)->get();
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=>200], 200); foreach ($reportActivityMaterial as $value) {
} $data[] = $value;
}
public function search(Request $request) $actualStartValues = array_column(array_filter($data, function($item) {
{ return isset($item['report_date']);
$payload = $request->all(); }), 'report_date');
$dataBuilder = $this->setUpPayload($payload, 'report_activity_material'); $dataUpdate["actual_start"] = min($actualStartValues);
$builder = $dataBuilder['builder']; }
$countBuilder = $dataBuilder['count']; Activity::where('id', $request->activity_id)->update($dataUpdate);
$dataGet = $builder->get(); }
$totalRecord = $countBuilder->count();
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); return response()->json(['status'=>'success','message'=>'Update data status successfully ', 'code'=>200]);
} }
else{
public function list() return response()->json(['status'=>'failed','message'=>'Update data status failed', 'code'=>400]);
{ }
$data = ReportActivityMaterial::all(); }
$countData = $data->count();
public function delete($id)
if($data){ {
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); if(!ReportActivityMaterial::findOrFail($id)->delete())
}else{ return response()->json(['status'=>'failed','message'=>'Failed to deleted the data!','code'=> 500], 500);
return response()->json(['status'=>'failed','message'=>'failed get Repport Activity material, please try again later!','code'=>400], 400);
} return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=>200], 200);
} }
public function datatables(Request $request){ public function search(Request $request)
$id_activity = $request->query('idAct'); {
$type = $request->query('type'); $payload = $request->all();
$materialName = $request->query('materialName'); $dataBuilder = $this->setUpPayload($payload, 'report_activity_material');
if($type == 'plan'){ $builder = $dataBuilder['builder'];
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") $countBuilder = $dataBuilder['count'];
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") $dataGet = $builder->get();
->where('assign_material_to_activity.activity_id', $id_activity) $totalRecord = $countBuilder->count();
->where('m.description', $materialName) return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
->orderBy('assign_material_to_activity.id', 'asc') }
->get();
return Datatables::of($data) public function list()
->addIndexColumn() {
->addColumn('action', function($row){ $data = ReportActivityMaterial::all();
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="info btn btn-info btn-sm btn-ram-image" data-toggle="tooltip" title="Lihat Foto Report" data-placement="top"><i class="fa fa-image"></i></a>'; $countData = $data->count();
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-ram-delete" data-toggle="tooltip" title="Hapus Report" data-placement="top"><i class="fa fa-trash"></i></a>';
return $actionBtn; if($data){
}) return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
->rawColumns(['action'])->make(true); }else{
}else{ return response()->json(['status'=>'failed','message'=>'failed get Repport Activity material, please try again later!','code'=>400], 400);
$data = ReportActivityMaterial::select("report_activity_material.*", "u.name as human_resource") }
->join("assign_material_to_activity as amta", "amta.id", "=", "report_activity_material.assign_material_id") }
->join("m_req_material as m", "m.id", "=", "amta.material_id")
->join("m_users as u", "u.id", "=", "report_activity_material.user_id") public function datatables(Request $request){
->where('report_activity_material.activity_id', $id_activity) $id_activity = $request->query('idAct');
->where('m.description', $materialName) $type = $request->query('type');
->orderBy('report_activity_material.report_date', 'asc') $materialName = $request->query('materialName');
->get(); if($type == 'plan'){
return Datatables::of($data) $activity = Activity::findOrFail($id_activity);
->addIndexColumn() $baselineDuration = 0;
->addColumn('action', function($row){ if (isset($activity->planned_start) && isset($activity->planned_end)) {
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="info btn btn-info btn-sm btn-ram-image" data-toggle="tooltip" title="Lihat Foto Report" data-placement="top"><i class="fa fa-image"></i></a>'; $baselineDuration = MasterFunctionsHelper::countDays($activity->version_gantt_id, new DateTime($activity->planned_start), new DateTime($activity->planned_end));
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-ram-delete" data-toggle="tooltip" title="Hapus Report" data-placement="top"><i class="fa fa-trash"></i></a>'; }
return $actionBtn; $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")
->rawColumns(['action'])->make(true); ->where('assign_material_to_activity.activity_id', $id_activity)
} ->where('m.description', $materialName)
} ->orderBy('assign_material_to_activity.id', 'asc')
} ->get();
if ($baselineDuration > 0) {
foreach ($data as $key => $value) {
$data[$key]->qty_planning = number_format($value->qty_planning / $baselineDuration, 1);
}
}
return Datatables::of($data)
->addIndexColumn()
->addColumn('action', function($row){
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="info btn btn-info btn-sm btn-ram-image" data-toggle="tooltip" title="Lihat Foto Report" data-placement="top"><i class="fa fa-image"></i></a>';
if ($row->status_activity != 'done') {
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-ram-delete" data-toggle="tooltip" title="Hapus Report" data-placement="top"><i class="fa fa-trash"></i></a>';
}
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}else{
$activity = Activity::findOrFail($id_activity);
$baselineDuration = 0;
if (isset($activity->planned_start) && isset($activity->planned_end)) {
$baselineDuration = MasterFunctionsHelper::countDays($activity->version_gantt_id, new DateTime($activity->planned_start), new DateTime($activity->planned_end));
}
$data = ReportActivityMaterial::select("report_activity_material.*", "u.name as human_resource", "amta.status_activity", "amta.qty_planning")
->join("assign_material_to_activity as amta", "amta.id", "=", "report_activity_material.assign_material_id")
->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)
->orderBy('report_activity_material.report_date', 'asc')
->get();
if ($baselineDuration > 0) {
foreach ($data as $key => $value) {
$data[$key]->qty_planning = number_format($value->qty_planning / $baselineDuration, 1);
}
}
return Datatables::of($data)
->addIndexColumn()
->addColumn('action', function($row){
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="info btn btn-info btn-sm btn-ram-image" data-toggle="tooltip" title="Lihat Foto Report" data-placement="top"><i class="fa fa-image"></i></a>';
if ($row->status_activity != 'done') {
$actionBtn .= '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-ram-delete" data-toggle="tooltip" title="Hapus Report" data-placement="top"><i class="fa fa-trash"></i></a>';
}
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
}
}

2
app/Http/Controllers/RequestMaterialController.php

@ -170,7 +170,7 @@ class RequestMaterialController extends Controller
} }
public function getMaterialIntegration(Request $request) { public function getMaterialIntegration(Request $request) {
$search = null; $search = urlencode($request->name);
if(empty($search)) if(empty($search))
return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400); return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400);
$url = str_replace("SEARCH", $search, config('api.adw').'/stock_master?name=SEARCH'); $url = str_replace("SEARCH", $search, config('api.adw').'/stock_master?name=SEARCH');

210
app/Http/Controllers/RoleController.php

@ -1,101 +1,109 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Role; use App\Models\Role;
class RoleController extends Controller class RoleController extends Controller
{ {
public function add(Request $request) public function add(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'name' => 'required', 'name' => 'string|required|unique:m_roles,name',
'description' => 'required' 'description' => 'required'
]); ]);
$data = $request->all(); $data = $request->all();
$data['created_by'] = $this->currentName; $data['created_by'] = $this->currentName;
if (!isset($data['default_page'])) {
$result = Role::create($data); $data['default_page'] = 29; // dashboard
}
if(!$result)
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=>500], 500); $result = Role::create($data);
return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); if(!$result)
} return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=>500], 500);
public function edit( $id){ return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200);
if(empty($id) || !is_int((int)$id)) }
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
public function edit( $id){
$result = Role::find($id); if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
if(!$result)
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); $result = Role::find($id);
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); if(!$result)
} return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404);
public function update(Request $request, $id) return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
{ }
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)
{
$data = Role::find($id); if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
if(!$data)
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); $this->validate($request, [
'name' => 'string|required',
$result = $data->update($request->all()); 'description' => 'required'
]);
if(!$result) $data = Role::find($id);
return response()->json(['status'=>'failed','message'=>'Failed to update the data!','code'=>500], 500); $request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_roles,name']) : '';
return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); if(!$data)
} return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404);
public function delete($id) $result = $data->update($request->all());
{
if(empty($id) || !is_int((int)$id)) if(!$result)
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'Failed to update the data!','code'=>500], 500);
$data = Role::find($id); return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200);
}
if(!$data)
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); public function delete($id)
{
$delete = $data->delete(); if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
if(!$delete)
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=>500], 500); $data = Role::find($id);
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); if(!$data)
} return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404);
public function search(Request $request) $delete = $data->delete();
{
$payload = $request->all(); if(!$delete)
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=>500], 500);
$dataBuilder = $this->setUpPayload($payload, 'm_roles');
$builder = $dataBuilder['builder']; return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200);
$countBuilder = $dataBuilder['count']; }
$dataGet = $builder->get();
$totalRecord = $countBuilder->count(); public function search(Request $request)
{
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); $payload = $request->all();
}
$dataBuilder = $this->setUpPayload($payload, 'm_roles');
public function list() $builder = $dataBuilder['builder'];
{ $countBuilder = $dataBuilder['count'];
$data = Role::all(); $dataGet = $builder->get();
$countData = $data->count(); $totalRecord = $countBuilder->count();
if(!$data) return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); }
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); public function list()
} {
} $data = Role::all();
$countData = $data->count();
if(!$data)
return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400);
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}
}

204
app/Http/Controllers/RoleMenuController.php

@ -1,102 +1,102 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Menu; use App\Models\Menu;
use App\Models\RoleMenu; use App\Models\RoleMenu;
class RoleMenuController extends Controller class RoleMenuController extends Controller
{ {
public function add(Request $request) public function add(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'role_id' => 'required', 'role_id' => 'required',
'menu_id' => 'required', 'menu_id' => 'required',
]); ]);
$data = $request->all(); $data = $request->all();
$data['created_by'] = $this->currentName; $data['created_by'] = $this->currentName;
$result = RoleMenu::create($data); $result = RoleMenu::create($data);
if($result){ if($result){
return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'add data role menu failed!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'add data role menu failed!','code'=>400], 400);
} }
} }
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
if(!$id || (int) $id < 0 || $id==""){ if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
} }
$data = RoleMenu::find($id); $data = RoleMenu::find($id);
if($data){ if($data){
$result = $data->update($request->all()); $result = $data->update($request->all());
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400);
die(); die();
} }
if($result){ if($result){
return response()->json(['status'=>'success','message'=>'data role menu successfully updated!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'data role menu successfully updated!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data role menu failed updated!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data role menu failed updated!','code'=>400], 400);
} }
} }
public function delete($id) public function delete($id)
{ {
$data = RoleMenu::find($id); $data = RoleMenu::find($id);
if($data){ if($data){
$delete = $data->delete(); $delete = $data->delete();
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400);
die(); die();
} }
if($delete){ if($delete){
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400);
} }
} }
public function deleteByRole($id) public function deleteByRole($id)
{ {
$data = RoleMenu::where("role_id", $id); $data = RoleMenu::where("role_id", $id);
if($data){ if($data){
$delete = $data->delete(); $delete = $data->delete();
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400);
die(); die();
} }
if($delete){ if($delete){
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400);
} }
} }
public function search(Request $request) public function search(Request $request)
{ {
$payload = $request->all(); $payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 't_roles_menu'); $dataBuilder = $this->setUpPayload($payload, 't_roles_menu');
$builder = $dataBuilder['builder']; $builder = $dataBuilder['builder'];
$countBuilder = $dataBuilder['count']; $countBuilder = $dataBuilder['count'];
$dataGet = $builder->get(); $dataGet = $builder->get();
$totalRecord = $countBuilder->count(); $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);
} }
} }

6
app/Http/Controllers/ShowHideColumnController.php

@ -45,12 +45,12 @@ class ShowHideColumnController extends Controller
$success = 0; $success = 0;
foreach ($columns as $column) { foreach ($columns as $key => $column) {
$dataAdd = array( $dataAdd = array(
'version_gantt_id'=>$request->version_gantt_id, 'version_gantt_id'=>$request->version_gantt_id,
'user_id'=>$this->currentId, 'user_id'=>$this->currentId,
'column_name'=>$column, 'column_name'=>$key,
'show'=>true, 'show'=>$column,
'created_by'=>$this->currentName 'created_by'=>$this->currentName
); );

432
app/Http/Controllers/UserToActivityController.php

@ -1,198 +1,234 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\UserToActivity; use App\Models\UserToActivity;
use App\Models\Activity; use App\Models\Activity;
use Datatables; use App\Models\AssignMaterial;
use Datatables;
class UserToActivityController extends Controller
{ class UserToActivityController extends Controller
public function add(Request $request){ {
$this->validate($request, [ public function add(Request $request){
'activity_id' => 'required', $this->validate($request, [
'user_id' => 'required' 'activity_id' => 'required',
]); 'user_id' => 'required'
]);
$data = $request->all();
$data['created_by'] = $this->currentName; $data = $request->all();
$data['created_by'] = $this->currentName;
if(!UserToActivity::create($data))
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]); if(!UserToActivity::create($data))
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]);
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=> 200]);
} return response()->json(['status'=>'success','message'=>'Data added!', 'code'=> 200]);
}
public function addMultiple(Request $request){
$users_id = $request->user_id; public function addMultiple(Request $request){
$users_role = $request->role_proyek_id; $users_id = $request->user_id;
$users_role = $request->role_proyek_id;
// $data = UserToActivity::where("activity_id", $request->activity_id);
// if($data){ // $data = UserToActivity::where("activity_id", $request->activity_id);
// $data->delete(); // if($data){
// } // $data->delete();
// }
if(is_array($users_id) && count($users_id) > 0){
$countRes = 0; if(is_array($users_id) && count($users_id) > 0){
foreach($users_id as $index => $item){ $countRes = 0;
$dataInsert = array( foreach($users_id as $index => $item){
"user_id" => $item, $dataInsert = array(
"activity_id" => $request->activity_id, "user_id" => $item,
"role_proyek_id" => $users_role[$index], "activity_id" => $request->activity_id,
"proyek_id" => $request->proyek_id, "role_proyek_id" => $users_role[$index],
"created_by" => $this->currentName "proyek_id" => $request->proyek_id,
); "start_date" => $request->start_date,
$result = UserToActivity::create($dataInsert); "end_date" => $request->end_date,
if($result){ "created_by" => $this->currentName,
$countRes++; "version_gantt_id" => $request->version_gantt_id
}else{ );
$countRes--; $result = UserToActivity::create($dataInsert);
} if($result){
} $countRes++;
}else{
if($countRes == 0) $countRes--;
return response()->json(['status'=>'failed' ,'message'=>'Failed to add data!','code'=> 500]); }
}
$allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id);
$dataUpdateCost = array( if($countRes == 0)
"rencana_biaya"=>$allCost, return response()->json(['status'=>'failed' ,'message'=>'Failed to add data!','code'=> 500]);
"updated_by"=> $this->currentName
); $allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id);
$actUpdate = Activity::find($request->activity_id); $dataUpdateCost = array(
if($actUpdate){ "rencana_biaya"=>$allCost,
$actUpdate->update($dataUpdateCost); "updated_by"=> $this->currentName
if($actUpdate->parent_id){ );
$this->updatedCostPlanning($actUpdate->parent_id); $actUpdate = Activity::find($request->activity_id);
} if($actUpdate){
} $actUpdate->update($dataUpdateCost);
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); if($actUpdate->parent_id){
}else{ $this->updatedCostPlanning($actUpdate->parent_id);
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); }
} }
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]);
} }else{
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]);
private function updatedCostPlanning($parent_id) { }
$sumBiaya = Activity::selectRaw('sum(cast(rencana_biaya as double precision))')
->where("parent_id", $parent_id) }
->first();
if($parent = Activity::find($parent_id)){ private function updatedCostPlanning($parent_id) {
$parent->update([ $sumBiaya = Activity::selectRaw('sum(cast(rencana_biaya as double precision))')
"rencana_biaya" => $sumBiaya->sum, ->where("parent_id", $parent_id)
]); ->first();
} if($parent = Activity::find($parent_id)){
} $parent->update([
"rencana_biaya" => $sumBiaya->sum,
public function update(Request $request, $id){ ]);
if(empty($id) || !is_int((int)$id)) }
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); }
$data = UserToActivity::find($id); public function update(Request $request, $id){
if(!$data) if(empty($id) || !is_int((int)$id))
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
if(!$data->update($request->all())); $data = UserToActivity::find($id);
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); if(!$data)
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404);
return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200);
} if(!$data->update($request->all()));
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500);
public function delete($id)
{ return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200);
$data = UserToActivity::find($id); }
if(!$data)
return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400); public function delete($id)
{
if($data->delete()){ $data = UserToActivity::find($id);
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); if(!$data)
} return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400);
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); if($data->delete()){
} return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200);
}
public function edit($id){
if(!$id || (int) $id < 0 || $id==""){ return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500);
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); }
die();
} public function edit($id){
if(!$id || (int) $id < 0 || $id==""){
$result = UserToActivity::find($id); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die();
if(!$result) }
return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400);
$result = UserToActivity::find($id);
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
} if(!$result)
return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400);
public function search(Request $request)
{ return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
$payload = $request->all(); }
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity');
$builder = $dataBuilder['builder']; public function search(Request $request)
$countBuilder = $dataBuilder['count']; {
$dataGet = $builder->get(); $payload = $request->all();
$totalRecord = $countBuilder->count(); if (isset($payload['join_column'])) {
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); $join_column = $payload['join_column'];
} unset($payload['join_column']);
}
public function list()
{ $dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity');
$data = UserToActivity::all(); $builder = $dataBuilder['builder'];
$countData = $data->count(); $countBuilder = $dataBuilder['count'];
if (isset($join_column)) {
if($data){ $startDate = $join_column['start_date'];
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); $endDate = $join_column['end_date'];
}else{ $status = $join_column['status'];
return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400); $startDate = date("Y-m-d H:i:sO", strtotime($startDate));
} $endDate = date("Y-m-d H:i:sO", strtotime($endDate));
} $builder->where(function ($query) use ($startDate, $endDate) {
$query
public function listFiltered(Request $request) ->where('m_proyek.mulai_proyek', '>=', $startDate)
{ ->where('m_proyek.akhir_proyek', '<=', $endDate)
$startDate = $request->start_date; ->where(function ($query) use ($endDate, $startDate) {
$endDate = $request->end_date; $query
$userId = $request->user_id; ->where('m_activity.start_date', '>=', $startDate)
$proyekId = $request->proyek_id; ->where('m_activity.end_date', '<=', $endDate);
});
if (isset($proyekId)) { });
$data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date') }
->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id') $dataGet = $builder->get();
->where('m_activity.start_date', '=', $startDate) if (isset($status) && $status != "") {
->where('m_activity.end_date', '=', $endDate) $filteredData = [];
->where('assign_hr_to_activity.user_id', '=', $userId) foreach ($dataGet as $value) {
->where('assign_hr_to_activity.proyek_id', '=', $proyekId) $assignMaterial = AssignMaterial::where('activity_id', $value->activity_id)->first();
->get(); if ($assignMaterial->status_activity == $status) {
}else { $filteredData[] = $value;
$data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date') }
->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id') }
->where('m_activity.start_date', '=', $startDate) $dataGet = $filteredData;
->where('m_activity.end_date', '=', $endDate) }
->where('assign_hr_to_activity.user_id', '=', $userId) $totalRecord = $countBuilder->count();
->get(); return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
} }
$countData = $data->count();
public function list()
if($data){ {
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); $data = UserToActivity::all();
}else{ $countData = $data->count();
return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400);
} if($data){
} return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}else{
public function datatables(Request $request){ return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400);
$id_activity = $request->query('idact'); }
$data = UserToActivity::select("assign_hr_to_activity.id as id", "u.name as user_name", "mrp.name as role_name") }
->join("m_role_proyek as mrp", "mrp.id", "=", "assign_hr_to_activity.role_proyek_id")
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") public function listFiltered(Request $request)
->where('assign_hr_to_activity.activity_id', $id_activity) {
->get(); $startDate = $request->start_date;
return Datatables::of($data) $endDate = $request->end_date;
->addIndexColumn() $userId = $request->user_id;
->addColumn('action', function($row){ $proyekId = $request->proyek_id;
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-hr-delete"><i class="fa fa-trash"></i></a>';
return $actionBtn; if (isset($proyekId)) {
}) $data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date')
->rawColumns(['action'])->make(true); ->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id')
} ->where('m_activity.start_date', '=', $startDate)
} ->where('m_activity.end_date', '=', $endDate)
->where('assign_hr_to_activity.user_id', '=', $userId)
->where('assign_hr_to_activity.proyek_id', '=', $proyekId)
->get();
}else {
$data = UserToActivity::select('assign_hr_to_activity.id', 'assign_hr_to_activity.activity_id', 'm_activity.name', 'm_activity.kode_sortname', 'm_activity.start_date', 'm_activity.end_date')
->join('m_activity', 'assign_hr_to_activity.activity_id', '=', 'm_activity.id')
->where('m_activity.start_date', '=', $startDate)
->where('m_activity.end_date', '=', $endDate)
->where('assign_hr_to_activity.user_id', '=', $userId)
->get();
}
$countData = $data->count();
if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400);
}
}
public function datatables(Request $request){
$id_activity = $request->query('idact');
$data = UserToActivity::select("assign_hr_to_activity.id as id", "assign_hr_to_activity.start_date", "assign_hr_to_activity.end_date", "u.name as user_name", "mrp.name as role_name")
->join("m_role_proyek as mrp", "mrp.id", "=", "assign_hr_to_activity.role_proyek_id")
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id")
->where('assign_hr_to_activity.activity_id', $id_activity)
->get();
return Datatables::of($data)
->addIndexColumn()
->addColumn('action', function($row){
$actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-hr-delete"><i class="fa fa-trash"></i></a>';
return $actionBtn;
})
->rawColumns(['action'])->make(true);
}
}

470
app/Http/Controllers/UserToProyekController.php

@ -1,214 +1,256 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\UserToProyek; use App\Models\UserToProyek;
use App\Models\UserToActivity; use App\Models\UserToActivity;
use App\Models\ReportActivity; use App\Models\ReportActivity;
use App\Models\Image; use App\Models\Image;
class UserToProyekController extends Controller class UserToProyekController extends Controller
{ {
public function add(Request $request) public function add(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'user_id' => 'required', 'user_id' => 'required',
'proyek_id' => 'required' 'proyek_id' => 'required'
]); ]);
$data = $request->all(); $data = $request->all();
$data['created_by'] = $this->currentName; $data['created_by'] = $this->currentName;
$result = UserToProyek::create($data); $result = UserToProyek::create($data);
if($result){ if($result){
return response()->json(['status'=>'success','message'=>'assign hr to proyek successfully!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'assign hr to proyek successfully!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'assign hr to proyek failed!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'assign hr to proyek failed!','code'=>400], 400);
} }
} }
public function edit($id){ public function addMultiple(Request $request){
if(!$id || (int) $id < 0 || $id==""){ $user_IDs = $request->user_id;
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die(); $data = UserToProyek::where([
} ["proyek_id" , $request->proyek_id],
['is_customer',true]
$result = UserToProyek::find($id); ]);
if($result){ if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); $data->delete();
}else{ }
return response()->json(['status'=>'failed','message'=>'failed get data assign hr to proyek, please try again later!','code'=>400], 400);
} if(is_array($user_IDs) && count($user_IDs) > 0){
} $countRes = 0;
foreach($user_IDs as $item){
public function update(Request $request, $id)
{ $dataInsert = array(
if(!$id || (int) $id < 0 || $id==""){ "user_id" => $item,
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); "proyek_id" => $request->proyek_id,
} "created_by" => $this->currentName,
'is_customer'=>true
$data = UserToProyek::find($id); );
if($data){ $result = UserToProyek::create($dataInsert);
$result = $data->update($request->all());
}else{ if($result){
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400); $countRes++;
die(); }else{
} $countRes--;
}
}
if($result){ if($countRes > 0){
return response()->json(['status'=>'success','message'=>'data assign hr to proyek successfully updated!','code'=>200], 200); return response()->json(['status'=>'success' ,'message'=>'Project customer successfull created','code'=>200]);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek failed updated!','code'=>400], 400); return response()->json(['status'=>'success' ,'message'=>'Project customer failed created','code'=>400]);
} }
} }else{
return response()->json(['status'=>'success' ,'message'=>'Project customer successfull created','code'=>200]);
public function delete($id) }
{
$data = UserToProyek::find($id); }
if($data){
$userId = $data->user_id; public function edit($id){
$proyekId = $data->proyek_id; if(!$id || (int) $id < 0 || $id==""){
$delete = $data->delete(); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
if($delete){ die();
$this->deleteRelative($proyekId, $userId); }
}
}else{ $result = UserToProyek::find($id);
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400);
die(); if($result){
} return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{
return response()->json(['status'=>'failed','message'=>'failed get data assign hr to proyek, please try again later!','code'=>400], 400);
if($delete){ }
return response()->json(['status'=>'success','message'=>'data assign hr to proyek successfully deleted!','code'=>200], 200); }
}else{
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek failed deleted!','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);
private function deleteRelative($proyekId, $userId) }
{
$uta = UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->get(); $data = UserToProyek::find($id);
foreach ($uta as $value) {
$dataRa = ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->get(); if($data){
foreach ($dataRa as $ra) { $result = $data->update($request->all());
$images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get(); }else{
foreach ($images as $image) { return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400);
if(file_exists($this->pathImage.$image->image)){ die();
unlink($this->pathImage.$image->image); }
}
}
Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete(); if($result){
} return response()->json(['status'=>'success','message'=>'data assign hr to proyek successfully updated!','code'=>200], 200);
ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->delete(); }else{
} return response()->json(['status'=>'failed','message'=>'data assign hr to proyek failed updated!','code'=>400], 400);
UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->delete(); }
} }
public function search(Request $request) public function delete($id)
{ {
$payload = $request->all(); $data = UserToProyek::find($id);
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_proyek'); if($data){
$builder = $dataBuilder['builder']; $userId = $data->user_id;
$countBuilder = $dataBuilder['count']; $proyekId = $data->proyek_id;
$dataGet = $builder->get(); $delete = $data->delete();
$totalRecord = $countBuilder->count(); if($delete){
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); $this->deleteRelative($proyekId, $userId);
} }
}else{
public function list() return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400);
{ die();
$data = UserToProyek::all(); }
$countData = $data->count();
if($data){ if($delete){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); return response()->json(['status'=>'success','message'=>'data assign hr to proyek successfully deleted!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'failed get list assign hr to proyek, please try again later!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data assign hr to proyek failed deleted!','code'=>400], 400);
} }
} }
public function select(Request $request){ private function deleteRelative($proyekId, $userId)
{
$search = $request->query('search'); $uta = UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->get();
foreach ($uta as $value) {
$idProyek = (int)$request->query('idProyek'); $dataRa = ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->get();
$idActivity = (int)$request->query('idact'); foreach ($dataRa as $ra) {
$images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get();
$include = []; foreach ($images as $image) {
if(file_exists($this->pathImage.$image->image)){
if($idActivity && $idActivity > 0){ unlink($this->pathImage.$image->image);
$dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get(); }
foreach($dataF as $val){ }
$include[] = $val->user_id; Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete();
} }
} ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->delete();
}
if($search && !empty($search)){ UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->delete();
$data = UserToProyek::select("m_users.id as id", "m_users.name as name")->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id') }
->where("assign_hr_to_proyek.proyek_id", $idProyek)->where("m_users.name", 'like', '%'.$search.'%')->whereIn("m_users.id", $include)->get();
}else{ public function search(Request $request)
$data = UserToProyek::select("m_users.id as id", "m_users.name as name")->where("assign_hr_to_proyek.proyek_id", $idProyek)->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id')->whereIn("m_users.id", $include)->get(); {
} $payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_proyek');
if($data instanceof \Illuminate\Database\Eloquent\Collection){ $builder = $dataBuilder['builder'];
$pm = array( $countBuilder = $dataBuilder['count'];
"id"=>$this->currentId, $dataGet = $builder->get();
"name"=> "Project Manager" $totalRecord = $countBuilder->count();
); return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
$data->push($pm); }
}
public function list()
return response()->json($data); {
} $data = UserToProyek::all();
$countData = $data->count();
private function curlReq($url, $token){
$ch = curl_init(); if($data){
$headers = [ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
'Authorization: '.$token }else{
]; return response()->json(['status'=>'failed','message'=>'failed get list assign hr to proyek, please try again later!','code'=>400], 400);
curl_setopt($ch, CURLOPT_URL, $url); }
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); }
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
public function select(Request $request){
$response = curl_exec($ch);
if ($response === false) $search = $request->query('search');
$response = curl_error($ch);
curl_close($ch); $idProyek = (int)$request->query('idProyek');
$idActivity = (int)$request->query('idact');
return json_decode($response);
} $include = [];
public function getEmployeeIntegration(Request $request) { if($idActivity && $idActivity > 0){
$search = null; $dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get();
if(empty($search)) foreach($dataF as $val){
return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400); $include[] = $val->user_id;
$url = str_replace("SEARCH", $search, config('api.adw').'/employees?emp_name=SEARCH'); }
$token = config('api.adw_token'); }
$firstResponse = $this->curlReq($url, $token);
if($search && !empty($search)){
if($firstResponse->total == 0) $data = UserToProyek::select("m_users.id as id", "m_users.name as name")->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id')
return response()->json(['status'=>'error', 'message' => 'Data not found!', 'code'=>404], 404); ->where("assign_hr_to_proyek.proyek_id", $idProyek)->where("m_users.name", 'like', '%'.$search.'%')->whereIn("m_users.id", $include)->get();
}else{
$data = $firstResponse->data; $data = UserToProyek::select("m_users.id as id", "m_users.name as name")->where("assign_hr_to_proyek.proyek_id", $idProyek)->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id')->whereIn("m_users.id", $include)->get();
return response()->json([$data]); }
$currentPage = 1;
if($data instanceof \Illuminate\Database\Eloquent\Collection){
if($firstResponse->last_page > 0) { $pm = array(
do { "id"=>$this->currentId,
$currentPage++; "name"=> "Project Manager"
$response = $this->curlReq($url.'&page='.$currentPage, $token); );
foreach($response->data as $d){ $data->push($pm);
array_push($data, $d); }
}
} while ($currentPage < $firstResponse->last_page); return response()->json($data);
} }
return response()->json(['status'=>'success', 'data'=> $data, 'total' => count($data), 'code'=>200], 200); private function curlReq($url, $token){
} $ch = curl_init();
} $headers = [
'Authorization: '.$token
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if ($response === false)
$response = curl_error($ch);
curl_close($ch);
return json_decode($response);
}
public function getEmployeeIntegration(Request $request) {
$search = urlencode($request->name);
if(empty($search))
return response()->json(['status'=>'error', 'message'=>'Empty query string!'], 400);
$url = str_replace("SEARCH", $search, config('api.adw').'/employees?emp_name=SEARCH');
$token = config('api.adw_token');
$firstResponse = $this->curlReq($url, $token);
if($firstResponse->total == 0)
return response()->json(['status'=>'error', 'message' => 'Data not found!', 'code'=>404], 404);
$data = $firstResponse->data;
return response()->json([$data]);
$currentPage = 1;
if($firstResponse->last_page > 0) {
do {
$currentPage++;
$response = $this->curlReq($url.'&page='.$currentPage, $token);
foreach($response->data as $d){
array_push($data, $d);
}
} while ($currentPage < $firstResponse->last_page);
}
return response()->json(['status'=>'success', 'data'=> $data, 'total' => count($data), 'code'=>200], 200);
}
}

239
app/Http/Controllers/VersionGanttController.php

@ -1,119 +1,120 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\VersionGantt; use App\Models\VersionGantt;
class VersionGanttController extends Controller class VersionGanttController extends Controller
{ {
public function add(Request $request){ public function add(Request $request){
$this->validate($request, [ $this->validate($request, [
'name_version' => 'required', 'name_version' => 'required',
'proyek_id' => 'required' 'proyek_id' => 'required'
]); ]);
$data = $request->all(); $data = $request->all();
$data['created_by'] = $this->currentName; $data['created_by'] = $this->currentName;
$result = VersionGantt::create($data); $result = VersionGantt::create($data);
if($result){ if($result){
return response()->json(['status'=>'success','message'=>'version gantt Project successfull created','code'=>200]); return response()->json(['status'=>'success','message'=>'version gantt Project successfull created','code'=>200]);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'version gantt Project failed created','code'=>400]); return response()->json(['status'=>'failed','message'=>'version gantt Project failed created','code'=>400]);
} }
} }
public function update(Request $request, $id){ public function update(Request $request, $id){
if(!$id || (int) $id < 0 || $id==""){ if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
} }
$data = VersionGantt::find($id); $data = VersionGantt::find($id);
if($data){ if($data){
$result = $data->update($request->all()); $result = $data->update($request->all());
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400);
die(); die();
} }
if($result){ if($result){
return response()->json(['status'=>'success','message'=>'version gantt Project successfully updated!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'version gantt Project successfully updated!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'version gantt Project failed updated!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'version gantt Project failed updated!','code'=>400], 400);
} }
} }
public function delete($id) public function delete($id)
{ {
$data = VersionGantt::find($id); $data = VersionGantt::find($id);
if($data){ if($data){
$delete = $data->delete(); $delete = $data->delete();
}else{ }else{
return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400);
die(); die();
} }
if($delete){ if($delete){
return response()->json(['status'=>'success','message'=>'version gantt Project successfully deleted!','code'=>200], 200); return response()->json(['status'=>'success','message'=>'version gantt Project successfully deleted!','code'=>200], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'version gantt Project failed deleted!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'version gantt Project failed deleted!','code'=>400], 400);
} }
} }
public function edit($id){ public function edit($id){
if(!$id || (int) $id < 0 || $id==""){ if(!$id || (int) $id < 0 || $id==""){
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
die(); die();
} }
$result = VersionGantt::find($id); $result = VersionGantt::find($id);
if($result){ if($result){
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
}else{ }else{
return response()->json(['status'=>'failed','message'=>'failed get data version gantt, please try again later!','code'=>400], 400); return response()->json(['status'=>'failed','message'=>'failed get data version gantt, please try again later!','code'=>400], 400);
} }
} }
public function search(Request $request) public function search(Request $request)
{ {
$payload = $request->all(); $payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'm_version_gantt'); $dataBuilder = $this->setUpPayload($payload, 'm_version_gantt');
$builder = $dataBuilder['builder']; $builder = $dataBuilder['builder'];
// $countBuilder = $dataBuilder['count']; // $countBuilder = $dataBuilder['count'];
$this->ganttProgress($request->columns[0]["name"], $request->columns[0]["value"]); $this->ganttProgress($request->columns[0]["name"], $request->columns[0]["value"]);
$dataGet = $builder->get(); $dataGet = $builder->get();
// $totalRecord = $countBuilder->count(); // $totalRecord = $countBuilder->count();
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet], 200); return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet], 200);
} }
public function ganttProgress($column, $value){ public function ganttProgress($column, $value){
$progress = VersionGantt::select('m_version_gantt.id','m_activity.persentase_progress') $progress = VersionGantt::select('m_version_gantt.id','m_activity.persentase_progress', 'm_activity.bobot_planning')
->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id') ->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id')
->where("m_version_gantt.".$column, $value) ->where("m_version_gantt.".$column, $value)
// ->where('m_activity.type_activity', "project") // ->where('m_activity.type_activity', "project")
->where('m_activity.parent_id', null) ->where('m_activity.parent_id', null)
->get(); ->get();
foreach($progress as $item) { foreach($progress as $item) {
if($item->persentase_progress){ if($item->persentase_progress){
$item->progress = $item->persentase_progress; $item->progress = $item->persentase_progress;
$item->save(); $item->bobot = $item->bobot_planning;
} $item->save();
} }
} }
}
public function list()
{ public function list()
$data = VersionGantt::all(); {
$countData = $data->count(); $data = VersionGantt::all();
$countData = $data->count();
if($data){
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); if($data){
}else{ return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
return response()->json(['status'=>'failed','message'=>'failed get list version gantt, please try again later!','code'=>400], 400); }else{
} return response()->json(['status'=>'failed','message'=>'failed get list version gantt, please try again later!','code'=>400], 400);
} }
} }
}

36
app/Jobs/ProcessSCurve.php

@ -0,0 +1,36 @@
<?php
namespace App\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Queue;
use App\Helpers\MasterFunctionsHelper;
use App\Models\Project;
class ProcessSCurve extends Job
{
protected $project;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Project $project)
{
$this->project = $project;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$data = MasterFunctionsHelper::CalculateSCurve($this->project->id);
$this->project->scurve = json_encode($data);
$this->project->calculation_status = true;
$this->project->save();
}
}

480
app/Models/Activity.php

@ -1,234 +1,246 @@
<?php <?php
namespace App\Models; namespace App\Models;
use App\Models\AssignMaterial; use App\Models\AssignMaterial;
use App\Models\ActivityProgressLog; use App\Models\ActivityProgressLog;
use App\Models\AssignTools; use App\Models\AssignTools;
use App\Models\ReportActivityMaterial; use App\Models\ReportActivityMaterial;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Carbon\Carbon; use Carbon\Carbon;
class Activity extends Model class Activity extends Model
{ {
protected $table = 'm_activity'; protected $table = 'm_activity';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
// persentase bobot gak kepake yg dipakenya bobot_planning // persentase bobot gak kepake yg dipakenya bobot_planning
protected $fillable = [ protected $fillable = [
'proyek_id', 'parent_id', 'kode_sortname', 'name', 'rencana_biaya', 'start_date', 'proyek_id', 'parent_id', 'kode_sortname', 'name', 'rencana_biaya', 'start_date',
'end_date', 'area_kerja', 'biaya_actual', 'persentase_bobot', 'persentase_progress', 'end_date', 'area_kerja', 'biaya_actual', 'persentase_bobot', 'persentase_progress',
'buffer_radius', 'duration', 'color_progress', 'jumlah_pekerjaan', 'satuan', 'buffer_radius', 'duration', 'color_progress', 'jumlah_pekerjaan', 'satuan',
'description', 'priority', 'bobot_planning', 'type_activity', 'open', 'geom', 'description', 'priority', 'bobot_planning', 'type_activity', 'open', 'geom',
'version_gantt_id', 'budget_plan', 'biaya_material_plan', 'biaya_human_plan', 'biaya_tools_plan', 'version_gantt_id', 'budget_plan', 'biaya_material_plan', 'biaya_human_plan', 'biaya_tools_plan',
'planned_start', 'planned_end', 'satuan_id', 'planned_start', 'planned_end', 'satuan_id', 'actual_start', 'actual_end',
'created_at', 'created_by', 'updated_at', 'updated_by', 'sortorder' 'created_at', 'created_by', 'updated_at', 'updated_by', 'sortorder'
]; ];
protected $appends = [ protected $appends = [
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense' 'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense'
]; ];
public function getStartDateAttribute($value) public function getStartDateAttribute($value)
{ {
return Carbon::createFromTimestamp(strtotime($value)) if ($value instanceof \DateTime) {
->timezone(env('APP_TIMEZONE')) return Carbon::instance($value)
->toDateTimeString(); ->timezone(env('APP_TIMEZONE'))
} ->toDateTimeString();
}
public function getEndDateAttribute($value) return Carbon::createFromTimestamp(strtotime($value))
{ ->timezone(env('APP_TIMEZONE'))
return Carbon::createFromTimestamp(strtotime($value)) ->toDateTimeString();
->timezone(env('APP_TIMEZONE')) }
->toDateTimeString();
} public function getEndDateAttribute($value)
{
if ($value instanceof \DateTime) {
public static function boot() { return Carbon::instance($value)
parent::boot(); ->timezone(env('APP_TIMEZONE'))
->toDateTimeString();
static::updating(function($data) { }
$data->logPersentaseProgress(); return Carbon::createFromTimestamp(strtotime($value))
}); ->timezone(env('APP_TIMEZONE'))
->toDateTimeString();
static::updated(function($data) { }
$data->updateBobot();
$data->updateCostPlanning();
if($data->bobot_planning){ public static function boot() {
$data->updatePersentaseProgress(); parent::boot();
$data->updateCostActual();
} static::updating(function($data) {
// if($data->start_date != request()->start_date || $data->end_date != request()->end_date) { $data->logPersentaseProgress();
// $data->updateStartEndDateHeader(); });
// }
}); static::updated(function($data) {
$data->updateBobot();
static::deleted(function($data) { $data->updateCostPlanning();
if(Activity::where("parent_id", $data->parent_id)->count() == 0) if($data->bobot_planning){
Activity::find($data->parent_id)->update(["type_activity"=>"task"]); $data->updatePersentaseProgress();
}
$data->updateBobot(true); $data->updateCostActual();
$data->updateCostPlanning(); // if($data->start_date != request()->start_date || $data->end_date != request()->end_date) {
if($data->bobot_planning){ // $data->updateStartEndDateHeader();
$data->updatePersentaseProgress(); // }
$data->updateCostActual(); });
}
$data->updateStartEndDateHeader(); static::deleted(function($data) {
}); if(Activity::where("parent_id", $data->parent_id)->count() == 0)
Activity::find($data->parent_id)->update(["type_activity"=>"task"]);
}
$data->updateBobot(true);
private function updateBobot($isDelete = false) $data->updateCostPlanning();
{ if($data->bobot_planning){
$root = Activity::where('version_gantt_id', $this->version_gantt_id) $data->updatePersentaseProgress();
->where("proyek_id", $this->proyek_id) }
->whereNull('parent_id') $data->updateCostActual();
->first(); $data->updateStartEndDateHeader();
});
if($root->rencana_biaya > 0){
$activities = Activity::where("proyek_id", $this->proyek_id)->where("version_gantt_id", $this->version_gantt_id)->get(); }
foreach ($activities as $activity) {
if($isDelete && $activity->id == $this->id) private function updateBobot($isDelete = false)
continue; {
$root = Activity::where('version_gantt_id', $this->version_gantt_id)
$activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100; ->where("proyek_id", $this->proyek_id)
$activity->updated_by = auth()->user() ? auth()->user()->name : "system"; ->whereNull('parent_id')
$activity->saveQuietly(); ->first();
} if($root->rencana_biaya > 0){
} else { $activities = Activity::where("proyek_id", $this->proyek_id)->where("version_gantt_id", $this->version_gantt_id)->get();
if($parent = Activity::find($this->parent_id)){ foreach ($activities as $activity) {
$totalChildWeight = Activity::where("parent_id", $this->parent_id)->sum('bobot_planning'); if($isDelete && $activity->id == $this->id)
$parent->update([ continue;
"bobot_planning" => $totalChildWeight
]); $activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100;
} $activity->updated_by = auth()->user() ? auth()->user()->name : "system";
} $activity->saveQuietly();
}
}
private function updateCostActual() } else {
{ if($parent = Activity::find($this->parent_id)){
$actualCost = Activity::where("parent_id", $this->parent_id)->sum("biaya_actual"); $totalChildWeight = Activity::where("parent_id", $this->parent_id)->sum('bobot_planning');
$this->biaya_actual = $actualCost; $parent->update([
if($parent = Activity::find($this->parent_id)){ "bobot_planning" => $totalChildWeight
$parent->update([ ]);
"biaya_actual" => $actualCost }
]); }
} }
}
private function updateCostActual()
private function updatePersentaseProgress() {
{ $actualCost = Activity::where("parent_id", $this->parent_id)->sum("biaya_actual");
if($parent = Activity::find($this->parent_id)){ $this->biaya_actual = $actualCost;
$parentActWeight = $parent->bobot_planning; if($parent = Activity::find($this->parent_id)){
$parent->update([
if ($parentActWeight == 0) { "biaya_actual" => $actualCost
$parent->update([ ]);
"persentase_progress" => 0 }
]); }
return;
} private function updatePersentaseProgress()
{
$totalChildProportionalProgress = 0; if($parent = Activity::find($this->parent_id)){
$childs = Activity::where("parent_id", $parent->id)->get(); $parentActWeight = $parent->bobot_planning;
foreach($childs as $child){
$currentActWeight = $child->bobot_planning; if ($parentActWeight == 0) {
$currentActProportionalProgress = ($currentActWeight / $parentActWeight) * $child->persentase_progress; $parent->update([
$totalChildProportionalProgress += $currentActProportionalProgress; "persentase_progress" => 0
} ]);
$parent->update([ return;
"persentase_progress" => $totalChildProportionalProgress }
]);
} $totalChildProportionalProgress = 0;
} $childs = Activity::where("parent_id", $parent->id)->get();
foreach($childs as $child){
private function updateCostPlanning() { $currentActWeight = $child->bobot_planning;
$sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))')) $currentActProportionalProgress = ($currentActWeight / $parentActWeight) * $child->persentase_progress;
->where("parent_id", $this->parent_id) $totalChildProportionalProgress += $currentActProportionalProgress;
->first(); }
$this->rencana_biaya = $sumBiaya->sum; $parent->update([
if($parent = Activity::find($this->parent_id)){ "persentase_progress" => $totalChildProportionalProgress
$parent->update([ ]);
"rencana_biaya" => $sumBiaya->sum, }
]); }
}
} private function updateCostPlanning() {
$sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))'))
private function logPersentaseProgress() ->where("parent_id", $this->parent_id)
{ ->first();
ActivityProgressLog::create([ $this->rencana_biaya = $sumBiaya->sum;
'version_gantt_id' => $this->version_gantt_id, if($parent = Activity::find($this->parent_id)){
'activity_id' => request()->id, $parent->update([
'old_percentage' => $this->persentase_progress, "rencana_biaya" => $sumBiaya->sum,
'new_percentage' => request()->persentase_progress, ]);
'variance' => $this->persentase_progress - request()->persentase_progress, }
'created_by'=> "system" }
]);
} private function logPersentaseProgress()
{
private function updateStartEndDateHeader() ActivityProgressLog::create([
{ 'version_gantt_id' => $this->version_gantt_id,
$earliestStartDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->oldest('start_date')->pluck('start_date')->first(); 'activity_id' => request()->id,
$latestEndDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->latest('end_date')->pluck('end_date')->first(); 'old_percentage' => $this->persentase_progress,
if($header = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNull('parent_id')->first()) { 'new_percentage' => request()->persentase_progress,
$header->start_date = $earliestStartDate; 'variance' => $this->persentase_progress - request()->persentase_progress,
$header->end_date = $latestEndDate; 'created_by'=> "system"
$header->saveQuietly(); ]);
} }
}
private function updateStartEndDateHeader()
public function getJobsDoneAttribute() {
{ $earliestStartDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->oldest('start_date')->pluck('start_date')->first();
if(!ReportActivityMaterial::where('activity_id', $this->id)->first()) $latestEndDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->latest('end_date')->pluck('end_date')->first();
return 0; if($header = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNull('parent_id')->first()) {
if(!$dataPlan = AssignMaterial::where('activity_id', $this->id)->get()) $header->start_date = $earliestStartDate;
return 0; $header->end_date = $latestEndDate;
if($dataPlan[0]->status_activity == 'done') $header->saveQuietly();
return 100; }
return $this->persentase_progress; }
}
public function getJobsDoneAttribute()
public function getAssignHrAttribute() {
{ if(!ReportActivityMaterial::where('activity_id', $this->id)->first())
return Arr::flatten(UserToActivity::select("u.name as name") return 0;
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") if(!$dataPlan = AssignMaterial::where('activity_id', $this->id)->get())
->where('assign_hr_to_activity.activity_id', $this->id) return 0;
->get() if($dataPlan->isEmpty())
->toArray()); return 0;
} if($dataPlan[0]->status_activity == 'done')
return 100;
public function getAssignMaterialAttribute() return $this->persentase_progress;
{ }
return Arr::flatten(AssignMaterial::select("m.description as name")
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") public function getAssignHrAttribute()
->where('assign_material_to_activity.activity_id', $this->id) {
->where('assign_material_to_activity.type', "material") return Arr::flatten(UserToActivity::select("u.name as name")
->get() ->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id")
->toArray()); ->where('assign_hr_to_activity.activity_id', $this->id)
} ->get()
->toArray());
public function getAssignExpenseAttribute() }
{
return Arr::flatten(AssignMaterial::select("m.description as name") public function getAssignMaterialAttribute()
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") {
->where('assign_material_to_activity.activity_id', $this->id) return Arr::flatten(AssignMaterial::select("m.description as name")
->where('assign_material_to_activity.type', "expense") ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->get() ->where('assign_material_to_activity.activity_id', $this->id)
->toArray()); ->where('assign_material_to_activity.type', "material")
} ->get()
->toArray());
public function getAssignToolsAttribute() }
{
return Arr::flatten(AssignTools::select("m.name as name") public function getAssignExpenseAttribute()
->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id") {
->where('assign_tools_to_activity.activity_id', $this->id) return Arr::flatten(AssignMaterial::select("m.description as name")
->get() ->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id")
->toArray()); ->where('assign_material_to_activity.activity_id', $this->id)
} ->where('assign_material_to_activity.type', "expense")
->get()
} ->toArray());
}
public function getAssignToolsAttribute()
{
return Arr::flatten(AssignTools::select("m.name as name")
->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id")
->where('assign_tools_to_activity.activity_id', $this->id)
->get()
->toArray());
}
}

90
app/Models/AssignMaterial.php

@ -1,44 +1,46 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\RequestMaterial; use App\Models\RequestMaterial;
use App\Models\Activity; use App\Models\Activity;
use App\Models\ReportActivityMaterial;
class AssignMaterial extends Model
{ class AssignMaterial extends Model
protected $table = 'assign_material_to_activity'; {
protected $table = 'assign_material_to_activity';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $fillable = [
'proyek_id', 'activity_id', 'material_id', 'qty_planning', protected $fillable = [
'budget', 'plan_date', 'status_activity', 'type', 'proyek_id', 'activity_id', 'material_id', 'qty_planning',
'created_at', 'created_by', 'updated_at', 'updated_by' 'budget', 'plan_date', 'status_activity', 'type',
]; 'created_at', 'created_by', 'updated_at', 'updated_by'
];
protected $casts = [
'id' => 'integer', protected $casts = [
'budget' => 'string', 'id' => 'integer',
]; 'budget' => 'string',
];
public static function boot() {
parent::boot(); public static function boot() {
parent::boot();
static::created(function($data) {
$activity = Activity::find($data->activity_id); static::created(function($data) {
$material = RequestMaterial::where("id", $data->material_id)->first(); $activity = Activity::find($data->activity_id);
$activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning); $material = RequestMaterial::where("id", $data->material_id)->first();
$activity->save(); $activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning);
}); $activity->save();
});
static::deleted(function($data) {
$activity = Activity::where('id', $data->activity_id)->first(); static::deleted(function($data) {
$activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning); $reportActivities = ReportActivityMaterial::where('assign_material_id', $data->id)->delete();
$activity->save(); $activity = Activity::where('id', $data->activity_id)->first();
}); $activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning);
$activity->save();
} });
}
}
}

2
app/Models/Broadcast.php

@ -12,6 +12,6 @@ class Broadcast extends Model
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'title_notif', 'message_notif', 'description', 'send_to_type', 'created_at', 'created_by', 'updated_at', 'updated_by' 'title_notif', 'message_notif', 'description', 'send_to_type', 'send_to_id', 'status_send', 'created_at', 'created_by', 'updated_at', 'updated_by'
]; ];
} }

83
app/Models/Divisi.php

@ -1,41 +1,42 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Divisi extends Model class Divisi extends Model
{ {
protected $table = 'm_divisi'; protected $table = 'm_divisi';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'name', 'name',
'parent', 'parent',
'description', 'description',
'created_at', 'color',
'created_by', 'created_at',
'updated_at', 'created_by',
'updated_by' 'updated_at',
]; 'updated_by'
];
public static function boot() {
parent::boot(); public static function boot() {
parent::boot();
static::deleting(function($data) {
$data->children()->delete(); static::deleting(function($data) {
}); $data->children()->delete();
} });
}
public function parent()
{ public function parent()
return $this->belongsTo('App\Models\Divisi','parent')->where('parent', null)->with('parent'); {
} return $this->belongsTo('App\Models\Divisi','parent')->where('parent', null)->with('parent');
}
public function children()
{ public function children()
return $this->hasMany('App\Models\Divisi','parent')->with('children'); {
} return $this->hasMany('App\Models\Divisi','parent')->with('children');
} }
}

13
app/Models/HierarchyFtth.php

@ -12,6 +12,17 @@ class HierarchyFtth extends Model
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'name', 'parent_id', 'project_id', 'created_at', 'updated_at', 'progress' 'name', 'parent_id', 'project_id', 'created_at', 'updated_at', 'progress', 'bobot_planning'
]; ];
public static function boot() {
parent::boot();
static::deleted(function($data) {
$ftths = HierarchyFtth::where('parent_id', $data->id)->get();
foreach ($ftths as $ftth) {
$ftth->delete();
}
});
}
} }

106
app/Models/Project.php

@ -1,52 +1,54 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Project extends Model class Project extends Model
{ {
protected $table = 'm_proyek'; protected $table = 'm_proyek';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'kode_sortname', 'kode_sortname',
'jumlah_stakeholder', 'jumlah_stakeholder',
'nama', 'nama',
'mulai_proyek', 'mulai_proyek',
'akhir_proyek', 'akhir_proyek',
'area_kerja', 'area_kerja',
'lokasi_kantor', 'lokasi_kantor',
'rencana_biaya', 'rencana_biaya',
'biaya_actual', 'biaya_actual',
'company', 'company',
'pm_id', 'pm_id',
'type_proyek_id', 'type_proyek_id',
'divisi_id', 'divisi_id',
'persentase_progress', 'persentase_progress',
'keterangan', 'keterangan',
'durasi_proyek', 'durasi_proyek',
'progress_by_worklog', 'progress_by_worklog',
'status', 'status',
'currency_simbol', 'currency_symbol',
'currency_code', 'currency_code',
'currency_name', 'currency_name',
'project_objectives', 'project_objectives',
'considered_success_when', 'considered_success_when',
'potential_risk', 'potential_risk',
'testing_environment', 'testing_environment',
'currency_code', 'budget_health',
'currency_symbol', 'phase_id',
'currency_name', 'late_consequence',
'budget_health', 'assumtion',
'phase_id', 'calculation_status',
'created_at', 'structur_organization',
'created_by', 'scurve',
'updated_at', 'created_at',
'updated_by' 'created_by',
]; 'updated_at',
'updated_by'
];
}
}

23
app/Models/ProjectChecklists.php

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProjectChecklists extends Model
{
protected $table = 'project_charter_checklist';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $fillable = [
'proyek_id',
'item',
'status_exist',
'created_at',
'created_by',
'updated_at',
'updated_by'
];
}

23
app/Models/ProjectIssues.php

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProjectIssues extends Model
{
protected $table = 'project_charter_issue';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $fillable = [
'proyek_id',
'description',
'level_issue',
'created_at',
'created_by',
'updated_at',
'updated_by'
];
}

24
app/Models/ProjectRisks.php

@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProjectRisks extends Model
{
protected $table = 'project_charter_risk';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $fillable = [
'proyek_id',
'description',
'level_risk',
'preventive_risk',
'created_at',
'created_by',
'updated_at',
'updated_by'
];
}

153
app/Models/ReportActivityMaterial.php

@ -1,78 +1,75 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Activity; use App\Models\Activity;
use App\Models\AssignMaterial; use App\Models\AssignMaterial;
use Carbon\Carbon; use Carbon\Carbon;
class ReportActivityMaterial extends Model class ReportActivityMaterial extends Model
{ {
protected $table = 'report_activity_material'; protected $table = 'report_activity_material';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id', 'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id',
'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' 'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by'
]; ];
public function getReportDateAttribute($value) public function getReportDateAttribute($value)
{ {
return Carbon::createFromTimestamp(strtotime($value)) return Carbon::createFromTimestamp(strtotime($value))
->timezone(env('APP_TIMEZONE')) ->timezone(env('APP_TIMEZONE'))
->toDateTimeString(); ->toDateTimeString();
} }
public static function boot() { public static function boot() {
parent::boot(); parent::boot();
static::created(function($data) { static::created(function($data) {
$activity = Activity::find($data->activity_id); $activity = Activity::find($data->activity_id);
$assignedMaterial = AssignMaterial::find($data->assign_material_id); $assignedMaterial = AssignMaterial::find($data->assign_material_id);
$biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty); $biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty);
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); $dataPlan = AssignMaterial::where('activity_id', $activity->id)->get();
if($dataPlan[0]->status_activity == 'done'){ if($dataPlan[0]->status_activity == 'done'){
$percentage = 100; $percentage = 100;
} else { } else {
$totalPlan = $dataPlan->sum('qty_planning'); $totalPlan = $dataPlan->sum('qty_planning');
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); $totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty");
$percentage = ($totalVolumeActual * 100) / $totalPlan; $percentage = ($totalVolumeActual * 100) / $totalPlan;
$percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; $percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage;
} }
$activity->update([ $activity->update([
"persentase_progress" => $percentage, "persentase_progress" => $percentage,
"biaya_actual" => $biayaActual, "biaya_actual" => $biayaActual,
]); ]);
$activity->save(); $activity->save();
}); });
static::deleted(function($data) { static::deleted(function($data) {
$activity = Activity::find($data->activity_id); $activity = Activity::find($data->activity_id);
$assignedMaterial = AssignMaterial::find($data->assign_material_id); $assignedMaterial = AssignMaterial::find($data->assign_material_id);
$activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty); $activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty);
$activity->actual_start = null;
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); $activity->actual_end = null;
if($dataPlan[0]->status_activity == 'done'){
$activity->persentase_progress = 100; $dataPlan = AssignMaterial::where('activity_id', $activity->id)->get();
} else { $totalPlan = $dataPlan->sum('qty_planning');
$totalPlan = $dataPlan->sum('qty_planning'); $totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty");
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); $percentage = ($totalVolumeActual * 100) / $totalPlan;
$percentage = ($totalVolumeActual * 100) / $totalPlan; $activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage;
$activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; $activity->save();
}
});
$activity->save();
}
}); }
}
}

34
app/Models/Role.php

@ -1,17 +1,17 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Role extends Model class Role extends Model
{ {
protected $table = 'm_roles'; protected $table = 'm_roles';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'name', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' 'name', 'description', 'default_page', 'created_at', 'created_by', 'updated_at', 'updated_by'
]; ];
} }

124
app/Models/UserToActivity.php

@ -1,61 +1,63 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Activity; use App\Models\Activity;
class UserToActivity extends Model class UserToActivity extends Model
{ {
protected $table = 'assign_hr_to_activity'; protected $table = 'assign_hr_to_activity';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'user_id', 'user_id',
'proyek_id', 'proyek_id',
'version_gantt_id', 'version_gantt_id',
'role_proyek_id', 'role_proyek_id',
'activity_id', 'activity_id',
'created_at', 'start_date',
'created_by', 'end_date',
'updated_at', 'created_at',
'updated_by' 'created_by',
]; 'updated_at',
'updated_by'
public static function boot() { ];
parent::boot();
public static function boot() {
static::created(function($data) { parent::boot();
$activity = Activity::find($data->activity_id);
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); static::created(function($data) {
$activity = Activity::find($data->activity_id);
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); $getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first();
if($getWorkingHours->uom_standart_rate == "Hour") $salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
if($getWorkingHours->uom_standart_rate == "Hour")
$activity->rencana_biaya += $salary; $salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
$activity->save();
}); $activity->rencana_biaya += $salary;
$activity->save();
static::deleted(function($data) { });
$activity = Activity::find($data->activity_id);
static::deleted(function($data) {
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); $activity = Activity::find($data->activity_id);
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
if($getWorkingHours->uom_standart_rate == "Hour"){ $getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first();
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); $salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100);
} if($getWorkingHours->uom_standart_rate == "Hour"){
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100);
$activity->rencana_biaya -= $salary; }
if ($activity->rencana_biaya < 0) {
$activity->rencana_biaya = 0; $activity->rencana_biaya -= $salary;
} if ($activity->rencana_biaya < 0) {
$activity->save(); $activity->rencana_biaya = 0;
}); }
$activity->save();
} });
} }
}

38
app/Models/UserToProyek.php

@ -1,19 +1,19 @@
<?php <?php
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class UserToProyek extends Model class UserToProyek extends Model
{ {
protected $table = 'assign_hr_to_proyek'; protected $table = 'assign_hr_to_proyek';
const CREATED_AT = 'created_at'; const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; const UPDATED_AT = 'updated_at';
protected $fillable = [ protected $fillable = [
'user_id', 'proyek_id', 'rbs', 'project_role', 'group_r', 'max_used', 'standart_rate', 'user_id', 'proyek_id', 'rbs', 'project_role', 'group_r', 'max_used', 'standart_rate',
'uom_standart_rate', 'overtime_rate', 'uom_overtime_rate', 'cost_per_used', 'accrue_at', 'uom_standart_rate', 'overtime_rate', 'uom_overtime_rate', 'cost_per_used', 'accrue_at',
'base_calender', 'created_at', 'created_by', 'updated_at', 'updated_by' 'base_calender', 'is_customer', 'created_at', 'created_by', 'updated_at', 'updated_by'
]; ];
} }

46
app/Models/VersionGantt.php

@ -3,6 +3,9 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Activity;
use App\Models\Link;
use DateTime;
class VersionGantt extends Model class VersionGantt extends Model
{ {
@ -22,10 +25,53 @@ class VersionGantt extends Model
'committed_cost', 'committed_cost',
'cost_to_complete', 'cost_to_complete',
'progress', 'progress',
'bobot',
'hierarchy_ftth_id', 'hierarchy_ftth_id',
'created_at', 'created_at',
'created_by', 'created_by',
'updated_at', 'updated_at',
'updated_by' 'updated_by'
]; ];
public static function boot() {
parent::boot();
static::updated(function($data) {
$data->updateActDuration();
});
}
public function updateActDuration(){
$daysOff = explode(',', $this->config_dayoff);
if (in_array('0', $daysOff)) {
$key = array_search('0', $daysOff, false);
$daysOff[$key] = '7';
}
$activities = Activity::where('version_gantt_id', $this->id)->get();
foreach ($activities as $value) {
$exist = Link::where('t_activity_id', $value->id)->exists();
$startDate = new DateTime($value->start_date);
$endDate = new DateTime($value->end_date);
$duration = $endDate->diff($startDate)->days + 1;
if ($exist) {
$duration--;
}
// Iterate through each day and subtract the days off
for ($i = 0; $i < $duration; $i++) {
$currentDate = clone $startDate;
$currentDate->modify("+$i day");
$currentDayOfWeek = $currentDate->format('N'); // Get the day of the week (1 - Monday, 7 - Sunday)
if (in_array($currentDayOfWeek, $daysOff)) {
$duration--; // Subtract one day from the duration for each day off
}
}
// Update the activity duration
$value->duration = $duration;
$value->save();
}
}
} }

49
app/Services/FCMService.php

@ -0,0 +1,49 @@
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
class FCMService
{
public static function send($fcm_token, $notification)
{
$url = 'https://fcm.googleapis.com/fcm/send';
// $url = 'https://fcm.googleapis.com/v1/projects/594814396007/messages:send';
$serverKey = config('fcm.server_key');
$data = [
"registration_ids" => [$fcm_token],
"notification" => [
"title" => $notification['title'],
"body" => $notification['body'],
]
];
$encodedData = json_encode($data);
$headers = [
'Authorization:key=' . $serverKey,
'Content-Type: application/json',
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $encodedData);
$result = curl_exec($ch);
if ($result === FALSE) {
return array("success"=> false, "message"=> curl_error($ch));
}
// Close connection
curl_close($ch);
return array("success"=> true, "message"=> $result);
}
}

1
bootstrap/app.php

@ -63,6 +63,7 @@ $app->configure('auth');
$app->configure('api'); $app->configure('api');
$app->configure('assets'); $app->configure('assets');
$app->configure('app'); $app->configure('app');
$app->configure('fcm');
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

2
config/api.php

@ -2,6 +2,6 @@
return [ return [
'nominatim' => env('API_NOMINATIM', 'https://nominatim.oslogdev.com'), 'nominatim' => env('API_NOMINATIM', 'https://nominatim.oslogdev.com'),
'adw' => env('API_ADW', 'http://ospro-api.adyawinsa.com:9083/api'), 'adw' => env('API_ADW', 'http://ospro-api.adyawinsa.com:9083/api'),
'adw_token' => env('API_ADW_TOKEN', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIxMjAyIiwiZXhwIjoxNjkxODMwNDkzfQ.DvBQIOZsdFndWsliPCZT65Y6G5Xx4vWBKz8Rhe7rvRA') 'adw_token' => env('API_ADW_TOKEN', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIxMjAyIiwiZXhwIjoxNzI0Mzk1NTExfQ.z9_Q7vjZbcbr8Mook4EmlOuOByNP12_DEDSabf0zanU')
]; ];
?> ?>

5
config/fcm.php

@ -0,0 +1,5 @@
<?php
return [
'server_key' => "AAAAin2zZmc:APA91bHFIYDzZGyVyXvt2C8I09wC2k8siWPQIo4b1Db0QjxCzQR5SRQU9KY1iNRIUhTL6OoLUs2x6UAiP1BNv-mwOlSR7C_405msoNL2p33JVBxrtqc7hdMc5TEdTBB4ZGRVH7ltQzSe",
];

36
database/migrations/2023_08_29_130624_create_jobs_table.php

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('jobs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('queue')->index();
$table->longText('payload');
$table->unsignedTinyInteger('attempts');
$table->unsignedInteger('reserved_at')->nullable();
$table->unsignedInteger('available_at');
$table->unsignedInteger('created_at');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('jobs');
}
}

9
docker/nginx/conf.d/default.conf

@ -15,6 +15,15 @@ server {
include fastcgi_params; include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_INFO $fastcgi_path_info;
client_max_body_size 100M;
client_body_buffer_size 5M;
fastcgi_read_timeout 900;
keepalive_timeout 900;
send_timeout 300;
proxy_read_timeout 900;
proxy_connect_timeout 900;
proxy_send_timeout 900;
} }
location / { location / {

1947
docker/php/php.ini

File diff suppressed because it is too large Load Diff

72
rest-client.http

@ -1,10 +1,12 @@
@token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODQ0NFwvYXBpXC9sb2dpbiIsImlhdCI6MTY3NzQ3NzIzMSwiZXhwIjoxNjc4MDgyMDMxLCJuYmYiOjE2Nzc0NzcyMzEsImp0aSI6ImR5WWhRY3ZIbUJEcmFKMG0iLCJzdWIiOjEsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.9zT6CBbQholzIdQ9ZBDoxMvrR-PKvIYkGzdNB6bim0Y @token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODQ0NFwvYXBpXC9sb2dpbiIsImlhdCI6MTY5MTc2MDYyNCwiZXhwIjoxNjkyMzY1NDI0LCJuYmYiOjE2OTE3NjA2MjQsImp0aSI6Ikd2bEFPTE4yZ2FuRFdVbjEiLCJzdWIiOjEsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.XNGbsmcgQ-CkV8vLlvnItGKM0R1am5X5b6qUFOR1DRo
@tokenS = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hZHctYXBpLm9zcHJvLmlkXC9hcGlcL2xvZ2luIiwiaWF0IjoxNjkxNTcyMTIwLCJleHAiOjE2OTIxNzY5MjAsIm5iZiI6MTY5MTU3MjEyMCwianRpIjoiVUdqbnhLRVdlZzYyTTBnayIsInN1YiI6MSwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.5QqK0dLW5jzbVOkSCSW0mFo0K7ycGOBW9NCG_2Zldm4
@hostname = https://adw-api.ospro.id/api
# @hostname = https://adw-api.ospro.id/api
# @hostname = https://ospro-api.ospro.id/api # @hostname = https://ospro-api.ospro.id/api
# @hostname = https://api-iu.ospro.id/api # @hostname = https://api-iu.ospro.id/api
# @hostname = https://api-staging-adw.ospro.id/api # @hostname = https://api-staging-adw.ospro.id/api
# @hostname = http://localhost:8444/api @hostname = http://localhost:8444/api
# @hostname = http://103.73.125.81:8444/api # @hostname = http://103.73.125.81:8444/api
# @hostname = http://localhost:8444/adw-backend/api # @hostname = http://localhost:8444/adw-backend/api
@ -402,6 +404,59 @@ GET {{hostname}}/project/list
Authorization: Bearer {{token}} Authorization: Bearer {{token}}
content-type: application/json content-type: application/json
###
POST {{hostname}}/project/search
Authorization: Bearer {{token}}
content-type: application/json
{
"columns": [
{
"name": "nama",
"logic_operator": "ilike",
"value": "",
"operator": "AND"
}
],
"select": ["kode_sortname", "nama", "mulai_proyek"],
"joins": [
{
"name": "m_users",
"column_join": "pm_id",
"column_results": [
"name",
"username"
]
},
{
"name": "m_type_proyek",
"column_join": "type_proyek_id",
"column_results": [
"name",
"description"
]
}
],
"orders": {
"columns": [
"id"
],
"ascending": false
},
"paging": {
"start": 0,
"length": 10
}
}
###
POST https://adw-api.ospro.id/api/project/search
Authorization: Bearer {{tokenS}}
content-type: application/json
{
"columns":[{"name":"nama","logic_operator":"ilike","value":"","operator":"AND"}],"joins":[{"name":"m_users","column_join":"pm_id","column_results":["name","username"]},{"name":"m_type_proyek","column_join":"type_proyek_id","column_results":["name","description"]}],"orders":{"columns":["id"],"ascending":false},"paging":{"start":0,"length":10}
}
### add ### add
POST {{hostname}}/project/add POST {{hostname}}/project/add
@ -1103,3 +1158,14 @@ content-type: application/json
} }
} }
#######
POST {{hostname}}/project/get-s-curve
Authorization: Bearer {{token}}
content-type: application/json
{
"period":"week",
"project_id":"118",
"gantt_id":"287"
}

62
routes/web.php

@ -1,7 +1,7 @@
<?php <?php
$router->get('/', function () use ($router) { $router->get('/', function () use ($router) {
return $router->app->version(); return $router->app->version();
}); });
$router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($router) { $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($router) {
@ -53,11 +53,12 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject'); $router->post('/document-activity/search', 'ActivityDokumenController@searchDocProject');
$router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen'); $router->get('/document-activity/download/{id}', 'ActivityDokumenController@downloadDokumen');
$router->get('/project-by-customer/{id}','ProjectController@getByUser');
$router->post('/project/search', 'ProjectController@search'); $router->post('/project/search', 'ProjectController@search');
$router->post('/project/add', 'ProjectController@add'); $router->post('/project/add', 'ProjectController@add');
$router->put('/project/update/{id}', 'ProjectController@update'); $router->put('/project/update/{id}', 'ProjectController@update');
$router->get('/project/edit/{id}', 'ProjectController@edit'); $router->get('/project/edit/{id}', 'ProjectController@edit');
$router->get('/project/detail/{id}', 'ProjectController@detail'); $router->get('/project/detail/{id}[/{gantt_id}[/{s_curve}]]', 'ProjectController@detail');
$router->delete('/project/delete/{id}', 'ProjectController@delete'); $router->delete('/project/delete/{id}', 'ProjectController@delete');
$router->get('/project/list', 'ProjectController@list'); $router->get('/project/list', 'ProjectController@list');
$router->get('/project/set-baseline/{gantt_id}', 'ProjectController@setBaseline'); $router->get('/project/set-baseline/{gantt_id}', 'ProjectController@setBaseline');
@ -66,6 +67,9 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->get('/project/manpower/assigned/{gantt_id}', 'ProjectController@getAssignedHR'); $router->get('/project/manpower/assigned/{gantt_id}', 'ProjectController@getAssignedHR');
$router->post('/project/get-s-curve', 'ProjectController@getSCurve'); $router->post('/project/get-s-curve', 'ProjectController@getSCurve');
$router->post('/project/calculate-s-curve', 'ProjectController@calculateSCurve');
$router->post('/project/s-curve-command', 'ProjectController@sCurveCommand');
$router->post('/project/get-linear-s-curve', 'ProjectController@getLinearSCurve');
$router->post('/project/get-overdue-activities', 'ProjectController@getOverdueActivities'); $router->post('/project/get-overdue-activities', 'ProjectController@getOverdueActivities');
$router->post('/project/get-integration-invoice', 'ProjectController@getInvoiceIntegration'); $router->post('/project/get-integration-invoice', 'ProjectController@getInvoiceIntegration');
$router->post('/project/get-report-distribution', 'ProjectController@getReportDistribution'); $router->post('/project/get-report-distribution', 'ProjectController@getReportDistribution');
@ -202,7 +206,10 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->get('/activity/{id}/{proyek_id}/get', 'ActivityController@getByGanttId'); $router->get('/activity/{id}/{proyek_id}/get', 'ActivityController@getByGanttId');
$router->get('/activity/search', 'ActivityController@search'); $router->get('/activity/search', 'ActivityController@search');
$router->post('/activity/import', 'ActivityController@import'); $router->post('/activity/import', 'ActivityController@import');
$router->post('/activity/import-update', 'ActivityController@importUpdate');
$router->post('/activity/import-old', 'ActivityController@importOld'); $router->post('/activity/import-old', 'ActivityController@importOld');
$router->post('/activity/batch-update/{ganttId}', 'ActivityController@batchUpdate');
$router->get('/activity/update-schedule/{ganttId}', 'ActivityController@updateSchedule');
$router->post('/task', 'ActivityController@add'); $router->post('/task', 'ActivityController@add');
$router->get('/task/edit/{id}', 'ActivityController@edit'); $router->get('/task/edit/{id}', 'ActivityController@edit');
$router->put('/task/{id}', 'ActivityController@update'); $router->put('/task/{id}', 'ActivityController@update');
@ -231,6 +238,7 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->get('/comment-activity/list', 'CommentActivityController@list'); $router->get('/comment-activity/list', 'CommentActivityController@list');
$router->post('/presence/add', 'PresenceController@add'); $router->post('/presence/add', 'PresenceController@add');
$router->post('/presence/test', 'PresenceController@checkLocationTest');
$router->get('/presence/edit/{id}', 'PresenceController@edit'); $router->get('/presence/edit/{id}', 'PresenceController@edit');
$router->put('/presence/update/{id}', 'PresenceController@update'); $router->put('/presence/update/{id}', 'PresenceController@update');
$router->post('/presence/search', 'PresenceController@search'); $router->post('/presence/search', 'PresenceController@search');
@ -285,6 +293,33 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->delete('/rate-sallary/delete/{id}', 'RateSallaryController@delete'); $router->delete('/rate-sallary/delete/{id}', 'RateSallaryController@delete');
$router->get('/rate-sallary/list', 'RateSallaryController@list'); $router->get('/rate-sallary/list', 'RateSallaryController@list');
$router->post('/project-checklists/add', 'ProjectChecklistsController@add');
$router->get('/project-checklists/edit/{id}', 'ProjectChecklistsController@edit');
$router->put('/project-checklists/update/{id}', 'ProjectChecklistsController@update');
$router->post('/project-checklists/search', 'ProjectChecklistsController@search');
$router->delete('/project-checklists/delete/{id}', 'ProjectChecklistsController@delete');
$router->delete('/project-checklists/delete-by-proyek/{id}', 'ProjectChecklistsController@deleteByProyek');
$router->get('/project-checklists/list', 'ProjectChecklistsController@list');
$router->get('/project-checklists/{where}/{val}', 'ProjectChecklistsController@customWhere');
$router->post('/project-issues/add', 'ProjectIssuesController@add');
$router->get('/project-issues/edit/{id}', 'ProjectIssuesController@edit');
$router->put('/project-issues/update/{id}', 'ProjectIssuesController@update');
$router->post('/project-issues/search', 'ProjectIssuesController@search');
$router->delete('/project-issues/delete/{id}', 'ProjectIssuesController@delete');
$router->delete('/project-issues/delete-by-proyek/{id}', 'ProjectIssuesController@deleteByProyek');
$router->get('/project-issues/list', 'ProjectIssuesController@list');
$router->get('/project-issues/{where}/{val}', 'ProjectIssuesController@customWhere');
$router->post('/project-risks/add', 'ProjectRisksController@add');
$router->get('/project-risks/edit/{id}', 'ProjectRisksController@edit');
$router->put('/project-issues/update/{id}', 'ProjectRisksController@update');
$router->post('/project-risks/search', 'ProjectRisksController@search');
$router->delete('/project-risks/delete/{id}', 'ProjectRisksController@delete');
$router->delete('/project-risks/delete-by-proyek/{id}', 'ProjectRisksController@deleteByProyek');
$router->get('/project-risks/list', 'ProjectRisksController@list');
$router->get('/project-risks/{where}/{val}', 'ProjectRisksController@customWhere');
$router->post('/project-participants/add', 'ProjectParticipantsController@add'); $router->post('/project-participants/add', 'ProjectParticipantsController@add');
$router->get('/project-participants/edit/{id}', 'ProjectParticipantsController@edit'); $router->get('/project-participants/edit/{id}', 'ProjectParticipantsController@edit');
$router->put('/project-participants/update/{id}', 'ProjectParticipantsController@update'); $router->put('/project-participants/update/{id}', 'ProjectParticipantsController@update');
@ -374,6 +409,7 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->get('/report-k3-detail/list', 'ReportK3DetailController@list'); $router->get('/report-k3-detail/list', 'ReportK3DetailController@list');
$router->post('/user-to-proyek/add', 'UserToProyekController@add'); $router->post('/user-to-proyek/add', 'UserToProyekController@add');
$router->post('/user-to-proyek/add-multiple', 'UserToProyekController@addMultiple');
$router->get('/user-to-proyek/edit/{id}', 'UserToProyekController@edit'); $router->get('/user-to-proyek/edit/{id}', 'UserToProyekController@edit');
$router->put('/user-to-proyek/update/{id}', 'UserToProyekController@update'); $router->put('/user-to-proyek/update/{id}', 'UserToProyekController@update');
$router->post('/user-to-proyek/search', 'UserToProyekController@search'); $router->post('/user-to-proyek/search', 'UserToProyekController@search');
@ -441,15 +477,23 @@ $router->group(['prefix'=>'api', 'middleware' => 'cors'], function () use ($rout
$router->put('/project-comment/update/{id}', 'ProjectCommentController@update'); $router->put('/project-comment/update/{id}', 'ProjectCommentController@update');
$router->post('/project-comment/search', 'ProjectCommentController@search'); $router->post('/project-comment/search', 'ProjectCommentController@search');
$router->get('/hierarchy-ftths', 'HierarchyFtthController@index'); $router->get('/hierarchy-ftths', 'HierarchyFtthController@index');
$router->post('/hierarchy-ftths', 'HierarchyFtthController@store'); $router->post('/hierarchy-ftths', 'HierarchyFtthController@store');
$router->post('/hierarchy-ftths/search', 'HierarchyFtthController@search'); $router->post('/hierarchy-ftths/search', 'HierarchyFtthController@search');
$router->get('/hierarchy-ftths/{id}', 'HierarchyFtthController@show'); $router->get('/hierarchy-ftths/{id}', 'HierarchyFtthController@show');
$router->put('/hierarchy-ftths/{id}', 'HierarchyFtthController@update'); $router->put('/hierarchy-ftths/{id}', 'HierarchyFtthController@update');
$router->delete('/hierarchy-ftths/{id}', 'HierarchyFtthController@destroy'); $router->delete('/hierarchy-ftths/{id}', 'HierarchyFtthController@destroy');
$router->get('/hierarchy-ftths/tree/{project_id}', 'HierarchyFtthController@getTreeByProject'); $router->get('/hierarchy-ftths/tree/{project_id}', 'HierarchyFtthController@getTreeByProject');
$router->get('/hierarchy-ftths/tree-gantt/{gantt_id}', 'HierarchyFtthController@getTreeByGantt');
$router->post('/map-monitoring/search', 'MapMonitoringController@search'); $router->post('/map-monitoring/search', 'MapMonitoringController@search');
$router->post('/broadcast/add', 'BroadcastController@add');
$router->get('/broadcast/edit/{id}', 'BroadcastController@edit');
$router->put('/broadcast/update/{id}', 'BroadcastController@update');
$router->post('/broadcast/search', 'BroadcastController@search');
$router->delete('/broadcast/delete/{id}', 'BroadcastController@delete');
$router->get('/broadcast/list', 'BroadcastController@list');
}); });
}); });

Loading…
Cancel
Save