ultimatepos/Modules/Maintenance/Resources/views/dashboard/index.blade.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