Salta al contenuto principale

08 - Gestione Spese Intelligente: Oltre il Foglio Excel

Gestione Spese Intelligente: Oltre il Foglio Excel Chiunque abbia organizzato un evento con altre persone conosce il problema: "Chi ha pagato cosa?

Cosa ne pensi di questo articolo?

08 - Gestione Spese Intelligente: Oltre il Foglio Excel
Play the EventFoto:Brett SaylesPexels

In Breve

Gestione Spese Intelligente: Oltre il Foglio Excel Chiunque abbia organizzato un evento con altre persone conosce il problema: "Chi ha pagato cosa?

Gestione Spese Intelligente: Oltre il Foglio Excel

Chiunque abbia organizzato un evento con altre persone conosce il problema: "Chi ha pagato cosa? Quanto devo a chi?". In Play The Event la gestione delle spese non e un semplice elenco di costi. E un sistema intelligente che calcola, suddivide e traccia ogni centesimo in tempo reale.

Cosa Troverai in Questo Articolo

  • I 4 metodi di suddivisione spese (EQUAL, PERCENTAGE, FIXED, CUSTOM)
  • Supporto multi-valuta con tassi di cambio in tempo reale
  • Tracciamento ricevute e settlement con timestamp
  • Spese viaggio separate dalle spese evento
  • Export Excel e template budget con Univerjs

4 Metodi di Suddivisione: Ognuno Paga il Giusto

Il cuore del sistema spese e la flessibilità nella suddivisione. Non tutti gli eventi sono uguali e non tutte le spese vanno divise allo stesso modo. Per questo Play The Event supporta quattro modalità distinte.

EQUAL: Divisione Equa

Il caso più semplice: il totale viene diviso in parti uguali tra tutti i partecipanti selezionati. Se una cena costa 120 euro e partecipano 4 persone, ognuno deve 30 euro. Il sistema gestisce automaticamente gli arrotondamenti.

PERCENTAGE: Divisione Percentuale

Utile quando i contributi non sono uguali ma proporzionali. Ad esempio, per un regalo collettivo dove alcuni vogliono contribuire di più. Il sistema valida che le percentuali sommino esattamente al 100%.

FIXED: Importi Fissi

Ogni partecipante paga un importo predefinito. Perfetto per eventi dove i costi sono già concordati: "Tu paghi il DJ, io pago il catering".

CUSTOM: Suddivisione Personalizzata

La modalità più flessibile: si possono combinare importi fissi e proporzioni variabili. Gestisce scenari complessi come "3 persone dividono equamente il 70%, una persona paga il restante 30%".

Modello Dati: TipoSuddivisione e Spesa
public enum TipoSuddivisione {
    EQUAL,       // Divisione equa tra partecipanti
    PERCENTAGE,  // Suddivisione per percentuale
    FIXED,       // Importi fissi per persona
    CUSTOM       // Combinazione personalizzata
}

// Entità Spesa (semplificata)
@Entity
public class Spesa {
    private Long id;
    private String descrizione;
    private BigDecimal importo;
    private String valuta;            // EUR, USD, GBP...
    private CategoriaSpesa categoria;
    private TipoSuddivisione tipoSuddivisione;
    private LocalDateTime dataCreazione;
    private String urlRicevuta;       // Link alla ricevuta
    private Long eventoId;
    private Long creatoDaUtenteId;
    private List<RipartizionePartecipante> ripartizioni;
}

Categorie Spese: Ordine nel Caos

Ogni spesa appartiene a una categoria predefinita. Questo permette di generare report dettagliati e capire dove vanno i soldi.

CategoriaSpesa Enum
public enum CategoriaSpesa {
    FOOD,            // Cibo e bevande
    TRANSPORT,       // Trasporti
    ACCOMMODATION,   // Alloggio
    ENTERTAINMENT,   // Intrattenimento
    DECORATION,      // Decorazioni
    EQUIPMENT,       // Attrezzature
    VENUE,           // Affitto location
    STAFF,           // Personale
    MARKETING,       // Promozione
    OTHER            // Altro
}

Le categorie sono utilizzate anche nel dashboard analytics per visualizzare la distribuzione dei costi tramite grafici a torta e barre, permettendo agli organizzatori di ottimizzare il budget degli eventi futuri.

Supporto Multi-Valuta

Per eventi internazionali o viaggi di gruppo, le spese possono essere in valute diverse. Il servizio ExchangeRateService si occupa delle conversioni.

ExchangeRateService: Conversione Valute
@Service
public class ExchangeRateService {

    // Cache dei tassi con TTL di 1 ora
    private final Map<String, CachedRate> rateCache;

    public BigDecimal convert(BigDecimal amount,
                              String fromCurrency,
                              String toCurrency) {
        if (fromCurrency.equals(toCurrency)) {
            return amount;
        }
        BigDecimal rate = getExchangeRate(fromCurrency, toCurrency);
        return amount.multiply(rate)
                     .setScale(2, RoundingMode.HALF_UP);
    }

    // Recupera tasso da API esterna con fallback su cache
    private BigDecimal getExchangeRate(String from, String to) {
        String key = from + "_" + to;
        CachedRate cached = rateCache.get(key);
        if (cached != null && !cached.isExpired()) {
            return cached.getRate();
        }
        // Chiamata API esterna per tasso aggiornato
        BigDecimal freshRate = fetchFromExternalApi(from, to);
        rateCache.put(key, new CachedRate(freshRate));
        return freshRate;
    }
}

