262 lines
16 KiB
PHP
262 lines
16 KiB
PHP
<x-app-layout>
|
|
<x-slot name="header">
|
|
<h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
|
|
{{ __('Dashboard Condomino') }}
|
|
</h2>
|
|
</x-slot>
|
|
|
|
<div class="py-12">
|
|
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-6">
|
|
|
|
<!-- Benvenuto -->
|
|
<div class="bg-gradient-to-r from-blue-500 to-purple-600 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6 text-white">
|
|
<h3 class="text-2xl font-bold">Benvenuto, {{ Auth::user()->name }}!</h3>
|
|
<p class="mt-2">Gestisci le tue proprietà e rimani aggiornato su tutto quello che riguarda il tuo condominio.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Statistiche Principali -->
|
|
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<div class="w-8 h-8 bg-blue-500 rounded-full flex items-center justify-center">
|
|
<svg class="w-5 h-5 text-white" fill="currentColor" viewBox="0 0 20 20">
|
|
<path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div class="ml-5 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Le Mie Unità</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $stats['unita_possedute'] }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<div class="w-8 h-8 bg-yellow-500 rounded-full flex items-center justify-center">
|
|
<svg class="w-5 h-5 text-white" fill="currentColor" viewBox="0 0 20 20">
|
|
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div class="ml-5 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Ticket Aperti</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $stats['ticket_aperti'] }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<div class="w-8 h-8 bg-red-500 rounded-full flex items-center justify-center">
|
|
<svg class="w-5 h-5 text-white" fill="currentColor" viewBox="0 0 20 20">
|
|
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clip-rule="evenodd"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div class="ml-5 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Rate Scadute</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $stats['rate_scadute'] }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<div class="w-8 h-8 bg-green-500 rounded-full flex items-center justify-center">
|
|
<svg class="w-5 h-5 text-white" fill="currentColor" viewBox="0 0 20 20">
|
|
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h8a2 2 0 012 2v12a1 1 0 110 2h-3a1 1 0 01-1-1v-6a1 1 0 00-1-1H9a1 1 0 00-1 1v6a1 1 0 01-1 1H4a1 1 0 110-2V4zm3 1h2v2H7V5zm2 4H7v2h2V9zm2-4h2v2h-2V5zm2 4h-2v2h2V9z" clip-rule="evenodd"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div class="ml-5 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Documenti</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $stats['documenti_disponibili'] }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Azioni Rapide -->
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">Azioni Rapide</h3>
|
|
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
<a href="{{ route('condomino.tickets.create') }}"
|
|
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded text-center transition duration-200">
|
|
Nuovo Ticket
|
|
</a>
|
|
<a href="{{ route('condomino.documenti.index') }}"
|
|
class="bg-green-500 hover:bg-green-700 text-white font-bold py-3 px-4 rounded text-center transition duration-200">
|
|
Documenti
|
|
</a>
|
|
<a href="{{ route('condomino.unita.index') }}"
|
|
class="bg-indigo-500 hover:bg-indigo-700 text-white font-bold py-3 px-4 rounded text-center transition duration-200">
|
|
Le Mie Unità
|
|
</a>
|
|
<a href="{{ route('condomino.pagamenti.index') }}"
|
|
class="bg-purple-500 hover:bg-purple-700 text-white font-bold py-3 px-4 rounded text-center transition duration-200">
|
|
Pagamenti
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Contenuto principale in due colonne -->
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
|
|
<!-- I Miei Ticket -->
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">I Miei Ticket</h3>
|
|
<a href="{{ route('condomino.tickets.index') }}" class="text-blue-600 hover:text-blue-900 dark:text-blue-400 dark:hover:text-blue-300">
|
|
Vedi tutti
|
|
</a>
|
|
</div>
|
|
|
|
<div class="space-y-3">
|
|
@forelse($ticketRecenti as $ticket)
|
|
<div class="border border-gray-200 dark:border-gray-700 rounded-lg p-3">
|
|
<div class="flex justify-between items-start">
|
|
<div class="flex-1">
|
|
<h4 class="text-sm font-medium text-gray-900 dark:text-gray-100">
|
|
<a href="{{ route('condomino.tickets.show', $ticket) }}" class="hover:text-blue-600">
|
|
{{ $ticket->titolo }}
|
|
</a>
|
|
</h4>
|
|
<p class="text-xs text-gray-500 dark:text-gray-400 mt-1">
|
|
{{ $ticket->stabile->denominazione }}
|
|
</p>
|
|
</div>
|
|
<div class="flex flex-col items-end space-y-1">
|
|
<span class="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium
|
|
@switch($ticket->stato)
|
|
@case('Aperto') bg-red-100 text-red-800 dark:bg-red-800 dark:text-red-100 @break
|
|
@case('Preso in Carico') bg-yellow-100 text-yellow-800 dark:bg-yellow-800 dark:text-yellow-100 @break
|
|
@case('In Lavorazione') bg-blue-100 text-blue-800 dark:bg-blue-800 dark:text-blue-100 @break
|
|
@default bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-100
|
|
@endswitch">
|
|
{{ $ticket->stato }}
|
|
</span>
|
|
<span class="text-xs text-gray-500 dark:text-gray-400">
|
|
{{ $ticket->created_at->diffForHumans() }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@empty
|
|
<p class="text-gray-500 dark:text-gray-400 text-center py-4">Nessun ticket aperto</p>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Ultimi Documenti -->
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Ultimi Documenti</h3>
|
|
<a href="{{ route('condomino.documenti.index') }}" class="text-blue-600 hover:text-blue-900 dark:text-blue-400 dark:hover:text-blue-300">
|
|
Vedi tutti
|
|
</a>
|
|
</div>
|
|
|
|
<div class="space-y-3">
|
|
@forelse($ultimiDocumenti as $documento)
|
|
<div class="border border-gray-200 dark:border-gray-700 rounded-lg p-3">
|
|
<div class="flex justify-between items-start">
|
|
<div class="flex-1">
|
|
<h4 class="text-sm font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $documento->nome_file }}
|
|
</h4>
|
|
<p class="text-xs text-gray-500 dark:text-gray-400 mt-1">
|
|
{{ $documento->tipo_documento }} - {{ $documento->documentable->denominazione ?? 'N/A' }}
|
|
</p>
|
|
</div>
|
|
<div class="flex flex-col items-end space-y-1">
|
|
<span class="text-xs text-gray-500 dark:text-gray-400">
|
|
{{ $documento->created_at->diffForHumans() }}
|
|
</span>
|
|
<a href="{{ route('condomino.documenti.download', $documento) }}" class="text-blue-600 hover:text-blue-900 text-xs">
|
|
Download
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@empty
|
|
<p class="text-gray-500 dark:text-gray-400 text-center py-4">Nessun documento disponibile</p>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Le Mie Unità -->
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Le Mie Unità Immobiliari</h3>
|
|
<a href="{{ route('condomino.unita.index') }}" class="text-blue-600 hover:text-blue-900 dark:text-blue-400 dark:hover:text-blue-300">
|
|
Gestisci
|
|
</a>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@forelse($unitaImmobiliari as $unita)
|
|
<div class="border border-gray-200 dark:border-gray-700 rounded-lg p-4">
|
|
<h4 class="font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $unita->stabile->denominazione }}
|
|
</h4>
|
|
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1">
|
|
{{ $unita->identificazione_completa }}
|
|
</p>
|
|
<div class="mt-3 flex justify-between items-center">
|
|
<span class="text-xs text-gray-500 dark:text-gray-400">
|
|
Millesimi: {{ $unita->millesimi_proprieta ?? 'N/A' }}
|
|
</span>
|
|
<a href="{{ route('condomino.unita.show', $unita) }}"
|
|
class="text-blue-600 hover:text-blue-900 text-sm">
|
|
Dettagli
|
|
</a>
|
|
</div>
|
|
</div>
|
|
@empty
|
|
<div class="col-span-full text-center py-8">
|
|
<p class="text-gray-500 dark:text-gray-400">Nessuna unità immobiliare associata</p>
|
|
</div>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Script per grafici (Chart.js) -->
|
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
<script>
|
|
// Implementeremo i grafici quando avremo i dati delle rate e pagamenti
|
|
</script>
|
|
</x-app-layout> |