185 lines
8.4 KiB
PHP
Executable File
185 lines
8.4 KiB
PHP
Executable File
@extends('modules.layouts.base')
|
|
|
|
@php
|
|
$moduleTitle = 'Contabilità';
|
|
$moduleIcon = 'fas fa-calculator';
|
|
$moduleBreadcrumb = 'Moduli > Contabilità';
|
|
@endphp
|
|
|
|
@section('module-actions')
|
|
<div class="btn-group" role="group">
|
|
@can('contabilita_create')
|
|
<a href="{{ route('contabilita.create') }}" class="btn btn-module-primary">
|
|
<i class="fas fa-plus me-1"></i>
|
|
Nuova Registrazione
|
|
</a>
|
|
@endcan
|
|
<button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown">
|
|
<i class="fas fa-cog"></i>
|
|
</button>
|
|
<ul class="dropdown-menu">
|
|
<li><a class="dropdown-item" href="#"><i class="fas fa-file-export me-2"></i>Esporta</a></li>
|
|
<li><a class="dropdown-item" href="#"><i class="fas fa-cog me-2"></i>Impostazioni</a></li>
|
|
</ul>
|
|
</div>
|
|
@endsection
|
|
|
|
@section('module-content')
|
|
<!-- Statistiche rapide -->
|
|
<div class="row mb-4">
|
|
<div class="col-md-3">
|
|
<div class="module-stats-card">
|
|
<div class="module-stats-number">{{ $data->total() }}</div>
|
|
<div class="module-stats-label">Registrazioni Totali</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="module-stats-card">
|
|
<div class="module-stats-number">€{{ number_format($data->sum(function($r) { return $r->movimenti->where('tipo', 'dare')->sum('importo'); }) ?? 0, 0) }}</div>
|
|
<div class="module-stats-label">Importo Totale</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="module-stats-card">
|
|
<div class="module-stats-number">{{ $data->where('created_at', '>=', now()->startOfMonth())->count() }}</div>
|
|
<div class="module-stats-label">Questo Mese</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<div class="module-stats-card">
|
|
<div class="module-stats-number">{{ $data->where('created_at', '>=', now()->startOfYear())->count() }}</div>
|
|
<div class="module-stats-label">Quest'Anno</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tabella Registrazioni -->
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h3 class="module-card-title">
|
|
<i class="fas fa-list me-2"></i>
|
|
Registrazioni Contabili
|
|
</h3>
|
|
</div>
|
|
<div class="card-body">
|
|
<!-- Filtri di ricerca -->
|
|
<form method="GET" class="mb-3">
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<div class="input-group">
|
|
<input type="text" name="search" class="form-control"
|
|
placeholder="Cerca per descrizione..."
|
|
value="{{ request('search') }}">
|
|
<button type="submit" class="btn btn-outline-primary">
|
|
<i class="fas fa-search"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<select name="status" class="form-select">
|
|
<option value="">Tutti gli stati</option>
|
|
<option value="attivo" {{ request('status') == 'attivo' ? 'selected' : '' }}>Attivo</option>
|
|
<option value="inattivo" {{ request('status') == 'inattivo' ? 'selected' : '' }}>Inattivo</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<button type="submit" class="btn btn-outline-secondary w-100">
|
|
<i class="fas fa-filter me-1"></i>Filtra
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<div class="table-responsive">
|
|
<table class="table table-striped table-hover">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>Data</th>
|
|
<th>Descrizione</th>
|
|
<th>Importo Totale</th>
|
|
<th>Stato</th>
|
|
<th width="140">Azioni</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($data as $registrazione)
|
|
<tr>
|
|
<td>
|
|
<i class="fas fa-calendar-alt text-muted me-1"></i>
|
|
{{ \Carbon\Carbon::parse($registrazione->data_registrazione)->format('d/m/Y') }}
|
|
</td>
|
|
<td>
|
|
<strong>{{ $registrazione->descrizione }}</strong>
|
|
</td>
|
|
<td>
|
|
<span class="fw-bold text-success">
|
|
€{{ number_format($registrazione->movimenti->where('tipo', 'dare')->sum('importo'), 2) }}
|
|
</span>
|
|
</td>
|
|
<td>
|
|
<span class="badge bg-success">Attivo</span>
|
|
</td>
|
|
<td>
|
|
<div class="btn-group" role="group">
|
|
@can('contabilita_view')
|
|
<a href="{{ route('contabilita.show', $registrazione->id) }}"
|
|
class="btn btn-sm btn-outline-info"
|
|
data-bs-toggle="tooltip" title="Visualizza">
|
|
<i class="fas fa-eye"></i>
|
|
</a>
|
|
@endcan
|
|
@can('contabilita_edit')
|
|
<a href="{{ route('contabilita.edit', $registrazione->id) }}"
|
|
class="btn btn-sm btn-outline-warning"
|
|
data-bs-toggle="tooltip" title="Modifica">
|
|
<i class="fas fa-edit"></i>
|
|
</a>
|
|
@endcan
|
|
@can('contabilita_delete')
|
|
<form method="POST" action="{{ route('contabilita.destroy', $registrazione->id) }}"
|
|
style="display: inline-block;">
|
|
@csrf
|
|
@method('DELETE')
|
|
<button type="submit"
|
|
class="btn btn-sm btn-outline-danger"
|
|
onclick="return confirm('Sei sicuro di voler eliminare questa registrazione?')"
|
|
data-bs-toggle="tooltip" title="Elimina">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</form>
|
|
@endcan
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="5">
|
|
<div class="module-empty-state">
|
|
<i class="fas fa-inbox"></i>
|
|
<h5>Nessuna registrazione contabile trovata</h5>
|
|
<p class="text-muted">
|
|
Non ci sono registrazioni che corrispondono ai criteri di ricerca.
|
|
</p>
|
|
@can('contabilita_create')
|
|
<a href="{{ route('contabilita.create') }}" class="btn btn-primary">
|
|
<i class="fas fa-plus me-1"></i>
|
|
Crea la prima registrazione
|
|
</a>
|
|
@endcan
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
@if($data->hasPages())
|
|
<div class="d-flex justify-content-center mt-4">
|
|
{{ $data->appends(request()->query())->links() }}
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
@endsection
|