/** * Retrieves information for volunteer's activity of the day that is in progress. * * @param \Illuminate\Http\Request $request * @return JSON array of status of activity with activity */ public function todayActivityInProgress(Request $request) { if ($request->get('token') != null) { // Get Authenticated User $authenticatedUser = JWTAuth::setToken($request->get('token'))->authenticate(); $id = $authenticatedUser->volunteer_id; // Retrieve Activties within today $todayactivities = Activity::whereBetween('datetime_start', [Carbon::now()->startOfDay(), Carbon::now()->endOfDay()])->lists('activity_id'); //echo count($todayactivities); // Retrieve Related Activties within today related to volunteer $groupStatus = collect(['pick-up', 'at check-up', 'check-up completed']); $relatedActivty = Task::whereIn('activity_id', $todayactivities)->where('volunteer_id', $id)->whereIn('status', $groupStatus)->lists('activity_id'); $taskStatus = Task::whereIn('activity_id', $todayactivities)->whereIn('status', $groupStatus)->where('volunteer_id', $id)->value('status'); // Retrieve Activity details $activityToReturn = Activity::with('departureCentre', 'arrivalCentre')->whereIn('activity_id', $relatedActivty)->first(); return response()->json(compact('activityToReturn', 'taskStatus')); } else { $status = ["Missing parameter"]; return response()->json(compact('status')); } }
/** * Handles the checking to prevent user from applying from activities from the same time period of another activity. * * @param \Illuminate\Http\Request $request * @return JSON array with Status */ public function checkActivityApplication(Request $request) { if ($request->get('volunteer_id') == null || $request->get('activity_id') == null) { $status = ["Missing parameter"]; return response()->json(compact('status')); } else { $userID = $request->get('volunteer_id'); $actID = $request->get('activity_id'); $withdrawnTask = Task::where('volunteer_id', $userID)->where('activity_id', $actID)->where('approval', '=', 'withdrawn')->lists('activity_id'); $applyingActivity = Activity::findOrFail($actID); if ($applyingActivity == null) { $status = ["do not exist"]; return response()->json(compact('status')); } else { $activityStartTime = $applyingActivity->datetime_start; $activityDuration = $applyingActivity->expected_duration_minutes; $activityEndTime = $applyingActivity->datetime_start->addMinutes($activityDuration); $activityFullDayStart = $applyingActivity->datetime_start->startOfDay()->toDateTimeString(); $activityFullDayEnd = $applyingActivity->datetime_start->endOfDay()->toDateTimeString(); $activitiesOnSameDay = Activity::whereBetween('datetime_start', [$activityFullDayStart, $activityFullDayEnd])->where('activity_id', '<>', $actID)->lists('activity_id'); $status = ['rejected']; $taskofUserOnSameDay = Task::where('volunteer_id', $userID)->whereIn('activity_id', $activitiesOnSameDay)->whereNotIn('approval', $status)->lists('activity_id'); $check = false; foreach ($taskofUserOnSameDay as $activityID) { $activity = Activity::find($activityID); $bStartTime = $activity->datetime_start; $bDuration = $activity->expected_duration_minutes; $bEndTime = $activity->datetime_start->addMinutes($bDuration); if ($activityStartTime->lte($bStartTime) && $bStartTime->lte($activityEndTime) && $activityEndTime->lte($bEndTime)) { $check = true; } if ($bStartTime->lte($activityStartTime) && $activityStartTime->lte($bEndTime) && $bEndTime->lte($activityEndTime)) { $check = true; } if ($activityStartTime->lte($bStartTime) && $bStartTime->lte($activityEndTime) && $bEndTime->lte($activityEndTime)) { $check = true; } if ($bStartTime->lte($activityStartTime) && $activityStartTime->lte($bEndTime) && $activityEndTime->lte($bEndTime)) { $check = true; } if ($activityStartTime->eq($bStartTime) && $activityEndTime->eq($bEndTime)) { $check = true; } } if (!$check) { $status = ["do not exist"]; return response()->json(compact('status')); } else { $status = ["exist"]; return response()->json(compact('status')); } } } }