Package it.pdor.generatorePdA.domain

Examples of it.pdor.generatorePdA.domain.Rata


     
      if(i==fin.getNumeroRate()-1){
        fin.setDataUltimaScadenza(scadenza); // scadenza ultima rata
      }
     
      Rata rata = new Rata();
      rata.setDtScadRata(scadenza);
      rata.setProgressivoRata(i+1);
      rata.setQuotaInteressi(impRata);
      rata.setCapitaleResiduo(residuo);
      rata.setImpRata(impRata+quotaSpeseIncasso);
      rata.setQuotaCommissioni(0.00);
      rata.setQuotaCapitale(0.00);
      rata.setQuotaSpese(quotaSpeseIncasso);
      rata.setTipoRata("I");
     
      piano.add(rata);
     
      totQuotaInteressi += rata.getQuotaInteressi(); //quotaInteressi;
      totQuotaMontante += impRata ;
      totImportoRate += rata.getImpRata() ;
      totQuotaCapitale += quotaCapitale ;
      totQuotaCommissioni += nostreCommissioni ;
      totQuotaSpese += quotaSpeseIncasso ;
      totQuotaCommissioniGestione += quotaCommissioniGestione ;
     
View Full Code Here


    //Calcolo il capitale residuo totale (residuo + nuova tranche)
    //puo' essere calcolato o come somma delle tranche o come capitale residuo sull'ultima
    //rata entrambi + la nuova tranche
    double capitaleTotale = 0.0;
   
    Rata primaRataSuccessiva = null;
    Rata ultimaDaNonRicalcolare = null;
    Collections.sort(finanziamento.getPam(), rataComparator);
    for(Rata rata : finanziamento.getPam() ){
      if( rata.getDtScadRata().after(finanziamento.getDataRiferimento())
          &&  (rata.getCodicePosizioneRata().intValue() == 1
              || rata.getCodicePosizioneRata().intValue() == 2) ){
        primaRataSuccessiva = rata;
        break;
      }
      if( "I".equals(rata.getTipoRata()) )
        ultimaDaNonRicalcolare = rata;
    }
   
    //Prendo la rata di interessi immediatamente prima dell'incasso
    Rata rataPerIlConteggioCapitaleResiduo = null;
    Collections.sort(rateDaNonRicalcolare, rataComparator);
    if( rateDaNonRicalcolare != null && rateDaNonRicalcolare.size()>0 ){
      rataPerIlConteggioCapitaleResiduo = rateDaNonRicalcolare.get(rateDaNonRicalcolare.size()-1);
    }
   
    if( rataPerIlConteggioCapitaleResiduo == null )
      rataPerIlConteggioCapitaleResiduo = primaRataSuccessiva;
   
    capitaleTotale = getCapitaleResiduo(finanziamento.getImportoFinanziato(), rateDaNonRicalcolare);
//    capitaleTotale = rataPerIlConteggioCapitaleResiduo.getCapitaleResiduo().doubleValue();
    //+ rataPerIlConteggioCapitaleResiduo.getQuotaCapitale().doubleValue();
//    ultimaDaNonRicalcolare.getCapitaleResiduo().doubleValue();
    capitaleTotale -= nuovoMovimento.getImportoMovimento();
    double residuo = capitaleTotale;
    log.debug("Capitale Totale = "+capitaleTotale);
   
