validate($request, [ 'user_id' => 'required' ]); $checkLocation = $this->checkLocation($request); $statusBoundary = false; $date = date_create($request->clock_time); // $ActivityId = null; if(count($checkLocation) > 0){ $checkLocation[0]['status_assign'] ? $statusBoundary = true : $statusBoundary = false; } if(!$checkLocation[0]['status_assign'] && $checkLocation[0]['boundary'] == null){ $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); } if($checkLocation[0]['status_assign'] && $checkLocation[0]['boundary'] == null){ $data=array( 'id' => null, 'boundary' => $statusBoundary ); return response()->json(['status'=>'failed', 'data'=>$data, 'message'=>'Tidak dapat melakukan presensi. Anda berada di luar area kerja.','code'=>200], 200); } // if($request->type=="out"){ // $clock_out_loc = $this->getLoc($request->clock_out_lat, $request->clock_out_lng)->display_name; // $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, // "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->type, // "created_at" => $date, // "created_by" => $this->currentName // ]); // }; // }; // $data=array( // '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_lat, $request->clock_in_lng)->display_name; // $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, // 'clock_in_boundary' => $statusBoundary // ); // $result = Presence::create($dataAdd); // $data=array( // 'id' => $result->id, // 'boundary' => $statusBoundary // ); // if($result){ // if($statusBoundary){ // 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 // ]); // }; // }; // 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) ->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")); }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")); } foreach ($check as $key) { if($key->boundary){ $temp[]=array( "activity_id" => $dataGeom->id, "boundary" => $key->boundary, "status_assign" => true ); } } if(count($temp) < 1){ $temp[]=array( "activity_id" => null, "boundary" => null, "status_assign" => true ); } } }else{ $temp[]=array( "activity_id" => null, "boundary" => null, "status_assign" => false ); } return $temp; } 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(); $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)) { $objRow->clock_in_loc = $this->getLoc($clock_in_lat, $clock_in_lng)->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) && $clock_out_lng != null) { $locAddress = $this->getLoc($clock_out_lat, $clock_out_lng); $objRow->clock_out_loc = isset($locAddress->display_name) ? $locAddress->display_name : "-"; } $presence->clock_in_loc = $objRow->clock_in_loc; $presence->clock_out_loc = $objRow->clock_out_loc; $presence->save(); } return response()->json(['status'=>'success','message'=>'success update!','code'=>200], 200); } }