🤩 File Manager - Mr.X
PHP:
8.3.33
Server:
Apache
OS:
Linux 5.14.0-611.49.1.el9_7.x86_64
User:
websparkit
Navigate
Upload:
Upload
New File
New Folder
Editing:DeveloperController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\ProjectTask; use App\Models\Attendance; use Illuminate\Support\Facades\Auth; use Carbon\Carbon; class DeveloperController extends Controller { public function dashboard() { $user = Auth::user(); $tasks = ProjectTask::with(['project', 'requirement']) ->where('developer_id', $user->id) ->orderByRaw("FIELD(status, 'assigned', 'in_progress', 'done')") ->orderBy('created_at', 'desc') ->get(); $todayAttendance = Attendance::where('user_id', $user->id) ->where('date', Carbon::today()) ->first(); $recentAttendance = Attendance::where('user_id', $user->id) ->orderBy('date', 'desc') ->take(7) ->get(); $credentials = $user->projectCredentials()->with('project')->get(); $educationMaterials = \App\Models\EducationMaterial::with('techLead')->latest()->get(); return view('developer.dashboard', compact('tasks', 'todayAttendance', 'recentAttendance', 'credentials', 'educationMaterials')); } public function acceptTask(ProjectTask $task) { if ($task->developer_id !== Auth::id()) { abort(403); } $task->update([ 'status' => 'in_progress', 'start_time' => Carbon::now(), ]); return redirect()->back()->with('success', 'Task accepted and started.'); } public function completeTask(ProjectTask $task) { if ($task->developer_id !== Auth::id()) { abort(403); } $endTime = Carbon::now(); $duration = $task->start_time ? $task->start_time->diffInMinutes($endTime) : 0; $task->update([ 'status' => 'done', 'end_time' => $endTime, 'duration_minutes' => $duration, ]); // Notify Admin $admin = \App\Models\User::role('Admin')->first(); if ($admin) { \Illuminate\Support\Facades\Mail::to($admin->email)->queue( new \App\Mail\SystemNotification( 'Task Completed: ' . $task->title, 'The task "' . $task->title . '" has been completed by ' . Auth::user()->name . '. Duration: ' . round($duration / 60, 1) . ' hours.', 'View Dashboard', route('admin.dashboard') ) ); } // Notify Tech Lead if ($task->project && $task->project->tech_lead_id) { $techLead = \App\Models\User::find($task->project->tech_lead_id); if ($techLead) { \Illuminate\Support\Facades\Mail::to($techLead->email)->queue( new \App\Mail\SystemNotification( 'Task Completed: ' . $task->title, 'The task "' . $task->title . '" has been completed by ' . Auth::user()->name . ' for project "' . $task->project->name . '". Duration: ' . round($duration / 60, 1) . ' hours.', 'View Project', route('techlead.project.show', $task->project_id) ) ); } } // Notify Client (through project requirements) if ($task->requirement && $task->requirement->client) { $client = $task->requirement->client; \Illuminate\Support\Facades\Mail::to($client->email)->queue( new \App\Mail\SystemNotification( 'Requirement Completed: ' . $task->requirement->title, 'Your requirement "' . $task->requirement->title . '" has been completed. Please review.', 'View Dashboard', route('dashboard') ) ); } return redirect()->back()->with('success', 'Task completed! Duration: ' . round($duration / 60, 1) . ' hours.'); } public function clockIn() { $user = Auth::user(); $today = Carbon::today(); $attendance = Attendance::where('user_id', $user->id) ->where('date', $today) ->first(); if ($attendance && $attendance->clock_in) { return redirect()->back()->with('error', 'You have already clocked in today.'); } Attendance::updateOrCreate( ['user_id' => $user->id, 'date' => $today], ['clock_in' => Carbon::now()] ); return redirect()->back()->with('success', 'Clocked in successfully!'); } public function clockOut() { $user = Auth::user(); $today = Carbon::today(); $attendance = Attendance::where('user_id', $user->id) ->where('date', $today) ->first(); if (!$attendance || !$attendance->clock_in) { return redirect()->back()->with('error', 'You have not clocked in today.'); } if ($attendance->clock_out) { return redirect()->back()->with('error', 'You have already clocked out today.'); } $clockOut = Carbon::now(); $totalHours = $attendance->clock_in->diffInMinutes($clockOut) / 60; $attendance->update([ 'clock_out' => $clockOut, 'total_hours' => round($totalHours, 2), ]); return redirect()->back()->with('success', 'Clocked out! Total hours: ' . round($totalHours, 2)); } }
Save Changes
Cancel
Create New File
Create New Folder