//    int numeroRate = finanziamento.getNumeroRate().intValue();
//    numeroRate = numeroRate - nuovoMovimento.getProgressivoRataAddebitoDietimi().intValue() + 1;
    int numeroRate = rateDaRicalcolare.size();
   
    if( ultimaDaNonRicalcolare == null )
      ultimaDaNonRicalcolare = rataPerIlConteggioCapitaleResiduo;
   
    //Creo una rata di soloo capitale pari all'importo del rimborso
    Rata rataCapitale = new Rata();
    rataCapitale.setQuotaDietimi(0.0);
    rataCapitale.setQuotaInteressi(0.0);
    rataCapitale.setQuotaCapitale(nuovoMovimento.getImportoMovimento());
    rataCapitale.setImpRata(nuovoMovimento.getImportoMovimento());
    rataCapitale.setQuotaCommGest(0.0);
    rataCapitale.setQuotaSpese(0.0);
    rataCapitale.setDtScadRata(nuovoMovimento.getDataMovimento());
    rataCapitale.setCodiceFormaPagamento(ultimaDaNonRicalcolare.getCodiceFormaPagamento());
    rataCapitale.setCapitaleResiduo(capitaleTotale);
    rataCapitale.setTipoRata("C");
    rataCapitale.setCodicePosizioneRata(5);
    rataCapitale.setNumeroIndirizzo(ultimaDaNonRicalcolare.getNumeroIndirizzo());
   
    //prima di ricalcolare il piano, al debito residuo tolgo le quote capitale di tutte
    //le rate successive ma non ricalcolate.
    for(Rata rata : rateDaRicalcolare ){
      if( rata.getDtScadRata().after(finanziamento.getDataRiferimento())
View Full Code Here

    }
   
    //Rimuovo la data di capitale relativa all'incasso da stornare
    //Ordino discendente in quanto la rata di capitale da stornare � sicuramente l'ultima
    Collections.sort(rateDaNonRicalcolare, new RataComparator("progressivoRata",false));
    Rata rataEliminata = null;
    for( Rata r : rateDaNonRicalcolare ){
      if( r.getDtScadRata().equals(movimentoPda.getDataMovimento())
          && "C".equals(r.getTipoRata())
          && r.getImpRata().doubleValue() == movimentoPda.getImportoMovimento().doubleValue() ){
        rateDaNonRicalcolare.remove(r);
        rataEliminata = r;
        log.debug("Rata di Capitale Eliminata: "+r.getProgressivoRata());
        break;
      }
    }
   
    Collections.sort(rateDaRicalcolare, rataComparator);
    Collections.sort(rateDaNonRicalcolare, rataComparator);
   
    Rata primaRataDaRicalcolare = rateDaRicalcolare.get(0);
   
    //Recupero l'ultima rata da non ricalcolare
//    Rata ultimaDaNonRicalcolare = rateDaNonRicalcolare.get(rateDaNonRicalcolare.size()-1);// null;
//    Collections.sort(finanziamento.getPam(), rataComparator);
//    for(Rata rata : rateDaNonRicalcolare ){
//      if( rata.getDtScadRata().after(finanziamento.getDataRiferimento())
//          &&  rata.getCodicePosizioneRata().intValue() == 1   ){
//        break;
//      }
//      if( "I".equals(rata.getTipoRata()) )
//        ultimaDaNonRicalcolare = rata;
//    }
   
    //Prendo il capitale residuo della rata di addebito dietimi...
    double capitaleTotale = 0.0;
    capitaleTotale = finanziamento.getImportoFinanziato();

    //Al capitale totale tolglo le rate di capitale presenti con data prima dello storno
    for(Rata r : rateDaNonRicalcolare ){
      if( "C".equals(r.getTipoRata()) )
        capitaleTotale -= r.getImpRata().doubleValue();
    }
    log.debug("Capitale Totale = "+capitaleTotale);
   
//    double residuo = capitaleTotale;
    double residuo = rataEliminata.getCapitaleResiduo().doubleValue() +
      rataEliminata.getQuotaCapitale().doubleValue();
   
    int numeroRate = finanziamento.getNumeroRate().intValue();
   
    //Ricalcolo le rate...
    double vecchioTassoIndicizzazione = finanziamento.getTassoPeriodale() * 100 * 12;
    vecchioTassoIndicizzazione = vecchioTassoIndicizzazione / finanziamento.getTipoPeriodicita();
    vecchioTassoIndicizzazione = vecchioTassoIndicizzazione + ( NumberUtils.checkNull(primaRataDaRicalcolare.getTassoIndicizzazione()) - NumberUtils.checkNull(finanziamento.getTassoStorico()) );
    vecchioTassoIndicizzazione = vecchioTassoIndicizzazione * finanziamento.getTipoPeriodicita() / 12;
    log.debug("Vecchio Tasso Indicizzazione = "+vecchioTassoIndicizzazione);
   
   
    //Ricalcolo l'importo della rata con il tasso periodale
View Full Code Here

   
    //Calcolo il capitale residuo totale (residuo + nuova tranche)
    //puo' essere calcolato o come somma delle tranche o come capitale residuo sull'ultima
    //rata entrambi + la nuova tranche
    double capitaleTotale = 0.0;
    Rata ultimaDaNonRicalcolare = null;
    Collections.sort(finanziamento.getPam(), rataComparator);
    for(Rata rata : finanziamento.getPam() ){
      //devo distinguere il caso in cui il movimanto sia un atranche ripetto ad un rimborso
      if( rata.getDtScadRata().after(finanziamento.getDataRiferimento())
          && rata.getCodicePosizioneRata().intValue() <=2 )
        break;
      ultimaDaNonRicalcolare = rata;
    }
   
    capitaleTotale = ultimaDaNonRicalcolare.getCapitaleResiduo().doubleValue();
    capitaleTotale += nuovoMovimento.getImportoMovimento();
    log.debug("Capitale Totale = "+capitaleTotale);
   
    //Verifico se la rata di addebito dietimi e' finisce fuori dal pre-ammortamento
    int numeroRate = finanziamento.getNumeroRate().intValue();
View Full Code Here

          fin.setDataUltimaScadenza(scadenza); // scadenza ultima rata
         
        }
      }
     
      Rata rata = new Rata();
      rata.setDtScadRata(scadenza);
      rata.setProgressivoRata(i+1);
      rata.setQuotaInteressi(quotaInteressi);
      rata.setCapitaleResiduo(residuo);
      rata.setImpRata(impRata+quotaSpeseIncasso+quotaCommissioniGestione);
      rata.setQuotaCommissioni(nostreCommissioni);
      rata.setQuotaCapitale(quotaCapitale);
      rata.setQuotaSpese(quotaSpeseIncasso);
      rata.setQuotaCommGest(quotaCommissioniGestione);
      rata.setTipoRata("I");
     
      piano.add(rata);
     
      totQuotaInteressi += quotaInteressi;
      //TODO VERIFICARE CON GIANGI COSA SETTARE QUANDO PASSEREMO A SOFIA
      // la gestione totQuotaMontante += impRata era di SOFIA
      totQuotaMontante += rata.getImpRata();
