@extends('admin/layouts/default') @section('title') Maintenance Requests List @parent @stop @section('content')

Requests Management

Requests List


{{-- Statistics Cards for Two-Week Overview --}}

0

Today's Requests

0

This Week (7 days)

0

Last 2 Weeks (14 days)

0

Overdue (>4 hours)

{{-- Tabs --}}
@php use Carbon\Carbon; $categories = [ 'maintenance' => 'maintenance', 'network' => 'network', 'systemadmin' => 'systemadmin', 'teachinglearning' => 'Teaching & Learning', 'softwaredevelopment' => 'Software Development', 'infrastructure' => 'infrastructure', ]; $first = true; // Get current page for each category from request $activeTab = request()->get('active_tab', 'maintenance'); // Calculate date ranges $today = Carbon::today(); $weekAgo = Carbon::today()->subDays(7); $twoWeeksAgo = Carbon::today()->subDays(14); // Get all requests as collection $allRequests = DB::table('staffrequests')->where('status','0')->get(); // Ensure it's a collection if (!is_object($allRequests) || !method_exists($allRequests, 'filter')) { $allRequests = collect($allRequests); } // Calculate statistics using collection methods $todayCount = $allRequests->filter(function($req) use ($today) { return Carbon::parse($req->created_at)->isToday(); })->count(); $weekCount = $allRequests->filter(function($req) use ($weekAgo) { return Carbon::parse($req->created_at)->gte($weekAgo); })->count(); $twoWeekCount = $allRequests->filter(function($req) use ($twoWeeksAgo) { return Carbon::parse($req->created_at)->gte($twoWeeksAgo); })->count(); $overdueCount = $allRequests->filter(function($req) { $hoursDiff = Carbon::parse($req->created_at)->diffInHours(Carbon::now()); return $hoursDiff > 4; })->count(); @endphp @foreach($categories as $key => $label) @php // Get search term for this category $searchTerm = request()->get('search_' . $key, ''); // Get date filter for this category $dateFilter = request()->get('date_filter_' . $key, 'all'); // Build query for paginated results $query = DB::table('staffrequests')->where('requestcategory', $label)->where('status','0'); // Apply search filter if (!empty($searchTerm)) { $query->where(function($q) use ($searchTerm) { $q->where('firstname', 'like', '%' . $searchTerm . '%') ->orWhere('lastname', 'like', '%' . $searchTerm . '%') ->orWhere('phone', 'like', '%' . $searchTerm . '%') ->orWhere('idnumber', 'like', '%' . $searchTerm . '%') ->orWhere('college', 'like', '%' . $searchTerm . '%') ->orWhere('department', 'like', '%' . $searchTerm . '%') ->orWhere('buildingno', 'like', '%' . $searchTerm . '%') ->orWhere('office', 'like', '%' . $searchTerm . '%') ->orWhere('description', 'like', '%' . $searchTerm . '%'); }); } // Apply date filter - FIXED: Proper whereDate syntax switch($dateFilter) { case 'today': $query->whereDate('created_at', '=', $today); break; case 'week': $query->where('created_at', '>=', $weekAgo); break; case 'twoweeks': $query->where('created_at', '>=', $twoWeeksAgo); break; case 'overdue': $query->whereRaw('TIMESTAMPDIFF(HOUR, created_at, NOW()) > 4'); break; } $paginatedResults = $query->orderBy('created_at', 'desc')->paginate(10, ['*'], 'page_' . $key, request()->get('page_' . $key, 1)); // Calculate category-specific statistics $categoryRequests = DB::table('staffrequests')->where('requestcategory', $label)->where('status','1')->get(); // Ensure it's a collection if (!is_object($categoryRequests) || !method_exists($categoryRequests, 'filter')) { $categoryRequests = collect($categoryRequests); } $catTodayCount = $categoryRequests->filter(function($req) use ($today) { return Carbon::parse($req->created_at)->isToday(); })->count(); $catWeekCount = $categoryRequests->filter(function($req) use ($weekAgo) { return Carbon::parse($req->created_at)->gte($weekAgo); })->count(); $catTwoWeekCount = $categoryRequests->filter(function($req) use ($twoWeeksAgo) { return Carbon::parse($req->created_at)->gte($twoWeeksAgo); })->count(); @endphp
{{-- Category Statistics --}}
{{ ucfirst($label) }} Statistics: Today: {{ $catTodayCount }} | This Week: {{ $catWeekCount }} | Last 2 Weeks: {{ $catTwoWeekCount }}
{{-- Search and Filter Section --}}
{{ $paginatedResults->total() }} results

{{----}} {{----}} {{----}} @forelse ($paginatedResults as $req) @php $created = Carbon::parse($req->created_at); $now = Carbon::now(); $hoursDiff = $created->diffInHours($now); $daysDiff = $created->diffInDays($now); $diffHuman = $created->diffForHumans($now, ['parts' => 2]); // Determine row color based on age $rowClass = ''; if ($hoursDiff > 4 && $hoursDiff <= 24) { $rowClass = 'warning-row'; } elseif ($hoursDiff > 24 && $hoursDiff <= 48) { $rowClass = 'danger-row'; } elseif ($hoursDiff > 48) { $rowClass = 'critical-row'; } // Determine status badge if ($hoursDiff <= 4) { $statusBadge = '✓ Within SLA (' . $diffHuman . ')'; } elseif ($hoursDiff <= 24) { $statusBadge = '⚠ Overdue (' . $diffHuman . ')'; } elseif ($hoursDiff <= 48) { $statusBadge = '!! Urgent (' . $diffHuman . ')'; } else { $statusBadge = '!!! Critical (' . $diffHuman . ')'; } // Check if within 2 weeks $isWithinTwoWeeks = $created->gte($twoWeeksAgo); $twoWeekBadge = ''; if ($isWithinTwoWeeks) { $twoWeekBadge = ' Recent'; } @endphp 4) title="Request is overdue by {{ $diffHuman }}" @endif> {{----}} {{----}} {{----}} @empty @endforelse
ID Firstname Lastname Phone IdnumberCollegeDepartmentBuildingnoOfficeRequestcategory Description Request Date Time Status Assign Expert
{{ $req->id }} {!! $twoWeekBadge !!} {{ $req->firstname }} {{ $req->lastname }} {{ $req->phone }} {{ $req->idnumber }}{{ $req->college }}{{ $req->department }}{{ $req->buildingno }}{{ $req->office }}{{ $req->requestcategory }} {{ $created->format('Y-m-d H:i') }}
{{ $created->diffForHumans() }}
{!! $statusBadge !!} @if($daysDiff >= 14)
14+ days old @elseif($daysDiff >= 7)
7-14 days old @endif
No requests found for this category
{{-- Pagination for this tab --}} @if($paginatedResults->total() > 0)
{{ $paginatedResults->appends([ 'active_tab' => $key, 'page_' . $key => $paginatedResults->currentPage(), 'search_' . $key => $searchTerm, 'date_filter_' . $key => $dateFilter ])->links() }}
@endif
@php $first = false; @endphp @endforeach
{{-- Description Modal --}} @stop @section('footer_scripts') @stop