You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
3.6 KiB
64 lines
3.6 KiB
2 years ago
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use Illuminate\Http\Request;
|
||
|
use App\Models\ReportActivity;
|
||
|
use App\Models\Activity;
|
||
|
use App\Models\Project;
|
||
|
|
||
|
use DB;
|
||
|
|
||
|
class ControlMonitoringController extends Controller
|
||
|
{
|
||
|
public function search(Request $request)
|
||
|
{
|
||
|
// payload same like in goland API oke
|
||
|
$payload = $request->all();
|
||
|
// second parameter is table name
|
||
|
$dataBuilder = $this->setUpPayload($payload, 'm_proyek');
|
||
|
// builder for get data
|
||
|
$builder = $dataBuilder['builder'];
|
||
|
// builder for count data
|
||
|
$countBuilder = $dataBuilder['count'];
|
||
|
// execute builder
|
||
|
$dataGet = $builder->get();
|
||
|
// get another child data
|
||
|
if($request->has("child_data")){
|
||
|
$newDataGet = [];
|
||
|
$child_data = $request->child_data;
|
||
|
$date_start = $child_data['start_date'];
|
||
|
$date_end = $child_data['date_end'];
|
||
|
foreach ($dataGet as $value) {
|
||
|
$ganttId = $this->getMaxVersionGantt($value->id);
|
||
|
$allActivityIds = Activity::where("version_gantt_id", $ganttId)->where("proyek_id", $value->id)->pluck("id");
|
||
|
$value->volume_planning = Activity::where("version_gantt_id", $ganttId)->where("proyek_id", $value->id)->sum("jumlah_pekerjaan");
|
||
|
$value->biaya_actual = Activity::where("version_gantt_id", $ganttId)->where("proyek_id", $value->id)->sum("biaya_actual");
|
||
|
$value->volume_actual = ReportActivity::where("activity_id", $allActivityIds->all())->sum("job_count_report");
|
||
|
$listAct = [];
|
||
|
$activityIds = ReportActivity::select("ma.id as id")->join("m_activity as ma", "ma.id", "=", "report_activity.activity_id")->where("ma.version_gantt_id", $ganttId)->where("ma.proyek_id", $value->id)->whereBetween("report_activity.report_date", [$date_start, $date_end])->groupBy("ma.id")->get()->pluck('id');
|
||
|
$dataActivity = Activity::select("m_activity.*", "ms.name as uom")->leftJoin("m_satuan as ms", "ms.id","=","m_activity.satuan_id")->whereIn("m_activity.id", $activityIds->all())->get();
|
||
|
foreach($dataActivity as $act){
|
||
|
$act->list_report = ReportActivity::select("report_activity.*", "mu.name as user_name", "mi.image as image_url")->leftJoin("m_users as mu", "mu.id", "=", "report_activity.user_id")->leftJoin("m_image as mi", function($join){
|
||
|
$join->on("mi.ref_id", "=", "report_activity.id")->where("mi.category", "report_activity");
|
||
|
})->where("report_activity.activity_id", $act->id)->whereBetween("report_activity.report_date", [$date_start, $date_end])->get();
|
||
|
// $act->list_report = ReportActivity::select("report_activity.*", "mu.name as user_name")->leftJoin("m_users as mu", "mu.id", "=", "report_activity.user_id")->where("report_activity.activity_id", $act->id)->whereBetween("report_activity.report_date", [$date_start, $date_end])->get();
|
||
|
$listAct[] = $act;
|
||
|
}
|
||
|
$value->report_data = $listAct;
|
||
|
$newDataGet[] = $value;
|
||
|
}
|
||
|
$dataGet = $newDataGet;
|
||
|
}
|
||
|
// execute count builder
|
||
|
$totalRecord = $countBuilder->count();
|
||
|
// dd($totalRecord);
|
||
|
// send response about the result
|
||
|
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
|
||
|
}
|
||
|
|
||
|
private function getMaxVersionGantt($id){
|
||
|
return Activity::where("proyek_id", $id)->max("version_gantt_id");
|
||
|
}
|
||
|
}
|