Come Funziona la Conversione

  • L'organizzatore imposta una valuta base per l'evento
  • Le spese possono essere inserite in qualsiasi valuta supportata
  • Il sistema converte automaticamente nella valuta base per i totali
  • I tassi di cambio vengono aggiornati ogni ora con cache locale
  • Il riepilogo mostra sia l'importo originale che quello convertito

Settlement Tracking: Chi Deve Cosa a Chi

Una volta inserite tutte le spese, il sistema calcola automaticamente i settlement: i trasferimenti necessari per pareggiare i conti. L'algoritmo minimizza il numero di transazioni necessarie.

Ogni settlement include un timestamp di creazione e uno di completamento. Quando un partecipante salda il debito, l'organizzatore segna il pagamento come completato e il sistema registra data e ora esatta.

RipartizionePartecipante: Tracciamento Individuale
@Entity
public class RipartizionePartecipante {
    private Long id;
    private Long partecipanteId;
    private Long spesaId;
    private BigDecimal importoDovuto;
    private BigDecimal importoPagato;
    private Boolean saldato;
    private LocalDateTime dataSaldamento;
    private String note;
}

Ricevute e Documentazione

Ogni spesa può avere una ricevuta allegata tramite URL. Gli utenti possono caricare foto di scontrini o fatture, e il link viene salvato nel campo urlRicevuta. Questo e fondamentale per la trasparenza: ogni partecipante può verificare la spesa consultando la ricevuta originale.

Spese Viaggio: Un Mondo a Parte

Le spese di viaggio (SpesaViaggio) sono gestite separatamente dalle spese evento. Hanno un proprio ciclo di vita, categorie dedicate (trasporto, alloggio, visti) e sono collegate a una specifica tappa del viaggio.

perchè Separare le Spese Viaggio?

Un viaggio di gruppo ha dinamiche di spesa diverse da un evento. I partecipanti possono unirsi solo per alcune tappe, i costi variano per destinazione, e il budget deve essere tracciato per singola tappa. Separare i due contesti evita confusione e permette report più precisi.

API Riepilogo e Export Excel

Il backend espone un endpoint dedicato per il riepilogo spese che aggrega tutti i dati: totale per categoria, totale per partecipante, saldo di ogni persona e lista dei settlement pendenti.

Per chi ha bisogno di un report formale, il sistema offre l'export in formato Excel generato con Apache POI. Il file include fogli separati per il riepilogo generale, il dettaglio per categoria e la situazione debitoria di ogni partecipante.

Endpoint API Riepilogo Spese
GET /api/eventi/{eventoId}/spese/riepilogo

Response:
{
  "totaleEvento": 1250.00,
  "valuta": "EUR",
  "numeroSpese": 15,
  "perCategoria": {
    "FOOD": 450.00,
    "VENUE": 500.00,
    "ENTERTAINMENT": 200.00,
    "DECORATION": 100.00
  },
  "perPartecipante": [ ... ],
  "settlementPendenti": [ ... ]
}

GET /api/eventi/{eventoId}/spese/export/excel
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Budget Template con Univerjs

Una delle funzionalità più apprezzate e il foglio di calcolo integrato. Grazie all'integrazione con Univerjs, gli organizzatori hanno a disposizione un vero spreadsheet nel browser per pianificare il budget.

Il sistema offre entità dedicate: FoglioCalcolo per i fogli personalizzati e TemplateFoglioCalcolo per template riutilizzabili. Gli organizzatori possono partire da un template (es. "Budget Matrimonio", "Budget Team Building") e personalizzarlo per il proprio evento.

Vantaggi dell'Integrazione Univerjs

  • Spreadsheet completo nel browser senza installare nulla
  • Formule, formattazione e grafici come in Excel
  • Collaborazione in tempo reale tra più utenti
  • Template pronti all'uso per diversi tipi di evento
  • Salvataggio automatico collegato all'evento

Calcoli in Tempo Reale

Ogni volta che una spesa viene aggiunta o modificata, il sistema ricalcola automaticamente tutte le ripartizioni. Non serve premere "aggiorna" o "ricalcola": i saldi sono sempre aggiornati.

Questo approccio reattivo e fondamentale per la user experience. L'organizzatore vede in tempo reale l'impatto di ogni spesa sul budget complessivo e sulla situazione debitoria di ogni partecipante.

Punti Chiave

  • 4 metodi di suddivisione per coprire ogni scenario
  • 10 categorie predefinite per report dettagliati
  • Conversione multi-valuta con cache e aggiornamento automatico
  • Settlement tracking con timestamp per ogni transazione
  • Export Excel professionale con Apache POI
  • Spreadsheet integrato con Univerjs per budget planning
  • Spese viaggio separate per gestione dedicata

Il codice sorgente del progetto e disponibile su GitHub. Per provare il sistema completo, visita www.playtheevent.com.

Domande frequenti

Come funziona la gestione delle spese in Play The Event?

La gestione delle spese in Play The Event è un sistema intelligente che calcola, suddivide e traccia ogni centesimo in tempo reale.

Quali sono i metodi di suddivisione delle spese supportati da Play The Event?

I metodi di suddivisione delle spese supportati da Play The Event sono 4: EQUAL (divisione equa), PERCENTAGE (divisione percentuale), FIXED (importi fissi) e CUSTOM (suddivisione personalizzata).

Come vengono gestite le categorie di spesa in Play The Event?

Le categorie di spesa sono utilizzate per generare report dettagliati e capire dove vanno i soldi. Ogni spesa appartiene a una categoria predefinita.

Come funziona il sistema di tracking dei pagamenti in Play The Event?

Il sistema calcola automaticamente i pagamenti necessari per pareggiare i conti e minimizza il numero di transazioni necessarie. Ogni pagamento include un timestamp di creazione e uno di completamento.

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti