diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 267fc72..01c4b50 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -21,7 +21,7 @@ class DashboardController extends Controller ->whereDate('due_end', '<=', strtotime('today midnight')) ->whereNull('completed_at') ->orderBy('due_end', 'asc') - ->paginate(5); + ->paginate(5, $columns = ['*'], $pageName = 'todos'); $todos->transform(function ($todo) { return \App\Models\Todo::find($todo->id); diff --git a/app/Http/Controllers/PomoController.php b/app/Http/Controllers/PomoController.php index 595de9e..cebc6f3 100644 --- a/app/Http/Controllers/PomoController.php +++ b/app/Http/Controllers/PomoController.php @@ -46,10 +46,10 @@ class PomoController extends Controller // Convert due_start and end to unix timestamp and save $pomo = new Pomo(); - $pomo->todo_id = $request->todo_id; - $pomo->pomo_start = strtotime($request->pomo_start); - $pomo->pomo_end = strtotime($request->pomo_end); - $pomo->notes = $request->notes; + $pomo->todo_id = $request->safe()->todo_id; + $pomo->pomo_start = strtotime($request->safe()->pomo_start); + $pomo->pomo_end = strtotime($request->safe()->pomo_end); + $pomo->notes = $request->safe()->notes; $pomo->save(); return redirect()->route('pomo.index') diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 4dac2cd..f2b6480 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Http\Requests\Project\StoreProjectRequest; use App\Http\Requests\Project\UpdateProjectRequest; use App\Models\Project; +use App\Models\Todo; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; @@ -26,9 +27,11 @@ class ProjectController extends Controller $user = User::find(auth()->user()->id); $projects = $user->projects()->paginate(4); // Aggregate all todos for all projects - $todos = $projects->map(function ($project) { - return $project->todos; - })->flatten(); + + $todos = $user->todos() + ->map(function ($todo) { + return Todo::find($todo->id); + }); if ($request->ajax()){ $view = view('project.load-projects', compact('projects'))->render(); @@ -41,7 +44,9 @@ class ProjectController extends Controller return view('project.index', [ 'projects' => $projects, 'todos' => $todos->whereNull('completed_at')->values(), - 'completed' => $todos->whereNotNull('completed_at')->values(), + 'completed' => $todos->whereNotNull('completed_at') + ->whereBetween('completed_at', [strtotime('today midnight'), strtotime('today midnight + 1 day')]) + ->values(), ]); } diff --git a/app/Http/Livewire/Dashboard/PomoTime.php b/app/Http/Livewire/Dashboard/PomoTime.php index f29d762..3ae979c 100644 --- a/app/Http/Livewire/Dashboard/PomoTime.php +++ b/app/Http/Livewire/Dashboard/PomoTime.php @@ -8,10 +8,11 @@ use App\Models\{ Project, Todo }; +use Carbon\Carbon; class PomoTime extends Component { - public int $ave_pomo_time = 0; + public $ave_pomo_time = 0; public function mount() { @@ -35,6 +36,9 @@ class PomoTime extends Component $this->ave_pomo_time = $total_time / $total_pomos; + // Time in Hours and Minutes (H hours m minutes) + $this->ave_pomo_time = Carbon::createFromTimestamp($this->ave_pomo_time)->format('H \h m \m'); + } diff --git a/app/Http/Livewire/Pomo/Create.php b/app/Http/Livewire/Pomo/Create.php index 9080343..ad67418 100644 --- a/app/Http/Livewire/Pomo/Create.php +++ b/app/Http/Livewire/Pomo/Create.php @@ -3,11 +3,9 @@ namespace App\Http\Livewire\Pomo; use App\Models\Pomo; -use App\Models\Project; -use App\Models\Todo; use App\Models\User; -use Livewire\Component; use Illuminate\Support\Collection; +use Livewire\Component; class Create extends Component { diff --git a/app/Http/Livewire/Pomo/PomoDashboard.php b/app/Http/Livewire/Pomo/PomoDashboard.php new file mode 100644 index 0000000..bf7d69f --- /dev/null +++ b/app/Http/Livewire/Pomo/PomoDashboard.php @@ -0,0 +1,13 @@ + 'loadMore', + ]; public function loadMore() { - $this->perPage += 10; + $this->perPage += 9; } public function render() { $user = User::find(auth()->id()); - $pomos = $user->pomos(); - - // Convert Pomos from Collection to class - $pomos = $pomos->map(function ($pomo) { - $pomo->todo = Todo::find($pomo->todo_id); - $pomo->project = Project::find($pomo->todo->project_id); - return $pomo; - }); + $pomos = Pomo::whereHas('todo', function ($query) use ($user) { + $query->whereHas('project', function ($query) use ($user) { + $query->whereHas('user', function ($query) use ($user) { + $query->where('user_id', $user->id); + }); + }); + })->orderBy('pomo_start', 'desc')->paginate($this->perPage); return view('livewire.pomo.pomos', [ 'pomos' => $pomos, diff --git a/app/Http/Requests/StorePomoRequest.php b/app/Http/Requests/StorePomoRequest.php index 28cc5c8..a97cb88 100644 --- a/app/Http/Requests/StorePomoRequest.php +++ b/app/Http/Requests/StorePomoRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Carbon\Carbon; class StorePomoRequest extends FormRequest { @@ -23,9 +24,16 @@ class StorePomoRequest extends FormRequest { return [ 'todo_id' => 'required|exists:todos,id', - 'pomo_start' => 'required|date', - 'pomo_end' => 'required|date', + 'pomo_start' => 'required|date_format:Y-m-d\TH:i', + 'pomo_end' => 'required|date_format:Y-m-d\TH:i|after:pomo_start', 'notes' => 'nullable|string', ]; } + + public function messages() + { + return [ + 'todo_id.required' => 'Please select a todo.', + ]; + } } diff --git a/app/Http/Requests/UpdatePomoRequest.php b/app/Http/Requests/UpdatePomoRequest.php index 04390aa..9539109 100644 --- a/app/Http/Requests/UpdatePomoRequest.php +++ b/app/Http/Requests/UpdatePomoRequest.php @@ -22,7 +22,9 @@ class UpdatePomoRequest extends FormRequest public function rules(): array { return [ - // + 'pomo_start' => 'required|date_format:Y-m-d\TH:i', + 'pomo_end' => 'required|date_format:Y-m-d\TH:i|after:pomo_start', + 'notes' => 'nullable|string', ]; } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b89cccf..730b65b 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,9 +14,9 @@ class DatabaseSeeder extends Seeder public function run(): void { \App\Models\User::factory(3) - ->has(\App\Models\Project::factory()->count(3) - ->has(\App\Models\Todo::factory()->count(10) - ->has(\App\Models\Pomo::factory()->count(4)) + ->has(\App\Models\Project::factory()->count(1) + ->has(\App\Models\Todo::factory()->count(5) + ->has(\App\Models\Pomo::factory()->count(20)) )) ->create(); } diff --git a/resources/views/livewire/dashboard/pomo-count.blade.php b/resources/views/livewire/dashboard/pomo-count.blade.php index 461910b..1ec642f 100644 --- a/resources/views/livewire/dashboard/pomo-count.blade.php +++ b/resources/views/livewire/dashboard/pomo-count.blade.php @@ -1,19 +1,19 @@
- {{ $ave_pomo_count }} -
-+ {{ $ave_pomo_count }} +
+ diff --git a/resources/views/livewire/dashboard/pomo-time.blade.php b/resources/views/livewire/dashboard/pomo-time.blade.php index 37cc69b..1fc8407 100644 --- a/resources/views/livewire/dashboard/pomo-time.blade.php +++ b/resources/views/livewire/dashboard/pomo-time.blade.php @@ -11,7 +11,7 @@ stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"/> - Average Pomos time spent per Project + Average time spent per Project{{ $ave_pomo_time }} diff --git a/resources/views/livewire/pomo/create.blade.php b/resources/views/livewire/pomo/create.blade.php index 3e63efe..761d4ba 100644 --- a/resources/views/livewire/pomo/create.blade.php +++ b/resources/views/livewire/pomo/create.blade.php @@ -12,11 +12,13 @@
Task | -Start | -End | -Duration (minutes) | -Notes | -Actions | -
---|