@Override
public GruppoDatiFinanziari aggiornaDatiFinanziariPostIncasso(GruppoDatiFinanziari nuovoGdf, Movimento incasso)
throws DataAntecedenteDataDecorrenzaException {
// 1: prendo i vecchi dati fin:
GruppoDatiFinanziari oldGdf = getDatiFinanziariAllaData(nuovoGdf.getMutuo().getNumeroMutuo(),
incasso.getDataMovimento());
// 2: aggiorno i campi del vecchio con i nuovi dati
oldGdf.setImportoMontante(nuovoGdf.getImportoMontante());
oldGdf.setImportoInteressi(nuovoGdf.getImportoInteressi());
oldGdf.setImportoFinanziatoIas(nuovoGdf.getImportoFinanziatoIas());
oldGdf.setTassoIas(nuovoGdf.getTassoIas() * 100);
// 3:faccio update definfin passandogli oldGdf
gestionePraticaDao.updateDatiFinanziari(oldGdf);
// 4a: cancello tutte le rate
List<PianoAmmortamento> pamDaCancellare = new ArrayList<PianoAmmortamento>(oldGdf.getPianoAmmortamento());
Collections.sort(pamDaCancellare, new PianoAmmortamentoComparator("dataScadenzaRata", true));
for (PianoAmmortamento pa : pamDaCancellare) {
log.debug("Cancello la rata: " + pa.getRataId().getNumeroPam() + " " + pa.getRataId().getProgressivoRata());
gestionePraticaDao.deleteRataPianoAmmortamento(pa);
}
gestionePraticaDao.clearCache();
// 4b: inserisco le rate ricalcolate
Set<PianoAmmortamento> prova = gestionePraticaDao.getPianoAmmortamento(oldGdf.getNumeroPam());
log.debug("Dopo aver cancellato... ho ancora un piano? " + prova.size());
List<PianoAmmortamento> pamDaInserire = new ArrayList<PianoAmmortamento>(nuovoGdf.getPianoAmmortamento());
Collections.sort(pamDaInserire, new PianoAmmortamentoComparator("dataScadenzaRata", true));
for (PianoAmmortamento pa : pamDaInserire) {
try {
pa.getRataId().setNumeroPam(oldGdf.getNumeroPam());
log.debug("Inserisco la rata: " + pa.getRataId().getNumeroPam() + " "
+ pa.getRataId().getProgressivoRata());
gestionePraticaDao.insertPam(pa);
} catch (Exception e) {
log.error("RATA PAM e PROGRESSIVO: " + pa.getRataId().getNumeroPam() + " "
+ pa.getRataId().getProgressivoRata(), e);
throw new RuntimeException(e);
}
}
// 5: recupero i nuovi dati finanziari da db
GruppoDatiFinanziari newGdf = getDatiFinanziariAllaData(nuovoGdf.getMutuo().getNumeroMutuo(),
incasso.getDataMovimento());
// 5cost: aggiorno, se necessario, il campo totaleRate dei dati
// finanziari con il numero di rate di tipo I, li aggiorno e li tiro
// nuovamente su
if ("COST".equals(newGdf.getMutuo().getCodiceProdotto())) {
newGdf.setTotaleRate(determinaNumeroRateInteressi(pamDaInserire));
newGdf.setDataScadenzaUltimaRata(determinaDataScadenzaUltimaRataInteressi(pamDaInserire));
log.debug("## Mutuo " + newGdf.getMutuo().getNumeroMutuo() + " COST numero rate I : "
+ determinaNumeroRateInteressi(pamDaInserire) + " dataUltimaRata I : "
+ determinaDataScadenzaUltimaRataInteressi(pamDaInserire));
gestionePraticaDao.updateDatiFinanziari(newGdf);
newGdf = getDatiFinanziariAllaData(newGdf.getMutuo().getNumeroMutuo(), incasso.getDataMovimento());
}
// 6: ritorno i nuovi newGdf dati finanziari
return newGdf;
}