netgescon-master/resources/views/admin/piani-rateizzazione/edit.blade.php
Pikappa2 c23b711039 Implementate tutte le viste UI per gestione ripartizioni spese e rate
- Aggiunte viste complete per ripartizioni-spesa: create, edit, show
- Aggiunte viste complete per piani-rateizzazione: index, create, edit, show
- Aggiunte viste complete per rate: index, create, edit, show
- Interfacce responsive con Bootstrap 5 e componenti interattivi
- Tabelle DataTables con filtri avanzati e ricerca
- Form validation completa con Select2 e date picker
- Grafici Chart.js per statistiche e monitoraggio
- Funzionalità AJAX per calcoli automatici e aggiornamenti
- Design mobile-first con sidebar navigation aggiornata
- Tutte le viste pronte per integrazione con controller esistenti
2025-07-08 19:53:18 +02:00

295 lines
17 KiB
PHP

@extends('layouts.app')
@section('title', 'Modifica Piano di Rateizzazione')
@section('content')
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">Modifica Piano di Rateizzazione</h3>
<div class="card-tools">
<a href="{{ route('admin.piani-rateizzazione.show', $piano->id) }}" class="btn btn-info btn-sm">
<i class="fas fa-eye"></i> Visualizza
</a>
<a href="{{ route('admin.piani-rateizzazione.index') }}" class="btn btn-default btn-sm">
<i class="fas fa-arrow-left"></i> Torna all'elenco
</a>
</div>
</div>
<form action="{{ route('admin.piani-rateizzazione.update', $piano->id) }}" method="POST">
@csrf
@method('PUT')
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="denominazione">Denominazione *</label>
<input type="text" class="form-control @error('denominazione') is-invalid @enderror"
id="denominazione" name="denominazione"
value="{{ old('denominazione', $piano->denominazione) }}" required>
@error('denominazione')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="ripartizione_id">Ripartizione Spesa *</label>
<select class="form-control select2 @error('ripartizione_id') is-invalid @enderror"
id="ripartizione_id" name="ripartizione_id" required>
<option value="">Seleziona una ripartizione</option>
@foreach($ripartizioni as $ripartizione)
<option value="{{ $ripartizione->id }}"
{{ old('ripartizione_id', $piano->ripartizione_id) == $ripartizione->id ? 'selected' : '' }}>
{{ $ripartizione->voceSpesa->codice }} - {{ $ripartizione->stabile->denominazione }}
(€ {{ number_format($ripartizione->importo_totale, 2, ',', '.') }})
</option>
@endforeach
</select>
@error('ripartizione_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="numero_rate">Numero Rate *</label>
<input type="number" min="2" max="36"
class="form-control @error('numero_rate') is-invalid @enderror"
id="numero_rate" name="numero_rate"
value="{{ old('numero_rate', $piano->numero_rate) }}" required>
@error('numero_rate')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="importo_totale">Importo Totale *</label>
<div class="input-group">
<input type="number" step="0.01" min="0"
class="form-control @error('importo_totale') is-invalid @enderror"
id="importo_totale" name="importo_totale"
value="{{ old('importo_totale', $piano->importo_totale) }}" required>
<div class="input-group-append">
<span class="input-group-text">€</span>
</div>
@error('importo_totale')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="tipo_scadenza">Tipo Scadenza *</label>
<select class="form-control @error('tipo_scadenza') is-invalid @enderror"
id="tipo_scadenza" name="tipo_scadenza" required>
<option value="mensile" {{ old('tipo_scadenza', $piano->tipo_scadenza) == 'mensile' ? 'selected' : '' }}>Mensile</option>
<option value="bimestrale" {{ old('tipo_scadenza', $piano->tipo_scadenza) == 'bimestrale' ? 'selected' : '' }}>Bimestrale</option>
<option value="trimestrale" {{ old('tipo_scadenza', $piano->tipo_scadenza) == 'trimestrale' ? 'selected' : '' }}>Trimestrale</option>
<option value="semestrale" {{ old('tipo_scadenza', $piano->tipo_scadenza) == 'semestrale' ? 'selected' : '' }}>Semestrale</option>
<option value="personalizzata" {{ old('tipo_scadenza', $piano->tipo_scadenza) == 'personalizzata' ? 'selected' : '' }}>Personalizzata</option>
</select>
@error('tipo_scadenza')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label for="data_inizio">Data Inizio *</label>
<input type="date" class="form-control @error('data_inizio') is-invalid @enderror"
id="data_inizio" name="data_inizio"
value="{{ old('data_inizio', $piano->data_inizio->format('Y-m-d')) }}" required>
@error('data_inizio')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="data_fine">Data Fine</label>
<input type="date" class="form-control @error('data_fine') is-invalid @enderror"
id="data_fine" name="data_fine"
value="{{ old('data_fine', $piano->data_fine ? $piano->data_fine->format('Y-m-d') : '') }}" readonly>
@error('data_fine')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="stato">Stato</label>
<select class="form-control @error('stato') is-invalid @enderror"
id="stato" name="stato">
<option value="bozza" {{ old('stato', $piano->stato) == 'bozza' ? 'selected' : '' }}>Bozza</option>
<option value="attivo" {{ old('stato', $piano->stato) == 'attivo' ? 'selected' : '' }}>Attivo</option>
<option value="sospeso" {{ old('stato', $piano->stato) == 'sospeso' ? 'selected' : '' }}>Sospeso</option>
<option value="completato" {{ old('stato', $piano->stato) == 'completato' ? 'selected' : '' }}>Completato</option>
<option value="annullato" {{ old('stato', $piano->stato) == 'annullato' ? 'selected' : '' }}>Annullato</option>
</select>
@error('stato')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="tasso_interesse">Tasso Interesse (%)</label>
<input type="number" step="0.01" min="0" max="100"
class="form-control @error('tasso_interesse') is-invalid @enderror"
id="tasso_interesse" name="tasso_interesse"
value="{{ old('tasso_interesse', $piano->tasso_interesse) }}">
@error('tasso_interesse')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="spese_gestione">Spese Gestione (€)</label>
<input type="number" step="0.01" min="0"
class="form-control @error('spese_gestione') is-invalid @enderror"
id="spese_gestione" name="spese_gestione"
value="{{ old('spese_gestione', $piano->spese_gestione) }}">
@error('spese_gestione')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group">
<label for="note">Note</label>
<textarea class="form-control @error('note') is-invalid @enderror"
id="note" name="note" rows="3"
placeholder="Note aggiuntive sul piano di rateizzazione...">{{ old('note', $piano->note) }}</textarea>
@error('note')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<!-- Rate esistenti -->
@if($piano->rate->count() > 0)
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5>Rate Esistenti</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Numero</th>
<th>Data Scadenza</th>
<th>Importo</th>
<th>Stato</th>
<th>Data Pagamento</th>
<th>Importo Pagato</th>
</tr>
</thead>
<tbody>
@foreach($piano->rate as $rata)
<tr>
<td>{{ $rata->numero_rata }}</td>
<td>{{ $rata->data_scadenza->format('d/m/Y') }}</td>
<td>€ {{ number_format($rata->importo, 2, ',', '.') }}</td>
<td>
<span class="badge badge-{{ $rata->stato == 'pagata' ? 'success' : ($rata->stato == 'scaduta' ? 'danger' : 'warning') }}">
{{ ucfirst($rata->stato) }}
</span>
</td>
<td>{{ $rata->data_pagamento ? $rata->data_pagamento->format('d/m/Y') : '-' }}</td>
<td>€ {{ number_format($rata->importo_pagato, 2, ',', '.') }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endif
</div>
<div class="card-footer">
<button type="submit" class="btn btn-primary">
<i class="fas fa-save"></i> Aggiorna Piano
</button>
<a href="{{ route('admin.piani-rateizzazione.show', $piano->id) }}" class="btn btn-info">
<i class="fas fa-eye"></i> Visualizza
</a>
<a href="{{ route('admin.piani-rateizzazione.index') }}" class="btn btn-default">
<i class="fas fa-times"></i> Annulla
</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
// Initialize Select2
$('.select2').select2({
theme: 'bootstrap4',
width: '100%'
});
// Calcola data fine automaticamente
function calcolaDataFine() {
var dataInizio = $('#data_inizio').val();
var numeroRate = parseInt($('#numero_rate').val());
var tipoScadenza = $('#tipo_scadenza').val();
if (dataInizio && numeroRate && tipoScadenza) {
var data = new Date(dataInizio);
var mesi = 0;
switch(tipoScadenza) {
case 'mensile': mesi = numeroRate; break;
case 'bimestrale': mesi = numeroRate * 2; break;
case 'trimestrale': mesi = numeroRate * 3; break;
case 'semestrale': mesi = numeroRate * 6; break;
default: mesi = numeroRate;
}
data.setMonth(data.getMonth() + mesi);
$('#data_fine').val(data.toISOString().split('T')[0]);
}
}
$('#data_inizio, #numero_rate, #tipo_scadenza').on('change', calcolaDataFine);
});
</script>
@endsection