- 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
274 lines
15 KiB
PHP
274 lines
15 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', 'Modifica Rata')
|
|
|
|
@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 Rata</h3>
|
|
<div class="card-tools">
|
|
<a href="{{ route('admin.rate.show', $rata->id) }}" class="btn btn-info btn-sm">
|
|
<i class="fas fa-eye"></i> Visualizza
|
|
</a>
|
|
<a href="{{ route('admin.rate.index') }}" class="btn btn-default btn-sm">
|
|
<i class="fas fa-arrow-left"></i> Torna all'elenco
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<form action="{{ route('admin.rate.update', $rata->id) }}" method="POST">
|
|
@csrf
|
|
@method('PUT')
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="piano_id">Piano di Rateizzazione *</label>
|
|
<select class="form-control select2 @error('piano_id') is-invalid @enderror"
|
|
id="piano_id" name="piano_id" required>
|
|
<option value="">Seleziona un piano</option>
|
|
@foreach($piani as $piano)
|
|
<option value="{{ $piano->id }}"
|
|
{{ old('piano_id', $rata->piano_id) == $piano->id ? 'selected' : '' }}>
|
|
{{ $piano->denominazione }} - {{ $piano->ripartizione->stabile->denominazione }}
|
|
</option>
|
|
@endforeach
|
|
</select>
|
|
@error('piano_id')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="numero_rata">Numero Rata *</label>
|
|
<input type="number" min="1" max="999"
|
|
class="form-control @error('numero_rata') is-invalid @enderror"
|
|
id="numero_rata" name="numero_rata"
|
|
value="{{ old('numero_rata', $rata->numero_rata) }}" required>
|
|
@error('numero_rata')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="data_scadenza">Data Scadenza *</label>
|
|
<input type="date" class="form-control @error('data_scadenza') is-invalid @enderror"
|
|
id="data_scadenza" name="data_scadenza"
|
|
value="{{ old('data_scadenza', $rata->data_scadenza->format('Y-m-d')) }}" required>
|
|
@error('data_scadenza')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="importo">Importo *</label>
|
|
<div class="input-group">
|
|
<input type="number" step="0.01" min="0"
|
|
class="form-control @error('importo') is-invalid @enderror"
|
|
id="importo" name="importo"
|
|
value="{{ old('importo', $rata->importo) }}" required>
|
|
<div class="input-group-append">
|
|
<span class="input-group-text">€</span>
|
|
</div>
|
|
@error('importo')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="importo_interessi">Importo Interessi</label>
|
|
<div class="input-group">
|
|
<input type="number" step="0.01" min="0"
|
|
class="form-control @error('importo_interessi') is-invalid @enderror"
|
|
id="importo_interessi" name="importo_interessi"
|
|
value="{{ old('importo_interessi', $rata->importo_interessi) }}">
|
|
<div class="input-group-append">
|
|
<span class="input-group-text">€</span>
|
|
</div>
|
|
@error('importo_interessi')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="importo_spese">Importo Spese</label>
|
|
<div class="input-group">
|
|
<input type="number" step="0.01" min="0"
|
|
class="form-control @error('importo_spese') is-invalid @enderror"
|
|
id="importo_spese" name="importo_spese"
|
|
value="{{ old('importo_spese', $rata->importo_spese) }}">
|
|
<div class="input-group-append">
|
|
<span class="input-group-text">€</span>
|
|
</div>
|
|
@error('importo_spese')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<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', $rata->importo_totale) }}" readonly>
|
|
<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-6">
|
|
<div class="form-group">
|
|
<label for="stato">Stato</label>
|
|
<select class="form-control @error('stato') is-invalid @enderror"
|
|
id="stato" name="stato">
|
|
<option value="da_pagare" {{ old('stato', $rata->stato) == 'da_pagare' ? 'selected' : '' }}>Da Pagare</option>
|
|
<option value="pagata" {{ old('stato', $rata->stato) == 'pagata' ? 'selected' : '' }}>Pagata</option>
|
|
<option value="scaduta" {{ old('stato', $rata->stato) == 'scaduta' ? 'selected' : '' }}>Scaduta</option>
|
|
<option value="sospesa" {{ old('stato', $rata->stato) == 'sospesa' ? 'selected' : '' }}>Sospesa</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="data_pagamento">Data Pagamento</label>
|
|
<input type="date" class="form-control @error('data_pagamento') is-invalid @enderror"
|
|
id="data_pagamento" name="data_pagamento"
|
|
value="{{ old('data_pagamento', $rata->data_pagamento ? $rata->data_pagamento->format('Y-m-d') : '') }}">
|
|
@error('data_pagamento')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<div class="form-group">
|
|
<label for="importo_pagato">Importo Pagato</label>
|
|
<div class="input-group">
|
|
<input type="number" step="0.01" min="0"
|
|
class="form-control @error('importo_pagato') is-invalid @enderror"
|
|
id="importo_pagato" name="importo_pagato"
|
|
value="{{ old('importo_pagato', $rata->importo_pagato) }}">
|
|
<div class="input-group-append">
|
|
<span class="input-group-text">€</span>
|
|
</div>
|
|
@error('importo_pagato')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</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 sulla rata...">{{ old('note', $rata->note) }}</textarea>
|
|
@error('note')
|
|
<div class="invalid-feedback">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card-footer">
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="fas fa-save"></i> Aggiorna Rata
|
|
</button>
|
|
<a href="{{ route('admin.rate.show', $rata->id) }}" class="btn btn-info">
|
|
<i class="fas fa-eye"></i> Visualizza
|
|
</a>
|
|
<a href="{{ route('admin.rate.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 importo totale automaticamente
|
|
function calcolaImportoTotale() {
|
|
var importo = parseFloat($('#importo').val()) || 0;
|
|
var interessi = parseFloat($('#importo_interessi').val()) || 0;
|
|
var spese = parseFloat($('#importo_spese').val()) || 0;
|
|
var totale = importo + interessi + spese;
|
|
|
|
$('#importo_totale').val(totale.toFixed(2));
|
|
}
|
|
|
|
$('#importo, #importo_interessi, #importo_spese').on('input', calcolaImportoTotale);
|
|
|
|
// Gestione stato pagata
|
|
$('#stato').on('change', function() {
|
|
var stato = $(this).val();
|
|
if (stato === 'pagata') {
|
|
if (!$('#data_pagamento').val()) {
|
|
$('#data_pagamento').val(new Date().toISOString().split('T')[0]);
|
|
}
|
|
if ($('#importo_pagato').val() == '0') {
|
|
$('#importo_pagato').val($('#importo_totale').val());
|
|
}
|
|
}
|
|
});
|
|
|
|
// Auto-fill importo pagato quando si cambia data pagamento
|
|
$('#data_pagamento').on('change', function() {
|
|
if ($(this).val() && $('#importo_pagato').val() == '0') {
|
|
$('#importo_pagato').val($('#importo_totale').val());
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
@endsection
|