254 lines
11 KiB
PHP
254 lines
11 KiB
PHP
@extends('modules.layouts.base')
|
|
|
|
@php
|
|
$moduleTitle = 'Stampe Rate';
|
|
$moduleIcon = 'fas fa-print';
|
|
$moduleBreadcrumb = 'Moduli > Stampe Rate';
|
|
@endphp
|
|
|
|
@section('module-actions')
|
|
<div class="btn-group" role="group">
|
|
@can('stampe_rate_create')
|
|
<a href="{{ route('stampeRate.create') }}" class="btn btn-module-primary">
|
|
<i class="fas fa-plus me-1"></i>
|
|
Nuova Stampa
|
|
</a>
|
|
@endcan
|
|
|
|
<a href="{{ route('stampeRate.templates.index') }}" class="btn btn-outline-secondary">
|
|
<i class="fas fa-cog me-1"></i>
|
|
Gestisci Template
|
|
</a>
|
|
|
|
<button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown">
|
|
<i class="fas fa-ellipsis-v"></i>
|
|
</button>
|
|
<ul class="dropdown-menu">
|
|
<li><a class="dropdown-item" href="{{ route('stampeRate.dashboard') }}"><i class="fas fa-chart-bar me-2"></i>Dashboard</a></li>
|
|
<li><a class="dropdown-item" href="{{ route('stampeRate.history.index') }}"><i class="fas fa-history me-2"></i>Cronologia</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><a class="dropdown-item" href="#"><i class="fas fa-question-circle me-2"></i>Aiuto</a></li>
|
|
</ul>
|
|
</div>
|
|
@endsection
|
|
|
|
@section('module-content')
|
|
<!-- Statistiche Rapide -->
|
|
<div class="row mb-4">
|
|
<div class="col-xl-3 col-md-6 mb-3">
|
|
<div class="module-stats-card">
|
|
<div class="card-body text-center">
|
|
<div class="module-stats-number text-primary">{{ $stampe->total() ?? 0 }}</div>
|
|
<div class="module-stats-label">Stampe Totali</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-xl-3 col-md-6 mb-3">
|
|
<div class="module-stats-card">
|
|
<div class="card-body text-center">
|
|
<div class="module-stats-number text-success">{{ $stampe->where('status', 'completed')->count() }}</div>
|
|
<div class="module-stats-label">Completate</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-xl-3 col-md-6 mb-3">
|
|
<div class="module-stats-card">
|
|
<div class="card-body text-center">
|
|
<div class="module-stats-number text-warning">{{ $stampe->where('status', 'processing')->count() }}</div>
|
|
<div class="module-stats-label">In Elaborazione</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-xl-3 col-md-6 mb-3">
|
|
<div class="module-stats-card">
|
|
<div class="card-body text-center">
|
|
<div class="module-stats-number text-info">{{ $stampe->sum('rate_count') ?? 0 }}</div>
|
|
<div class="module-stats-label">Rate Generate</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tabella Stampe Rate -->
|
|
<div class="module-card">
|
|
<div class="module-card-header d-flex justify-content-between align-items-center">
|
|
<h6 class="module-card-title mb-0">
|
|
<i class="fas fa-list me-2"></i>Elenco Stampe Rate
|
|
</h6>
|
|
<small class="text-muted">{{ $stampe->total() ?? 0 }} stampe trovate</small>
|
|
</div>
|
|
|
|
<div class="module-card-body p-0">
|
|
@if($stampe->isEmpty())
|
|
<!-- Empty State -->
|
|
<div class="module-empty-state">
|
|
<div class="text-center py-5">
|
|
<i class="fas fa-print fa-3x text-muted mb-3"></i>
|
|
<h4 class="text-muted">Nessuna stampa rate ancora generata</h4>
|
|
<p class="text-muted mb-4">
|
|
Inizia creando la tua prima stampa rate utilizzando i nostri template professionali.
|
|
</p>
|
|
@can('stampe_rate_create')
|
|
<a href="{{ route('stampeRate.create') }}" class="btn btn-module-primary btn-lg">
|
|
<i class="fas fa-plus me-2"></i>
|
|
Crea Prima Stampa
|
|
</a>
|
|
@endcan
|
|
</div>
|
|
</div>
|
|
@else
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>Data Creazione</th>
|
|
<th>Stabile</th>
|
|
<th>Template</th>
|
|
<th>Rate Generate</th>
|
|
<th>Stato</th>
|
|
<th width="150">Azioni</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach($stampe as $stampa)
|
|
<tr>
|
|
<td>
|
|
<strong>{{ $stampa->created_at->format('d/m/Y') }}</strong>
|
|
<br>
|
|
<small class="text-muted">{{ $stampa->created_at->format('H:i') }}</small>
|
|
</td>
|
|
<td>
|
|
<div class="text-truncate" style="max-width: 200px;"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ $stampa->stabile_nome }} - {{ $stampa->stabile_indirizzo }}">
|
|
<strong>{{ $stampa->stabile_nome }}</strong>
|
|
<br>
|
|
<small class="text-muted">{{ Str::limit($stampa->stabile_indirizzo, 30) }}</small>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<span class="badge bg-info">{{ $stampa->template_nome }}</span>
|
|
</td>
|
|
<td>
|
|
<span class="fw-bold text-primary">{{ number_format($stampa->rate_count) }}</span>
|
|
<small class="text-muted">rate</small>
|
|
</td>
|
|
<td>
|
|
@switch($stampa->status)
|
|
@case('completed')
|
|
<span class="badge bg-success">Completata</span>
|
|
@break
|
|
@case('processing')
|
|
<span class="badge bg-warning">In elaborazione</span>
|
|
@break
|
|
@case('failed')
|
|
<span class="badge bg-danger">Errore</span>
|
|
@break
|
|
@default
|
|
<span class="badge bg-light text-dark">{{ ucfirst($stampa->status) }}</span>
|
|
@endswitch
|
|
</td>
|
|
<td>
|
|
<div class="btn-group btn-group-sm">
|
|
<a href="{{ route('stampeRate.show', $stampa->id) }}"
|
|
class="btn btn-outline-primary btn-sm"
|
|
data-bs-toggle="tooltip"
|
|
title="Visualizza">
|
|
<i class="fas fa-eye"></i>
|
|
</a>
|
|
|
|
@if($stampa->status === 'completed')
|
|
<a href="{{ route('stampeRate.download', $stampa->id) }}"
|
|
class="btn btn-outline-success btn-sm"
|
|
data-bs-toggle="tooltip"
|
|
title="Scarica ZIP">
|
|
<i class="fas fa-download"></i>
|
|
</a>
|
|
@endif
|
|
|
|
@can('stampe_rate_delete')
|
|
<button type="button"
|
|
class="btn btn-outline-danger btn-sm"
|
|
data-bs-toggle="tooltip"
|
|
title="Elimina"
|
|
onclick="confirmDelete({{ $stampa->id }})">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
@endcan
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<!-- Pagination -->
|
|
@if($stampe->hasPages())
|
|
<div class="card-footer bg-light">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<div class="text-muted small">
|
|
Showing {{ $stampe->firstItem() }} to {{ $stampe->lastItem() }} of {{ $stampe->total() }} results
|
|
</div>
|
|
{{ $stampe->links() }}
|
|
</div>
|
|
</div>
|
|
@endif
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal Conferma Eliminazione -->
|
|
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="deleteModalLabel">Conferma Eliminazione</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
Sei sicuro di voler eliminare questa stampa rate? L'operazione non può essere annullata.
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annulla</button>
|
|
<form id="deleteForm" method="POST" style="display: inline;">
|
|
@csrf
|
|
@method('DELETE')
|
|
<button type="submit" class="btn btn-danger">Elimina</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|
|
|
|
@push('scripts')
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Inizializza tooltip
|
|
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
});
|
|
});
|
|
|
|
function confirmDelete(id) {
|
|
const deleteForm = document.getElementById('deleteForm');
|
|
deleteForm.action = `/stampe-rate/${id}`;
|
|
|
|
const deleteModal = new bootstrap.Modal(document.getElementById('deleteModal'));
|
|
deleteModal.show();
|
|
}
|
|
|
|
// Auto refresh per le stampe in elaborazione
|
|
@if($stampe->where('status', 'processing')->count() > 0)
|
|
setTimeout(function() {
|
|
location.reload();
|
|
}, 10000); // Ricarica ogni 10 secondi se ci sono stampe in elaborazione
|
|
@endif
|
|
</script>
|
|
@endpush
|