154 lines
7.3 KiB
PHP
154 lines
7.3 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', __('maintenance::lang.dashboard'))
|
|
|
|
@section('content')
|
|
@include('maintenance::layouts.nav')
|
|
|
|
@php
|
|
$util = app(\Modules\Maintenance\Utils\MaintenanceUtil::class);
|
|
$maxCost = collect($charts['monthly_costs'] ?? [])->max('cost') ?: 1;
|
|
@endphp
|
|
|
|
<section class="content no-print mt-page">
|
|
<div class="mt-page-header">
|
|
<h1><i class="fas fa-tachometer-alt" style="color:#14b8a6;margin-left:8px;"></i> @lang('maintenance::lang.dashboard')</h1>
|
|
@if(!($health['healthy'] ?? true))
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\HealthController::class, 'index']) }}" class="btn btn-warning">
|
|
<i class="fas fa-exclamation-triangle"></i> @lang('maintenance::lang.health_degraded') ({{ $health['score'] ?? 0 }}%)
|
|
</a>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="mt-kpi-grid">
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-industry kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_total_equipment')</div>
|
|
<div class="kpi-value">{{ $stats['equipment']['total'] ?? 0 }}</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-check-circle kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_active_equipment')</div>
|
|
<div class="kpi-value">{{ $stats['equipment']['active'] ?? 0 }}</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-heartbeat kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_health')</div>
|
|
<div class="kpi-value">{{ $stats['equipment']['health_percentage'] ?? 0 }}%</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-hammer kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_under_overhaul')</div>
|
|
<div class="kpi-value">{{ $stats['equipment']['under_overhaul'] ?? 0 }}</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-clipboard-list kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_open_work_orders')</div>
|
|
<div class="kpi-value">{{ $stats['maintenance']['open_work_orders'] ?? 0 }}</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-calendar-check kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_preventive_due')</div>
|
|
<div class="kpi-value">{{ $stats['maintenance']['preventive_due'] ?? 0 }}</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-money-bill-wave kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_monthly_cost')</div>
|
|
<div class="kpi-value">{{ $util->formatMoney($stats['costs']['monthly'] ?? 0) }}</div>
|
|
</div>
|
|
<div class="mt-kpi-card">
|
|
<i class="fas fa-clock kpi-icon"></i>
|
|
<div class="kpi-label">@lang('maintenance::lang.kpi_mttr')</div>
|
|
<div class="kpi-value">{{ $stats['kpi']['mttr_hours'] ?? 0 }}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-8">
|
|
<div class="mt-card">
|
|
<div class="mt-card-header">
|
|
<h3 class="mt-card-title">@lang('maintenance::lang.monthly_cost_chart')</h3>
|
|
</div>
|
|
<div class="mt-card-body">
|
|
<div class="mm-bar-chart">
|
|
@foreach($charts['monthly_costs'] ?? [] as $item)
|
|
@php $height = round(($item['cost'] / $maxCost) * 140); @endphp
|
|
<div class="bar-col">
|
|
<div class="bar-fill" style="height: {{ max(4, $height) }}px;" title="{{ $util->formatMoney($item['cost']) }}"></div>
|
|
<div class="bar-label">{{ $item['label'] }}</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="mt-card">
|
|
<div class="mt-card-header">
|
|
<h3 class="mt-card-title">@lang('maintenance::lang.quick_links')</h3>
|
|
</div>
|
|
<div class="mt-card-body">
|
|
<div class="mm-quick-links">
|
|
@can('maintenance.equipment.create')
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\EquipmentController::class, 'create']) }}">
|
|
<i class="fas fa-plus"></i> @lang('maintenance::lang.equipment')
|
|
</a>
|
|
@endcan
|
|
@can('maintenance.work_orders.create')
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\WorkOrderController::class, 'create']) }}">
|
|
<i class="fas fa-clipboard-list"></i> @lang('maintenance::lang.work_orders')
|
|
</a>
|
|
@endcan
|
|
@can('maintenance.preventive.create')
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\PreventiveScheduleController::class, 'create']) }}">
|
|
<i class="fas fa-calendar-check"></i> @lang('maintenance::lang.preventive_schedules')
|
|
</a>
|
|
@endcan
|
|
@can('maintenance.calendar.view')
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\CalendarController::class, 'index']) }}">
|
|
<i class="fas fa-calendar-alt"></i> @lang('maintenance::lang.calendar')
|
|
</a>
|
|
@endcan
|
|
@can('maintenance.reports.view')
|
|
<a href="{{ action([\Modules\Maintenance\Http\Controllers\ReportController::class, 'index']) }}">
|
|
<i class="fas fa-chart-bar"></i> @lang('maintenance::lang.reports')
|
|
</a>
|
|
@endcan
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-card">
|
|
<div class="mt-card-header">
|
|
<h3 class="mt-card-title">@lang('maintenance::lang.recent_activities')</h3>
|
|
</div>
|
|
<div class="mt-card-body">
|
|
@if(empty($recent_activities))
|
|
<p class="text-muted text-center">@lang('maintenance::lang.no_activities')</p>
|
|
@else
|
|
<div class="table-responsive">
|
|
<table class="table table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>@lang('maintenance::lang.date')</th>
|
|
<th>@lang('maintenance::lang.description')</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach($recent_activities as $activity)
|
|
<tr>
|
|
<td>{{ isset($activity->created_at) ? $util->formatDateTime($activity->created_at) : '—' }}</td>
|
|
<td>{{ $activity->description ?? ($activity->message ?? '—') }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</section>
|
|
@endsection
|