farhantock
1 year ago
56 changed files with 9719 additions and 4652 deletions
@ -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(); |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,95 +1,95 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\ActivityDokumen; |
||||
|
||||
class ActivityDokumenController extends Controller |
||||
{ |
||||
|
||||
public function dokumenByActivityId($id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'activity id is required!','code'=>400], 400); |
||||
|
||||
$dataDokumen = ActivityDokumen::where("activity_id", $id)->get(); |
||||
return response()->json(['status'=>'success','data'=>$dataDokumen,'code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); |
||||
|
||||
$document = ActivityDokumen::find($id); |
||||
|
||||
if(!$document) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
if(file_exists($this->pathActivityDocument.$document->file)) |
||||
unlink($this->pathActivityDocument.$document->file); |
||||
|
||||
$document->delete(); |
||||
return response()->json(['status'=>'success','message'=>'Dokumen deleted successfully!','code'=>200], 200); |
||||
} |
||||
|
||||
public function uploadProjectDokumen(Request $request) |
||||
{ |
||||
if(!$request->hasFile('dokumen')) |
||||
return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400); |
||||
|
||||
$activity_id = $request->activity_id; |
||||
$document = $request->file('dokumen'); |
||||
$name = $document->getClientOriginalName(); |
||||
|
||||
$result = $document->move($this->pathActivityDocument, $name); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); |
||||
|
||||
$data = [ |
||||
'activity_id' => (int)$activity_id, |
||||
'file' => $name, |
||||
'description' => $request->description |
||||
]; |
||||
|
||||
$result = ActivityDokumen::create($data); |
||||
|
||||
if(!$result){ |
||||
unlink($this->pathActivityDocument.$name); |
||||
return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); |
||||
} |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Upload success!','code'=>200], 200); |
||||
} |
||||
|
||||
public function searchDocProject(Request $request){ |
||||
$payload = $request->all(); |
||||
|
||||
$dataBuilder = $this->setUpPayload($payload, 'm_document_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function downloadDokumen($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); |
||||
|
||||
$document = ActivityDokumen::find($id); |
||||
|
||||
if(!$document) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); |
||||
|
||||
if(file_exists($this->pathActivityDocument.$document->file)){ |
||||
$pathToFile = $this->pathActivityDocument.$document->file; |
||||
return response()->download($pathToFile); |
||||
} |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\ActivityDokumen; |
||||
|
||||
class ActivityDokumenController extends Controller |
||||
{ |
||||
|
||||
public function dokumenByActivityId($id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'activity id is required!','code'=>400], 400); |
||||
|
||||
$dataDokumen = ActivityDokumen::where("activity_id", $id)->get(); |
||||
return response()->json(['status'=>'success','data'=>$dataDokumen,'code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); |
||||
|
||||
$document = ActivityDokumen::find($id); |
||||
|
||||
if(!$document) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
if(file_exists($this->pathActivityDocument.$document->file)) |
||||
unlink($this->pathActivityDocument.$document->file); |
||||
|
||||
$document->delete(); |
||||
return response()->json(['status'=>'success','message'=>'Dokumen deleted successfully!','code'=>200], 200); |
||||
} |
||||
|
||||
public function uploadProjectDokumen(Request $request) |
||||
{ |
||||
if(!$request->hasFile('dokumen')) |
||||
return response()->json(['status'=>'failed','message'=>'file is required!','code'=>400], 400); |
||||
|
||||
$activity_id = $request->activity_id; |
||||
$document = $request->file('dokumen'); |
||||
$name = $document->getClientOriginalName(); |
||||
|
||||
$result = $document->move($this->pathActivityDocument, $name); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); |
||||
|
||||
$data = [ |
||||
'activity_id' => (int)$activity_id, |
||||
'file' => $name, |
||||
'description' => $request->description |
||||
]; |
||||
|
||||
$result = ActivityDokumen::create($data); |
||||
|
||||
if(!$result){ |
||||
unlink($this->pathActivityDocument.$name); |
||||
return response()->json(['status'=>'failed','message'=>'Upload failed!','code'=> 500], 500); |
||||
} |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Upload success!','code'=>200], 200); |
||||
} |
||||
|
||||
public function searchDocProject(Request $request){ |
||||
$payload = $request->all(); |
||||
|
||||
$dataBuilder = $this->setUpPayload($payload, 'm_document_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function downloadDokumen($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'Id is required!','code'=>400], 400); |
||||
|
||||
$document = ActivityDokumen::find($id); |
||||
|
||||
if(!$document) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); |
||||
|
||||
if(file_exists($this->pathActivityDocument.$document->file)){ |
||||
$pathToFile = $this->pathActivityDocument.$document->file; |
||||
return response()->download($pathToFile); |
||||
} |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
@ -1,215 +1,221 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\AssignMaterial; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Datatables; |
||||
|
||||
class AssignMaterialController extends Controller |
||||
{ |
||||
private function sanitizeDecimal($number) { |
||||
$number = str_replace(".","",$number); |
||||
$number = str_replace(",",".",$number); |
||||
return $number; |
||||
} |
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'material_id' => 'required', |
||||
'qty_planning' => 'required' |
||||
]); |
||||
|
||||
$activity = Activity::where('id', $request->activity_id)->first(); |
||||
|
||||
$checkStock = RequestMaterial::where("id", $request->material_id)->first(); |
||||
$currentStock = $checkStock->qty; |
||||
if((int)$currentStock < (int)$request->qty_planning){ |
||||
return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]); |
||||
} |
||||
|
||||
$start_date = $activity->start_date; |
||||
$start_date = substr($start_date, 0, 19); // remove the timezone offset |
||||
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); |
||||
$planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date))); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
$data['budget'] = $checkStock->price; |
||||
$data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']); |
||||
|
||||
if ($planDate > $startDate) { |
||||
$result = AssignMaterial::create($data); |
||||
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = AssignMaterial::find($id); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = AssignMaterial::where('id', $id)->first(); |
||||
|
||||
if($data->delete()) |
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$result = AssignMaterial::find($id); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = AssignMaterial::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$type = $request->query('type') ?? "material"; |
||||
$data = AssignMaterial::select( |
||||
"assign_material_to_activity.*","m.description as material_name", "m.uom as uom" |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity) |
||||
->where('assign_material_to_activity.type', $type) |
||||
->orderBy('plan_date', 'desc') |
||||
->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-material-delete"><i class="fa fa-trash"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function datatablesForReportActivity(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$data = |
||||
AssignMaterial::select( |
||||
AssignMaterial::raw('SUM(qty_planning) as qty_planning'), |
||||
"m.description as material_name", |
||||
"assign_material_to_activity.activity_id", |
||||
"assign_material_to_activity.type" |
||||
// "assign_material_to_activity.material_id", |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->groupBy("m.description") |
||||
->groupBy("assign_material_to_activity.activity_id") |
||||
->groupBy("assign_material_to_activity.type") |
||||
->where("assign_material_to_activity.activity_id", $id_activity)->get(); |
||||
return Datatables::of($data) |
||||
->addIndexColumn() |
||||
->addColumn('qty_sum', function($row){ |
||||
$val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") |
||||
->groupBy("m.description") |
||||
->where("m.description", strval($row->material_name)) |
||||
->where("ram.activity_id", $row->activity_id)->first(); |
||||
return $val_qty_act ? $val_qty_act->qty_sum : '-'; |
||||
}) |
||||
->addColumn('status_activity', function($row){ |
||||
$val_status = AssignMaterial::select("status_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_status ? $val_status->status_activity : null; |
||||
}) |
||||
->addColumn('start_activity', function($row){ |
||||
$val_start = AssignMaterial::select("start_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_start ? $val_start->start_activity : null; |
||||
}) |
||||
->addColumn('finish_activity', function($row){ |
||||
$val_finish = AssignMaterial::select("finish_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_finish ? $val_finish->finish_activity : null; |
||||
}) |
||||
->addColumn('uom', function($row){ |
||||
$val_uom = RequestMaterial::select("uom") |
||||
->where('description', '=', $row->material_name)->first(); |
||||
return $val_uom ? $val_uom->uom : null; |
||||
}) |
||||
->addColumn('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") |
||||
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); |
||||
return $assignMaterial ? $assignMaterial->id : 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") |
||||
->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>'; |
||||
$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 $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function ForReportActivityByMaterial(Request $request){ |
||||
$id_activity = $request->idact; |
||||
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity)->get(); |
||||
foreach ($data as $key) { |
||||
$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); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\AssignMaterial; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Datatables; |
||||
|
||||
class AssignMaterialController extends Controller |
||||
{ |
||||
private function sanitizeDecimal($number) { |
||||
$number = str_replace(".","",$number); |
||||
$number = str_replace(",",".",$number); |
||||
return $number; |
||||
} |
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'material_id' => 'required', |
||||
'qty_planning' => 'required' |
||||
]); |
||||
|
||||
$activity = Activity::where('id', $request->activity_id)->first(); |
||||
|
||||
$checkStock = RequestMaterial::where("id", $request->material_id)->first(); |
||||
$currentStock = $checkStock->qty; |
||||
if((int)$currentStock < (int)$request->qty_planning){ |
||||
return response()->json(['status'=>'failed','message'=>'Stock is not enough!','code'=> 500]); |
||||
} |
||||
|
||||
$start_date = $activity->start_date; |
||||
$start_date = substr($start_date, 0, 19); // remove the timezone offset |
||||
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); |
||||
$planDate = new \DateTime(date("Y-m-d", strtotime($request->plan_date))); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
$data['budget'] = $checkStock->price; |
||||
$data['qty_planning'] = $this->sanitizeDecimal($data['qty_planning']); |
||||
|
||||
if ($planDate >= $startDate) { |
||||
$result = AssignMaterial::create($data); |
||||
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = AssignMaterial::find($id); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','message'=> 'Data updated!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = AssignMaterial::where('id', $id)->first(); |
||||
$reports = ReportActivityMaterial::where('assign_material_id', $data->id)->get(); |
||||
if (isset($reports)) { |
||||
foreach ($reports as $report) { |
||||
$report->delete(); |
||||
} |
||||
} |
||||
|
||||
if($data->delete()) |
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=> 200], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$result = AssignMaterial::find($id); |
||||
|
||||
if($result) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_material_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = AssignMaterial::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data) |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to get the data!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$type = $request->query('type') ?? "material"; |
||||
$data = AssignMaterial::select( |
||||
"assign_material_to_activity.*","m.description as material_name", "m.uom as uom" |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity) |
||||
->where('assign_material_to_activity.type', $type) |
||||
->orderBy('plan_date', 'desc') |
||||
->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-material-delete"><i class="fa fa-trash"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function datatablesForReportActivity(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$data = |
||||
AssignMaterial::select( |
||||
AssignMaterial::raw('SUM(qty_planning) as qty_planning'), |
||||
"m.description as material_name", |
||||
"assign_material_to_activity.activity_id", |
||||
"assign_material_to_activity.type" |
||||
// "assign_material_to_activity.material_id", |
||||
) |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->groupBy("m.description") |
||||
->groupBy("assign_material_to_activity.activity_id") |
||||
->groupBy("assign_material_to_activity.type") |
||||
->where("assign_material_to_activity.activity_id", $id_activity)->get(); |
||||
return Datatables::of($data) |
||||
->addIndexColumn() |
||||
->addColumn('qty_sum', function($row){ |
||||
$val_qty_act = AssignMaterial::select(ReportActivityMaterial::raw('SUM(ram.qty) as qty_sum'),"m.description as material_name1") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->join("report_activity_material as ram", "ram.assign_material_id", "=", "assign_material_to_activity.id") |
||||
->groupBy("m.description") |
||||
->where("m.description", strval($row->material_name)) |
||||
->where("ram.activity_id", $row->activity_id)->first(); |
||||
return $val_qty_act ? $val_qty_act->qty_sum : '-'; |
||||
}) |
||||
->addColumn('status_activity', function($row){ |
||||
$val_status = AssignMaterial::select("status_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_status ? $val_status->status_activity : null; |
||||
}) |
||||
->addColumn('start_activity', function($row){ |
||||
$val_start = AssignMaterial::select("start_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_start ? $val_start->start_activity : null; |
||||
}) |
||||
->addColumn('finish_activity', function($row){ |
||||
$val_finish = AssignMaterial::select("finish_activity") |
||||
->join('m_req_material as m', 'm.id', '=', 'assign_material_to_activity.material_id') |
||||
->where('m.description', '=', $row->material_name) |
||||
->where("assign_material_to_activity.activity_id", $row->activity_id)->first(); |
||||
return $val_finish ? $val_finish->finish_activity : null; |
||||
}) |
||||
->addColumn('uom', function($row){ |
||||
$val_uom = RequestMaterial::select("uom") |
||||
->where('description', '=', $row->material_name)->first(); |
||||
return $val_uom ? $val_uom->uom : null; |
||||
}) |
||||
->addColumn('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") |
||||
->where('activity_id', $row->activity_id)->where('m.description', $row->material_name)->first(); |
||||
return $assignMaterial ? $assignMaterial->id : 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") |
||||
->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>'; |
||||
$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 $actionBtn; |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
|
||||
public function ForReportActivityByMaterial(Request $request){ |
||||
$id_activity = $request->idact; |
||||
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity)->get(); |
||||
foreach ($data as $key) { |
||||
$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); |
||||
} |
||||
} |
||||
} |
||||
|
@ -1,9 +1,177 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
|
||||
class BroadcastController extends Controller |
||||
{ |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Broadcast; |
||||
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; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
@ -1,302 +1,315 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Illuminate\Support\Facades\Http; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Laravel\Lumen\Routing\Controller as BaseController; |
||||
|
||||
use App\Models\ReportK3Detail; |
||||
|
||||
class Controller extends BaseController |
||||
{ |
||||
protected $pathImage = "assets/image/"; |
||||
protected $pathDocument = "assets/file/project/"; |
||||
protected $pathTmpImport = "assets/file/tmpimport/"; |
||||
protected $pathActivityDocument = "assets/file/activity/"; |
||||
protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth', |
||||
'sixth', 'seventh', 'eighth', 'ninth', 'tenth']; |
||||
protected $currentDate; |
||||
protected $currentName; |
||||
protected $currentId; |
||||
|
||||
public function __construct() |
||||
{ |
||||
$this->currentDate = date("Y-m-d H:i:s"); |
||||
$this->currentName = auth()->user() ? auth()->user()->name : "system"; |
||||
$this->currentId = auth()->user() ? auth()->user()->id : 0; |
||||
|
||||
$this->pathImage = config('assets.image'); |
||||
$this->pathDocument = config('assets.project'); |
||||
$this->pathActivityDocument = config('assets.activity'); |
||||
} |
||||
|
||||
protected function setUpPayload($condition, $tableSelf) |
||||
{ |
||||
$alias = "selfTable"; |
||||
$builder = DB::table($tableSelf." AS ".$alias); |
||||
$builder = $builder->select($alias.".*"); |
||||
if($condition){ |
||||
if(isset($condition['joins'])){ |
||||
$selectColumn = []; |
||||
$no = 0; |
||||
foreach($condition['joins'] as $join){ |
||||
$tableJoin = isset($join['name1']) ? $join['name1'] : $alias; |
||||
$tableName = $join['name']; |
||||
$columnJoin = $join['column_join']; // foreign key table sini |
||||
$columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan |
||||
$columnResult = $join['column_results']; |
||||
|
||||
foreach($columnResult as $sColumn){ |
||||
$builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); |
||||
} |
||||
$builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf); |
||||
$no++; |
||||
} |
||||
} |
||||
|
||||
if(isset($condition['columns'])){ |
||||
$listWhere = $condition['columns']; |
||||
|
||||
$builder = $builder->where(function ($query) use($listWhere, $alias){ |
||||
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'] : ""; |
||||
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
if(isset($condition['group_column'])){ |
||||
$builder = $this->groupWhere($builder, $condition['group_column'], $alias); |
||||
} |
||||
|
||||
$data['count'] = clone $builder; |
||||
|
||||
if(isset($condition['paging'])){ |
||||
$builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']); |
||||
} |
||||
|
||||
if(isset($condition['orders'])){ |
||||
$orders = $condition['orders']; |
||||
$sortBy = $orders['ascending'] ? "ASC" : "DESC"; |
||||
$columnOrder = $orders['columns']; |
||||
foreach($columnOrder as $column){ |
||||
$builder = $builder->orderBy($alias.".".$column, $sortBy); |
||||
} |
||||
} |
||||
} |
||||
$data['builder'] = $builder; |
||||
return $data; |
||||
} |
||||
|
||||
private function groupWhere($oldBuilder, $groupWhere, $alias) |
||||
{ |
||||
$builder = $oldBuilder; |
||||
$listGroupWhere = $groupWhere; |
||||
$operator = $listGroupWhere['operator']; |
||||
$operatorGroup = $listGroupWhere['group_operator']; |
||||
$listWhere = $listGroupWhere['where']; |
||||
if(strtolower($operator)=="and"){ |
||||
$builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){ |
||||
$no = 1; |
||||
foreach ($listWhere as $where) { |
||||
$value = $where['value']; |
||||
$column = $where['name']; |
||||
$operator = strtolower($where['logic_operator']); |
||||
$value2 = isset($where['value1']) ? $where['value1'] : ""; |
||||
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; |
||||
if($value && $value!="" && $value!=" "){ |
||||
if($operatorGroup=="and"){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
if($no==1){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
} |
||||
} |
||||
} |
||||
$no = $no+1; |
||||
} |
||||
}); |
||||
}else if(strtolower($operator)=="or"){ |
||||
$builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){ |
||||
$no = 1; |
||||
foreach ($listWhere as $where) { |
||||
$value = $where['value']; |
||||
$column = $where['name']; |
||||
$operator = strtolower($where['logic_operator']); |
||||
$value2 = isset($where['value1']) ? $where['value1'] : ""; |
||||
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; |
||||
if($value && $value!="" && $value!=" "){ |
||||
if($operatorGroup=="and"){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
if($no==1){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
} |
||||
} |
||||
} |
||||
$no++; |
||||
} |
||||
}); |
||||
} |
||||
return $builder; |
||||
} |
||||
|
||||
private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) |
||||
{ |
||||
$query = $oldQuery; |
||||
if($operator=="range"){ |
||||
$query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]); |
||||
}else if($operator=="like"){ |
||||
$query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%'); |
||||
}else if($operator=="ilike"){ |
||||
$query = $query->where($tableColumn.".".$column, '~*', $value); |
||||
}else if($operator=="="){ |
||||
$query = $query->where($tableColumn.".".$column, $value); |
||||
}else if($operator=="in"){ |
||||
$query = $query->whereIn($tableColumn.".".$column, $value); |
||||
}else if($operator=="notin"){ |
||||
$query = $query->whereNotIn($tableColumn.".".$column, $value); |
||||
}else{ |
||||
$query = $query->where($tableColumn.".".$column, $operator, $value); |
||||
} |
||||
return $query; |
||||
} |
||||
|
||||
private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){ |
||||
$query = $oldQuery; |
||||
if($operator=="range"){ |
||||
$query = $query->whereBetween($column, [$value, $value2]); |
||||
}else if($operator=="like"){ |
||||
$query = $query->where($column, 'like', '%'.$value.'%'); |
||||
}else if($operator=="ilike"){ |
||||
$query = $query->where($column, '~*', $value); |
||||
}else if($operator=="="){ |
||||
$query = $query->where($column, $value); |
||||
}else if($operator=="in"){ |
||||
$query = $query->whereIn($column, $value); |
||||
}else if($operator=="notin"){ |
||||
$query = $query->whereNotIn($column, $value); |
||||
}else{ |
||||
$query = $query->where($column, $operator, $value); |
||||
} |
||||
return $query; |
||||
} |
||||
|
||||
private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) |
||||
{ |
||||
$query = $oldQuery; |
||||
if($operator=="range"){ |
||||
$query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]); |
||||
}else if($operator=="like"){ |
||||
$query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%'); |
||||
}else if($operator=="ilike"){ |
||||
$query = $query->where($tableColumn.".".$column, '~*', $value); |
||||
}else if($operator=="="){ |
||||
$query = $query->orWhere($tableColumn.".".$column, $value); |
||||
}else if($operator=="in"){ |
||||
$query = $query->orWhereIn($tableColumn.".".$column, $value); |
||||
}else if($operator=="notin"){ |
||||
$query = $query->orWhereNotIn($tableColumn.".".$column, $value); |
||||
}else{ |
||||
$query = $query->orWhere($tableColumn.".".$column, $operator, $value); |
||||
} |
||||
return $query; |
||||
} |
||||
|
||||
protected function calculateAllCost($activity_id, $proyek_id){ |
||||
$humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id); |
||||
$materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id); |
||||
$toolsCostPlanning = 0; |
||||
|
||||
$allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning; |
||||
return $allCost; |
||||
} |
||||
|
||||
private function calculateAllHumanCost($activity_id, $proyek_id) |
||||
{ |
||||
$dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate")->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id") |
||||
->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) |
||||
->where("ahp.proyek_id", $proyek_id) |
||||
->get(); |
||||
|
||||
$totalCost = 0; |
||||
foreach ($dataHuman as $human) { |
||||
$uom = $human->uom_standart_rate; |
||||
$totalCost += $this->calculateHumanCost($human, $activity_id); |
||||
} |
||||
|
||||
return $totalCost; |
||||
} |
||||
|
||||
private function calculateHumanCost($human, $activity_id) |
||||
{ |
||||
$activity = Activity::find($activity_id); |
||||
$duration = $activity->duration; |
||||
$standarRate = $human->standart_rate; |
||||
$maxUsed = $human->max_used/100; |
||||
$totalCost = ($standarRate*$duration)*$maxUsed; |
||||
return $totalCost; |
||||
} |
||||
|
||||
private function calculateMaterialCost($activity_id, $proyek_id) |
||||
{ |
||||
$totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost") |
||||
->where("proyek_id", $proyek_id) |
||||
->where("activity_id", $activity_id) |
||||
->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)")); |
||||
return $totalCost; |
||||
} |
||||
|
||||
protected function getLoc($lat, $lng){ |
||||
// $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"); |
||||
// return $response->json; |
||||
|
||||
$url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"; |
||||
// $token = config('api.adw_token'); |
||||
$response = $this->curlRequest($url); |
||||
return $response; |
||||
} |
||||
|
||||
private function curlRequest($url){ |
||||
$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); |
||||
} |
||||
|
||||
protected function addDetailK3($dataDetail, $report_id){ |
||||
foreach ($dataDetail as $value) { |
||||
$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); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Illuminate\Support\Facades\Http; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Laravel\Lumen\Routing\Controller as BaseController; |
||||
|
||||
use App\Models\ReportK3Detail; |
||||
|
||||
class Controller extends BaseController |
||||
{ |
||||
protected $pathImage = "assets/image/"; |
||||
protected $pathDocument = "assets/file/project/"; |
||||
protected $pathTmpImport = "assets/file/tmpimport/"; |
||||
protected $pathActivityDocument = "assets/file/activity/"; |
||||
protected $listJoinAll = ['first', 'second', 'third', 'fourth', 'fifth', |
||||
'sixth', 'seventh', 'eighth', 'ninth', 'tenth']; |
||||
protected $currentDate; |
||||
protected $currentName; |
||||
protected $currentId; |
||||
|
||||
public function __construct() |
||||
{ |
||||
$this->currentDate = date("Y-m-d H:i:s"); |
||||
$this->currentName = auth()->user() ? auth()->user()->name : "system"; |
||||
$this->currentId = auth()->user() ? auth()->user()->id : 0; |
||||
|
||||
$this->pathImage = config('assets.image'); |
||||
$this->pathDocument = config('assets.project'); |
||||
$this->pathActivityDocument = config('assets.activity'); |
||||
} |
||||
|
||||
protected function setUpPayload($condition, $tableSelf) |
||||
{ |
||||
$alias = "selfTable"; |
||||
$builder = DB::table($tableSelf." AS ".$alias); |
||||
// $builder = $builder->select($alias.".*"); |
||||
if($condition){ |
||||
if(isset($condition['select'])){ |
||||
foreach($condition['select'] as $select){ |
||||
$builder = $builder->addSelect($alias.".".$select); |
||||
} |
||||
}else{ |
||||
$builder = $builder->addSelect($alias.".*"); |
||||
} |
||||
if(isset($condition['joins'])){ |
||||
$selectColumn = []; |
||||
$no = 0; |
||||
foreach($condition['joins'] as $join){ |
||||
$tableJoin = isset($join['name1']) ? $join['name1'] : $alias; |
||||
$tableName = $join['name']; |
||||
$columnJoin = $join['column_join']; // foreign key table sini |
||||
$columnSelf = isset($join['column_self']) ? $join['column_self'] : "id"; // primary key table lawan |
||||
if (isset($join['column_results'])) { |
||||
$columnResult = $join['column_results']; |
||||
|
||||
foreach($columnResult as $sColumn){ |
||||
$builder = $builder->addSelect($tableName.".".$sColumn." as join_".$this->listJoinAll[$no]."_".$sColumn); |
||||
} |
||||
} |
||||
$builder = $builder->leftJoin($tableName, $tableJoin.".".$columnJoin, '=', $tableName.'.'.$columnSelf); |
||||
$no++; |
||||
} |
||||
} |
||||
|
||||
if(isset($condition['columns'])){ |
||||
$listWhere = $condition['columns']; |
||||
|
||||
$builder = $builder->where(function ($query) use($listWhere, $alias){ |
||||
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'] : ""; |
||||
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
if(isset($condition['group_column'])){ |
||||
$builder = $this->groupWhere($builder, $condition['group_column'], $alias); |
||||
} |
||||
|
||||
$data['count'] = clone $builder; |
||||
|
||||
if(isset($condition['paging'])){ |
||||
$builder = $builder->offset($condition['paging']['start'])->limit($condition['paging']['length']); |
||||
} |
||||
|
||||
if(isset($condition['orders'])){ |
||||
$orders = $condition['orders']; |
||||
$sortBy = $orders['ascending'] ? "ASC" : "DESC"; |
||||
$columnOrder = $orders['columns']; |
||||
foreach($columnOrder as $column){ |
||||
$builder = $builder->orderBy($alias.".".$column, $sortBy); |
||||
} |
||||
} |
||||
} |
||||
$data['builder'] = $builder; |
||||
return $data; |
||||
} |
||||
|
||||
private function groupWhere($oldBuilder, $groupWhere, $alias) |
||||
{ |
||||
$builder = $oldBuilder; |
||||
$listGroupWhere = $groupWhere; |
||||
$operator = $listGroupWhere['operator']; |
||||
$operatorGroup = $listGroupWhere['group_operator']; |
||||
$listWhere = $listGroupWhere['where']; |
||||
if(strtolower($operator)=="and"){ |
||||
$builder = $builder->where(function($query) use($operatorGroup, $listWhere, $alias){ |
||||
$no = 1; |
||||
foreach ($listWhere as $where) { |
||||
$value = $where['value']; |
||||
$column = $where['name']; |
||||
$operator = strtolower($where['logic_operator']); |
||||
$value2 = isset($where['value1']) ? $where['value1'] : ""; |
||||
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; |
||||
if($value && $value!="" && $value!=" "){ |
||||
if($operatorGroup=="and"){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
if($no==1){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
} |
||||
} |
||||
} |
||||
$no = $no+1; |
||||
} |
||||
}); |
||||
}else if(strtolower($operator)=="or"){ |
||||
$builder = $builder->orWhere(function($query) use($operatorGroup, $listWhere, $alias){ |
||||
$no = 1; |
||||
foreach ($listWhere as $where) { |
||||
$value = $where['value']; |
||||
$column = $where['name']; |
||||
$operator = strtolower($where['logic_operator']); |
||||
$value2 = isset($where['value1']) ? $where['value1'] : ""; |
||||
$tableColumn = isset($where['table_name']) ? $where['table_name'] : $alias; |
||||
if($value && $value!="" && $value!=" "){ |
||||
if($operatorGroup=="and"){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
if($no==1){ |
||||
$query = $this->whereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
}else{ |
||||
$query = $this->orWhereCondition($query, $operator, $tableColumn, $column, $value, $value2); |
||||
} |
||||
} |
||||
} |
||||
$no++; |
||||
} |
||||
}); |
||||
} |
||||
return $builder; |
||||
} |
||||
|
||||
private function whereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) |
||||
{ |
||||
$query = $oldQuery; |
||||
if($operator=="range"){ |
||||
$query = $query->whereBetween($tableColumn.".".$column, [$value, $value2]); |
||||
}else if($operator=="like"){ |
||||
$query = $query->where($tableColumn.".".$column, 'like', '%'.$value.'%'); |
||||
}else if($operator=="ilike"){ |
||||
$query = $query->where($tableColumn.".".$column, '~*', $value); |
||||
}else if($operator=="="){ |
||||
$query = $query->where($tableColumn.".".$column, $value); |
||||
}else if($operator=="in"){ |
||||
$query = $query->whereIn($tableColumn.".".$column, $value); |
||||
}else if($operator=="notin"){ |
||||
$query = $query->whereNotIn($tableColumn.".".$column, $value); |
||||
}else{ |
||||
$query = $query->where($tableColumn.".".$column, $operator, $value); |
||||
} |
||||
return $query; |
||||
} |
||||
|
||||
private function whereConditionSingleTable($oldQuery, $operator, $column, $value, $value2){ |
||||
$query = $oldQuery; |
||||
if($operator=="range"){ |
||||
$query = $query->whereBetween($column, [$value, $value2]); |
||||
}else if($operator=="like"){ |
||||
$query = $query->where($column, 'like', '%'.$value.'%'); |
||||
}else if($operator=="ilike"){ |
||||
$query = $query->where($column, '~*', $value); |
||||
}else if($operator=="="){ |
||||
$query = $query->where($column, $value); |
||||
}else if($operator=="in"){ |
||||
$query = $query->whereIn($column, $value); |
||||
}else if($operator=="notin"){ |
||||
$query = $query->whereNotIn($column, $value); |
||||
}else{ |
||||
$query = $query->where($column, $operator, $value); |
||||
} |
||||
return $query; |
||||
} |
||||
|
||||
private function orWhereCondition($oldQuery, $operator, $tableColumn, $column, $value, $value2) |
||||
{ |
||||
$query = $oldQuery; |
||||
if($operator=="range"){ |
||||
$query = $query->orWhereBetween($tableColumn.".".$column, [$value, $value2]); |
||||
}else if($operator=="like"){ |
||||
$query = $query->orWhere($tableColumn.".".$column, 'like', '%'.$value.'%'); |
||||
}else if($operator=="ilike"){ |
||||
$query = $query->where($tableColumn.".".$column, '~*', $value); |
||||
}else if($operator=="="){ |
||||
$query = $query->orWhere($tableColumn.".".$column, $value); |
||||
}else if($operator=="in"){ |
||||
$query = $query->orWhereIn($tableColumn.".".$column, $value); |
||||
}else if($operator=="notin"){ |
||||
$query = $query->orWhereNotIn($tableColumn.".".$column, $value); |
||||
}else{ |
||||
$query = $query->orWhere($tableColumn.".".$column, $operator, $value); |
||||
} |
||||
return $query; |
||||
} |
||||
|
||||
protected function calculateAllCost($activity_id, $proyek_id){ |
||||
$humanCostPlanning = $this->calculateAllHumanCost($activity_id, $proyek_id); |
||||
$materialCostPlanning = $this->calculateMaterialCost($activity_id, $proyek_id); |
||||
$toolsCostPlanning = 0; |
||||
|
||||
$allCost = $humanCostPlanning + $materialCostPlanning + $toolsCostPlanning; |
||||
return $allCost; |
||||
} |
||||
|
||||
private function calculateAllHumanCost($activity_id, $proyek_id) |
||||
{ |
||||
$dataHuman = UserToActivity::select("ahp.standart_rate as standart_rate","ahp.max_used as max_used", "ahp.cost_per_used as cost_per_used", "ahp.uom_standart_rate as uom_standart_rate") |
||||
->leftJoin("assign_hr_to_proyek as ahp", "assign_hr_to_activity.user_id", "=", "ahp.user_id") |
||||
->where("assign_hr_to_activity.activity_id", $activity_id)->where("assign_hr_to_activity.proyek_id", $proyek_id) |
||||
->where("ahp.proyek_id", $proyek_id) |
||||
->get(); |
||||
|
||||
$totalCost = 0; |
||||
foreach ($dataHuman as $human) { |
||||
$totalCost += $this->calculateHumanCost($human, $activity_id); |
||||
} |
||||
|
||||
return $totalCost; |
||||
} |
||||
|
||||
private function calculateHumanCost($human, $activity_id) |
||||
{ |
||||
$activity = Activity::find($activity_id); |
||||
$duration = $activity->duration; |
||||
$standarRate = $human->standart_rate; |
||||
$maxUsed = $human->max_used/100; |
||||
if ($human->uom_standart_rate == "Hour") { |
||||
$totalCost = ($standarRate*8*$duration)*$maxUsed; |
||||
return $totalCost; |
||||
} |
||||
$totalCost = ($standarRate*$duration)*$maxUsed; |
||||
return $totalCost; |
||||
} |
||||
|
||||
private function calculateMaterialCost($activity_id, $proyek_id) |
||||
{ |
||||
$totalCost = AssignMaterial::selectRaw("COALESCE(qty_planning,0)*COALESCE(budget,0) as totalCost") |
||||
->where("proyek_id", $proyek_id) |
||||
->where("activity_id", $activity_id) |
||||
->sum(AssignMaterial::raw("COALESCE(qty_planning, 0) * COALESCE(budget, 0)")); |
||||
return $totalCost; |
||||
} |
||||
|
||||
protected function getLoc($lat, $lng){ |
||||
// $response = Http::get(config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"); |
||||
// return $response->json; |
||||
|
||||
$url = config('api.nominatim') . "/reverse?lat=".$lat."&lon=".$lng."&format=json"; |
||||
// $token = config('api.adw_token'); |
||||
$response = $this->curlRequest($url); |
||||
return $response; |
||||
} |
||||
|
||||
private function curlRequest($url){ |
||||
$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); |
||||
} |
||||
|
||||
protected function addDetailK3($dataDetail, $report_id){ |
||||
foreach ($dataDetail as $value) { |
||||
$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); |
||||
} |
||||
} |
||||
} |
||||
|
@ -1,99 +1,114 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Divisi; |
||||
|
||||
class DivisiController extends Controller |
||||
{ |
||||
|
||||
private function getAllChildren($divisi, $depth = 0, $array = []) { |
||||
$divisi->depth = $depth; |
||||
array_push($array, $divisi); |
||||
foreach($divisi->children as $child){ |
||||
$array = $this->getAllChildren($child, $depth + 1, $array); |
||||
} |
||||
return $array; |
||||
} |
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'name' => 'required', |
||||
'description' => 'string', |
||||
'parent' => 'integer' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = Divisi::create($data); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500]); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data created!','code'=>200]); |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = Divisi::find($id); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=> 'Update failed!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = Divisi::find($id); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); |
||||
|
||||
$delete = $data->delete(); |
||||
|
||||
if(!$delete) |
||||
return response()->json(['status'=>'failed','message'=> 'Delete failed!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200); |
||||
} |
||||
|
||||
public function search() |
||||
{ |
||||
return $this->list(); |
||||
// cant use builder for this case |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$parentMenus = Divisi::whereNull('parent')->with('children')->get(); |
||||
$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); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Divisi; |
||||
|
||||
class DivisiController extends Controller |
||||
{ |
||||
|
||||
private function getAllChildren($divisi, $depth = 0, $array = []) { |
||||
$divisi->depth = $depth; |
||||
array_push($array, $divisi); |
||||
foreach($divisi->children as $child){ |
||||
$array = $this->getAllChildren($child, $depth + 1, $array); |
||||
} |
||||
return $array; |
||||
} |
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'name' => 'string|required|unique:m_divisi,name', |
||||
'description' => 'nullable|string', |
||||
'parent' => 'nullable|integer', |
||||
'color'=>'nullable|string|max:10' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = Divisi::create($data); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data','code'=> 500]); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data created!','code'=>200]); |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$this->validate($request, [ |
||||
'name' => 'string|required', |
||||
'description' => 'nullable|string', |
||||
'parent' => 'nullable|integer' |
||||
]); |
||||
$data = Divisi::find($id); |
||||
|
||||
$request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_divisi,name']) : ''; |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=> 'Update failed!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = Divisi::find($id); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=> 'Data not found!','code'=> 404], 404); |
||||
|
||||
$delete = $data->delete(); |
||||
|
||||
if(!$delete) |
||||
return response()->json(['status'=>'failed','message'=> 'Delete failed!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=> 200], 200); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_divisi'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
//return $this->list(); |
||||
// cant use builder for this case |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$parentMenus = Divisi::whereNull('parent')->with('children')->get(); |
||||
$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); |
||||
} |
||||
} |
||||
|
@ -1,169 +1,199 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\HumanResource; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\UserToProyek; |
||||
|
||||
class HumanResourceController extends Controller |
||||
{ |
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'role_id' => 'required', |
||||
'name' => 'required', |
||||
'ktp_number' => 'required', |
||||
'employee_type' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
if(isset($request->password) && $request->password!=""){ |
||||
$data['password'] = md5($request->password); |
||||
} |
||||
|
||||
$result = HumanResource::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'Human Resource Pool successfull created','code'=>200]); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Human Resource Pool failed created','code'=>400]); |
||||
} |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = HumanResource::find($id); |
||||
|
||||
if($result){ |
||||
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==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
|
||||
$humanresource = HumanResource::find($id); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
if(isset($request->password) && $request->password!="" ){ |
||||
$data['password'] = md5($request->password); |
||||
} |
||||
|
||||
if($humanresource){ |
||||
$result = $humanresource->update($data); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data Human Resource Pool not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'Human Resource Pool successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Human Resource Pool failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = HumanResource::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data Human Resource Pool not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'Human Resource Pool successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'Human Resource Pool failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_users'); |
||||
$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 = HumanResource::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 human resource, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function select(Request $request){ |
||||
|
||||
$search = $request->query('search'); |
||||
|
||||
$idActivity = (int)$request->query('idact'); |
||||
$idProyek = (int)$request->query('idProyek'); |
||||
|
||||
$forbidden = []; |
||||
|
||||
if($idActivity && $idActivity > 0){ |
||||
$dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get(); |
||||
foreach($dataF as $val){ |
||||
$forbidden[] = $val->user_id; |
||||
} |
||||
} |
||||
|
||||
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') |
||||
->where("assign_hr_to_proyek.proyek_id", $idProyek)->where("m_users.name", 'like', '%'.$search.'%')->whereNotIn("m_users.id", $forbidden)->get(); |
||||
}else{ |
||||
$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); |
||||
} |
||||
|
||||
public function checkOldPassword(Request $request, $id) |
||||
{ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
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); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\HumanResource; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\UserToProyek; |
||||
use Illuminate\Support\Facades\Artisan; |
||||
|
||||
class HumanResourceController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'role_id' => 'required', |
||||
'name' => 'required', |
||||
'ktp_number' => 'required|numeric|unique:m_users,ktp_number', |
||||
'employee_type' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
if (isset($request->password) && $request->password != "") { |
||||
$data['password'] = md5($request->password); |
||||
} |
||||
|
||||
$result = HumanResource::create($data); |
||||
|
||||
if ($result) { |
||||
return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfull created', 'code' => 200]); |
||||
} else { |
||||
return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed created', 'code' => 400]); |
||||
} |
||||
} |
||||
|
||||
public function edit($id) |
||||
{ |
||||
if (!$id || (int) $id < 0 || $id == "") { |
||||
return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = HumanResource::find($id); |
||||
|
||||
if ($result) { |
||||
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 == "") { |
||||
return response()->json(['status' => 'failed', 'message' => 'id is required!', 'code' => 400], 400); |
||||
} |
||||
$humanresource = HumanResource::find($id); |
||||
|
||||
$request->ktp_number !== $humanresource['ktp_number'] ? $this->validate($request,['ktp_number'=>'unique:m_users,ktp_number|numeric']) : ''; |
||||
$request->email !== $humanresource['email'] ? $this->validate($request,['email'=>'unique:m_users,email|email']) : ''; |
||||
$request->password ? $this->validate($request,['password'=>'required|min:8']) : ''; |
||||
|
||||
$data = $request->all(); |
||||
|
||||
if (isset($request->password) && $request->password != "") { |
||||
$data['password'] = md5($request->password); |
||||
} |
||||
|
||||
if (isset($data['username']) && HumanResource::where('username', $data['username'])->where('id', '<>', $id)->exists()) { |
||||
return response()->json(['status' => 'failed', 'message' => 'Username already exists!', 'code' => 400], 400); |
||||
} |
||||
|
||||
if ($humanresource) { |
||||
$result = $humanresource->update($data); |
||||
} else { |
||||
return response()->json(['status' => 'failed', 'message' => 'data Human Resource Pool not found!', 'code' => 400], 400); |
||||
die(); |
||||
} |
||||
|
||||
if ($result) { |
||||
return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfully updated!', 'code' => 200], 200); |
||||
} else { |
||||
return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed updated!', 'code' => 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = HumanResource::find($id); |
||||
|
||||
if ($data) { |
||||
$delete = $data->delete(); |
||||
} else { |
||||
return response()->json(['status' => 'failed', 'message' => 'data Human Resource Pool not found!', 'code' => 400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if ($delete) { |
||||
return response()->json(['status' => 'success', 'message' => 'Human Resource Pool successfully deleted!', 'code' => 200], 200); |
||||
} else { |
||||
return response()->json(['status' => 'failed', 'message' => 'Human Resource Pool failed deleted!', 'code' => 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_users'); |
||||
$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 = HumanResource::select('id', 'name', 'role_id')->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 human resource, please try again later!', 'code' => 400], 400); |
||||
} |
||||
} |
||||
|
||||
public function select(Request $request) |
||||
{ |
||||
|
||||
$search = $request->query('search'); |
||||
|
||||
$idActivity = (int)$request->query('idact'); |
||||
$idProyek = (int)$request->query('idProyek'); |
||||
|
||||
$forbidden = []; |
||||
|
||||
if ($idActivity && $idActivity > 0) { |
||||
$dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get(); |
||||
foreach ($dataF as $val) { |
||||
$forbidden[] = $val->user_id; |
||||
} |
||||
} |
||||
|
||||
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') |
||||
->where("assign_hr_to_proyek.proyek_id", $idProyek) |
||||
->where(function ($query) { |
||||
$query->where("assign_hr_to_proyek.is_customer", "!=", true) |
||||
->orWhereNull("assign_hr_to_proyek.is_customer"); |
||||
}) |
||||
->where("m_users.name", 'like', '%' . $search . '%') |
||||
->whereNotIn("m_users.id", $forbidden)->get(); |
||||
} else { |
||||
$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) |
||||
->where(function ($query) { |
||||
$query->where("assign_hr_to_proyek.is_customer", "!=", true) |
||||
->orWhereNull("assign_hr_to_proyek.is_customer"); |
||||
}) |
||||
->join('m_users', 'm_users.id', '=', 'assign_hr_to_proyek.user_id') |
||||
->whereNotIn("m_users.id", $forbidden) |
||||
->get(); |
||||
} |
||||
|
||||
return response()->json($data); |
||||
} |
||||
|
||||
public function checkOldPassword(Request $request, $id) |
||||
{ |
||||
if (!$id || (int) $id < 0 || $id == "") { |
||||
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'); |
||||
} |
||||
} |
||||
|
@ -1,151 +1,159 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Menu; |
||||
use App\Models\RoleMenu; |
||||
|
||||
class MenuController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'icon' => 'required', |
||||
'name' => 'required', |
||||
'url' => 'required', |
||||
'sequence' => 'required', |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = Menu::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'add data menu successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add data menu failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = Menu::find($id); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data menu, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id) |
||||
{ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
|
||||
$data = Menu::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data menu successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = Menu::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_menu'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function listMenu($id) |
||||
{ |
||||
$dataParent = RoleMenu::select("m_menu.*") |
||||
->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id') |
||||
->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id') |
||||
->whereNull('m_menu.parent_id') |
||||
->where('m_roles.id', $id) |
||||
->orderBy('m_menu.sequence', 'ASC') |
||||
->get(); |
||||
|
||||
$finalData = []; |
||||
foreach($dataParent as $data){ |
||||
$data->children = $this->getChildrenMenu($data->id, $id); |
||||
$finalData[] = $data; |
||||
} |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$finalData], 200); |
||||
} |
||||
|
||||
protected function getChildrenMenu($id, $role_id) |
||||
{ |
||||
$dataChildren = RoleMenu::select("m_menu.*") |
||||
->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) |
||||
->where('m_menu.parent_id', $id) |
||||
->orderBy('m_menu.sequence', 'ASC') |
||||
->get(); |
||||
$children = []; |
||||
if($dataChildren){ |
||||
foreach($dataChildren as $data) |
||||
{ |
||||
$data->children = $this->getChildrenMenu($data->id, $role_id); |
||||
$children[] = $data; |
||||
} |
||||
} |
||||
return $children; |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = 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); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Menu; |
||||
use App\Models\RoleMenu; |
||||
|
||||
class MenuController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'icon' => 'required', |
||||
'name' => 'string|required|unique:m_menu,name', |
||||
'url' => 'required|unique:m_menu,url', |
||||
'sequence' => 'required|integer', |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = Menu::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'add data menu successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add data menu failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = Menu::find($id); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data menu, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id) |
||||
{ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
$this->validate($request, [ |
||||
'icon' => 'required', |
||||
'name' => 'string|required', |
||||
'url' => 'required', |
||||
'sequence' => 'required|integer', |
||||
]); |
||||
$data = Menu::find($id); |
||||
|
||||
$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($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data menu successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = Menu::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_menu'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function listMenu($id) |
||||
{ |
||||
$dataParent = RoleMenu::select("m_menu.*") |
||||
->join('m_menu', 'm_menu.id', '=', 't_roles_menu.menu_id') |
||||
->join('m_roles', 'm_roles.id', '=', 't_roles_menu.role_id') |
||||
->whereNull('m_menu.parent_id') |
||||
->where('m_roles.id', $id) |
||||
->orderBy('m_menu.sequence', 'ASC') |
||||
->get(); |
||||
|
||||
$finalData = []; |
||||
foreach($dataParent as $data){ |
||||
$data->children = $this->getChildrenMenu($data->id, $id); |
||||
$finalData[] = $data; |
||||
} |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$finalData], 200); |
||||
} |
||||
|
||||
protected function getChildrenMenu($id, $role_id) |
||||
{ |
||||
$dataChildren = RoleMenu::select("m_menu.*") |
||||
->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) |
||||
->where('m_menu.parent_id', $id) |
||||
->orderBy('m_menu.sequence', 'ASC') |
||||
->get(); |
||||
$children = []; |
||||
if($dataChildren){ |
||||
foreach($dataChildren as $data) |
||||
{ |
||||
$data->children = $this->getChildrenMenu($data->id, $role_id); |
||||
$children[] = $data; |
||||
} |
||||
} |
||||
return $children; |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = 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); |
||||
} |
||||
} |
||||
} |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,355 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use App\Models\{ |
||||
User, |
||||
Project, |
||||
Activity, |
||||
HierarchyFtth, |
||||
ProjectComment, |
||||
VersionGantt, |
||||
UserToProyek, |
||||
UserToActivity, |
||||
Presence |
||||
}; |
||||
use Illuminate\Http\Request; |
||||
use Illuminate\Support\Facades\DB; |
||||
use App\Helpers\MasterFunctionsHelper; |
||||
use Carbon\Carbon; |
||||
|
||||
class ProjectCarausellController extends Controller |
||||
{ |
||||
// public function invoke($id) |
||||
// { |
||||
// $dateStart = Carbon::now()->startOfDay(); |
||||
// $dateEnd = Carbon::now()->endOfDay(); |
||||
// // Mengatur waktu awal bulan dan mengurangkan 1 tahun |
||||
// $startDate = Carbon::now()->startOfMonth()->subYear()->format('Y-m-d'); |
||||
// // Mengatur waktu saat ini dan mengurangkan 1 tahun |
||||
// $endDate = Carbon::now()->subYear()->format('Y-m-d'); |
||||
|
||||
// if(empty($id) || !is_int((int)$id)){ |
||||
// return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
// } |
||||
|
||||
// $result = Project::select('id','nama','budget_health','kode_sortname','pm_id','rencana_biaya','company','scurve','calculation_status')->find($id); |
||||
// if(!$result){ |
||||
// return response()->json(['status'=>'failed','message'=> 'Project not found!','code'=> 404], 404); |
||||
// } |
||||
// $ganttData = VersionGantt::where('proyek_id', $id) |
||||
// ->select('id', 'name_version','hierarchy_ftth_id','cost_to_complete') |
||||
// ->get(); |
||||
|
||||
// // Get Id Gantt & hierarchy_ftth_id |
||||
// $gantt_id = $ganttData->pluck('id')->toArray(); |
||||
// $hierarchy_ftth_id = $ganttData->pluck('hierarchy_ftth_id')->toArray(); |
||||
|
||||
// // Heararchy |
||||
// $finalData = []; |
||||
// if($hierarchy_ftth_id){ |
||||
// $ftth = HierarchyFtth::whereIn('id',$hierarchy_ftth_id)->get(); |
||||
// if($ftth->first() != null) |
||||
// { |
||||
// array_push($finalData, $ftth->first()); |
||||
// } |
||||
// if($ftth->where('parent_id','!=', null)->first()){ |
||||
// $this->getParents($finalData, $ftth->pluck('parent_id')->toArray()); |
||||
// } |
||||
// } else { |
||||
// return $finalData; |
||||
// } |
||||
|
||||
// // SCurve |
||||
// $SCurve = MasterFunctionsHelper::getSCurveCarausell($result['id'],$gantt_id,'week'); |
||||
|
||||
// // Overdue Activities |
||||
// $endDate = Activity::where('proyek_id', $result['id']) |
||||
// ->orderByDesc('end_date') |
||||
// ->value('end_date'); |
||||
// $overdueActivities = Activity::whereIn('version_gantt_id', $gantt_id)->whereNotNull('parent_id')->where('persentase_progress', '!=', 100)->whereDate('end_date','<=',$endDate)->orderBy('end_date', 'asc')->get(); |
||||
|
||||
// // Project Comment |
||||
// $projectComment = ProjectComment::query() |
||||
// ->select('project_id','gantt_id','comment','created_at') |
||||
// ->where('project_id',$result['id']) |
||||
// ->whereIn('gantt_id',$gantt_id) |
||||
// ->get(); |
||||
|
||||
// // Manpower |
||||
// $manCount = UserToProyek::where('proyek_id', $result['id'])->count(); |
||||
// // Assigned |
||||
// $utAct = UserToActivity::query() |
||||
// ->whereIn('version_gantt_id', $gantt_id) |
||||
// ->get(); |
||||
// // Actual |
||||
// $presence = Presence::whereBetween('clock_in', [$dateStart, $dateEnd]) |
||||
// ->select('m_users.name','m_users.ktp_number') |
||||
// ->join('m_users','t_clock_in_out.user_id','m_users.id') |
||||
// ->get(); |
||||
|
||||
// // Report distribution |
||||
// $reportsDistribution = DB::table('assign_material_to_activity as ama') |
||||
// ->select('u.name', 'a.name as activity_name', 'ama.qty_planning', 'ram.qty as qty_real','rm.description as material_name', 'rm.uom as material_unit', |
||||
// 'ram.lat', 'ram.lon', 'ram.description as report_notes', 'ram.report_date') |
||||
// ->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id') |
||||
// ->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id') |
||||
// ->join('m_activity as a', 'a.id', '=', 'ama.activity_id') |
||||
// ->join('m_users as u', 'u.id', '=', 'ram.user_id') |
||||
// ->where('ama.proyek_id', '=', $result['id']) |
||||
// ->whereNotNull('ram.lat') |
||||
// ->whereBetween('ram.report_date', [$startDate, $startDate]); |
||||
|
||||
// // Check Existing |
||||
// $actualStartExist = Activity::whereIn('version_gantt_id',$gantt_id)->whereNotNull('actual_start')->exists(); |
||||
// $actualEndExist = Activity::whereIn('version_gantt_id',$gantt_id)->exists(); |
||||
|
||||
// $query = Activity::query()->whereIn('version_gantt_id', $gantt_id); |
||||
// // Start |
||||
// if ($actualStartExist) { |
||||
// $startDate = $query->select('version_gantt_id',DB::raw('MIN(start_date) as min_start')) |
||||
// ->groupBy('version_gantt_id') |
||||
// ->get(); |
||||
// } else { |
||||
// $startDate = $query->select('version_gantt_id',DB::raw('MIN(start_date) as min_start','version_gantt_id')) |
||||
// ->groupBy('version_gantt_id') |
||||
// ->orderBy('min_start', 'ASC') |
||||
// ->get(); |
||||
// } |
||||
// // End |
||||
// if($actualEndExist) |
||||
// { |
||||
// $maxIds = $query->selectRaw('MAX(id) as max_id') |
||||
// ->groupBy('version_gantt_id') |
||||
// ->pluck('max_id', 'version_gantt_id'); |
||||
|
||||
// $endDate = Activity::whereIn('id', $maxIds)->select('end_date','version_gantt_id')->get(); |
||||
// } |
||||
|
||||
// $plannedStart = $query->selectRaw('MIN(planned_start) as min_planned_start, version_gantt_id') |
||||
// ->groupBy('version_gantt_id') |
||||
// ->orderBy('min_planned_start') |
||||
// ->get(); |
||||
// $plannedEnd = $query->selectRaw('MAX(planned_end) as max_planned_end, version_gantt_id') |
||||
// ->groupBy('version_gantt_id') |
||||
// ->orderByDesc('max_planned_end') |
||||
// ->get(); |
||||
|
||||
// $projectManager = User::whereId($result['pm_id'])->value('name'); |
||||
// $key =1; |
||||
// foreach($ganttData as $gantt) |
||||
// { |
||||
// $pStart =$plannedStart->where('version_gantt_id',$gantt['id'])->first(); |
||||
// $actStart =$startDate->where('version_gantt_id',$gantt['id'])->first(); |
||||
// $actEnd =$endDate->where('version_gantt_id',$gantt['id'])->first(); |
||||
// $pEnd =$plannedEnd->where('version_gantt_id',$gantt['id'])->first(); |
||||
// $matchingActivities = $overdueActivities->where('version_gantt_id', $gantt['id']); |
||||
// $matchingProjectComment = $projectComment->where('version_gantt_id', $gantt['id']); |
||||
// $usAtc = $utAct->where('version_gantt_id', $gantt['id']); |
||||
// $arr[] = |
||||
// [ |
||||
// 'gantt_id'=>$gantt['id'], |
||||
// 'projectManager'=>$projectManager, |
||||
// 'name_version'=>$gantt['name_version'], |
||||
// 'cost_to_complete'=>$gantt['cost_to_complete'], |
||||
// 'schedule' => [ |
||||
// 'plannedStart'=> $pStart['min_planned_start'], |
||||
// 'actual_start'=>$actStart['min_start'], |
||||
// 'plannedFinish'=>$pEnd['max_planned_end'], |
||||
// 'estimatedFinish'=>$actEnd['end_date'] |
||||
// ], |
||||
// 'manpower'=>$manCount, |
||||
// 'assigned'=>$usAtc->toArray(), |
||||
// 'actual'=>count($presence->toArray()), |
||||
// 'overdue_activities'=>$matchingActivities->toArray(), |
||||
// 'project_comment'=>$matchingProjectComment->toArray(), |
||||
// 'hierarchy'=>$finalData, |
||||
// 'proyek'=>$result, |
||||
// 'key'=>$key++ |
||||
// ]; |
||||
// } |
||||
// return response()->json(['status'=>'success','code'=> 200,'data'=>$arr,'report_distribution'=>$reportsDistribution,'sCurve'=>$SCurve, 'count'=>count($arr)], 200); |
||||
// } |
||||
|
||||
// public function getParents(&$data, $id){ |
||||
// $ftth = HierarchyFtth::whereIn('id',$id)->get(); |
||||
// array_push($data, $ftth); |
||||
// if ($ftth->pluck('parent_id')->toArray()) { |
||||
// $this->getParents($data, $ftth->pluck('parent_id')->toArray()); |
||||
// } |
||||
// } |
||||
|
||||
public function invoke() |
||||
{ |
||||
// Data Master |
||||
// Mengatur waktu awal bulan dan mengurangkan 1 tahun |
||||
$startDate = Carbon::now()->startOfMonth()->subYear()->format('Y-m-d'); |
||||
// Mengatur waktu saat ini dan mengurangkan 1 tahun |
||||
$endDate = Carbon::now()->subYear()->format('Y-m-d'); |
||||
$ganttData = VersionGantt::query() |
||||
->select('id', 'name_version','hierarchy_ftth_id','cost_to_complete','proyek_id') |
||||
->get(); |
||||
$projectData = Project::query() |
||||
->select("id","nama","kode_sortname","pm_id","budget_health","calculation_status","mulai_proyek","akhir_proyek","rencana_biaya","company","scurve") |
||||
->get(); |
||||
// nested looping |
||||
$arr = []; |
||||
foreach($projectData as $project) { |
||||
$ganttForProject = []; |
||||
foreach ($ganttData as $gantt) { |
||||
if ($gantt['proyek_id'] === $project['id']) { |
||||
// Gantt |
||||
$ganttForProject[] = [ |
||||
"gantt_id" => $gantt['id'], |
||||
'proyek_id' => $gantt['proyek_id'], |
||||
"name_version" => $gantt['name_version'], |
||||
"hierarchy_ftth_id" => $gantt['hierarchy_ftth_id'], |
||||
"cost_to_complete" => $gantt['cost_to_complete'], |
||||
]; |
||||
// Activity |
||||
$activity = Activity::query() |
||||
->select('id','name','proyek_id','version_gantt_id','type_activity','parent_id','kode_sortname','rencana_biaya','start_date','end_date','biaya_actual','persentase_bobot','persentase_progress','planned_start','planned_end','actual_start','actual_end') |
||||
->whereNull('parent_id') |
||||
->where([ |
||||
["proyek_id", $project['id']], |
||||
["version_gantt_id", $gantt['id']] |
||||
]) |
||||
->first(); |
||||
$actualStartExist = Activity::query() |
||||
->where('version_gantt_id', $gantt['id']) |
||||
->whereNotNull('actual_start') |
||||
->exists(); |
||||
$actualEndExist = Activity::query() |
||||
->where('version_gantt_id', $gantt['id']) |
||||
->exists(); |
||||
$query = Activity::where('version_gantt_id', $gantt['id']); |
||||
|
||||
if ($actualStartExist) { |
||||
$startDate = $query->orderBy('actual_start')->value('start_date'); |
||||
} else { |
||||
$startDate = $query->orderBy('start_date')->value('start_date'); |
||||
} |
||||
if($actualEndExist) |
||||
{ |
||||
$maxEndDate = $query->max('id'); |
||||
$endDate = $query->where('id',$maxEndDate)->first()->end_date; |
||||
} |
||||
|
||||
$plannedStart = Activity::where('version_gantt_id', $gantt['id']) |
||||
->orderBy('planned_start') |
||||
->value('planned_start'); |
||||
$plannedEnd = Activity::where('version_gantt_id', $gantt['id']) |
||||
->orderByDesc('planned_end') |
||||
->value('planned_end'); |
||||
|
||||
// SCurve |
||||
$req = (object)[ |
||||
'project_id' => $project['id'], |
||||
'gantt_id' => $gantt['id'], |
||||
'period' => 'week', |
||||
]; |
||||
$SCurve = MasterFunctionsHelper::getSCurveCarausell($req); |
||||
|
||||
// Overdue |
||||
$endDate = Activity::where('proyek_id', $project['id']) |
||||
->orderByDesc('end_date') |
||||
->value('end_date'); |
||||
$overdueActivities = Activity::query() |
||||
->where([ |
||||
['version_gantt_id', $gantt['id']], |
||||
['persentase_progress', '!=', 100] |
||||
]) |
||||
->whereNotNull('parent_id') |
||||
->whereDate('end_date','<=',$endDate) |
||||
->orderBy('end_date', 'asc') |
||||
->get(); |
||||
|
||||
// Manpower |
||||
$manCount = UserToProyek::where('proyek_id', $project['id'])->count(); |
||||
// Assigned |
||||
$assigned = UserToActivity::query() |
||||
->select('assign_hr_to_activity.proyek_id', 'assign_hr_to_activity.user_id', 'm_activity.id', 'm_activity.name', 'm_activity.start_date', 'm_activity.end_date') |
||||
->join('m_activity', 'm_activity.id', '=', 'assign_hr_to_activity.activity_id') |
||||
->where('assign_hr_to_activity.version_gantt_id', $gantt['id']) |
||||
->get(); |
||||
// Project Comment |
||||
$projectComment = ProjectComment::query() |
||||
->select('m_users.name','m_users.username','m_project_comment.project_id','m_project_comment.gantt_id','m_project_comment.comment','m_project_comment.created_at') |
||||
->join('m_users','m_project_comment.sender_id','m_users.id') |
||||
->where([ |
||||
['project_id',$project['id']], |
||||
['gantt_id',$gantt['id']] |
||||
]) |
||||
->get(); |
||||
// Hierarchy |
||||
$finalData = []; |
||||
$ganttHierarchy = VersionGantt::find($gantt['id']); |
||||
if ($ganttHierarchy->hierarchy_ftth_id) { |
||||
$ftth = HierarchyFtth::find($ganttHierarchy->hierarchy_ftth_id); |
||||
array_push($finalData, $ftth); |
||||
if($ftth->parent_id){ |
||||
$this->getParents($finalData, $ftth->parent_id); |
||||
} |
||||
}else{ |
||||
$finalData = $finalData; |
||||
} |
||||
|
||||
$reports = DB::table('assign_material_to_activity as ama') |
||||
->select('u.name', 'a.name as activity_name', 'ama.qty_planning', 'ram.qty as qty_real','rm.description as material_name', 'rm.uom as material_unit', |
||||
'ram.lat', 'ram.lon', 'ram.description as report_notes', 'ram.report_date') |
||||
->join('report_activity_material as ram', 'ram.assign_material_id', '=', 'ama.id') |
||||
->join('m_req_material as rm', 'rm.id', '=', 'ama.material_id') |
||||
->join('m_activity as a', 'a.id', '=', 'ama.activity_id') |
||||
->join('m_users as u', 'u.id', '=', 'ram.user_id') |
||||
->where('ama.proyek_id', '=', $project['id']) |
||||
->whereNotNull('ram.lat') |
||||
->whereBetween('ram.report_date', [$startDate, $endDate]); |
||||
} |
||||
} |
||||
|
||||
$projectManager = User::where('id', $project['pm_id'])->value('name'); |
||||
|
||||
$arr[]= [ |
||||
"project"=> [ |
||||
"id"=>$project['id'], |
||||
"pm_id"=>$project['pm_id'], |
||||
"nama"=>$project['nama'], |
||||
"kode_sortname"=>$project['kode_sortname'], |
||||
"budget_health"=>$project['budget_health'], |
||||
"calculation_status"=>$project['calculation_status'], |
||||
"mulai_proyek"=>$project['mulai_proyek'], |
||||
"akhir_proyek"=>$project['akhir_proyek'], |
||||
"rencana_biaya"=>$project['rencana_biaya'], |
||||
"company"=>$project['company'], |
||||
"scurve"=>$project['scurve'], |
||||
"gantt"=>$ganttForProject |
||||
], |
||||
"hierarchy"=>$finalData, |
||||
"manpower"=>$manCount, |
||||
"assigned"=>$assigned, |
||||
"actual"=>0, |
||||
"project_comment"=>$projectComment, |
||||
"project_manager"=> $projectManager, |
||||
"activity" => [ |
||||
"data" => $activity, |
||||
"start_date"=>$startDate, |
||||
"end_date"=>$endDate, |
||||
"planned_start"=>$plannedStart, |
||||
"planned_end"=>$plannedEnd |
||||
], |
||||
"report_distribution"=>$reports, |
||||
"overdueActivities"=>$overdueActivities, |
||||
"SCurve"=>$SCurve |
||||
]; |
||||
} |
||||
return response()->json(['status'=>'success','code'=> 200,'data'=>$arr, "count"=>count($arr)], 200); |
||||
} |
||||
|
||||
public function getParents(&$data, $id){ |
||||
$ftth = HierarchyFtth::find($id); |
||||
array_push($data, $ftth); |
||||
if ($ftth->parent_id) { |
||||
$this->getParents($data, $ftth->parent_id); |
||||
} |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
@ -1,270 +1,270 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\ReportActivity; |
||||
use App\Models\Activity; |
||||
use App\Models\Image; |
||||
use Datatables; |
||||
|
||||
class ReportActivityController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
if($request->has('gantt')){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'user_id' => 'required', |
||||
'report_date' => 'required', |
||||
'job_count_report' => 'required' |
||||
]); |
||||
}else{ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'user_id' => 'required', |
||||
'report_date' => 'required', |
||||
'job_count_report' => 'required', |
||||
'lat' => 'required', |
||||
'lon' => 'required', |
||||
]); |
||||
} |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = ReportActivity::create($data); |
||||
|
||||
if($result){ |
||||
$this->countForProgress($request->activity_id); |
||||
if($request->hasFile("files")){ |
||||
$this->uploadImage($request->file('files'), $result->id); |
||||
} |
||||
return response()->json(['status'=>'success','message'=>'add report activity, update progress activity successfully!','code'=>200,'last_inserted_id'=>$result->id], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add report activity failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
private function uploadImage($files, $ref_id) |
||||
{ |
||||
$dokumen = $files; |
||||
$extension = $dokumen->extension(); |
||||
$name = $ref_id.date("YmdHis").".".$extension; |
||||
$resultMove = $dokumen->move($this->pathImage, $name); |
||||
if($resultMove){ |
||||
$data = [ |
||||
'ref_id' => (int)$ref_id, |
||||
'image' => $name, |
||||
'category' => "report_activity" |
||||
]; |
||||
|
||||
$result = Image::create($data); |
||||
|
||||
if($result){ |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = ReportActivity::select("report_activity.*", "u.name as user_name")->where("report_activity.id", $id)->join("m_users as u", "u.id", "=", "report_activity.user_id")->first(); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data report activity, 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 = ReportActivity::find($id); |
||||
|
||||
if($data){ |
||||
$dataUpdate = $request->all(); |
||||
$result = $data->update($dataUpdate); |
||||
if($result){ |
||||
if($request->hasFile("files")){ |
||||
$this->updateImage($request->file('files'), $id); |
||||
} |
||||
$this->countForProgress($data->activity_id); |
||||
return response()->json(['status'=>'success','message'=>'data report activity successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity failed updated!','code'=>400], 400); |
||||
} |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
} |
||||
|
||||
public function updateImage($files, $ref_id) |
||||
{ |
||||
$image = Image::where("ref_id", $ref_id)->where("category", "report_activity")->first(); |
||||
if($image){ |
||||
if(file_exists($this->pathImage.$image->image)){ |
||||
unlink($this->pathImage.$image->image); |
||||
} |
||||
$image->delete(); |
||||
} |
||||
$dokumen = $files; |
||||
$extension = $dokumen->extension(); |
||||
$name = $ref_id.date("YmdHis").".".$extension; |
||||
$resultMove = $dokumen->move($this->pathImage, $name); |
||||
if($resultMove){ |
||||
$data = [ |
||||
'ref_id' => (int)$ref_id, |
||||
'image' => $name, |
||||
'category' => "report_activity" |
||||
]; |
||||
|
||||
$result = Image::create($data); |
||||
|
||||
if($result){ |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = ReportActivity::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
$image = Image::where("ref_id", $id)->where("category", "report_activity")->first(); |
||||
if($image){ |
||||
if(file_exists($this->pathImage.$image->image)){ |
||||
unlink($this->pathImage.$image->image); |
||||
} |
||||
$image->delete(); |
||||
} |
||||
return response()->json(['status'=>'success','message'=>'data report activity successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
private function countForProgress($id) |
||||
{ |
||||
|
||||
$totalJobs = ReportActivity::where('activity_id', $id)->sum("job_count_report"); |
||||
$dataActivity = Activity::find($id); |
||||
$jobsActivity = (int)$dataActivity->jumlah_pekerjaan; |
||||
|
||||
if ($jobsActivity < 1) { |
||||
return false; |
||||
} |
||||
|
||||
if ($totalJobs < 1) { |
||||
return false; |
||||
} |
||||
|
||||
$persentaseActual = ($totalJobs/$jobsActivity)*100; |
||||
$dataUpdate = array( |
||||
"persentase_progress" => $persentaseActual, |
||||
"updated_by" => $this->currentName |
||||
); |
||||
return $dataActivity->update($dataUpdate); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'report_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = ReportActivity::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 report activity, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function searchPoint(Request $request) { |
||||
$dataPayload = $request->all(); |
||||
$reqActivityId = []; |
||||
foreach ($dataPayload['project_id'] as $val) { |
||||
$reqActivityId[] = $this->getActivityByProjectId($val); |
||||
} |
||||
|
||||
$activity_id = []; |
||||
$getPoints = false; |
||||
|
||||
if (count($reqActivityId) > 0) { |
||||
for ($i=0; $i < count($reqActivityId); $i++) { |
||||
if (count($reqActivityId[$i]) > 0) { |
||||
foreach($reqActivityId[$i] as $reqAct) { |
||||
array_push($activity_id, $reqAct->id); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (count($activity_id) > 0) { |
||||
$getPoints = ReportActivity::select('report_activity.*', 'm_activity.name as activity_name', 'm_activity.jumlah_pekerjaan', 'm_proyek.nama as proyek_name') |
||||
->leftJoin('m_activity', 'm_activity.id', '=', 'report_activity.activity_id') |
||||
->leftJoin('m_proyek', 'm_proyek.id', '=', 'm_activity.proyek_id') |
||||
->whereIn('report_activity.activity_id', $activity_id)->get(); |
||||
} |
||||
|
||||
if($getPoints){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$getPoints, 'totalRecord'=>count($getPoints)], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get list points, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function getActivityByProjectId($projectId) { |
||||
$data = Activity::select('id')->where('proyek_id', $projectId)->get(); |
||||
return $data; |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$data = ReportActivity::select("report_activity.*", "u.name as user_name") |
||||
->join("m_users as u", "u.id", "=", "report_activity.user_id") |
||||
->where('report_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_report_delete"><i class="fa fa-trash"></i></a>'; |
||||
$actionBtn .= ' <a href="javascript:void(0)" data-id="'.$row->id.'" class="edit btn btn-primary btn-sm btn_report_edit"><i class="fa fa-edit"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->editColumn('report_date', function($row) { |
||||
$date = date_create($row->report_date); |
||||
return date_format($date,"d-m-Y H:i:s"); |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\ReportActivity; |
||||
use App\Models\Activity; |
||||
use App\Models\Image; |
||||
use Datatables; |
||||
|
||||
class ReportActivityController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
if($request->has('gantt')){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'user_id' => 'required', |
||||
'report_date' => 'required', |
||||
'job_count_report' => 'required' |
||||
]); |
||||
}else{ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'user_id' => 'required', |
||||
'report_date' => 'required', |
||||
'job_count_report' => 'required', |
||||
'lat' => 'required', |
||||
'lon' => 'required', |
||||
]); |
||||
} |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = ReportActivity::create($data); |
||||
|
||||
if($result){ |
||||
$this->countForProgress($request->activity_id); |
||||
if($request->hasFile("files")){ |
||||
$this->uploadImage($request->file('files'), $result->id); |
||||
} |
||||
return response()->json(['status'=>'success','message'=>'add report activity, update progress activity successfully!','code'=>200,'last_inserted_id'=>$result->id], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add report activity failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
private function uploadImage($files, $ref_id) |
||||
{ |
||||
$dokumen = $files; |
||||
$extension = $dokumen->extension(); |
||||
$name = $ref_id.date("YmdHis").".".$extension; |
||||
$resultMove = $dokumen->move($this->pathImage, $name); |
||||
if($resultMove){ |
||||
$data = [ |
||||
'ref_id' => (int)$ref_id, |
||||
'image' => $name, |
||||
'category' => "report_activity" |
||||
]; |
||||
|
||||
$result = Image::create($data); |
||||
|
||||
if($result){ |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = ReportActivity::select("report_activity.*", "u.name as user_name")->where("report_activity.id", $id)->join("m_users as u", "u.id", "=", "report_activity.user_id")->first(); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data report activity, 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 = ReportActivity::find($id); |
||||
|
||||
if($data){ |
||||
$dataUpdate = $request->all(); |
||||
$result = $data->update($dataUpdate); |
||||
if($result){ |
||||
if($request->hasFile("files")){ |
||||
$this->updateImage($request->file('files'), $id); |
||||
} |
||||
$this->countForProgress($data->activity_id); |
||||
return response()->json(['status'=>'success','message'=>'data report activity successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity failed updated!','code'=>400], 400); |
||||
} |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
} |
||||
|
||||
public function updateImage($files, $ref_id) |
||||
{ |
||||
$image = Image::where("ref_id", $ref_id)->where("category", "report_activity")->first(); |
||||
if($image){ |
||||
if(file_exists($this->pathImage.$image->image)){ |
||||
unlink($this->pathImage.$image->image); |
||||
} |
||||
$image->delete(); |
||||
} |
||||
$dokumen = $files; |
||||
$extension = $dokumen->extension(); |
||||
$name = $ref_id.date("YmdHis").".".$extension; |
||||
$resultMove = $dokumen->move($this->pathImage, $name); |
||||
if($resultMove){ |
||||
$data = [ |
||||
'ref_id' => (int)$ref_id, |
||||
'image' => $name, |
||||
'category' => "report_activity" |
||||
]; |
||||
|
||||
$result = Image::create($data); |
||||
|
||||
if($result){ |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = ReportActivity::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
$image = Image::where("ref_id", $id)->where("category", "report_activity")->first(); |
||||
if($image){ |
||||
if(file_exists($this->pathImage.$image->image)){ |
||||
unlink($this->pathImage.$image->image); |
||||
} |
||||
$image->delete(); |
||||
} |
||||
return response()->json(['status'=>'success','message'=>'data report activity successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data report activity failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
private function countForProgress($id) |
||||
{ |
||||
|
||||
$totalJobs = ReportActivity::where('activity_id', $id)->sum("job_count_report"); |
||||
$dataActivity = Activity::find($id); |
||||
$jobsActivity = (int)$dataActivity->jumlah_pekerjaan; |
||||
|
||||
if ($jobsActivity < 1) { |
||||
return false; |
||||
} |
||||
|
||||
if ($totalJobs < 1) { |
||||
return false; |
||||
} |
||||
|
||||
$persentaseActual = ($totalJobs/$jobsActivity)*100; |
||||
$dataUpdate = array( |
||||
"persentase_progress" => $persentaseActual, |
||||
"updated_by" => $this->currentName |
||||
); |
||||
return $dataActivity->update($dataUpdate); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'report_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = ReportActivity::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 report activity, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function searchPoint(Request $request) { |
||||
$dataPayload = $request->all(); |
||||
$reqActivityId = []; |
||||
foreach ($dataPayload['project_id'] as $val) { |
||||
$reqActivityId[] = $this->getActivityByProjectId($val); |
||||
} |
||||
|
||||
$activity_id = []; |
||||
$getPoints = false; |
||||
|
||||
if (count($reqActivityId) > 0) { |
||||
for ($i=0; $i < count($reqActivityId); $i++) { |
||||
if (count($reqActivityId[$i]) > 0) { |
||||
foreach($reqActivityId[$i] as $reqAct) { |
||||
array_push($activity_id, $reqAct->id); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (count($activity_id) > 0) { |
||||
$getPoints = ReportActivity::select('report_activity.*', 'm_activity.name as activity_name', 'm_activity.jumlah_pekerjaan', 'm_proyek.nama as proyek_name') |
||||
->leftJoin('m_activity', 'm_activity.id', '=', 'report_activity.activity_id') |
||||
->leftJoin('m_proyek', 'm_proyek.id', '=', 'm_activity.proyek_id') |
||||
->whereIn('report_activity.activity_id', $activity_id)->get(); |
||||
} |
||||
|
||||
if($getPoints){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$getPoints, 'totalRecord'=>count($getPoints)], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get list points, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function getActivityByProjectId($projectId) { |
||||
$data = Activity::select('id')->where('proyek_id', $projectId)->get(); |
||||
return $data; |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idact'); |
||||
$data = ReportActivity::select("report_activity.*", "u.name as user_name") |
||||
->join("m_users as u", "u.id", "=", "report_activity.user_id") |
||||
->where('report_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_report_delete"><i class="fa fa-trash"></i></a>'; |
||||
$actionBtn .= ' <a href="javascript:void(0)" data-id="'.$row->id.'" class="edit btn btn-primary btn-sm btn_report_edit"><i class="fa fa-edit"></i></a>'; |
||||
return $actionBtn; |
||||
}) |
||||
->editColumn('report_date', function($row) { |
||||
$date = date_create($row->report_date); |
||||
return date_format($date,"d-m-Y H:i:s"); |
||||
}) |
||||
->rawColumns(['action'])->make(true); |
||||
} |
||||
} |
||||
|
@ -1,140 +1,187 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\ReportActivityMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Datatables; |
||||
|
||||
class ReportActivityMaterialController extends Controller |
||||
{ |
||||
private function sanitizeDecimal($number) { |
||||
$number = str_replace(".","",$number); |
||||
$number = str_replace(",",".",$number); |
||||
return $number; |
||||
} |
||||
|
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'qty' => 'required' |
||||
]); |
||||
|
||||
$activity = Activity::where('id', $request->activity_id)->first(); |
||||
|
||||
$start_date = $activity->start_date; |
||||
$start_date = substr($start_date, 0, 19); // remove the timezone offset |
||||
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); |
||||
$reportDate = new \DateTime(date("Y-m-d", strtotime($request->report_date))); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
/* $data['assign_material_id'] = AssignMaterial::where('activity_id', $request->activity_id)->pluck('id')->first(); */ |
||||
$data['assign_material_id'] = $request->assign_material_id; |
||||
$data['qty'] = $this->sanitizeDecimal($data['qty']); |
||||
if($reportDate > $startDate){ |
||||
$created = ReportActivityMaterial::create($data); |
||||
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'=>'Input progress report activity failed created','code'=>400,'data'=>null], 400); |
||||
} |
||||
} |
||||
|
||||
public function updateStatusStartFinish(Request $request){ |
||||
|
||||
$payloadUpdate = array( |
||||
'start_activity' => $request->start_activity, |
||||
'finish_activity' => $request->finish_activity, |
||||
'status_activity' => $request->status_activity |
||||
); |
||||
$updateData = AssignMaterial::where('activity_id',$request->activity_id) |
||||
->update($payloadUpdate); |
||||
if($updateData){ |
||||
if($request->status_activity == 'done'){ |
||||
$dataUpdate = array( |
||||
"persentase_progress" => 100, |
||||
"updated_by" => $this->currentName |
||||
); |
||||
Activity::where('id', $request->activity_id)->update($dataUpdate); |
||||
} |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Update data status successfully ', 'code'=>200]); |
||||
} |
||||
else{ |
||||
return response()->json(['status'=>'failed','message'=>'Update data status failed', 'code'=>400]); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(!ReportActivityMaterial::findOrFail($id)->delete()) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to deleted the data!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=>200], 200); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'report_activity_material'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = ReportActivityMaterial::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get Repport Activity material, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idAct'); |
||||
$type = $request->query('type'); |
||||
$materialName = $request->query('materialName'); |
||||
if($type == 'plan'){ |
||||
$data = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity) |
||||
->where('m.description', $materialName) |
||||
->orderBy('assign_material_to_activity.id', 'asc') |
||||
->get(); |
||||
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>'; |
||||
$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{ |
||||
$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") |
||||
->where('report_activity_material.activity_id', $id_activity) |
||||
->where('m.description', $materialName) |
||||
->orderBy('report_activity_material.report_date', 'asc') |
||||
->get(); |
||||
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>'; |
||||
$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); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use App\Helpers\MasterFunctionsHelper; |
||||
use Illuminate\Http\Request; |
||||
use App\Models\ReportActivityMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Datatables; |
||||
use DateTime; |
||||
|
||||
class ReportActivityMaterialController extends Controller |
||||
{ |
||||
private function sanitizeDecimal($number) { |
||||
$number = str_replace(".","",$number); |
||||
$number = str_replace(",",".",$number); |
||||
return $number; |
||||
} |
||||
|
||||
|
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'qty' => 'required' |
||||
]); |
||||
|
||||
$activity = Activity::where('id', $request->activity_id)->first(); |
||||
|
||||
$start_date = $activity->start_date; |
||||
$start_date = substr($start_date, 0, 19); // remove the timezone offset |
||||
$startDate = new \DateTime(date("Y-m-d", strtotime($start_date))); |
||||
$reportDate = new \DateTime(date("Y-m-d", strtotime($request->report_date))); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
/* $data['assign_material_id'] = AssignMaterial::where('activity_id', $request->activity_id)->pluck('id')->first(); */ |
||||
$data['assign_material_id'] = $request->assign_material_id; |
||||
$data['qty'] = $this->sanitizeDecimal($data['qty']); |
||||
if($reportDate >= $startDate || isset($data['force']) && $data['force'] == "true"){ |
||||
$created = ReportActivityMaterial::create($data); |
||||
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( |
||||
'start_activity' => $request->start_activity, |
||||
'finish_activity' => $request->finish_activity, |
||||
'status_activity' => $request->status_activity |
||||
); |
||||
$updateData = AssignMaterial::where('activity_id',$request->activity_id) |
||||
->update($payloadUpdate); |
||||
if($updateData){ |
||||
if($request->status_activity == 'done'){ |
||||
$dataUpdate = array( |
||||
"persentase_progress" => 100, |
||||
"updated_by" => $this->currentName |
||||
); |
||||
Activity::where('id', $request->activity_id)->update($dataUpdate); |
||||
} else { |
||||
$sumAssignMaterial = AssignMaterial::where('activity_id', $request->activity_id)->sum('qty_planning'); |
||||
$sumReportActivityMaterial = ReportActivityMaterial::where('activity_id', $request->activity_id)->sum('qty'); |
||||
$dataUpdate = array( |
||||
"actual_start" => null, |
||||
"actual_end" => null, |
||||
"persentase_progress" => $sumReportActivityMaterial/$sumAssignMaterial*100, |
||||
"updated_by" => $this->currentName |
||||
); |
||||
if ($sumReportActivityMaterial > 0) { |
||||
$data = []; |
||||
$reportActivityMaterial = ReportActivityMaterial::where('activity_id', $request->activity_id)->get(); |
||||
foreach ($reportActivityMaterial as $value) { |
||||
$data[] = $value; |
||||
} |
||||
$actualStartValues = array_column(array_filter($data, function($item) { |
||||
return isset($item['report_date']); |
||||
}), 'report_date'); |
||||
$dataUpdate["actual_start"] = min($actualStartValues); |
||||
} |
||||
Activity::where('id', $request->activity_id)->update($dataUpdate); |
||||
} |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Update data status successfully ', 'code'=>200]); |
||||
} |
||||
else{ |
||||
return response()->json(['status'=>'failed','message'=>'Update data status failed', 'code'=>400]); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(!ReportActivityMaterial::findOrFail($id)->delete()) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to deleted the data!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=> 'Data deleted!','code'=>200], 200); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'report_activity_material'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = ReportActivityMaterial::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get Repport Activity material, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function datatables(Request $request){ |
||||
$id_activity = $request->query('idAct'); |
||||
$type = $request->query('type'); |
||||
$materialName = $request->query('materialName'); |
||||
if($type == 'plan'){ |
||||
$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 = AssignMaterial::select("assign_material_to_activity.*","m.description as material_name", "m.uom as uom") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $id_activity) |
||||
->where('m.description', $materialName) |
||||
->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); |
||||
} |
||||
} |
||||
} |
||||
|
@ -1,101 +1,109 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Role; |
||||
|
||||
class RoleController extends Controller |
||||
{ |
||||
|
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'name' => 'required', |
||||
'description' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = Role::create($data); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=>500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); |
||||
} |
||||
|
||||
public function edit( $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$result = Role::find($id); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
} |
||||
|
||||
public function update(Request $request, $id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = Role::find($id); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to update the data!','code'=>500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = Role::find($id); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); |
||||
|
||||
$delete = $data->delete(); |
||||
|
||||
if(!$delete) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=>500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
|
||||
$dataBuilder = $this->setUpPayload($payload, 'm_roles'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = Role::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Role; |
||||
|
||||
class RoleController extends Controller |
||||
{ |
||||
|
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'name' => 'string|required|unique:m_roles,name', |
||||
'description' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
if (!isset($data['default_page'])) { |
||||
$data['default_page'] = 29; // dashboard |
||||
} |
||||
|
||||
$result = Role::create($data); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=>500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data added!','code'=>200], 200); |
||||
} |
||||
|
||||
public function edit( $id){ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$result = Role::find($id); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
} |
||||
|
||||
public function update(Request $request, $id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$this->validate($request, [ |
||||
'name' => 'string|required', |
||||
'description' => 'required' |
||||
]); |
||||
$data = Role::find($id); |
||||
$request->name !== $data['name'] ? $this->validate($request,['name'=>'unique:m_roles,name']) : ''; |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); |
||||
|
||||
$result = $data->update($request->all()); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to update the data!','code'=>500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
if(empty($id) || !is_int((int)$id)) |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
|
||||
$data = Role::find($id); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=>404], 404); |
||||
|
||||
$delete = $data->delete(); |
||||
|
||||
if(!$delete) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=>500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
|
||||
$dataBuilder = $this->setUpPayload($payload, 'm_roles'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = Role::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'failed get list role, please try again later!','code'=>400], 400); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
} |
||||
} |
||||
|
@ -1,102 +1,102 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Menu; |
||||
use App\Models\RoleMenu; |
||||
|
||||
class RoleMenuController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'role_id' => 'required', |
||||
'menu_id' => 'required', |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = RoleMenu::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add data role menu failed!','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 = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function deleteByRole($id) |
||||
{ |
||||
$data = RoleMenu::where("role_id", $id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 't_roles_menu'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\Menu; |
||||
use App\Models\RoleMenu; |
||||
|
||||
class RoleMenuController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'role_id' => 'required', |
||||
'menu_id' => 'required', |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = RoleMenu::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'add data role menu successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'add data role menu failed!','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 = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = RoleMenu::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function deleteByRole($id) |
||||
{ |
||||
$data = RoleMenu::where("role_id", $id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'data role menu successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data role menu failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 't_roles_menu'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
} |
||||
|
@ -1,197 +1,253 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\Activity; |
||||
use Datatables; |
||||
|
||||
class UserToActivityController extends Controller |
||||
{ |
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'user_id' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
if(!UserToActivity::create($data)) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=> 200]); |
||||
} |
||||
|
||||
public function addMultiple(Request $request){ |
||||
$users_id = $request->user_id; |
||||
|
||||
$data = UserToActivity::where("activity_id", $request->activity_id); |
||||
if($data){ |
||||
$data->delete(); |
||||
} |
||||
|
||||
if(is_array($users_id) && count($users_id) > 0){ |
||||
$countRes = 0; |
||||
foreach($users_id as $item){ |
||||
$dataInsert = array( |
||||
"user_id" => $item, |
||||
"activity_id" => $request->activity_id, |
||||
"role_proyek_id" => $request->role_proyek_id, |
||||
"proyek_id" => $request->proyek_id, |
||||
"created_by" => $this->currentName |
||||
); |
||||
$result = UserToActivity::create($dataInsert); |
||||
if($result){ |
||||
$countRes++; |
||||
}else{ |
||||
$countRes--; |
||||
} |
||||
} |
||||
|
||||
if($countRes == 0) |
||||
return response()->json(['status'=>'failed' ,'message'=>'Failed to add data!','code'=> 500]); |
||||
|
||||
$allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id); |
||||
$dataUpdateCost = array( |
||||
"rencana_biaya"=>$allCost, |
||||
"updated_by"=> $this->currentName |
||||
); |
||||
$actUpdate = Activity::find($request->activity_id); |
||||
if($actUpdate){ |
||||
$actUpdate->update($dataUpdateCost); |
||||
if($actUpdate->parent_id){ |
||||
$this->updatedCostPlanning($actUpdate->parent_id); |
||||
} |
||||
} |
||||
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); |
||||
}else{ |
||||
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); |
||||
} |
||||
|
||||
} |
||||
|
||||
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)){ |
||||
$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); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
if(!$data->update($request->all())); |
||||
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = UserToActivity::find($id); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400); |
||||
|
||||
if($data->delete()){ |
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); |
||||
} |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = UserToActivity::find($id); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = UserToActivity::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function listFiltered(Request $request) |
||||
{ |
||||
$startDate = $request->start_date; |
||||
$endDate = $request->end_date; |
||||
$userId = $request->user_id; |
||||
$proyekId = $request->proyek_id; |
||||
|
||||
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') |
||||
->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", "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); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Datatables; |
||||
|
||||
class UserToActivityController extends Controller |
||||
{ |
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'activity_id' => 'required', |
||||
'user_id' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
if(!UserToActivity::create($data)) |
||||
return response()->json(['status'=>'failed','message'=>'Failed to add data!','code'=> 500]); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data added!', 'code'=> 200]); |
||||
} |
||||
|
||||
public function addMultiple(Request $request){ |
||||
$users_id = $request->user_id; |
||||
$users_role = $request->role_proyek_id; |
||||
|
||||
// $data = UserToActivity::where("activity_id", $request->activity_id); |
||||
// if($data){ |
||||
// $data->delete(); |
||||
// } |
||||
|
||||
if(is_array($users_id) && count($users_id) > 0){ |
||||
$countRes = 0; |
||||
foreach($users_id as $index => $item){ |
||||
$dataInsert = array( |
||||
"user_id" => $item, |
||||
"activity_id" => $request->activity_id, |
||||
"role_proyek_id" => $users_role[$index], |
||||
"proyek_id" => $request->proyek_id, |
||||
"start_date" => $request->start_date, |
||||
"end_date" => $request->end_date, |
||||
"created_by" => $this->currentName, |
||||
"version_gantt_id" => $request->version_gantt_id |
||||
); |
||||
$result = UserToActivity::create($dataInsert); |
||||
if($result){ |
||||
$countRes++; |
||||
}else{ |
||||
$countRes--; |
||||
} |
||||
} |
||||
|
||||
if($countRes == 0) |
||||
return response()->json(['status'=>'failed' ,'message'=>'Failed to add data!','code'=> 500]); |
||||
|
||||
$allCost = $this->calculateAllCost($request->activity_id, $request->proyek_id); |
||||
$dataUpdateCost = array( |
||||
"rencana_biaya"=>$allCost, |
||||
"updated_by"=> $this->currentName |
||||
); |
||||
$actUpdate = Activity::find($request->activity_id); |
||||
if($actUpdate){ |
||||
$actUpdate->update($dataUpdateCost); |
||||
if($actUpdate->parent_id){ |
||||
$this->updatedCostPlanning($actUpdate->parent_id); |
||||
} |
||||
} |
||||
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); |
||||
}else{ |
||||
return response()->json(['status'=>'success' ,'message'=>'Data added!','code'=>200]); |
||||
} |
||||
|
||||
} |
||||
|
||||
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)){ |
||||
$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); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'Data not found!','code'=> 404], 404); |
||||
|
||||
if(!$data->update($request->all())); |
||||
return response()->json(['status'=>'failed','message'=>'Failed to update!','code'=> 500], 500); |
||||
|
||||
return response()->json(['status'=>'success','message'=>'Data updated!','code'=>200], 200); |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = UserToActivity::find($id); |
||||
if(!$data) |
||||
return response()->json(['status'=>'failed','message'=>'data user to activity gantt Project not found!','code'=>400], 400); |
||||
|
||||
if($data->delete()){ |
||||
return response()->json(['status'=>'success','message'=>'Data deleted!','code'=>200], 200); |
||||
} |
||||
|
||||
return response()->json(['status'=>'failed','message'=>'Failed to delete!','code'=> 500], 500); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = UserToActivity::find($id); |
||||
|
||||
if(!$result) |
||||
return response()->json(['status'=>'failed','message'=>'failed get data tools resource, please try again later!','code'=>400], 400); |
||||
|
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
} |
||||
|
||||
public function searchAnalysis(Request $request) |
||||
{ |
||||
$dataBuilder = $this->setUpPayload($request->all(), 'assign_hr_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$builder->addSelect(DB::raw('SUM(report_activity_material.qty) as volume_actual')); |
||||
$builder->groupBy("m_activity.id"); |
||||
$builder->groupBy("selfTable.id"); |
||||
$builder->groupBy("selfTable.start_date"); |
||||
$builder->groupBy("selfTable.end_date"); |
||||
$builder->groupBy("m_users.name"); |
||||
$builder->groupBy("assign_material_to_activity.id"); |
||||
$builder->groupBy("m_version_gantt.name_version"); |
||||
$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(); |
||||
if (isset($payload['join_column'])) { |
||||
$join_column = $payload['join_column']; |
||||
unset($payload['join_column']); |
||||
} |
||||
|
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_activity'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
if (isset($join_column)) { |
||||
$startDate = $join_column['start_date']; |
||||
$endDate = $join_column['end_date']; |
||||
$status = $join_column['status']; |
||||
$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 |
||||
->where('m_proyek.mulai_proyek', '>=', $startDate) |
||||
->where('m_proyek.akhir_proyek', '<=', $endDate) |
||||
->where(function ($query) use ($endDate, $startDate) { |
||||
$query |
||||
->where('m_activity.start_date', '>=', $startDate) |
||||
->where('m_activity.end_date', '<=', $endDate); |
||||
}); |
||||
}); |
||||
} |
||||
$dataGet = $builder->get(); |
||||
if (isset($status) && $status != "") { |
||||
$filteredData = []; |
||||
foreach ($dataGet as $value) { |
||||
$assignMaterial = AssignMaterial::where('activity_id', $value->activity_id)->first(); |
||||
if ($assignMaterial->status_activity == $status) { |
||||
$filteredData[] = $value; |
||||
} |
||||
} |
||||
$dataGet = $filteredData; |
||||
} |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = UserToActivity::all(); |
||||
$countData = $data->count(); |
||||
|
||||
if($data){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get list user to activity gantt, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function listFiltered(Request $request) |
||||
{ |
||||
$startDate = $request->start_date; |
||||
$endDate = $request->end_date; |
||||
$userId = $request->user_id; |
||||
$proyekId = $request->proyek_id; |
||||
|
||||
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') |
||||
->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); |
||||
} |
||||
} |
||||
|
@ -1,214 +1,256 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\UserToProyek; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\ReportActivity; |
||||
use App\Models\Image; |
||||
|
||||
class UserToProyekController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'user_id' => 'required', |
||||
'proyek_id' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = UserToProyek::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'assign hr to proyek successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'assign hr to proyek 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 = UserToProyek::find($id); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data assign hr to proyek, 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 = UserToProyek::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data assign hr to proyek successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = UserToProyek::find($id); |
||||
if($data){ |
||||
$userId = $data->user_id; |
||||
$proyekId = $data->proyek_id; |
||||
$delete = $data->delete(); |
||||
if($delete){ |
||||
$this->deleteRelative($proyekId, $userId); |
||||
} |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
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); |
||||
} |
||||
} |
||||
|
||||
private function deleteRelative($proyekId, $userId) |
||||
{ |
||||
$uta = UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->get(); |
||||
foreach ($uta as $value) { |
||||
$dataRa = ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->get(); |
||||
foreach ($dataRa as $ra) { |
||||
$images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get(); |
||||
foreach ($images as $image) { |
||||
if(file_exists($this->pathImage.$image->image)){ |
||||
unlink($this->pathImage.$image->image); |
||||
} |
||||
} |
||||
Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete(); |
||||
} |
||||
ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->delete(); |
||||
} |
||||
UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->delete(); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_proyek'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = UserToProyek::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 assign hr to proyek, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function select(Request $request){ |
||||
|
||||
$search = $request->query('search'); |
||||
|
||||
$idProyek = (int)$request->query('idProyek'); |
||||
$idActivity = (int)$request->query('idact'); |
||||
|
||||
$include = []; |
||||
|
||||
if($idActivity && $idActivity > 0){ |
||||
$dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get(); |
||||
foreach($dataF as $val){ |
||||
$include[] = $val->user_id; |
||||
} |
||||
} |
||||
|
||||
if($search && !empty($search)){ |
||||
$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{ |
||||
$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(); |
||||
} |
||||
|
||||
if($data instanceof \Illuminate\Database\Eloquent\Collection){ |
||||
$pm = array( |
||||
"id"=>$this->currentId, |
||||
"name"=> "Project Manager" |
||||
); |
||||
$data->push($pm); |
||||
} |
||||
|
||||
return response()->json($data); |
||||
} |
||||
|
||||
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); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\UserToProyek; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\ReportActivity; |
||||
use App\Models\Image; |
||||
|
||||
class UserToProyekController extends Controller |
||||
{ |
||||
public function add(Request $request) |
||||
{ |
||||
$this->validate($request, [ |
||||
'user_id' => 'required', |
||||
'proyek_id' => 'required' |
||||
]); |
||||
|
||||
$data = $request->all(); |
||||
|
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = UserToProyek::create($data); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'assign hr to proyek successfully!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'assign hr to proyek failed!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function addMultiple(Request $request){ |
||||
$user_IDs = $request->user_id; |
||||
|
||||
$data = UserToProyek::where([ |
||||
["proyek_id" , $request->proyek_id], |
||||
['is_customer',true] |
||||
]); |
||||
|
||||
if($data){ |
||||
$data->delete(); |
||||
} |
||||
|
||||
if(is_array($user_IDs) && count($user_IDs) > 0){ |
||||
$countRes = 0; |
||||
foreach($user_IDs as $item){ |
||||
|
||||
$dataInsert = array( |
||||
"user_id" => $item, |
||||
"proyek_id" => $request->proyek_id, |
||||
"created_by" => $this->currentName, |
||||
'is_customer'=>true |
||||
); |
||||
|
||||
$result = UserToProyek::create($dataInsert); |
||||
|
||||
if($result){ |
||||
$countRes++; |
||||
}else{ |
||||
$countRes--; |
||||
} |
||||
} |
||||
if($countRes > 0){ |
||||
return response()->json(['status'=>'success' ,'message'=>'Project customer successfull created','code'=>200]); |
||||
}else{ |
||||
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 edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = UserToProyek::find($id); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data assign hr to proyek, 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 = UserToProyek::find($id); |
||||
|
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'data assign hr to proyek successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = UserToProyek::find($id); |
||||
if($data){ |
||||
$userId = $data->user_id; |
||||
$proyekId = $data->proyek_id; |
||||
$delete = $data->delete(); |
||||
if($delete){ |
||||
$this->deleteRelative($proyekId, $userId); |
||||
} |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data assign hr to proyek not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
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); |
||||
} |
||||
} |
||||
|
||||
private function deleteRelative($proyekId, $userId) |
||||
{ |
||||
$uta = UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->get(); |
||||
foreach ($uta as $value) { |
||||
$dataRa = ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->get(); |
||||
foreach ($dataRa as $ra) { |
||||
$images = Image::where("ref_id", $ra->id)->where("category", "report_activity")->get(); |
||||
foreach ($images as $image) { |
||||
if(file_exists($this->pathImage.$image->image)){ |
||||
unlink($this->pathImage.$image->image); |
||||
} |
||||
} |
||||
Image::where("ref_id", $ra->id)->where("category", "report_activity")->delete(); |
||||
} |
||||
ReportActivity::where("activity_id", $value->activity_id)->where("user_id", $value->user_id)->delete(); |
||||
} |
||||
UserToActivity::where("proyek_id", $proyekId)->where("user_id", $userId)->delete(); |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'assign_hr_to_proyek'); |
||||
$builder = $dataBuilder['builder']; |
||||
$countBuilder = $dataBuilder['count']; |
||||
$dataGet = $builder->get(); |
||||
$totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = UserToProyek::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 assign hr to proyek, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function select(Request $request){ |
||||
|
||||
$search = $request->query('search'); |
||||
|
||||
$idProyek = (int)$request->query('idProyek'); |
||||
$idActivity = (int)$request->query('idact'); |
||||
|
||||
$include = []; |
||||
|
||||
if($idActivity && $idActivity > 0){ |
||||
$dataF = UserToActivity::select("user_id")->where("activity_id", $idActivity)->get(); |
||||
foreach($dataF as $val){ |
||||
$include[] = $val->user_id; |
||||
} |
||||
} |
||||
|
||||
if($search && !empty($search)){ |
||||
$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{ |
||||
$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(); |
||||
} |
||||
|
||||
if($data instanceof \Illuminate\Database\Eloquent\Collection){ |
||||
$pm = array( |
||||
"id"=>$this->currentId, |
||||
"name"=> "Project Manager" |
||||
); |
||||
$data->push($pm); |
||||
} |
||||
|
||||
return response()->json($data); |
||||
} |
||||
|
||||
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); |
||||
} |
||||
} |
||||
|
@ -1,102 +1,139 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use Illuminate\Http\Request; |
||||
use App\Models\VersionGantt; |
||||
|
||||
class VersionGanttController extends Controller |
||||
{ |
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'name_version' => 'required', |
||||
'proyek_id' => 'required' |
||||
]); |
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = VersionGantt::create($data); |
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'version gantt Project successfull created','code'=>200]); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'version gantt Project failed created','code'=>400]); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
|
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
$data = VersionGantt::find($id); |
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'version gantt Project successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'version gantt Project failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = VersionGantt::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'version gantt Project successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'version gantt Project failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = VersionGantt::find($id); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data version gantt, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_version_gantt'); |
||||
$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 = VersionGantt::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 version gantt, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Http\Controllers; |
||||
|
||||
use App\Models\Link; |
||||
use App\Models\Holiday; |
||||
use App\Models\Activity; |
||||
use App\Models\VersionGantt; |
||||
use Illuminate\Http\Request; |
||||
use App\Models\ShowHideColumn; |
||||
use App\Models\UserToActivity; |
||||
use App\Models\UserToVersionGantt; |
||||
use App\Models\ActivityProgressLog; |
||||
|
||||
class VersionGanttController extends Controller |
||||
{ |
||||
public function add(Request $request){ |
||||
$this->validate($request, [ |
||||
'name_version' => 'required', |
||||
'proyek_id' => 'required' |
||||
]); |
||||
$data = $request->all(); |
||||
$data['created_by'] = $this->currentName; |
||||
|
||||
$result = VersionGantt::create($data); |
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'version gantt Project successfull created','code'=>200]); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'version gantt Project failed created','code'=>400]); |
||||
} |
||||
} |
||||
|
||||
public function update(Request $request, $id){ |
||||
|
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
} |
||||
$data = VersionGantt::find($id); |
||||
if($data){ |
||||
$result = $data->update($request->all()); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','message'=>'version gantt Project successfully updated!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'version gantt Project failed updated!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function delete($id) |
||||
{ |
||||
$data = VersionGantt::find($id); |
||||
|
||||
if($data){ |
||||
$delete = $data->delete(); |
||||
$this->deleteRelative($data['id']); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'data version gantt Project not found!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
|
||||
if($delete){ |
||||
return response()->json(['status'=>'success','message'=>'version gantt Project successfully deleted!','code'=>200], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'version gantt Project failed deleted!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
private function deleteRelative($version_gantt_id) |
||||
{ |
||||
UserToActivity::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
Activity::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
ShowHideColumn::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
Link::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
UserToVersionGantt::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
Holiday::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
ActivityProgressLog::where('version_gantt_id', $version_gantt_id)->delete(); |
||||
} |
||||
|
||||
public function edit($id){ |
||||
if(!$id || (int) $id < 0 || $id==""){ |
||||
return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); |
||||
die(); |
||||
} |
||||
|
||||
$result = VersionGantt::find($id); |
||||
|
||||
if($result){ |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200); |
||||
}else{ |
||||
return response()->json(['status'=>'failed','message'=>'failed get data version gantt, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
|
||||
public function search(Request $request) |
||||
{ |
||||
$payload = $request->all(); |
||||
$dataBuilder = $this->setUpPayload($payload, 'm_version_gantt'); |
||||
$builder = $dataBuilder['builder']; |
||||
// $countBuilder = $dataBuilder['count']; |
||||
$this->ganttProgress($request->columns[0]["name"], $request->columns[0]["value"]); |
||||
$dataGet = $builder->get(); |
||||
|
||||
// $totalRecord = $countBuilder->count(); |
||||
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet], 200); |
||||
} |
||||
|
||||
public function ganttProgress($column, $value){ |
||||
$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') |
||||
->where("m_version_gantt.".$column, $value) |
||||
// ->where('m_activity.type_activity', "project") |
||||
->where('m_activity.parent_id', null) |
||||
->get(); |
||||
foreach($progress as $item) { |
||||
if($item->persentase_progress){ |
||||
$item->progress = $item->persentase_progress; |
||||
$item->bobot = $item->bobot_planning; |
||||
$item->save(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function list() |
||||
{ |
||||
$data = VersionGantt::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 version gantt, please try again later!','code'=>400], 400); |
||||
} |
||||
} |
||||
} |
||||
|
@ -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(); |
||||
} |
||||
} |
@ -1,234 +1,252 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use App\Models\AssignMaterial; |
||||
use App\Models\ActivityProgressLog; |
||||
use App\Models\AssignTools; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Support\Arr; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Carbon\Carbon; |
||||
|
||||
class Activity extends Model |
||||
{ |
||||
protected $table = 'm_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
// persentase bobot gak kepake yg dipakenya bobot_planning |
||||
protected $fillable = [ |
||||
'proyek_id', 'parent_id', 'kode_sortname', 'name', 'rencana_biaya', 'start_date', |
||||
'end_date', 'area_kerja', 'biaya_actual', 'persentase_bobot', 'persentase_progress', |
||||
'buffer_radius', 'duration', 'color_progress', 'jumlah_pekerjaan', 'satuan', |
||||
'description', 'priority', 'bobot_planning', 'type_activity', 'open', 'geom', |
||||
'version_gantt_id', 'budget_plan', 'biaya_material_plan', 'biaya_human_plan', 'biaya_tools_plan', |
||||
'planned_start', 'planned_end', 'satuan_id', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
protected $appends = [ |
||||
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense' |
||||
]; |
||||
|
||||
|
||||
public function getStartDateAttribute($value) |
||||
{ |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public function getEndDateAttribute($value) |
||||
{ |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::updating(function($data) { |
||||
$data->logPersentaseProgress(); |
||||
}); |
||||
|
||||
static::updated(function($data) { |
||||
$data->updateBobot(); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
$data->updateCostActual(); |
||||
} |
||||
// if($data->start_date != request()->start_date || $data->end_date != request()->end_date) { |
||||
// $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); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
$data->updateCostActual(); |
||||
} |
||||
$data->updateStartEndDateHeader(); |
||||
}); |
||||
|
||||
} |
||||
|
||||
private function updateBobot($isDelete = false) |
||||
{ |
||||
$root = Activity::where('version_gantt_id', $this->version_gantt_id) |
||||
->where("proyek_id", $this->proyek_id) |
||||
->whereNull('parent_id') |
||||
->first(); |
||||
|
||||
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) |
||||
continue; |
||||
|
||||
$activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100; |
||||
$activity->updated_by = auth()->user() ? auth()->user()->name : "system"; |
||||
$activity->saveQuietly(); |
||||
|
||||
} |
||||
} else { |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$totalChildWeight = Activity::where("parent_id", $this->parent_id)->sum('bobot_planning'); |
||||
$parent->update([ |
||||
"bobot_planning" => $totalChildWeight |
||||
]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private function updateCostActual() |
||||
{ |
||||
$actualCost = Activity::where("parent_id", $this->parent_id)->sum("biaya_actual"); |
||||
$this->biaya_actual = $actualCost; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"biaya_actual" => $actualCost |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updatePersentaseProgress() |
||||
{ |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parentActWeight = $parent->bobot_planning; |
||||
|
||||
if ($parentActWeight == 0) { |
||||
$parent->update([ |
||||
"persentase_progress" => 0 |
||||
]); |
||||
return; |
||||
} |
||||
|
||||
$totalChildProportionalProgress = 0; |
||||
$childs = Activity::where("parent_id", $parent->id)->get(); |
||||
foreach($childs as $child){ |
||||
$currentActWeight = $child->bobot_planning; |
||||
$currentActProportionalProgress = ($currentActWeight / $parentActWeight) * $child->persentase_progress; |
||||
$totalChildProportionalProgress += $currentActProportionalProgress; |
||||
} |
||||
$parent->update([ |
||||
"persentase_progress" => $totalChildProportionalProgress |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updateCostPlanning() { |
||||
$sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))')) |
||||
->where("parent_id", $this->parent_id) |
||||
->first(); |
||||
$this->rencana_biaya = $sumBiaya->sum; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"rencana_biaya" => $sumBiaya->sum, |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function logPersentaseProgress() |
||||
{ |
||||
ActivityProgressLog::create([ |
||||
'version_gantt_id' => $this->version_gantt_id, |
||||
'activity_id' => request()->id, |
||||
'old_percentage' => $this->persentase_progress, |
||||
'new_percentage' => request()->persentase_progress, |
||||
'variance' => $this->persentase_progress - request()->persentase_progress, |
||||
'created_by'=> "system" |
||||
]); |
||||
} |
||||
|
||||
private function updateStartEndDateHeader() |
||||
{ |
||||
$earliestStartDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->oldest('start_date')->pluck('start_date')->first(); |
||||
$latestEndDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->latest('end_date')->pluck('end_date')->first(); |
||||
if($header = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNull('parent_id')->first()) { |
||||
$header->start_date = $earliestStartDate; |
||||
$header->end_date = $latestEndDate; |
||||
$header->saveQuietly(); |
||||
} |
||||
} |
||||
|
||||
public function getJobsDoneAttribute() |
||||
{ |
||||
if(!ReportActivityMaterial::where('activity_id', $this->id)->first()) |
||||
return 0; |
||||
if(!$dataPlan = AssignMaterial::where('activity_id', $this->id)->get()) |
||||
return 0; |
||||
if($dataPlan[0]->status_activity == 'done') |
||||
return 100; |
||||
return $this->persentase_progress; |
||||
} |
||||
|
||||
public function getAssignHrAttribute() |
||||
{ |
||||
return Arr::flatten(UserToActivity::select("u.name as name") |
||||
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") |
||||
->where('assign_hr_to_activity.activity_id', $this->id) |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignMaterialAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $this->id) |
||||
->where('assign_material_to_activity.type', "material") |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignExpenseAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->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()); |
||||
} |
||||
|
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use App\Models\AssignMaterial; |
||||
use App\Models\ActivityProgressLog; |
||||
use App\Models\AssignTools; |
||||
use App\Models\ReportActivityMaterial; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Support\Arr; |
||||
use Illuminate\Support\Facades\DB; |
||||
use Carbon\Carbon; |
||||
|
||||
class Activity extends Model |
||||
{ |
||||
protected $table = 'm_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
// persentase bobot gak kepake yg dipakenya bobot_planning |
||||
protected $fillable = [ |
||||
'proyek_id', 'parent_id', 'kode_sortname', 'name', 'rencana_biaya', 'start_date', |
||||
'end_date', 'area_kerja', 'biaya_actual', 'persentase_bobot', 'persentase_progress', |
||||
'buffer_radius', 'duration', 'color_progress', 'jumlah_pekerjaan', 'satuan', |
||||
'description', 'priority', 'bobot_planning', 'type_activity', 'open', 'geom', |
||||
'version_gantt_id', 'budget_plan', 'biaya_material_plan', 'biaya_human_plan', 'biaya_tools_plan', |
||||
'planned_start', 'planned_end', 'satuan_id', 'actual_start', 'actual_end', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by', 'sortorder' |
||||
]; |
||||
|
||||
protected $appends = [ |
||||
'jobs_done', 'assign_hr', 'assign_material', 'assign_tools', 'assign_expense' |
||||
]; |
||||
|
||||
|
||||
public function getStartDateAttribute($value) |
||||
{ |
||||
if ($value instanceof \DateTime) { |
||||
return Carbon::instance($value) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public function getEndDateAttribute($value) |
||||
{ |
||||
if ($value instanceof \DateTime) { |
||||
return Carbon::instance($value) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::updating(function($data) { |
||||
$data->logPersentaseProgress(); |
||||
}); |
||||
|
||||
static::updated(function($data) { |
||||
$data->updateBobot(); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
} |
||||
$data->updateCostActual(); |
||||
// if($data->start_date != request()->start_date || $data->end_date != request()->end_date) { |
||||
// $data->updateStartEndDateHeader(); |
||||
// } |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
if (isset($data->parent_id)) { |
||||
if(Activity::where("parent_id", $data->parent_id)->count() == 0) { |
||||
$activity = Activity::find($data->parent_id); |
||||
if ($activity) { |
||||
$activity->update(["type_activity"=>"task"]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
$data->updateBobot(true); |
||||
$data->updateCostPlanning(); |
||||
if($data->bobot_planning){ |
||||
$data->updatePersentaseProgress(); |
||||
} |
||||
$data->updateCostActual(); |
||||
$data->updateStartEndDateHeader(); |
||||
}); |
||||
|
||||
} |
||||
|
||||
private function updateBobot($isDelete = false) |
||||
{ |
||||
$root = Activity::where('version_gantt_id', $this->version_gantt_id) |
||||
->where("proyek_id", $this->proyek_id) |
||||
->whereNull('parent_id') |
||||
->first(); |
||||
|
||||
if(isset($root) && $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) |
||||
continue; |
||||
|
||||
$activity->bobot_planning = ( (int)$activity->rencana_biaya / $root->rencana_biaya) * 100; |
||||
$activity->updated_by = auth()->user() ? auth()->user()->name : "system"; |
||||
$activity->saveQuietly(); |
||||
|
||||
} |
||||
} else { |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$totalChildWeight = Activity::where("parent_id", $this->parent_id)->sum('bobot_planning'); |
||||
$parent->update([ |
||||
"bobot_planning" => $totalChildWeight |
||||
]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private function updateCostActual() |
||||
{ |
||||
$actualCost = Activity::where("parent_id", $this->parent_id)->sum("biaya_actual"); |
||||
$this->biaya_actual = $actualCost; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"biaya_actual" => $actualCost |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updatePersentaseProgress() |
||||
{ |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parentActWeight = $parent->bobot_planning; |
||||
|
||||
if ($parentActWeight == 0) { |
||||
$parent->update([ |
||||
"persentase_progress" => 0 |
||||
]); |
||||
return; |
||||
} |
||||
|
||||
$totalChildProportionalProgress = 0; |
||||
$childs = Activity::where("parent_id", $parent->id)->get(); |
||||
foreach($childs as $child){ |
||||
$currentActWeight = $child->bobot_planning; |
||||
$currentActProportionalProgress = ($currentActWeight / $parentActWeight) * $child->persentase_progress; |
||||
$totalChildProportionalProgress += $currentActProportionalProgress; |
||||
} |
||||
$parent->update([ |
||||
"persentase_progress" => $totalChildProportionalProgress |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function updateCostPlanning() { |
||||
$sumBiaya = Activity::select(DB::raw('sum(cast(rencana_biaya as double precision))')) |
||||
->where("parent_id", $this->parent_id) |
||||
->first(); |
||||
$this->rencana_biaya = $sumBiaya->sum; |
||||
if($parent = Activity::find($this->parent_id)){ |
||||
$parent->update([ |
||||
"rencana_biaya" => $sumBiaya->sum, |
||||
]); |
||||
} |
||||
} |
||||
|
||||
private function logPersentaseProgress() |
||||
{ |
||||
ActivityProgressLog::create([ |
||||
'version_gantt_id' => $this->version_gantt_id, |
||||
'activity_id' => request()->id, |
||||
'old_percentage' => $this->persentase_progress, |
||||
'new_percentage' => request()->persentase_progress, |
||||
'variance' => $this->persentase_progress - request()->persentase_progress, |
||||
'created_by'=> "system" |
||||
]); |
||||
} |
||||
|
||||
private function updateStartEndDateHeader() |
||||
{ |
||||
$earliestStartDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->oldest('start_date')->pluck('start_date')->first(); |
||||
$latestEndDate = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNotNull('parent_id')->latest('end_date')->pluck('end_date')->first(); |
||||
if($header = Activity::where('version_gantt_id', $this->version_gantt_id)->whereNull('parent_id')->first()) { |
||||
$header->start_date = $earliestStartDate; |
||||
$header->end_date = $latestEndDate; |
||||
$header->saveQuietly(); |
||||
} |
||||
} |
||||
|
||||
public function getJobsDoneAttribute() |
||||
{ |
||||
if(!ReportActivityMaterial::where('activity_id', $this->id)->first()) |
||||
return 0; |
||||
if(!$dataPlan = AssignMaterial::where('activity_id', $this->id)->get()) |
||||
return 0; |
||||
if($dataPlan->isEmpty()) |
||||
return 0; |
||||
if($dataPlan[0]->status_activity == 'done') |
||||
return 100; |
||||
return $this->persentase_progress; |
||||
} |
||||
|
||||
public function getAssignHrAttribute() |
||||
{ |
||||
return Arr::flatten(UserToActivity::select("u.name as name") |
||||
->join("m_users as u", "u.id", "=", "assign_hr_to_activity.user_id") |
||||
->where('assign_hr_to_activity.activity_id', $this->id) |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignMaterialAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->where('assign_material_to_activity.activity_id', $this->id) |
||||
->where('assign_material_to_activity.type', "material") |
||||
->get() |
||||
->toArray()); |
||||
} |
||||
|
||||
public function getAssignExpenseAttribute() |
||||
{ |
||||
return Arr::flatten(AssignMaterial::select("m.description as name") |
||||
->join("m_req_material as m", "m.id", "=", "assign_material_to_activity.material_id") |
||||
->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()); |
||||
} |
||||
|
||||
} |
||||
|
@ -1,44 +1,46 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
|
||||
class AssignMaterial extends Model |
||||
{ |
||||
protected $table = 'assign_material_to_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'proyek_id', 'activity_id', 'material_id', 'qty_planning', |
||||
'budget', 'plan_date', 'status_activity', 'type', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
protected $casts = [ |
||||
'id' => 'integer', |
||||
'budget' => 'string', |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$material = RequestMaterial::where("id", $data->material_id)->first(); |
||||
$activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
$activity = Activity::where('id', $data->activity_id)->first(); |
||||
$activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\RequestMaterial; |
||||
use App\Models\Activity; |
||||
use App\Models\ReportActivityMaterial; |
||||
|
||||
class AssignMaterial extends Model |
||||
{ |
||||
protected $table = 'assign_material_to_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'proyek_id', 'activity_id', 'material_id', 'qty_planning', |
||||
'budget', 'plan_date', 'status_activity', 'type', |
||||
'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
protected $casts = [ |
||||
'id' => 'integer', |
||||
'budget' => 'string', |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$material = RequestMaterial::where("id", $data->material_id)->first(); |
||||
$activity->rencana_biaya += floatval($material->price) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
$reportActivities = ReportActivityMaterial::where('assign_material_id', $data->id)->delete(); |
||||
$activity = Activity::where('id', $data->activity_id)->first(); |
||||
$activity->rencana_biaya -= floatval($data->budget) * floatval($data->qty_planning); |
||||
$activity->save(); |
||||
}); |
||||
|
||||
} |
||||
} |
||||
|
@ -1,22 +1,22 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class CommentActivity extends Model |
||||
{ |
||||
protected $table = 'm_comment_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'activity_id', |
||||
'comment', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class CommentActivity extends Model |
||||
{ |
||||
protected $table = 'm_comment_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'activity_id', |
||||
'comment', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
} |
||||
|
@ -1,41 +1,42 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Divisi extends Model |
||||
{ |
||||
protected $table = 'm_divisi'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name', |
||||
'parent', |
||||
'description', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::deleting(function($data) { |
||||
$data->children()->delete(); |
||||
}); |
||||
} |
||||
|
||||
public function parent() |
||||
{ |
||||
return $this->belongsTo('App\Models\Divisi','parent')->where('parent', null)->with('parent'); |
||||
} |
||||
|
||||
public function children() |
||||
{ |
||||
return $this->hasMany('App\Models\Divisi','parent')->with('children'); |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Divisi extends Model |
||||
{ |
||||
protected $table = 'm_divisi'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name', |
||||
'parent', |
||||
'description', |
||||
'color', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::deleting(function($data) { |
||||
$data->children()->delete(); |
||||
}); |
||||
} |
||||
|
||||
public function parent() |
||||
{ |
||||
return $this->belongsTo('App\Models\Divisi','parent')->where('parent', null)->with('parent'); |
||||
} |
||||
|
||||
public function children() |
||||
{ |
||||
return $this->hasMany('App\Models\Divisi','parent')->with('children'); |
||||
} |
||||
} |
||||
|
@ -1,38 +1,38 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class HumanResource extends Model |
||||
{ |
||||
protected $table = 'm_users'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'role_id', |
||||
'username', |
||||
'password', |
||||
'session_login', |
||||
'name', |
||||
'phone_number', |
||||
'email', |
||||
'address', |
||||
'fcm_token', |
||||
'gender', |
||||
'birth_place', |
||||
'birth_date', |
||||
'blood_type', |
||||
'ktp_number', |
||||
'employee_type', |
||||
'status_resource', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by', |
||||
'divisi_id', |
||||
'status_boundary' |
||||
]; |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class HumanResource extends Model |
||||
{ |
||||
protected $table = 'm_users'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'role_id', |
||||
'username', |
||||
'password', |
||||
'session_login', |
||||
'name', |
||||
'phone_number', |
||||
'email', |
||||
'address', |
||||
'fcm_token', |
||||
'gender', |
||||
'birth_place', |
||||
'birth_date', |
||||
'blood_type', |
||||
'ktp_number', |
||||
'employee_type', |
||||
'status_resource', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by', |
||||
'divisi_id', |
||||
'status_boundary' |
||||
]; |
||||
} |
||||
|
@ -1,52 +1,54 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Project extends Model |
||||
{ |
||||
protected $table = 'm_proyek'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'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_simbol', |
||||
'currency_code', |
||||
'currency_name', |
||||
'project_objectives', |
||||
'considered_success_when', |
||||
'potential_risk', |
||||
'testing_environment', |
||||
'currency_code', |
||||
'currency_symbol', |
||||
'currency_name', |
||||
'budget_health', |
||||
'phase_id', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
|
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Project extends Model |
||||
{ |
||||
protected $table = 'm_proyek'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'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', |
||||
'budget_health', |
||||
'phase_id', |
||||
'late_consequence', |
||||
'assumtion', |
||||
'calculation_status', |
||||
'structur_organization', |
||||
'scurve', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
|
||||
} |
||||
|
@ -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' |
||||
]; |
||||
} |
@ -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' |
||||
]; |
||||
} |
@ -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' |
||||
]; |
||||
} |
@ -1,78 +1,75 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Carbon\Carbon; |
||||
|
||||
class ReportActivityMaterial extends Model |
||||
{ |
||||
protected $table = 'report_activity_material'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id', |
||||
'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
public function getReportDateAttribute($value) |
||||
{ |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
if($dataPlan[0]->status_activity == 'done'){ |
||||
$percentage = 100; |
||||
} else { |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
} |
||||
|
||||
$activity->update([ |
||||
"persentase_progress" => $percentage, |
||||
"biaya_actual" => $biayaActual, |
||||
]); |
||||
|
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
|
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
if($dataPlan[0]->status_activity == 'done'){ |
||||
$activity->persentase_progress = 100; |
||||
} else { |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
} |
||||
|
||||
$activity->save(); |
||||
|
||||
}); |
||||
|
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
use App\Models\AssignMaterial; |
||||
use Carbon\Carbon; |
||||
|
||||
class ReportActivityMaterial extends Model |
||||
{ |
||||
protected $table = 'report_activity_material'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id', |
||||
'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
|
||||
public function getReportDateAttribute($value) |
||||
{ |
||||
return Carbon::createFromTimestamp(strtotime($value)) |
||||
->timezone(env('APP_TIMEZONE')) |
||||
->toDateTimeString(); |
||||
} |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
if($dataPlan[0]->status_activity == 'done'){ |
||||
$percentage = 100; |
||||
} else { |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
} |
||||
|
||||
$activity->update([ |
||||
"persentase_progress" => $percentage, |
||||
"biaya_actual" => $biayaActual, |
||||
]); |
||||
|
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
|
||||
$activity = Activity::find($data->activity_id); |
||||
$assignedMaterial = AssignMaterial::find($data->assign_material_id); |
||||
|
||||
$activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty); |
||||
$activity->actual_start = null; |
||||
$activity->actual_end = null; |
||||
|
||||
$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get(); |
||||
$totalPlan = $dataPlan->sum('qty_planning'); |
||||
$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty"); |
||||
$percentage = ($totalVolumeActual * 100) / $totalPlan; |
||||
$activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage; |
||||
$activity->save(); |
||||
|
||||
}); |
||||
|
||||
} |
||||
} |
||||
|
@ -1,17 +1,17 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Role extends Model |
||||
{ |
||||
protected $table = 'm_roles'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Role extends Model |
||||
{ |
||||
protected $table = 'm_roles'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name', 'description', 'default_page', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
} |
||||
|
@ -1,61 +1,63 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
|
||||
class UserToActivity extends Model |
||||
{ |
||||
protected $table = 'assign_hr_to_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'user_id', |
||||
'proyek_id', |
||||
'version_gantt_id', |
||||
'role_proyek_id', |
||||
'activity_id', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); |
||||
|
||||
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); |
||||
|
||||
if($getWorkingHours->uom_standart_rate == "Hour") |
||||
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); |
||||
|
||||
$activity->rencana_biaya += $salary; |
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
|
||||
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); |
||||
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); |
||||
if($getWorkingHours->uom_standart_rate == "Hour"){ |
||||
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); |
||||
} |
||||
|
||||
$activity->rencana_biaya -= $salary; |
||||
if ($activity->rencana_biaya < 0) { |
||||
$activity->rencana_biaya = 0; |
||||
} |
||||
$activity->save(); |
||||
}); |
||||
|
||||
} |
||||
|
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
|
||||
class UserToActivity extends Model |
||||
{ |
||||
protected $table = 'assign_hr_to_activity'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'user_id', |
||||
'proyek_id', |
||||
'version_gantt_id', |
||||
'role_proyek_id', |
||||
'activity_id', |
||||
'start_date', |
||||
'end_date', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::created(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); |
||||
|
||||
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); |
||||
|
||||
if($getWorkingHours->uom_standart_rate == "Hour") |
||||
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); |
||||
|
||||
$activity->rencana_biaya += $salary; |
||||
$activity->save(); |
||||
}); |
||||
|
||||
static::deleted(function($data) { |
||||
$activity = Activity::find($data->activity_id); |
||||
|
||||
$getWorkingHours = UserToProyek::where('user_id', $data->user_id)->where('proyek_id', $activity->proyek_id)->first(); |
||||
$salary = ($getWorkingHours->standart_rate * $activity->duration) * ($getWorkingHours->max_used / 100); |
||||
if($getWorkingHours->uom_standart_rate == "Hour"){ |
||||
$salary = ($getWorkingHours->standart_rate * 8) * $activity->duration * ($getWorkingHours->max_used / 100); |
||||
} |
||||
|
||||
$activity->rencana_biaya -= $salary; |
||||
if ($activity->rencana_biaya < 0) { |
||||
$activity->rencana_biaya = 0; |
||||
} |
||||
$activity->save(); |
||||
}); |
||||
|
||||
} |
||||
|
||||
} |
||||
|
@ -1,19 +1,19 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class UserToProyek extends Model |
||||
{ |
||||
protected $table = 'assign_hr_to_proyek'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'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', |
||||
'base_calender', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class UserToProyek extends Model |
||||
{ |
||||
protected $table = 'assign_hr_to_proyek'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'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', |
||||
'base_calender', 'is_customer', 'created_at', 'created_by', 'updated_at', 'updated_by' |
||||
]; |
||||
} |
||||
|
@ -1,29 +1,84 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class VersionGantt extends Model |
||||
{ |
||||
protected $table = 'm_version_gantt'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name_version', |
||||
'description', |
||||
'date_base_line', |
||||
'proyek_id', |
||||
'config_dayoff', |
||||
'auto_schedule', |
||||
'calculation_type', |
||||
'committed_cost', |
||||
'cost_to_complete', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
} |
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Model; |
||||
use App\Models\Activity; |
||||
use App\Models\Link; |
||||
use DateTime; |
||||
|
||||
class VersionGantt extends Model |
||||
{ |
||||
protected $table = 'm_version_gantt'; |
||||
|
||||
const CREATED_AT = 'created_at'; |
||||
const UPDATED_AT = 'updated_at'; |
||||
|
||||
protected $fillable = [ |
||||
'name_version', |
||||
'description', |
||||
'date_base_line', |
||||
'proyek_id', |
||||
'config_dayoff', |
||||
'auto_schedule', |
||||
'calculation_type', |
||||
'committed_cost', |
||||
'cost_to_complete', |
||||
'progress', |
||||
'bobot', |
||||
'hierarchy_ftth_id', |
||||
'created_at', |
||||
'created_by', |
||||
'updated_at', |
||||
'updated_by' |
||||
]; |
||||
|
||||
public static function boot() { |
||||
parent::boot(); |
||||
|
||||
static::updated(function($data) { |
||||
$data->updateActDuration(); |
||||
}); |
||||
|
||||
static::deleted(function ($data) { |
||||
$activities = Activity::where('version_gantt_id', $data->id)->get(); |
||||
foreach ($activities as $activity) { |
||||
$activity->delete(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
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(); |
||||
} |
||||
} |
||||
} |
||||
|
@ -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); |
||||
} |
||||
} |
@ -0,0 +1,5 @@
|
||||
<?php |
||||
|
||||
return [ |
||||
'server_key' => "AAAAin2zZmc:APA91bHFIYDzZGyVyXvt2C8I09wC2k8siWPQIo4b1Db0QjxCzQR5SRQU9KY1iNRIUhTL6OoLUs2x6UAiP1BNv-mwOlSR7C_405msoNL2p33JVBxrtqc7hdMc5TEdTBB4ZGRVH7ltQzSe", |
||||
]; |
@ -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'); |
||||
} |
||||
} |
Loading…
Reference in new issue