public GruppoDatiFinanziari ricalcoloPianoGraduati(
Date dataRiferimento,
GruppoDatiFinanziari datiFin,
List<Double> importoRate, DatiRimborsoGraduati drg, String tipoCalcolo, double tassoDiCalcolo, MovimentoRimborsoGraduato mrg) throws GestionePraticaException {
Mutuo mutuo = datiFin.getMutuo();
String tipoFormaGiuridica = "";
List<Spesa> spese = new ArrayList<Spesa>();
Segnalatore segn = getSegnalatore(mutuo.getNumeroMutuo());
TestataTabellaFinanziaria ttf = getTestataTabellaFinanziaria(segn.getNumeroTabellaFinanziaria());
Spesa spesa = new Spesa();
try {
spesa.setBaseSpesa(ttf.getBaseSpeseIncasso());
spesa.setImportoFisso(ttf.getImportoFissoSpeseIncasso());
} catch (Exception e) {
spesa.setBaseSpesa("F");
spesa.setImportoFisso(0.0);
}
spesa.setCodiceSpesa(CostantiSpese.SPESE_INCASSO.value());
spese.add(spesa);
Spesa spGest = new Spesa();
try {
spGest.setBaseSpesa(ttf.getBaseCommissioniGestione());
spGest.setImportoFisso(ttf.getImportoFissoCommissioniGestione());
} catch (Exception e) {
spGest.setBaseSpesa("F");
spGest.setImportoFisso(0.0);
}
spGest.setCodiceSpesa(CostantiSpese.COMMISSIONI_DI_GESTIONE.value());
spese.add(spGest);
//TODO: devo aggiungere altre spese?
// Traduco i dati di gestione pratica in finanziamento per il$
// generatorePam
Finanziamento fin = GestionePraticaUtility.getFinanziamento(datiFin, spese, importoRate);
List<MovimentoRimborsoGraduato> listaRimbGrad = getRimborsiGraduato(mutuo.getNumeroMutuo(), datiFin.getNrDatiFinanziari());
fin.setMovimentiRimborso(GestionePraticaUtility.traduciListaMovRimbGradInMovRimbGradPdA(listaRimbGrad));
List<Legame> legami = getLegamiPerMutuoRapporto(mutuo.getNumeroMutuo(),
CodiceRapporto.CODICE_RAPPORTO_MUTUATARIO.getValue());
for (Legame l : legami) {
if( null == l.getDataFineValidita() ){
tipoFormaGiuridica = connettoreAnagraficaService.getFormaGiuridicaSoggetto(l.getNumeroSoggetto());
}
}
fin.setDataPrimaIndicizzazione(datiFin.getDataPrimaIndicizzazione());
fin.setDataRiferimento(new Date());
// fin.setDataRiferimento(datiFin.getDataInizioValidita());
// SimpleDateFormat sdf_mese = new SimpleDateFormat("MM");
// fin.setMesePrimoPeriodoIndicizzazione(Integer.valueOf(sdf_mese.format(fin
// .getDataPrimaIndicizzazione())));
ParametroIndicizzo parmInd = gestionePraticaDao.getParametroIndicizzazione(datiFin.getCodiceTipoCalcoloIndicizzazione(), datiFin.getCodiceModalitaCalcoloIndicizzazione());
if( parmInd != null ){
fin.setMesePrimoPeriodoIndicizzazione(parmInd.getMesePrimoPeriodo());
}
ParametroIndicizzo parmIndic = getParametroIndicizzazione(datiFin.getCodiceTipoCalcoloIndicizzazione(),
datiFin.getCodiceModalitaCalcoloIndicizzazione());
fin.setPeriodicitaIndicizzazione(parmIndic != null ? NumberUtils.checkNull(parmIndic.getPeriodicita())
: 0);
// carico i dati rimborsi grad
fin.setDatiRimborsoGraduati(GestionePraticaUtility.datiRimborsoGraduatoToRimborsoGraduatoPdA(drg,
mutuo));
Segnalatore segnalatore = getSegnalatore(mutuo.getNumeroMutuo());
ModalitaRimborso mr = getModalitaRimborso(drg.getCodiceModalitaRimborso(), datiFin.getCodiceProdotto(),
segnalatore.getNumeroSoggetto());
if( mr == null )
throw new ModalitaRimborsoException();
// Li traduco negli oggetti per il generatorePdA
fin.setModalitaRimborso(GestionePraticaUtility.modalitaRimborsoToModalitaRimborsoPdA(mr));
List<PercentualeRicalcoloGraduato> listaPercRicGrad = getPercentualiRicalcoloGraduato(tipoFormaGiuridica,
mr);
// fin.setPercentualiRicalcoloGraduati(GestionePraticaUtility
// .percRicGradToRicRimbGradPdA(listaPercRicGrad));
//ALBE 11/03/2011 le percentuali vengono poi divise per 100 nel generatorePdA...
List<PercentualiRicalcoloGraduato> percGradPdA = new ArrayList<PercentualiRicalcoloGraduato>(0);
for( PercentualeRicalcoloGraduato prg : listaPercRicGrad ){
PercentualiRicalcoloGraduato p = new PercentualiRicalcoloGraduato();
p.setCategoria(prg.getCodiceCategoria());
p.setFormaGiuridica(prg.getTipoFormaGiuridica());
p.setNumeroMesiRimborsoFacoltativi(prg.getNumeroMesiRimborsoFacoltativo());
p.setPercentuale(prg.getPercentuale());
p.setPeriodicitaRimborso(prg.getPeriodicitaRimborso());
p.setProgressivoValore(prg.getProgressivoValore());
percGradPdA.add(p);
}
fin.setPercentualiRicalcoloGraduati(percGradPdA);
fin.setTipoCalcolo(tipoCalcolo);
fin.setTassoInteresse(tassoDiCalcolo);
if( mrg != null ){
fin.setDataRiferimento(mrg.getDataMovimento());
fin.setProgressivoMovimento(mrg.getProgressivoMovimento());
}
Finanziamento nuovoFin = generatorePdAFacade.rigeneraPianoAmmortamentoGraduati(fin);
// if( !"D".equals(tipoCalcolo) ){
// nuovoFin = generatorePdAFacade.calcolaTaeg(nuovoFin);
// nuovoFin = generatorePdAFacade.ricalcolaPianoIas(nuovoFin);
// }
List<PianoAmmortamento> nuovoPam = new ArrayList<PianoAmmortamento>(0);
for (Rata r : nuovoFin.getPam()) {
PianoAmmortamento pa = GestionePraticaUtility.rataToRataPam(r);
pa.setNumeroMutuo(mutuo.getNumeroMutuo());
// pa.setTassoApplicato(fin.getTassoPeriodale() * 12 / fin.getTipoPeriodicita());
nuovoPam.add(pa);
}
// Metto il nuovo PAM nei nuovi dati finanziari