added dashboard view

This commit is contained in:
Kwesi Banson Jnr
2026-08-21 07:52:20 +00:00
parent cc129bccac
commit f53cc472bc
4 changed files with 499 additions and 128 deletions

View File

@@ -0,0 +1,206 @@
@extends('layouts.masterbeta')
@section('title', 'Click ERP - Dashboard')
@section('breadcrumbs')
<span class="fw-bold text-dark" style="font-size: 0.95rem;"><i class="bi bi-speedometer2 me-2"></i> Dashboard Overview</span>
@endsection
@section('content')
<div class="mb-4">
<h4 class="fw-bold mb-1">Welcome back, {{ auth()->user()->name ?? 'Administrator' }}!</h4>
<p class="text-secondary mb-0" style="font-size: 0.9rem;">Here is a summary of operational activity across your organization.</p>
</div>
<!-- ========================================== -->
<!-- SECTION 1: HR & INTERNAL OPERATIONS -->
<!-- ========================================== -->
<h6 class="fw-bold text-secondary text-uppercase mb-3" style="font-size: 0.75rem; letter-spacing: 1px;">Internal Administration</h6>
<div class="row g-4 mb-4">
<div class="col-md-3">
<div class="content-card p-3 border-start border-4 border-0 shadow-sm" style="border-left-color: #5c4df0 !important;">
<div class="text-secondary fw-bold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">ACTIVE STAFF</div>
<div class="d-flex align-items-center justify-content-between">
<h3 class="fw-bold mb-0 text-dark">{{ $totalStaff }}</h3>
<i class="bi bi-people fs-3 text-primary opacity-50"></i>
</div>
</div>
</div>
<div class="col-md-3">
<div class="content-card p-3 border-start border-4 border-0 shadow-sm" style="border-left-color: #f59e0b !important;">
<div class="text-secondary fw-bold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">PENDING LEAVES</div>
<div class="d-flex align-items-center justify-content-between">
<h3 class="fw-bold mb-0 text-dark">{{ $pendingLeaves }}</h3>
<i class="bi bi-calendar-minus fs-3 text-warning opacity-50"></i>
</div>
</div>
</div>
<div class="col-md-3">
<div class="content-card p-3 border-start border-4 border-0 shadow-sm" style="border-left-color: #10b981 !important;">
<div class="text-secondary fw-bold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">LEAVES THIS MONTH</div>
<div class="d-flex align-items-center justify-content-between">
<h3 class="fw-bold mb-0 text-dark">{{ $activeLeavesThisMonth }}</h3>
<i class="bi bi-calendar-check fs-3 text-success opacity-50"></i>
</div>
</div>
</div>
<div class="col-md-3">
<div class="content-card p-3 border-start border-4 border-0 shadow-sm" style="border-left-color: #0ea5e9 !important;">
<div class="text-secondary fw-bold mb-1" style="font-size: 0.7rem; letter-spacing: 0.5px;">ARCHIVED DOCS</div>
<div class="d-flex align-items-center justify-content-between">
<h3 class="fw-bold mb-0 text-dark">{{ $totalDocuments }}</h3>
<i class="bi bi-folder2-open fs-3 text-info opacity-50"></i>
</div>
</div>
</div>
</div>
<div class="row g-4 mb-5">
<div class="col-lg-8">
<div class="content-card shadow-sm h-100">
<div class="p-3 border-bottom d-flex justify-content-between align-items-center bg-light bg-opacity-50">
<h6 class="fw-bold mb-0"><i class="bi bi-clock-history me-2 text-warning"></i> Pending Leave Approvals</h6>
<a href="{{ route('leave.index') }}" class="small text-decoration-none fw-bold" style="color: #5c4df0;">View All</a>
</div>
<div class="table-responsive">
<table class="table table-custom mb-0 align-middle">
<thead>
<tr>
<th>Staff Member</th>
<th>Type</th>
<th>Duration</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
@forelse($recentPendingLeaves as $leave)
<tr>
<td>
<div class="fw-bold text-dark">{{ $leave->staff->name ?? 'Unknown' }}</div>
</td>
<td><span class="badge bg-secondary bg-opacity-10 text-dark border">{{ $leave->leave_type }}</span></td>
<td class="small text-secondary">{{ $leave->start_date->format('M d') }} - {{ $leave->end_date->format('M d') }}</td>
<td class="text-end">
<a href="{{ route('leave.index') }}" class="btn btn-sm btn-light text-primary border">Review</a>
</td>
</tr>
@empty
<tr><td colspan="4" class="text-center py-4 text-secondary">No pending leave requests.</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="content-card shadow-sm h-100">
<div class="p-3 border-bottom bg-light bg-opacity-50">
<h6 class="fw-bold mb-0"><i class="bi bi-cake2 me-2 text-danger"></i> Upcoming Birthdays</h6>
</div>
<div class="p-3">
@forelse($upcomingBirthdays as $staff)
<div class="d-flex align-items-center mb-3 pb-3 border-bottom last-border-0">
<div class="flex-grow-1">
<h6 class="fw-bold mb-0 text-dark">{{ $staff->name }}</h6>
<p class="text-secondary mb-0 small">{{ $staff->designation ?? 'Staff' }}</p>
</div>
<div class="text-end">
<span class="badge bg-danger bg-opacity-10 text-danger border border-danger-subtle px-2 py-1 small">
{{ $staff->dob ? date('M d', strtotime('2024-' . $staff->dob)) : '' }}
</span>
</div>
</div>
@empty
<div class="text-center py-4 text-secondary small">No upcoming birthdays.</div>
@endforelse
</div>
</div>
</div>
</div>
<!-- ========================================== -->
<!-- SECTION 2: BUSINESS & TELECOM OPERATIONS -->
<!-- ========================================== -->
<h6 class="fw-bold text-secondary text-uppercase mb-3" style="font-size: 0.75rem; letter-spacing: 1px;">Telecom & Client Operations</h6>
<div class="row g-4">
<!-- Clients & Networks Widget -->
<div class="col-lg-6">
<div class="content-card shadow-sm h-100">
<div class="p-3 border-bottom bg-light bg-opacity-50 d-flex justify-content-between align-items-center">
<h6 class="fw-bold mb-0"><i class="bi bi-briefcase me-2 text-primary"></i> Active Clients & Networks</h6>
<span class="badge bg-primary rounded-pill">{{ $totalClients }} Clients</span>
</div>
<div class="p-3">
<div class="mb-4">
<h6 class="text-secondary small fw-bold mb-2">INTEGRATED NETWORKS</h6>
<div class="d-flex flex-wrap gap-2">
@forelse($activeNetworks as $network)
<span class="badge bg-light text-dark border px-3 py-2"><i class="bi bi-hdd-network me-1 text-success"></i> {{ $network->name }}</span>
@empty
<span class="text-secondary small">No networks configured.</span>
@endforelse
</div>
</div>
<div>
<h6 class="text-secondary small fw-bold mb-2">RECENT CLIENTS</h6>
<ul class="list-group list-group-flush border-top">
@forelse($recentClients as $client)
<li class="list-group-item px-0 d-flex justify-content-between align-items-center">
<span class="fw-medium text-dark">{{ $client->name }}</span>
<span class="badge bg-success bg-opacity-10 text-success">{{ $client->status ?? 'Active' }}</span>
</li>
@empty
<li class="list-group-item px-0 text-secondary small">No clients found.</li>
@endforelse
</ul>
</div>
</div>
</div>
</div>
<!-- Short Codes & Sender IDs Widget -->
<div class="col-lg-6">
<div class="content-card shadow-sm h-100">
<div class="p-3 border-bottom bg-light bg-opacity-50">
<h6 class="fw-bold mb-0"><i class="bi bi-broadcast-pin me-2 text-info"></i> Provisioning Overview</h6>
</div>
<div class="p-3">
<!-- Short Codes -->
<div class="mb-4">
<div class="d-flex justify-content-between align-items-center mb-2">
<h6 class="text-secondary small fw-bold mb-0">ACTIVE SHORT CODES</h6>
</div>
<div class="d-flex flex-wrap gap-2">
@forelse($activeShortCodes as $code)
<span class="badge border border-info text-info bg-info bg-opacity-10 fs-6 px-3 py-2" style="letter-spacing: 1px;">
*{{ $code->shortcode }}#
</span>
@empty
<span class="text-secondary small">No active short codes.</span>
@endforelse
</div>
</div>
<!-- Sender IDs -->
<div>
<div class="d-flex justify-content-between align-items-center mb-2">
<h6 class="text-secondary small fw-bold mb-0">REGISTERED SENDER IDs</h6>
</div>
<div class="d-flex flex-wrap gap-2">
@forelse($activeSenderIds as $sender)
<span class="badge bg-secondary bg-opacity-10 text-dark border px-3 py-2 fs-6">
{{ $sender->senderid }}
</span>
@empty
<span class="text-secondary small">No sender IDs configured.</span>
@endforelse
</div>
</div>
</div>
</div>
</div>
</div>
@endsection