Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
182 changes: 182 additions & 0 deletions app/Http/Controllers/Crud/ClientAdmin/MeetingController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
<?php

namespace App\Http\Controllers\Crud\ClientAdmin;

use App\Http\Controllers\Controller;
use App\Models\Meeting;
use App\Models\User;
use App\Models\Task;
use App\Models\Agenda;
use Illuminate\Http\Request;
use Inertia\Inertia;

class MeetingController extends Controller
{
public function index()
{
$clientId = auth()->user()->client->id;

$meetings = Meeting::where('client_id', $clientId)
->with(['users' => function ($query) use ($clientId) {
$query->where('users.client_id', $clientId)
->select('users.id', 'users.name', 'users.email');
}])
->with(['tasks' => function ($query) use ($clientId) {
$query->where('tasks.client_id', $clientId)
->select('tasks.id', 'tasks.name', 'tasks.status')
->withPivot('meeting_id');
}])
->get();

$availableUsers = User::where('client_id', $clientId)
->select('id', 'name', 'email')
->get();

$availableTasks = Task::where('client_id', $clientId)
->select('id', 'name', 'status')
->get();

return Inertia::render('admin/admin-meeting-list', [
'meetings' => $meetings,
'users' => $availableUsers,
'tasks' => $availableTasks
]);
}

public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'date' => 'required|date',
'type' => 'required|string|max:255',
'agenda_text' => 'required|string',
'users' => 'nullable|array',
'users.*' => 'exists:users,id',
'tasks' => 'nullable|array',
'tasks.*' => 'exists:tasks,id'
]);

$clientId = auth()->user()->client->id;

// Create agenda first
$agenda = Agenda::create([
'text' => $request->agenda_text,
'client_id' => $clientId,
]);

$meeting = Meeting::create([
'title' => $request->title,
'date' => $request->date,
'type' => $request->type,
'agenda_id' => $agenda->id,
'client_id' => $clientId,
]);

if ($request->has('users')) {
$meeting->users()->attach($request->users);
}

if ($request->has('tasks')) {
$meeting->tasks()->attach($request->tasks);
}

session()->flash('success', 'Meeting created successfully!');
return back();
}

public function show(Meeting $meeting)
{
$clientId = auth()->user()->client->id;

// Ensure the meeting belongs to the client
if ($meeting->client_id !== $clientId) {
abort(403);
}

// Load the meeting with its relationships and agenda
$meeting->load(['users' => function ($query) use ($clientId) {
$query->where('users.client_id', $clientId)
->select('users.id', 'users.name', 'users.email');
}])
->load(['tasks' => function ($query) use ($clientId) {
$query->where('tasks.client_id', $clientId)
->select('tasks.id', 'tasks.name', 'tasks.status');
}])
->load('agenda');

// Add agenda_text to the meeting data
$meeting->agenda_text = $meeting->agenda->text;

// Get all available users and tasks for the form
$availableUsers = User::where('client_id', $clientId)
->select('id', 'name', 'email')
->get();

$availableTasks = Task::where('client_id', $clientId)
->select('id', 'name', 'status')
->get();

return Inertia::render('admin/admin-meeting-details', [
'meeting' => $meeting,
'users' => $availableUsers,
'tasks' => $availableTasks
]);
}

public function update(Request $request, Meeting $meeting)
{
// Ensure the meeting belongs to the client
if ($meeting->client_id !== auth()->user()->client->id) {
abort(403, 'Unauthorized');
}

$request->validate([
'title' => 'required|string|max:255',
'date' => 'required|date',
'type' => 'required|string|max:255',
'agenda_text' => 'required|string',
'users' => 'nullable|array',
'users.*' => 'exists:users,id',
'tasks' => 'nullable|array',
'tasks.*' => 'exists:tasks,id'
]);

// Update the meeting
$meeting->update([
'title' => $request->title,
'date' => $request->date,
'type' => $request->type,
]);

// Update the agenda
$meeting->agenda()->update([
'text' => $request->agenda_text
]);

// Sync users and tasks if they are provided
if ($request->has('users')) {
$meeting->users()->sync($request->users);
}

if ($request->has('tasks')) {
$meeting->tasks()->sync($request->tasks);
}

session()->flash('success', 'Meeting updated successfully!');
return back();
}

public function destroy(Meeting $meeting)
{
// Ensure the meeting belongs to the client
if ($meeting->client_id !== auth()->user()->client->id) {
abort(403, 'Unauthorized');
}

// Delete the meeting (this will cascade delete the agenda due to the relationship)
$meeting->delete();

session()->flash('success', 'Meeting deleted successfully!');
return redirect()->route('admin.meetings.index');
}
}
126 changes: 126 additions & 0 deletions app/Http/Controllers/Crud/ClientAdmin/TaskController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?php

