diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 36031cb..c616f06 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -41,12 +41,11 @@ class ProjectController extends Controller $user = User::find(auth()->user()->id); $projects = $user->projects()->paginate(4); - // Aggregate all todos for all projects - $todos = $user->todos() - ->map(function ($todo) { - return Todo::find($todo->id); - }); + // Aggregate all todos for all projects + $todos = $user->projects->map(function ($project) { + return $project->todos; + })->flatten(); if ($request->ajax()) { $view = view('project.load-projects', compact('projects'))->render(); @@ -60,7 +59,6 @@ class ProjectController extends Controller 'projects' => $projects, 'todos' => $todos->whereNull('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/Controllers/ProjectTodoController.php b/app/Http/Controllers/ProjectTodoController.php index 36057fb..0ce8e9d 100644 --- a/app/Http/Controllers/ProjectTodoController.php +++ b/app/Http/Controllers/ProjectTodoController.php @@ -50,7 +50,10 @@ class ProjectTodoController extends Controller return new TodoResource($todos); } - $todos = $project->todos; + // "Todo index" shows all Todos for all Project + $todos = $user->projects->map(function ($project) { + return $project->todos; + })->flatten(); return view('todo.index', [ 'todos' => $todos->whereNull('completed_at')->values(), diff --git a/app/Http/Livewire/Dashboard/CompletedTodo.php b/app/Http/Livewire/Dashboard/CompletedTodo.php index a336fd3..324ce72 100644 --- a/app/Http/Livewire/Dashboard/CompletedTodo.php +++ b/app/Http/Livewire/Dashboard/CompletedTodo.php @@ -13,13 +13,11 @@ class CompletedTodo extends Component public function mount() { - $this->todo_completed_count = DB::table('todos') - ->join('project_todo', 'todos.id', '=', 'project_todo.todo_id') - ->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id') - ->where('project_user.user_id', '=', Auth::user()->id) - ->whereDate('due_end', '<=', strtotime('today midnight')) - ->whereNotNull('completed_at') - ->count(); + $user = auth()->user(); + $this->todo_completed_count = $user->projects->map(function ($project) { + return $project->todos->whereNotNull('completed_at')->count(); + })->sum(); + } public function render() diff --git a/app/Http/Livewire/Dashboard/IncompleteTodo.php b/app/Http/Livewire/Dashboard/IncompleteTodo.php index fbde930..46645cb 100644 --- a/app/Http/Livewire/Dashboard/IncompleteTodo.php +++ b/app/Http/Livewire/Dashboard/IncompleteTodo.php @@ -12,13 +12,11 @@ class IncompleteTodo extends Component public function mount() { - $this->incomplete_count = DB::table('todos') - ->join('project_todo', 'todos.id', '=', 'project_todo.todo_id') - ->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id') - ->where('project_user.user_id', '=', Auth::user()->id) - ->whereDate('due_end', '<=', strtotime('today midnight')) - ->whereNull('completed_at') - ->count(); + $user = Auth::user(); + + $this->incomplete_count = $user->projects->map(function ($project) { + return $project->todos->where('completed_at', null)->count(); + })->sum(); } public function render() diff --git a/app/Http/Livewire/Dashboard/PomoCount.php b/app/Http/Livewire/Dashboard/PomoCount.php index bf9b48d..e7cb492 100644 --- a/app/Http/Livewire/Dashboard/PomoCount.php +++ b/app/Http/Livewire/Dashboard/PomoCount.php @@ -12,17 +12,24 @@ class PomoCount extends Component public function mount(){ $user = User::find(auth()->user()->id); - $todos = $user->todos()->map(function ($todo) { - $todo = \App\Models\Todo::find($todo->id); - $todo->pomos = Pomo::where('todo_id', $todo->id); - return $todo; - }); + $todos = $user->projects->map(function ($project) { + return $project->todos; + })->flatten(); + +// $todos = $user->todos()->map(function ($todo) { +// $todo = \App\Models\Todo::find($todo->id); +// $todo->pomos = Pomo::where('todo_id', $todo->id); +// return $todo; +// }); // Get the average pomo count per todo - $ave_pomo_count = $todos->avg(function ($todo) { - return $todo->pomos->count(); - }); - $this->ave_pomo_count = $ave_pomo_count ?? 0; + $ave_pomo_count = 0; + foreach ($todos as $todo) { + $ave_pomo_count += $todo->pomo->count(); + } + $ave_pomo_count = $ave_pomo_count / $todos->count(); + + $this->ave_pomo_count = $ave_pomo_count; } public function render() diff --git a/app/Http/Livewire/Dashboard/PomoTime.php b/app/Http/Livewire/Dashboard/PomoTime.php index e11c838..a394da9 100644 --- a/app/Http/Livewire/Dashboard/PomoTime.php +++ b/app/Http/Livewire/Dashboard/PomoTime.php @@ -19,12 +19,11 @@ class PomoTime extends Component $user = User::find(auth()->user()->id); // Get all pomos and calculate the average time spent per todo (due_end - due_start)/count/total pomos - $pomos = $user->pomos(); - $pomos = $pomos->map(function ($pomo) { - $pomo->todo = Todo::find($pomo->todo_id); - $pomo->project = Project::find($pomo->todo->project_id); - return $pomo; - }); + $pomos = $user->projects->map(function ($project) { + return $project->todos->map(function ($todo) { + return $todo->pomo; + }); + })->flatten(); $total_pomos = $pomos->count(); diff --git a/app/Http/Livewire/Todo/TodaysTodo.php b/app/Http/Livewire/Todo/TodaysTodo.php index 3d19265..b06db38 100644 --- a/app/Http/Livewire/Todo/TodaysTodo.php +++ b/app/Http/Livewire/Todo/TodaysTodo.php @@ -2,6 +2,7 @@ namespace App\Http\Livewire\Todo; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Livewire\Component; use App\Models\Todo; @@ -21,26 +22,20 @@ class TodaysTodo extends Component public function render() { - $todos = DB::table('todos') - ->join('project_todo', 'todos.id', '=', 'project_todo.todo_id') + $user = auth()->user(); + + $todos = Todo::join('project_todo', 'todos.id', '=', 'project_todo.todo_id') ->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id') - ->where('project_user.user_id', '=', auth()->user()->id) - ->whereDate('due_end', '<=', strtotime('today midnight')) + ->where('project_user.user_id', '=', $user->id) + ->whereDate('due_end', '<=', now()->toDateString()) ->whereNull('completed_at') ->orderBy('due_end', 'asc') ->paginate($this->perPage); - - $todos->transform(function ($todo) { - return Todo::find($todo->id); - }); - - - $incomplete_count = DB::table('todos') - ->join('project_todo', 'todos.id', '=', 'project_todo.todo_id') + $incomplete_count = Todo::join('project_todo', 'todos.id', '=', 'project_todo.todo_id') ->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id') - ->where('project_user.user_id', '=', auth()->user()->id) - ->whereDate('due_end', '<=', strtotime('today midnight')) + ->where('project_user.user_id', '=', $user->id) + ->whereDate('due_end', '<=', now()->toDateString()) ->whereNull('completed_at') ->count(); diff --git a/app/Models/Pomo.php b/app/Models/Pomo.php index c05b9c7..1b443b8 100644 --- a/app/Models/Pomo.php +++ b/app/Models/Pomo.php @@ -29,19 +29,4 @@ class Pomo extends Model return $this->belongsTo(Todo::class); } - - public function user(): Collection - { - return DB::table('users') - ->join('project_user', 'users.id', '=', 'project_user.user_id') - ->join('projects', 'project_user.project_id', '=', 'projects.id') - ->join('project_todo', 'projects.id', '=', 'project_todo.project_id') - ->join('todos', 'project_todo.todo_id', '=', 'todos.id') - ->join('pomos', 'todos.id', '=', 'pomos.todo_id') - ->where('pomos.id', '=', $this->id) - ->select('users.*') - ->get(); - } - - } diff --git a/app/Models/Todo.php b/app/Models/Todo.php index e40dce4..77cc589 100644 --- a/app/Models/Todo.php +++ b/app/Models/Todo.php @@ -38,19 +38,6 @@ class Todo extends Model "updated_at" => "integer", ]; - public function user(): Collection - { - // Select User given Todo - return DB::table('users') - ->join('project_user', 'users.id', '=', 'project_user.user_id') - ->join('projects', 'project_user.project_id', '=', 'projects.id') - ->join('project_todo', 'projects.id', '=', 'project_todo.project_id') - ->join('todos', 'project_todo.todo_id', '=', 'todos.id') - ->where('todos.id', '=', $this->id) - ->select('users.*') - ->get(); - } - public function projects(): BelongsToMany { return $this->belongsToMany( diff --git a/app/Models/User.php b/app/Models/User.php index 877ae27..535c835 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -58,33 +58,10 @@ class User extends Authenticatable return $this->belongsToMany(Project::class, projectUser::class, 'user_id', 'project_id'); } - public function todos(): Collection - { - return DB::table('todos') - ->join('project_todo', 'todos.id', '=', 'project_todo.todo_id') - ->join('projects', 'project_todo.project_id', '=', 'projects.id') - ->join('project_user', 'projects.id', '=', 'project_user.project_id') - ->join('users', 'project_user.user_id', '=', 'users.id') - ->where('users.id', '=', $this->id) - ->select('todos.*') - ->get(); - } public function pomo(): HasManyThrough { return $this->hasManyThrough(Pomo::class, Todo::class); } - public function pomos(): Collection - { - return DB::table('pomos') - ->join('todos', 'pomos.todo_id', '=', 'todos.id') - ->join('project_todo', 'todos.id', '=', 'project_todo.todo_id') - ->join('projects', 'project_todo.project_id', '=', 'projects.id') - ->join('project_user', 'projects.id', '=', 'project_user.project_id') - ->join('users', 'project_user.user_id', '=', 'users.id') - ->where('users.id', '=', $this->id) - ->select('pomos.*') - ->get(); - } }