checkLocation($request); // return response()->json(['status'=>$test,'code'=>200], 200); $this->validate($request, [ 'user_id' => 'required' ]); if($request->type=="out"){ $clock_out_loc = "-"; $dataUpdate = array( "clock_out"=>$request->clock_time, "clock_out_lat" => $request->clock_out_lat, "clock_out_lng" => $request->clock_out_lng, "updated_by"=>$this->currentName, "clock_out_loc" => $clock_out_loc ); $resultUpdate = $this->updateFormAdd($dataUpdate, $request->user_id); if($resultUpdate && $resultUpdate > 0){ return response()->json(['status'=>'success', 'id'=>$resultUpdate,'message'=>'clock out success!','code'=>200], 200); } else{ return response()->json(['status'=>'failed','message'=>'clock out failed please try again!','code'=>400], 400); } die(); } $date = date_create($request->clock_time); $onlyDate = date_format($date,"Y-m-d"); $clock_in_loc = "-"; $dataAdd = array( 'user_id'=> $request->user_id, 'clock_in'=> $request->clock_time, 'date_presence'=> $onlyDate, 'created_by' =>$this->currentName, 'clock_in_lat' => $request->clock_in_lat, 'clock_in_lng' => $request->clock_in_lng, 'clock_in_loc' => $clock_in_loc ); $result = Presence::create($dataAdd); $data=array( 'id' => $result->id, 'boundary' => true ); if($result){ 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 checkLocation($params){ // cek user tersebut apakah punya assign task yang ada bondary nya // geom ada di table activity $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) ->where(DB::raw("ST_Intersects(ST_GeomFromGeoJSON('ma.geom'), ST_GeomFromText('POINT(".$params->clock_out_lng." ".$params->clock_out_lat.")', 4326))")) ->get(); // Activity::select('geom')->where(''); // gejson to geom // intersect dengan point req return $geom; } public function edit($id){ if(!$id || (int) $id < 0 || $id==""){ return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400); die(); } $result = Presence::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, please try again later!','code'=>400], 400); } } public function clockinout($id) { $dateTimeNow = Carbon::now()->addHour(7); $dataPresence = Presence::where('user_id', $id)->orderBy('id', 'DESC')->first(); if($dataPresence){ $dateNow = date("Y-m-d"); $dateA = strtotime($dataPresence->clock_in); $dayClockin = date("Y-m-d", $dateA); if($dayClockin == $dateNow){ $clock_in = $dataPresence->clock_in; $clock_out = $dataPresence->clock_out; }else{ $clock_in = null; $clock_out = null; } $res_data = array( "id" => $dataPresence->id, "at" => $dateTimeNow, "user_id"=> $id, "clock_in"=> $clock_in, "clock_out"=> $clock_out, "last_clock_in"=> $dataPresence->clock_in, "last_clock_out"=> $dataPresence->clock_out, "in_working_time"=> true ); return response()->json(['status'=>'success','data'=>$res_data,'code'=>200], 200); } $res_data = array( "id" => null, "at" => $dateTimeNow, "user_id"=> $id, "clock_in"=> null, "clock_out"=> null, "last_clock_in"=> null, "last_clock_out"=> null, "in_working_time"=> true ); return response()->json(['status'=>'success','data'=>$res_data,'code'=>200], 200); } private function updateFormAdd($data, $id){ $date = date_create($data['clock_out']); $onlyDate = date_format($date,"Y-m-d"); $dataPresence = Presence::where('user_id',$id) ->where("clock_in", "<=", $data["clock_out"]) ->orderByDesc("id") ->first(); if($dataPresence){ $queryUpdate = $dataPresence->update($data); if($queryUpdate){ $getDataUpdate = Presence::where('user_id', $id)->where("date_presence", $onlyDate)->first(); return $getDataUpdate->id; }else{ return false; } }else{ return false; } die(); } 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 = Presence::find($id); if($data){ $result = $data->update($request->all()); }else{ return response()->json(['status'=>'failed','message'=>'data presence not found!','code'=>400], 400); die(); } if($result){ return response()->json(['status'=>'success','message'=>'data presence successfully updated!','code'=>200], 200); }else{ return response()->json(['status'=>'failed','message'=>'data presence failed updated!','code'=>400], 400); } } public function delete($id) { $data = Presence::find($id); if($data){ $delete = $data->delete(); }else{ return response()->json(['status'=>'failed','message'=>'data presence not found!','code'=>400], 400); die(); } if($delete){ return response()->json(['status'=>'success','message'=>'data presence successfully deleted!','code'=>200], 200); }else{ return response()->json(['status'=>'failed','message'=>'data presence failed deleted!','code'=>400], 400); } } public function search(Request $request) { $payload = $request->all(); $dataBuilder = $this->setUpPayload($payload, 't_clock_in_out'); $builder = $dataBuilder['builder']; $countBuilder = $dataBuilder['count']; $dataGet = $builder->get(); $finalData = []; $totalRecord = $countBuilder->count(); return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200); } public function list() { $data = Presence::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 presence, please try again later!','code'=>400], 400); } } public function bulkUpdateLocation() { $data = Presence::all(); $finalData = []; foreach($data as $objRow) { $presence = Presence::find($objRow->id); $clock_in_lat = $objRow->clock_in_lat; $clock_in_lng = $objRow->clock_in_lng; $objRow->clock_in_loc = ""; if (isset($clock_in_lat) && isset($clock_in_lng)) { $response = Http::get(config('api.nominatim') . "/reverse?lat=".$clock_in_lat."&lon=".$clock_in_lng."&format=json"); $objRow->clock_in_loc = $response->json()["display_name"]; } $clock_out_lat = $objRow->clock_out_lat; $clock_out_lng = $objRow->clock_out_lng; $objRow->clock_out_loc = ""; if (isset($clock_out_lat) && isset($clock_out_lng)) { $response = Http::get(config('api.nominatim') . "/reverse?lat=".$clock_out_lat."&lon=".$clock_out_lng."&format=json"); $objRow->clock_out_loc = $response->json()["display_name"]; } $presence->clock_in_loc = $objRow->clock_in_loc; $presence->clock_out_loc = $objRow->clock_out_loc; $presence->save(); } } }