/** * Create a day's sleep */ private function createDaySleep($index, $finishMinutes) { $today = Carbon::today(); $this->date = $today->subDays($index); $entry = new Timer(['start' => $this->date->hour(16)->format('Y-m-d H:i:s'), 'finish' => $this->date->hour(17)->minute($finishMinutes)->format('Y-m-d H:i:s')]); $entry->user()->associate($this->user); $entry->activity()->associate(Activity::where('name', 'sleep')->where('user_id', $this->user->id)->first()); $entry->save(); }
/** * @param Timer $timer * @return array */ public function transform(Timer $timer) { $start = Carbon::createFromFormat('Y-m-d H:i:s', $timer->start); $array = ['id' => $timer->id, 'start' => $timer->start, 'startDate' => $start->format('d/m/y')]; if ($timer->finish) { // $array['finish'] = Carbon::createFromFormat('Y-m-d H:i:s', $timer->finish); $array['finish'] = $timer->finish; $array['hours'] = $timer->hours; $array['minutes'] = $timer->minutes; $array['durationInMinutes'] = $timer->totalMinutes; if (isset($this->params['date'])) { $array['durationInMinutesForDay'] = $timer->getTotalMinutesForDay(Carbon::createFromFormat('Y-m-d', $this->params['date'])); } } return $array; }
/** * @test * @return void */ public function it_can_delete_a_timer() { DB::beginTransaction(); $this->logInUser(); $timer = Timer::forCurrentUser()->first(); $response = $this->call('DELETE', '/api/timers/' . $timer->id); $this->assertEquals(204, $response->getStatusCode()); $response = $this->call('DELETE', '/api/timer/' . $timer->id); $this->assertEquals(404, $response->getStatusCode()); DB::rollBack(); }
/** * Sort entries by date * For the graph * @param $entries * @return static */ public function getTimersInDateRange($entries) { $formatForUser = '******'; $earliestDate = Carbon::createFromFormat('Y-m-d H:i:s', Timer::forCurrentUser()->min('start')); $lastDate = Carbon::createFromFormat('Y-m-d H:i:s', Timer::forCurrentUser()->max('finish')); //Form an array with all the dates in the range of entries $entriesByDate = []; $index = 0; $shortDate = clone $lastDate; $shortDate = $shortDate->format('d/m'); $day = clone $lastDate; $day = $day->format('D'); $entriesByDate[] = ['date' => $lastDate->format($formatForUser), 'orderIndex' => $index, 'shortDate' => $shortDate, 'day' => $day]; $date = Carbon::createFromFormat('Y-m-d H:i:s', Timer::forCurrentUser()->max('finish')); while ($date > $earliestDate) { $index++; $date = $date->subDays(1); $shortDate = clone $date; $shortDate = $shortDate->format('d/m'); $day = clone $date; $day = $day->format('D'); $entriesByDate[] = ['date' => $date->format($formatForUser), 'shortDate' => $shortDate, 'orderIndex' => $index, 'day' => $day]; } //Add each entry to the array I formed foreach ($entries as $entry) { if ($entry->finish) { $startDate = Carbon::createFromFormat('Y-m-d H:i:s', $entry->start)->format($formatForUser); $finishDate = Carbon::createFromFormat('Y-m-d H:i:s', $entry->finish)->format($formatForUser); if ($startDate === $finishDate) { $array = ['start' => Carbon::createFromFormat('Y-m-d H:i:s', $entry->start)->format('g:ia'), 'finish' => Carbon::createFromFormat('Y-m-d H:i:s', $entry->finish)->format('g:ia'), 'startPosition' => $entry->getStartRelativeHeight(), 'finishPosition' => $entry->getFinishRelativeHeight(), 'startHeight' => $entry->getDurationInMinutesDuringOneDay(), 'color' => $entry->activity->color]; $indexOfItem = $this->getIndexOfItem($entriesByDate, $startDate); $entriesByDate[$indexOfItem][] = $array; } else { $array = ['start' => Carbon::createFromFormat('Y-m-d H:i:s', $entry->start)->format('g:ia'), 'finish' => null, 'startPosition' => $entry->getStartRelativeHeight(), 'finishPosition' => null, 'startHeight' => $entry->getDurationInMinutesDuringOneDay('finish'), 'color' => $entry->activity->color]; $indexOfItem = $this->getIndexOfItem($entriesByDate, $startDate); $entriesByDate[$indexOfItem][] = $array; $finish = $entry->getFinish(); $midnight = clone $finish; $midnight = $midnight->hour(0)->minute(0); $array = ['start' => null, 'fakeStart' => $midnight->format('g:ia'), 'fakeStartPosition' => $entry->getStartRelativeHeight(true), 'finish' => $finish->format('g:ia'), 'startPosition' => null, 'finishPosition' => $entry->getFinishRelativeHeight(), 'startHeight' => $entry->getDurationInMinutesDuringOneDay('start'), 'color' => $entry->activity->color]; $indexOfItem = $this->getIndexOfItem($entriesByDate, $finishDate); $entriesByDate[$indexOfItem][] = $array; } } } return collect($entriesByDate)->reverse(); }
/** * @test * @return void */ public function it_can_update_a_timer() { DB::beginTransaction(); $this->logInUser(); $timer = Timer::forCurrentUser()->first(); $finish = Carbon::today()->hour(23)->format('Y-m-d H:i:s'); $this->assertEquals(1, $timer->activity_id); $response = $this->call('PUT', '/api/timers/' . $timer->id, ['finish' => $finish, 'start' => '2016-03-01 10:30:00', 'activity_id' => 2]); $content = json_decode($response->getContent(), true); // dd($content); $this->checkTimerKeysExist($content); //Todo: test values are correct $this->assertEquals($finish, $content['finish']); $this->assertEquals('2016-03-01 10:30:00', $content['start']); $this->assertEquals(2, $content['activity']['data']['id']); $this->assertEquals(200, $response->getStatusCode()); DB::rollBack(); }
/** * * @param Timer $timer * @return Response * @throws \Exception */ public function destroy(Timer $timer) { $timer->delete(); return response([], Response::HTTP_NO_CONTENT); }
/** * Define your route model bindings, pattern filters, etc. * * @param \Illuminate\Routing\Router $router * @return void */ public function boot(Router $router) { parent::boot($router); Route::bind('exercises', function ($id) { return Exercise::forCurrentUser()->findOrFail($id); }); Route::bind('exerciseEntries', function ($id) { return ExerciseEntry::forCurrentUser()->findOrFail($id); }); Route::bind('menuEntries', function ($id) { return MenuEntry::forCurrentUser()->findOrFail($id); }); Route::bind('exerciseSeries', function ($id) { return ExerciseSeries::forCurrentUser()->findOrFail($id); }); Route::bind('foods', function ($id) { return Food::forCurrentUser()->findOrFail($id); }); Route::bind('recipes', function ($id) { return Recipe::forCurrentUser()->findOrFail($id); }); Route::bind('exerciseTags', function ($id) { return Tag::forCurrentUser()->where('for', 'exercise')->findOrFail($id); }); Route::bind('recipeTags', function ($id) { return Tag::forCurrentUser()->where('for', 'recipe')->findOrFail($id); }); Route::bind('foodUnits', function ($id) { return Unit::forCurrentUser()->where('for', 'food')->findOrFail($id); }); Route::bind('exerciseUnits', function ($id) { return Unit::forCurrentUser()->where('for', 'exercise')->findOrFail($id); }); Route::bind('timers', function ($id) { return Timer::forCurrentUser()->findOrFail($id); }); Route::bind('activities', function ($id) { return Activity::forCurrentUser()->findOrFail($id); }); Route::bind('weights', function ($idOrDate) { if (strrpos($idOrDate, '-')) { //parameter is the date of the entry $weight = Weight::forCurrentUser()->where('date', $idOrDate)->first(); } else { //parameter is the id of the entry $weight = Weight::forCurrentUser()->findOrFail($idOrDate); } return $weight; }); /** * $parameter is either the id or the date */ Route::bind('journal', function ($parameter) { /** * @VP: * Is there a better way to check if the $parameter is an * id or a date? When I tried using Carbon to create an object from * the parameter, it threw an exception when the $parameter was the id, * whereas I just wanted a boolean. */ if (strrpos($parameter, '-')) { //$parameter is the date of the entry $journal = Journal::forCurrentUser()->where('date', $parameter)->first(); } else { //$parameter is the id of the entry $journal = Journal::forCurrentUser()->findOrFail($parameter); } return $journal; }); }