Salve a tutti, perdonatemi non riesco a trovare un titolo esplicativo del problema da risolvere.
con l'aiuto di alcuni utenti del forum sono riuscito a mettere in piedi un piccolo database per la gestione della mia scuola.
Per avere le idee chiare sul progetto vi racconto brevemente di cosa si tratta:
Il database è composto dalle seguenti tabelle:
1. StoricoAllievi in cui vi è registrata l'anagrafica di tutti i clienti.
2. Aule in c'è un semplice elenco di aule quindi chiave primaria + nome aula.
3. QuotePagamenti una sorta di listino in cui ci sono ed esempio "(IDTipoPagamento) 1;(Tipo) Iscrizione; (Valore)1€; (Frequenza) Annuale" - in parentesi ho messo in nome dei campi .
4. Pagamenti i cui campi sono: "IDPagamento; IDAllievo; DataPagamento; Anno Contabile; Mese contabile; IDTipoPagamento; Importo versato"
Chiaramente questa tabella è legata ai clienti per mezzo di relazione uno a molti con la tabella StoricoAllievi e alla tabella QuotePagamenti da cui attinge i valori economici.
Ho provveduto a fare una query che mi calcolasse la differenza tra l'importo ricevuto e il valore di acquisto, tipo:
ricevo il pagamento di una retta di 100€, il cliente mi da un acconto di 80, la query mi calcola la differenza. Questo in vista di creare una tabella che mi dia un riepilogo dei pagamenti in Saldo e In debito.
Vi incollo il codice SQL di questa query, magari vi semplifica la comprensione del problema:
SELECT Pagamenti.IDPagamento, Pagamenti.IDAllievo, Pagamenti.[Data pagamento], Pagamenti.[Anno contabile], Pagamenti.[Mese contabile], Pagamenti.IDTipoPagamento, Pagamenti.[Importo versato], Pagamenti.[Modalità pagamento], QuotePagamenti.Valore, [valore]-[importo versato] AS CalcoloDifferenza
FROM [Storico allievi] INNER JOIN (QuotePagamenti INNER JOIN Pagamenti ON QuotePagamenti.IDTipoPagamento = Pagamenti.IDTipoPagamento) ON [Storico allievi].ID = Pagamenti.IDAllievo
ORDER BY Pagamenti.IDAllievo;
Vado diritto al problema.
Meccanicamente registro un pagamento con una maschera di inserimento dati. Quindi l'allievo paga X€ per la retta e la query mi calcola la differenza. Il tutto va a finire in query, fin qui mi sta benissimo.
Il problema è che se lo stesso allievo paga in 2 transazioni diverse, vengono aggiunte 2 voci in tabella, con 2 record che vogliono rappresentare lo stesso acquisto. Tipo Antonino ha pagato 10€ oggi per l'iscrizione e restano 90€. Il giorno successivo Antonino versa 90€ per l'iscrizione e risulta 10€ di differenza. In questo modo mi ritroverò tanti record per ogni transazione e mai un pagamento completo in caso di acconto e saldo in transazioni differenti.
Idee su come gestire questa cosa? Sono veramente a zero sulla gestione di un db.