//      totQuotaMontante += impRata ;
      totImportoRate += rata.getImpRata() ;
      totQuotaCapitale += quotaCapitale ;
      totQuotaCommissioni += nostreCommissioni ;
      totQuotaSpese += quotaSpeseIncasso ;
      totQuotaCommissioniGestione += quotaCommissioniGestione ;
     
View Full Code Here

                residuo = 0;
                fin.setDataUltimaScadenza(scadenza); // scadenza ultima rata
        }
      }
     
      Rata rata = new Rata();
      rata.setDtScadRata(scadenza);
      rata.setProgressivoRata(i+1);
      rata.setQuotaInteressi(quotaInteressiPeriodale);
      rata.setCapitaleResiduo(residuo);
      if(i < fin.getNumeroRateSoloInteressi()) { rata.setImpRata(impRata+quotaSpeseIncasso+quotaCommissioniGestione);}
      else { rata.setImpRata(impRata); }
      rata.setQuotaCommissioni(nostreCommissioni);
      rata.setQuotaCapitale(quotaCapitale);
      if(i < fin.getNumeroRateSoloInteressi()) { rata.setQuotaSpese(0d); }
      else{ rata.setQuotaSpese(quotaSpeseIncasso); }
      rata.setQuotaCommGest(quotaCommissioniGestione);
      rata.setTipoRata("I");
     
      piano.add(rata);
     
      if(i < fin.getNumeroRateSoloInteressi()) { quotaSpeseIncasso=0; } // solo in questo pam
     
      totQuotaInteressi += quotaInteressiPeriodale;
      //TODO VERIFICARE CON GIANGI COSA SETTARE QUANDO PASSEREMO A SOFIA
      // la gestione totQuotaMontante += impRata era di SOFIA
      totQuotaMontante += rata.getImpRata();
//      totQuotaMontante += (rata.getImpRata()-quotaSpeseIncasso-quotaCommissioniGestione) ;
      totImportoRate += rata.getImpRata() ;
      totQuotaCapitale += quotaCapitale ;
      totQuotaCommissioni += nostreCommissioni ;
      totQuotaSpese += quotaSpeseIncasso ;
      totQuotaCommissioniGestione += quotaCommissioniGestione ;
     