namespace App\Http\Controllers\Crud\ClientAdmin;

use App\Http\Controllers\Controller;
use App\Models\Task;
use App\Models\User;
use Illuminate\Http\Request;
use Inertia\Inertia;

class TaskController extends Controller
{
public function index()
{
$clientId = auth()->user()->client->id;

$tasks = Task::where('client_id', $clientId)
->with(['users' => function ($query) use ($clientId) {
$query->where('users.client_id', $clientId)
->select('users.id', 'users.name', 'users.email');
}])
->get();

$users = User::where('client_id', $clientId)
->select('id', 'name', 'email')
->get();

return Inertia::render('admin/admin-task-list', [
'tasks' => $tasks,
'users' => $users
]);
}

public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'description' => 'required|string|max:255',
'status' => 'required|in:pending,in_progress,completed',
'priority' => 'required|in:low,medium,high',
'due_date' => 'nullable|date',
'users' => 'array',
'users.*' => 'exists:users,id'
]);

$task = Task::create([
'name' => $request->name,
'description' => $request->description,
'status' => $request->status,
'priority' => $request->priority,
'due_date' => $request->due_date,
'client_id' => auth()->user()->client->id
]);

if ($request->has('users')) {
$task->users()->attach($request->users);
}
session()->flash('success', 'Task created successfully!');
return back();
}

public function show(Task $task)
{
// Ensure the task belongs to the user's client
if ($task->client_id !== auth()->user()->client->id) {
abort(403, 'Unauthorized');
}

$clientId = auth()->user()->client->id;

// Get all users for the client, for the task details page (to assign users to the task)
$all_users = User::where('client_id', $clientId)
->select('id', 'name', 'email')
->get();

return Inertia::render('admin/admin-task-details', [
'task' => $task->load(['users' => function ($query) use ($clientId) {
$query->where('users.client_id', $clientId)
->select('users.id', 'users.name', 'users.email');
}]),
'all_users' => $all_users
]);
}

public function update(Request $request, Task $task)
{
// Ensure the task belongs to the user's client
if ($task->client_id !== auth()->user()->client->id) {
abort(403, 'Unauthorized');
}

$request->validate([
'name' => 'required|string|max:255',
'description' => 'required|string|max:255',
'status' => 'required|in:pending,in_progress,completed',
'priority' => 'required|in:low,medium,high',
'due_date' => 'nullable|date',
'users' => 'array',
'users.*' => 'exists:users,id'
]);

$task->update($request->only(['name', 'description', 'status', 'priority', 'due_date']));

if ($request->has('users')) {
$task->users()->sync($request->users);
}

session()->flash('success', 'Task updated successfully!');
return back();
}

public function destroy(Task $task)
{
// Ensure the task belongs to the user's client
if ($task->client_id !== auth()->user()->client->id) {
abort(403, 'Unauthorized');
}

$task->delete();
session()->flash('success', 'Task deleted successfully!');
return redirect()->route('admin.tasks.index');
}



}
14 changes: 9 additions & 5 deletions app/Http/Controllers/Crud/ClientAdmin/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ class UserController extends Controller
{
public function index()
{
$users = User::where('client_id', auth()->user()->client_id)->get();
return Inertia::render('Users/user-list', [
$users = User::where('client_id', auth()->user()->client_id)
->with('role:id,name')
->get();
return Inertia::render('admin/admin-user-list', [
'users' => $users,
'roles' => Role::all(['id', 'name'])->except(1)//exclude the system admin role
]);
Expand All @@ -43,7 +45,7 @@ public function store(Request $request)
'client_id' => $request->client_id,
'role_id' => $request->role_id,
]);

session()->flash('success', 'User created successfully!');
return back();
}

Expand All @@ -66,6 +68,7 @@ public function update(Request $request, User $user)


$user->update($validated);
session()->flash('success', 'User updated successfully!');
return back();
}

Expand All @@ -75,15 +78,16 @@ public function show(User $user)
abort(403, 'Unauthorized');
}

return Inertia::render('Users/user-details', [
return Inertia::render('admin/admin-user-details', [
'user' => $user
]);
}

public function destroy(User $user)
{
$user->delete();
return redirect()->route('users.index');
session()->flash('success', 'User deleted successfully!');
return redirect()->route('admin.users.index');
}


Expand Down
3 changes: 3 additions & 0 deletions app/Models/Role.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Role extends Model
{
use SoftDeletes;

protected $fillable = ['name', 'description'];

public function users()
Expand Down
Loading