@ -5,9 +5,7 @@ namespace App\Http\Controllers;
use Log;
use Illuminate\Http\Request;
use App\Models\Presence;
// use App\Models\Activity;
// use GuzzleHttp\Client;
// use Illuminate\Support\Facades\Http;
use App\Models\ReportK3;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
@ -23,9 +21,7 @@ class PresenceController extends Controller
$statusBoundary = false;
$date = date_create($request->clock_time);
// assign and in boundary
if(count($checkLocation) > 0 & & $checkLocation[0]['boundary']){
// $checkLocation[0]['status_assign'] ? $statusBoundary = true
// :
if(count($checkLocation) > 0 & & $checkLocation[0]['boundary']){
$statusBoundary = true;
}
@ -124,23 +120,151 @@ class PresenceController extends Controller
}
}
public function reportK3(Request $request){
// return response()->json(['status'=>'success', 'message'=>$request->report_k3['detail'],'code'=>200], 200);
$this->validate($request, [
'user_id' => 'required'
]);
$dataFormK3 = array(
"user_id" => $request->user_id,
"proyek_id" => $request->report_k3['proyek_id'],
"report_date" => $request->time,
"description" => $request->report_k3['description']
);
$checkLocation = $this->checkLocation($request);
$statusBoundary = false;
$date = date_create($request->time);
// assign and in boundary
if(count($checkLocation) > 0 & & $checkLocation[0]['boundary']){
$statusBoundary = true;
}
// not assign
if(!$checkLocation[0]['status_assign'] & & $checkLocation[0]['boundary'] == false){
$data=array(
'id' => null,
'boundary' => $statusBoundary
);
return response()->json(['status'=>'failed', 'data'=>$data, 'message'=>'Tidak dapat melakukan presensi. Anda belum di assign ke area kerja.','code'=>200], 200);
}
// assign and not in boundary
if($checkLocation[0]['status_assign'] & & $checkLocation[0]['boundary'] == false){
$data=array(
'id' => null,
'boundary' => true
);
return response()->json(['status'=>'failed', 'data'=>$data, 'message'=>'Tidak dapat melakukan presensi. Anda berada di luar area kerja.','code'=>200], 200);
}
if($request->clock_in_out['type']=="out"){
$clock_out_loc = $this->getLoc($request->clock_in_out['clock_out_lat'], $request->clock_in_out['clock_out_lng'])->display_name;
$dataUpdate = array(
"clock_out"=>$request->time,
"clock_out_lat" => $request->clock_in_out['clock_out_lat'],
"clock_out_lng" => $request->clock_in_out['clock_out_lng'],
"updated_by"=>$this->currentName,
"clock_out_loc" => $clock_out_loc,
"clock_out_boundary" => $statusBoundary
);
$resultUpdate = $this->updateFormAdd($dataUpdate, $request->user_id);
if($resultUpdate & & $resultUpdate > 0){
if($statusBoundary){
for ($i=0; $i < count ( $ checkLocation ) ; $ i + + ) {
# code...
DB::table('clock_in_out_boundary')->insert([
"clock_in_out_id" => $resultUpdate,
"user_id" => $request->user_id,
"activity_id" => $checkLocation[$i]['activity_id'],
"type" => $request->clock_in_out['type'],
"created_at" => $date,
"created_by" => $this->currentName
]);
};
};
$data=array(
'presence_id' => $resultUpdate,
'boundary' => $statusBoundary
);
return response()->json(['status'=>'success', 'data'=>$data,'message'=>'clock out success!','code'=>200], 200);
}
else{
return response()->json(['status'=>'failed','message'=>'clock out failed please try again!','code'=>400], 400);
}
die();
}
$onlyDate = date_format($date,"Y-m-d");
$clock_in_loc = $this->getLoc($request->clock_in_out['clock_in_lat'], $request->clock_in_out['clock_in_lng'])->display_name;
$dataFormPresence = array(
'user_id' => $request->user_id,
'clock_in' => $request->time,
'date_presence' => $onlyDate,
'created_by' => $this->currentName,
'clock_in_lat' => $request->clock_in_out['clock_in_lat'],
'clock_in_lng' => $request->clock_in_out['clock_in_lng'],
'clock_in_loc' => $clock_in_loc,
'clock_in_boundary' => $statusBoundary
);
$result = Presence::create($dataFormPresence);
$data=array(
'presence_id' => $result->id,
'boundary' => $statusBoundary
);
if($result){
if($statusBoundary){
$insertk3 = $this->insertK3($dataFormK3, $request->report_k3['detail']) ;
for ($i=0; $i < count ( $ checkLocation ) ; $ i + + ) {
# code...
DB::table('clock_in_out_boundary')->insert([
"clock_in_out_id" => $result->id,
"user_id" => $request->user_id,
"activity_id" => $checkLocation[$i]['activity_id'],
"type" => $request->type,
"created_at" => $date,
"created_by" => $this->currentName
]);
};
$data['report_id'] = $insertk3->id;
};
return response()->json(['status'=>'success', 'data'=> $data, 'message'=>'clock in successfully!','code'=>200], 200);
}else{
return response()->json(['status'=>'failed','message'=>'clock in failed!','code'=>400], 400);
}
}
private function insertK3($params, $details){
$insert = ReportK3::create($params);
if($insert & & $details){
$this->addDetailK3($details, $insert->id);
}
return $insert;
}
private function checkLocation($params){
// cek user tersebut apakah punya assign task yang ada bondary nya
// geom ada di table activity
// $clock_time =
$geom = DB::table("assign_hr_to_activity as ahta")->select("ma.geom", "ma.id")
->join("m_activity as ma", "ma.id", "=", "ahta.activity_id")
->where("ahta.user_id", $params->user_id)
->whereDate("ma.start_date", "< =", $params->clock_time)
->whereDate("ma.end_date", ">=", $params->clock_time)
->whereDate("ma.start_date", "< =", $params->time)
->whereDate("ma.end_date", ">=", $params->time)
->get();
$temp = [];
if (count($geom) > 0) {
foreach($geom as $dataGeom){
$valGeom = json_decode($dataGeom->geom);
if($params->type=="out"){
$check = DB::select(DB::raw("SELECT ST_Intersects(ST_GeomFromGeoJSON('".json_encode($valGeom->geometry)."'), ST_GeomFromText('POINT(".$params->clock_out_lng." ".$params->clock_out_lat.")', 4326)) as boundary"));
if($params->clock_in_out[' type'] =="out"){
$check = DB::select(DB::raw("SELECT ST_Intersects(ST_GeomFromGeoJSON('".json_encode($valGeom->geometry)."'), ST_GeomFromText('POINT(".$params->clock_in_out['clock_ out_lng'] ." ".$params->clock_in_out['clock_ out_lat'] .")', 4326)) as boundary"));
}else{
$check = DB::select(DB::raw("SELECT ST_Intersects(ST_GeomFromGeoJSON('".json_encode($valGeom->geometry)."'), ST_GeomFromText('POINT(".$params->clock_in_lng." ".$params->clock_in_lat.")', 4326)) as boundary"));
$check = DB::select(DB::raw("SELECT ST_Intersects(ST_GeomFromGeoJSON('".json_encode($valGeom->geometry)."'), ST_GeomFromText('POINT(".$params->clock_in_out['clock_in_ lng'] ." ".$params->clock_in_out['clock_in_ lat'] .")', 4326)) as boundary"));
}
foreach ($check as $key) {
// assign and in boundary