View Full Code Here

    //
    //In entrambi i casi i dietimi sono addebitati sulla prima rata in posizione <=2 successiva
    //alla data di erogazione.
    //--------------------------------------------------------------------------------------------
    Collections.sort(rateDaRicalcolare, rataComparatorAsc);
    Rata rataPrecedente = null;
    int numeroGiorniDietimi = 0;
    double importoDietimi = 0.0;
    double tassoDietimi = 0.0;
    Date dataDal = nuovoMovimento.getDataValuta();//nuovoMovimento.getDataMovimento();
    for(Rata rata : rateDaRicalcolare){
View Full Code Here

    //--------------------
   
    double capitaleTotale = 0.0;
   
    //Cerco la rata successiva al movimento e quella immediatamente precedente
    Rata primaRataSuccessiva = null;
    Rata ultimaDaNonRicalcolare = null;
    Collections.sort(finanziamento.getPam(), rataComparator);
    for(Rata rata : finanziamento.getPam() ){
      if( rata.getDtScadRata().after(finanziamento.getDataRiferimento())
          &&  rata.getCodicePosizioneRata().intValue() <=
          && rata.getCodicePosizioneRata().intValue() > 0){
        primaRataSuccessiva = rata;
        break;
      }
      if( "I".equals(rata.getTipoRata()) )
        ultimaDaNonRicalcolare = rata;
    }
   
    //Prendo la rata di interessi immediatamente prima dell'incasso
    Rata rataPerIlConteggioCapitaleResiduo = null;
    Collections.sort(rateDaNonRicalcolare, rataComparator);
    if( rateDaNonRicalcolare != null && rateDaNonRicalcolare.size()>0 ){
      rataPerIlConteggioCapitaleResiduo = rateDaNonRicalcolare.get(rateDaNonRicalcolare.size()-1);
    }
   
    if( rataPerIlConteggioCapitaleResiduo == null )
      rataPerIlConteggioCapitaleResiduo = primaRataSuccessiva;
   
    //Calcolo il capitale residuo totale (residuo - nuovo incasso)
    capitaleTotale = getCapitaleResiduo(finanziamento.getImportoFinanziato(), rateDaNonRicalcolare);
//    capitaleTotale = rataPerIlConteggioCapitaleResiduo.getCapitaleResiduo().doubleValue();
    //+ rataPerIlConteggioCapitaleResiduo.getQuotaCapitale().doubleValue();
      //ultimaDaNonRicalcolare.getCapitaleResiduo().doubleValue();
    capitaleTotale -= nuovoMovimento.getImportoMovimento();
    log.debug("Capitale Totale = "+capitaleTotale);
   
    //Numero totale di rate per un cost
    int maxNumeroRate = finanziamento.getMaxNumeroRateMutuoCostante().intValue() + finanziamento.getNumeroRate().intValue();
   
    if( ultimaDaNonRicalcolare == null )
      ultimaDaNonRicalcolare = rataPerIlConteggioCapitaleResiduo;
   
    //Recupero le spese dal piano
    double quotaSpese = ultimaDaNonRicalcolare.getQuotaSpese();
    log.debug("Quota Spese = "+quotaSpese);
    double quotaCommGestione = NumberUtils.checkNull(ultimaDaNonRicalcolare.getQuotaCommGest());
    log.debug("Quota Commissioni di Gestione = "+quotaCommGestione);
    String codiceFormaPagamento = ultimaDaNonRicalcolare.getCodiceFormaPagamento();
    log.debug("Codice Forma Pagamento = "+codiceFormaPagamento);
   
    //--------------------------------------------------------------
    //Creo una rata di solo capitale pari all'importo del rimborso
    Rata rataCapitale = new Rata();
    rataCapitale.setQuotaDietimi(0.0);
    rataCapitale.setQuotaInteressi(0.0);
    rataCapitale.setQuotaCapitale(nuovoMovimento.getImportoMovimento());
    rataCapitale.setImpRata(nuovoMovimento.getImportoMovimento());
    rataCapitale.setQuotaCommGest(0.0);
    rataCapitale.setQuotaSpese(0.0);
    rataCapitale.setDtScadRata(nuovoMovimento.getDataMovimento());
    rataCapitale.setCodiceFormaPagamento(ultimaDaNonRicalcolare.getCodiceFormaPagamento());
    rataCapitale.setCapitaleResiduo(capitaleTotale);
    rataCapitale.setTipoRata("C");
    rataCapitale.setCodicePosizioneRata(5);   
    rataCapitale.setNumeroIndirizzo(ultimaDaNonRicalcolare.getNumeroIndirizzo());
   
    //Ricavo la data di ultima indicizzazione
//    Date dataScadenzaRata = ultimaDaNonRicalcolare.getDtScadRata();   
    Date dataUltimaIndicizzazione = null;
    if( finanziamento.getDataUltimaIndicizzazione() == null )
      dataUltimaIndicizzazione = finanziamento.getDataPrimaIndicizzazione();
    else
      dataUltimaIndicizzazione = finanziamento.getDataUltimaIndicizzazione();
   
    double importoRataIniziale = primaRataSuccessiva.getImpRata() - NumberUtils.checkNull(primaRataSuccessiva.getQuotaDietimi());
   
    //prima di ricalcolare il piano, al debito residuo tolgo le quote capitale di tutte
    //le rate successive ma non ricalcolate.
    for(Rata rata : rateDaRicalcolare ){
      if( rata.getDtScadRata().after(finanziamento.getDataRiferimento())
          &&  rata.getCodicePosizioneRata().intValue() > 2 && "I".equals(rata.getTipoRata())){
       
        capitaleTotale -= NumberUtils.checkNull(rata.getQuotaCapitale());
      }
    }
   
   
    //------------------------------------------------------
    //Eseguo il ricalcolo del piano a rata costante
    List<Rata> rateRicalcolate = ricalcolaPiano(finanziamento, capitaleTotale,
        quotaSpese, quotaCommGestione, ultimaDaNonRicalcolare,
        dataUltimaIndicizzazione, rateDaRicalcolare, rateDaNonRicalcolare,
        importoRataIniziale, nuovoMovimento.getTassoCalcoloDietimi());
   
    //------------------------------------------------------------------------------
    //Verifico che il numero di rate nuove non superi il massimo consentito (escluse le rate di capitale)
    for(Rata r : rateDaNonRicalcolare){
      if( "C".equals(r.getTipoRata()) )
        maxNumeroRate++;
    }
    if( rateDaNonRicalcolare.size() + rateRicalcolate.size() > maxNumeroRate ){
      //Forse Devo ricalcolare il piano perche ho superato il max numero rate
     
      //Sommo l'importo delle rate (al netto spese) che eccedono il numero max di rate
      double sommaCapitaleRateOltreLimite = 0.0;
      double sommaInteressiRateOltreLimite = 0.0;
      double sommaIndicizzoRateOltreLimite = 0.0;
     
      for(int i=maxNumeroRate ; i < rateRicalcolate.size() ; i++){
        sommaCapitaleRateOltreLimite += rateRicalcolate.get(i).getQuotaCapitale();
        sommaInteressiRateOltreLimite += rateRicalcolate.get(i).getQuotaInteressi();
        sommaIndicizzoRateOltreLimite += rateRicalcolate.get(i).getQuotaIndicizzo();
        rateRicalcolate.remove(i);
      }
     
     
      //Aggiungo ancora l'importo netto della rata numMax
      sommaCapitaleRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaCapitale();
      sommaInteressiRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaInteressi();
      sommaIndicizzoRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaIndicizzo();
     
      //Aggionrno l'ultima rara
      rateRicalcolate.get(maxNumeroRate-1).setQuotaCapitale(sommaCapitaleRateOltreLimite);
      rateRicalcolate.get(maxNumeroRate-1).setQuotaInteressi(sommaInteressiRateOltreLimite);
      rateRicalcolate.get(maxNumeroRate-1).setQuotaIndicizzo(sommaIndicizzoRateOltreLimite);
      rateRicalcolate.get(maxNumeroRate-1).setCapitaleResiduo(0.0);
      rateRicalcolate.get(maxNumeroRate-1).setImpRata(sommaCapitaleRateOltreLimite +
          sommaInteressiRateOltreLimite +sommaIndicizzoRateOltreLimite);
     
      //Controllo che la somma non superi il massimo consentito se resto sotto allora
      //il piano va bene cos�
      if( rateRicalcolate.get(maxNumeroRate-1).getImpRata() > getMaxImportoMutuoCostante().doubleValue() ){
       
        //Non va bene... devo ricalcolare il piano alzando la rata
        //Calcolo l'importo della rata
        int numeroRate = maxNumeroRate - rateDaNonRicalcolare.size();
        double importoRata = capitaleTotale * nuovoMovimento.getTassoCalcoloDietimi().doubleValue() /100 ;
        double unoPiuTassoElevatoAlNumeroRate  = Math.pow(1+nuovoMovimento.getTassoCalcoloDietimi().doubleValue()/100, numeroRate);
        importoRata = importoRata * unoPiuTassoElevatoAlNumeroRate;
        importoRata = importoRata / ( unoPiuTassoElevatoAlNumeroRate - 1 );
        importoRata = NumberUtils.arrotonda(importoRata, UtilityMatematiche.ARROTONDAMENTO_RATA);
        log.debug("Importo Rata = "+importoRata);
       
        rateRicalcolate = ricalcolaPiano(finanziamento, capitaleTotale,
            quotaSpese, quotaCommGestione, ultimaDaNonRicalcolare,
            dataUltimaIndicizzazione, rateDaRicalcolare, rateDaNonRicalcolare,
            importoRata, nuovoMovimento.getTassoCalcoloDietimi());
       
      }
    }
   
    //-------------------------------------------------------------------------------
    //Anomalia segnalata da Colombo il 13/01/2010...
    //Attenzione: aggiungo le rate che sono dopo la rata di capitale ma che hanno
    //posizione >2
    //-------------------------------------------
    for( Rata r: rateDaRicalcolare ){
      if( NumberUtils.checkNull(r.getCodicePosizioneRata()).intValue() > 2 )
        rateRicalcolate.add(r);
    }
   
    //----------------------------------------------------
    //Salvo il progr precedente ed i dietimi precedenti
    Collections.sort(rateRicalcolate, rataComparator);
    Iterator<Rata> rateRicalcIter = rateRicalcolate.iterator();
    Iterator<Rata> rateDaRicalcIter = rateDaRicalcolare.iterator();
    while( rateDaRicalcIter.hasNext() ){
      Rata rataOld = rateDaRicalcIter.next();
      if( rateRicalcIter.hasNext() ){
        Rata nuova = rateRicalcIter.next();
        nuova.setPgrRataPrec(rataOld.getProgressivoRata());
        nuova.setQuotaDietimiPrec(rataOld.getQuotaDietimi());
        nuova.setQuotaDietimi(rataOld.getQuotaDietimi());
        nuova.setImpRata(nuova.getImpRata()+NumberUtils.checkNull(nuova.getQuotaDietimi()));
        nuova.setCodicePosizioneRata(rataOld.getCodicePosizioneRata());
        nuova.setDataRegIndicizzazione(rataOld.getDataRegIndicizzazione());
        nuova.setStatoIndicizzazione(rataOld.getStatoIndicizzazione());
       
        nuova.setQuotaRisconto(rataOld.getQuotaRisconto());
        nuova.setRiscontoCalcolato(rataOld.getRiscontoCalcolato());
      }
    }
   
    //Aggiungo la rata di capitale
    rateRicalcolate.add(rataCapitale);
View Full Code Here

   
    //---------------------------------------------------------------
    //Rimuovo la data di capitale relativa all'incasso da stornare
    //Ordino discendente in quanto la rata di capitale da stornare � sicuramente l'ultima
    Collections.sort(rateDaNonRicalcolare, new RataComparator("progressivoRata",false));
    Rata rataEliminata = null;
    for( Rata r : rateDaNonRicalcolare ){
      if( r.getDtScadRata().equals(movimentoPda.getDataMovimento())
          && "C".equals(r.getTipoRata())
          && r.getImpRata().doubleValue() == movimentoPda.getImportoMovimento().doubleValue() ){
        rateDaNonRicalcolare.remove(r);
        rataEliminata = r;
        break;
      }
    }
   
    //-----------------------------------------------------
   
    Collections.sort(rateDaRicalcolare, rataComparator);
    Collections.sort(rateDaNonRicalcolare, rataComparator);
    Collections.sort(finanziamento.getPam(), rataComparator);
   
    Rata primaRataDaRicalcolare = rateDaRicalcolare.get(0);
    Rata ultimaDaNonRicalcolare = rateDaNonRicalcolare.get(rateDaNonRicalcolare.size()-1);
   
    double capitaleTotale = finanziamento.getImportoFinanziato();
    //Al capitale totale tolglo le rate di capitale presenti con data prima dello storno
    for(Rata r : rateDaNonRicalcolare ){
      if( "C".equals(r.getTipoRata()) )
        capitaleTotale -= r.getImpRata().doubleValue();
    }
    log.debug("Capitale Totale = "+capitaleTotale);
    double residuo = rataEliminata.getCapitaleResiduo().doubleValue() + rataEliminata.getQuotaCapitale().doubleValue();
   
    //Numero massimi di rate consentite
    int maxNumeroRate = finanziamento.getMaxNumeroRateMutuoCostante().intValue() + finanziamento.getNumeroRate().intValue();
   
    //Recupero le spese dal piano
    double quotaSpese = primaRataDaRicalcolare.getQuotaSpese();
    log.debug("Quota Spese = "+quotaSpese);
    double quotaCommGestione = NumberUtils.checkNull(primaRataDaRicalcolare.getQuotaCommGest());
    log.debug("Quota Commissioni di Gestione = "+quotaCommGestione);
   
    //REcupero il tasso da utilizzare per il ricalcolo a seguito dello storno
    double vecchioTassoIndicizzazione = finanziamento.getTassoPeriodale() * 100 * 12;
    vecchioTassoIndicizzazione = vecchioTassoIndicizzazione / finanziamento.getTipoPeriodicita();
    vecchioTassoIndicizzazione = vecchioTassoIndicizzazione + ( NumberUtils.checkNull(primaRataDaRicalcolare.getTassoIndicizzazione()) - NumberUtils.checkNull(finanziamento.getTassoStorico()) );
    vecchioTassoIndicizzazione = vecchioTassoIndicizzazione * finanziamento.getTipoPeriodicita() / 12;
    log.debug("Vecchio Tasso Indicizzazione = "+vecchioTassoIndicizzazione);
   
//    Date dataScadenzaRata = ultimaDaNonRicalcolare.getDtScadRata();   
    Date dataUltimaIndicizzazione = null;
    if( finanziamento.getDataUltimaIndicizzazione() == null )
      dataUltimaIndicizzazione = finanziamento.getDataPrimaIndicizzazione();
    else
      dataUltimaIndicizzazione = finanziamento.getDataUltimaIndicizzazione();
   
    //Lista delle rate ricalcolate
    List<Rata> rateRicalcolate = ricalcolaPiano(finanziamento, residuo,
        quotaSpese, quotaCommGestione, ultimaDaNonRicalcolare,
        dataUltimaIndicizzazione, rateDaRicalcolare, rateDaNonRicalcolare,
        finanziamento.getImportoRataNominale(), vecchioTassoIndicizzazione);

   
    //Verifico che il numero di rate nuove non superi il massimo consentito
    for(Rata r : rateDaNonRicalcolare){
      if( "C".equals(r.getTipoRata()) )
        maxNumeroRate++;
    }
    if( rateDaNonRicalcolare.size() + rateRicalcolate.size() > maxNumeroRate ){
      //Forse Devo ricalcolare il piano perche ho superato il max numero rate
      //Sommo l'importo delle rate (al netto spese) che eccedono il numero max di rate
      double sommaCapitaleRateOltreLimite = 0.0;
      double sommaInteressiRateOltreLimite = 0.0;
      double sommaIndicizzoRateOltreLimite = 0.0;
     
      for(int i=maxNumeroRate ; i < rateRicalcolate.size() ; i++){
        sommaCapitaleRateOltreLimite += rateRicalcolate.get(i).getQuotaCapitale();
        sommaInteressiRateOltreLimite += rateRicalcolate.get(i).getQuotaInteressi();
        sommaIndicizzoRateOltreLimite += rateRicalcolate.get(i).getQuotaIndicizzo();
        rateRicalcolate.remove(i);
      }
     
      //Aggiungo ancora l'importo netto della rata numMax
      sommaCapitaleRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaCapitale();
      sommaInteressiRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaInteressi();
      sommaIndicizzoRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaIndicizzo();
     
      //Aggionrno l'ultima rara
      rateRicalcolate.get(maxNumeroRate-1).setQuotaCapitale(sommaCapitaleRateOltreLimite);
      rateRicalcolate.get(maxNumeroRate-1).setQuotaInteressi(sommaInteressiRateOltreLimite);
      rateRicalcolate.get(maxNumeroRate-1).setQuotaIndicizzo(sommaIndicizzoRateOltreLimite);
      rateRicalcolate.get(maxNumeroRate-1).setCapitaleResiduo(0.0);
      rateRicalcolate.get(maxNumeroRate-1).setImpRata(sommaCapitaleRateOltreLimite +
          sommaInteressiRateOltreLimite +sommaIndicizzoRateOltreLimite);
   
//    if( rateDaNonRicalcolare.size() + rateRicalcolate.size() > maxNumeroRate ){
      //Forse Devo ricalcolare il piano perche ho superato il max numero rate
     
      //Sommo l'importo delle rate (al netto spese) che eccedono il numero max di rate
//      double sommaRateOltreLimite = 0.0;
//      for(int i=maxNumeroRate ; i < rateRicalcolate.size() ; i++){
//        sommaRateOltreLimite += rateRicalcolate.get(i).getQuotaCapitale() +
//          rateRicalcolate.get(i).getQuotaInteressi() +
//          rateRicalcolate.get(i).getQuotaIndicizzo();
//      }
//      //Aggiungo ancora l'importo netto della rata numMax
//      sommaRateOltreLimite += rateRicalcolate.get(maxNumeroRate-1).getQuotaCapitale() +
//        rateRicalcolate.get(maxNumeroRate-1).getQuotaInteressi() +
//        rateRicalcolate.get(maxNumeroRate-1).getQuotaIndicizzo();
     
      //Controllo che la somma non superi il massimo consentito se resto sotto allora
      //il piano va bene cos�
      if( rateRicalcolate.get(maxNumeroRate-1).getImpRata() > getMaxImportoMutuoCostante().doubleValue() ){
       
        //Non va bene... devo ricalcolare il piano alzando la rata
        //Calcolo l'importo della rata
        int numeroRate = maxNumeroRate - rateDaNonRicalcolare.size();
        double importoRata = capitaleTotale * movimentoPda.getTassoCalcoloDietimi().doubleValue() /100 ;
        double unoPiuTassoElevatoAlNumeroRate  = Math.pow(1+movimentoPda.getTassoCalcoloDietimi().doubleValue()/100, numeroRate);
        importoRata = importoRata * unoPiuTassoElevatoAlNumeroRate;
        importoRata = importoRata / ( unoPiuTassoElevatoAlNumeroRate - 1 );
        importoRata = NumberUtils.arrotonda(importoRata, UtilityMatematiche.ARROTONDAMENTO_RATA);
        log.debug("Importo Rata = "+importoRata);
       
        rateRicalcolate = ricalcolaPiano(finanziamento, residuo,
            quotaSpese, quotaCommGestione, ultimaDaNonRicalcolare,
            dataUltimaIndicizzazione, rateDaRicalcolare, rateDaNonRicalcolare,
            importoRata, vecchioTassoIndicizzazione);
       
      }
    }
   
    //----------------------------------------------------
    //Salvo il progr precedente ed i dietimi precedenti
    Collections.sort(rateRicalcolate, rataComparator);
    Iterator<Rata> rateRicalcIter = rateRicalcolate.iterator();
    Iterator<Rata> rateDaRicalcIter = rateDaRicalcolare.iterator();
    while( rateDaRicalcIter.hasNext() ){
      Rata rataOld = rateDaRicalcIter.next();
      if( rateRicalcIter.hasNext() ){
        Rata nuova = rateRicalcIter.next();
        //TODO: il progressivo viene poi sovrascritto
        //nuova.setPgrRataPrec(rataOld.getProgressivoRata());
        nuova.setQuotaDietimi(rataOld.getQuotaDietimiPrec());
       
        nuova.setQuotaRisconto(rataOld.getQuotaRisconto());
        nuova.setRiscontoCalcolato(rataOld.getRiscontoCalcolato());
      }
    }
   
    finanziamento.setRateNonRicalcolate(rateDaNonRicalcolare);
    finanziamento.setRateRicalcolate(rateRicalcolate);
View Full Code Here

      double quotaSpese, double quotaCommGestione, Rata ultimaDaNonRicalcolare,
      Date dataUltimaIndicizzazione, List<Rata> rateDaRicalcolare, List<Rata> rateDaNonRicalcolare,
      double importoRata, double tassoCalcolo) {
   
    Date dataScadenzaRata = ultimaDaNonRicalcolare.getDtScadRata();
    Rata primaRataSuccessiva = rateDaRicalcolare.get(0);
   
    List<Rata> rateRicalcolate = new ArrayList<Rata>(0);
    tassoCalcolo = RoundUtils.round5Cifre(tassoCalcolo);
   
    //Recupero le spese di incasso
    Spesa sIncasso = null;
    if( fin.getSpese() != null )
      for(Spesa s : fin.getSpese() )
        if( CostantiSpese.SPESE_INCASSO.value().equals(s.getCodiceSpesa()) )
          sIncasso = s;

    //Spese di incasso
    Date dataScadenzaSpese = null;
   
    if( sIncasso != null && "A".equals(sIncasso.getBaseSpesa()) ){
      //Se le spese sono su base annuale recupero la rata di addebito spese
      //Ordino descending
      RataComparator rc = new RataComparator("dtScadRata", false);
      Collections.sort(rateDaNonRicalcolare, rc);
      for(Rata r : rateDaNonRicalcolare ){
        if( r.getQuotaSpese().doubleValue() != 0.0 ){
          //Essendo le spese su base annuale a partire dal basso prendo la scadenza
          //della rata che ha le spese valorizzate
          dataScadenzaSpese = r.getDtScadRata();
          break;
        }
      }
      rc.setAscending(true);
      //Riordino in ascending
      Collections.sort(rateDaNonRicalcolare, rc);
    }
   
    //Commissioni di gestione
    Spesa sGest = null;
    if( fin.getSpese() != null )
      for(Spesa s : fin.getSpese() )
        if( CostantiSpese.COMMISSIONI_DI_GESTIONE.value().equals(s.getCodiceSpesa()) )
          sGest = s;
   
    Date dataScadenzaCommissioni = null;
   
    if( sGest != null && "A".equals(sGest.getBaseSpesa()) ){
      //Se le spese sono su base annuale recupero la rata di addebito spese
      //Ordino descending
      RataComparator rc = new RataComparator("dtScadRata", false);
      Collections.sort(rateDaNonRicalcolare, rc);
      for(Rata r : rateDaNonRicalcolare ){
        if( r.getQuotaSpese().doubleValue() != 0.0 ){
          //Essendo le spese su base annuale a partire dal basso prendo la scadenza
          //della rata che ha le spese valorizzate
          dataScadenzaCommissioni = r.getDtScadRata();
          break;
        }
      }
      rc.setAscending(true);
      //Riordino in ascending
      Collections.sort(rateDaNonRicalcolare, rc);
    }
   
   
    //Provo a ricalcolare il piano con la rata originaria+nuovo capitale + nuovo tasso
    while( residuo > 0 ){
      Rata r = new Rata();
      //Rate del piano definitivo quindi ho sia quota capitale che quota interessi
      double quotaInteressi = NumberUtils.arrotonda(
          residuo * tassoCalcolo / 100,
          UtilityMatematiche.ARROTONDAMENTO_RATA);
     
      //Mi serve per calcolare la quota di indicizzo
      double quotaInteressiVecchio = NumberUtils.arrotonda(
          residuo * fin.getTassoPeriodale() ,
          UtilityMatematiche.ARROTONDAMENTO_RATA);
     
      double quotaCapitale = importoRata - quotaInteressi;
      if( quotaCapitale > residuo ){ //Per sistemare gli arrotondamenti sull'ultima rata
        quotaCapitale = residuo;
        importoRata = quotaCapitale + quotaInteressi;
      }
      residuo -= quotaCapitale;
     
      r.setQuotaInteressi(quotaInteressiVecchio);
      r.setQuotaIndicizzo(quotaInteressi - quotaInteressiVecchio);
      r.setQuotaCapitale(quotaCapitale);
     
      r.setCapitaleResiduo(residuo);
     
      dataScadenzaRata = DateUtility.addMese(dataScadenzaRata, 1);
      r.setDtScadRata(dataScadenzaRata);
      r.setDataRegIndicizzazione(null);
     
      r.setCodiceFormaPagamento(primaRataSuccessiva.getCodiceFormaPagamento());
      r.setNumeroIndirizzo(primaRataSuccessiva.getNumeroIndirizzo());
      r.setNumeroRinnovo(primaRataSuccessiva.getNumeroRinnovo());
     
      r.setTassoApplicato( RoundUtils.round5Cifre(tassoCalcolo*12/fin.getTipoPeriodicita()) );
      r.setTipoRata(primaRataSuccessiva.getTipoRata());
      r.setCodicePosizioneRata(1);
      r.setStatoIndicizzazione(null);
      r.setTassoIndicizzazione(primaRataSuccessiva.getTassoIndicizzazione());
     
      //Spese incasso
      if( dataScadenzaSpese != null  ){
        if( DateUtility.addMese(dataScadenzaSpese, 12).equals(dataScadenzaRata) ){
          r.setQuotaSpese(sIncasso.getImportoFisso());
          //porto avanti alla prossima data di addebito spese
          dataScadenzaSpese = DateUtility.addMese(dataScadenzaSpese, 12);
        }else{
          r.setQuotaSpese(0.0);
        }
      }else{
        r.setQuotaSpese(quotaSpese)
      }
     
      //Commissioni di gestione
      if( dataScadenzaCommissioni != null  ){
        if( DateUtility.addMese(dataScadenzaCommissioni, 12).equals(dataScadenzaRata) ){
          r.setQuotaCommGest(sGest.getImportoFisso());
          //porto avanti alla prossima data di addebito commissioni gest
          dataScadenzaCommissioni = DateUtility.addMese(dataScadenzaCommissioni, 12);
        }else{
          r.setQuotaCommGest(0.0);
        }
      }else{
        r.setQuotaCommGest(quotaCommGestione);
      }
     
      r.setImpRata(importoRata + r.getQuotaCommGest() + r.getQuotaSpese() );
     
      rateRicalcolate.add(r);
    }
   
    return rateRicalcolate;
View Full Code Here

TOP

Related Classes of it.pdor.generatorePdA.domain.Rata

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.