Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Java] Procedura calcolo rate su un tipo di pagamento

    Salve gente, sto scrivendo del codice per il calcolo delle rate per un dato tipo di pagamento.
    Ad esempio se il pagamento è del tipo 40% subito, 30% a 30 giorni e 30% a 60 giorni.

    La procedura scritta fino ad ora calcola correttamente il tipo di pagamento se non sono presenti rate.
    Quindi mi servirebbe aiuto per il calcolo delle rate.
    Di segiuto è presente una parte del codice:
    codice:
    // importo dell'imposta
        NumericLTBL imposta = this.getTotaleImposta();
        // numero di rate da generare
        NumericLTBL numeroRate = pag.getNumeroScadenze();
        // importi delle rate
        NumericLTBL[] importoRata = new NumericLTBL[pag.getNumeroScadenze().intValue()];
        // date scadenze
        DateLTBL[] dataScadenza = new DateLTBL[pag.getNumeroScadenze().intValue()];
        // somma rate
        NumericLTBL totaleRate = (NumericLTBL) Factory.createObject(NumericLTBL.class, this.getApplication());
    
        // Vettore contenente le rate per il pagamento selezionato
        Vector rate = pag.getCondizionePagamentoRate();   
        // Se non sono presenti rate per il pagamento
        if(rate == null || rate.size() == 0){
          // calcolo importi delle rate
          for (int i = 0 ; i<importoRata.length; i++) {
          	
          	// inizializzo importo rata
            importoRata[i] = new NumericLTBL(this.getTotaleFattura().getCName(), this.getTotaleFattura().getAName());
    
            // Calcolo importo
            if (i==0) {
              // Prima rata solo di iva
              if (pag.getDistribuzioneIva().getFormatted().equals("S")) {
                importoRata[i].setFormatted(imposta.getFormatted());
                // altre rate
                rata.sub(importoRata[i]);
                rata.div(numeroRate);
              }
              else
                // Tutta l'iva sulla prima rata
                if (pag.getDistribuzioneIva().getFormatted().equals("T")) {
                  importoRata[i].setFormatted(imposta.getFormatted());
                  // altre rate
                  rata.sub(importoRata[i]);
                  rata.div(numeroRate);
                  importoRata[i].add(rata);
                } 
                else {
                	// Rate Standard imponibile+imposta
                  rata.div(numeroRate);
                  importoRata[i].setFormatted(rata.getFormatted());
                }
            } else {
            	// Rate successive alla prima
              importoRata[i].setFormatted(rata.getFormatted());
            }    
            // Se sono all'ultima rata
            if(i == (importoRata.length-1)){
             	// Estratto il totale della fattura e gli sottraggo la somma delle rate precedenti
              importoRata[i].set(this.getTotaleFattura().get());
              importoRata[i].sub(totaleRate);
            }
            else{
             	// Somma delle rate
             	totaleRate.add(importoRata[i]);
            }
    
            // inizializzo data scadenza
            dataScadenza[i] = new DateLTBL();
    
            if (i==0) {
              // anno solare o commerciale
              if (pag.getUsoMeseCommerciale().getFormatted().equals("N"))
                data.addDays(pag.getPartenzaRate().intValue());
              else
                data.addDaysCommercial(pag.getPartenzaRate().intValue());
              dataScadenza[i].set(data.get());
            } else {
            	if (pag.getUsoMeseCommerciale().getFormatted().equals("N"))
                data.addDays(pag.getIntervalloScadenze().intValue());
              else
                data.addDaysCommercial(pag.getIntervalloScadenze().intValue());
              dataScadenza[i].set(data.get());
            }
    
            // controllo se spostare a fine mese
            if (pag.getTipoScadenzaPagamento().getFormatted().equals("F"))
              dataScadenza[i].goToEndOfMonth();
    
            // controllo se spostare alla quindicina successiva
            if (pag.getTipoScadenzaPagamento().getFormatted().equals("Q"))
              // anno solare o commerciale
              dataScadenza[i].goTo15OfMonth();
    
        		// Controllo periodi di esclusione 1
            DateLTBL escludiDa = new DateLTBL();
            DateLTBL escludiAa = new DateLTBL();
            DateLTBL toData = new DateLTBL();
            String anno = new String(new Integer(dataScadenza[i].getYY()).toString());
            escludiDa.setFormatted(pag.getDaGiorno1().getFormatted() + "/" +
                                   pag.getDaMese1().getFormatted() + "/" +
                                   anno);
            escludiAa.setFormatted(pag.getAGiorno1().getFormatted() + "/" +
                                   pag.getAMese1().getFormatted() + "/" +
                                   anno);
            toData.setFormatted(pag.getToGiorno1().getFormatted() + "/" +
                                pag.getToMese1().getFormatted() + "/" +
                                anno);
            if (dataScadenza[i].isAfter(escludiDa) && dataScadenza[i].isBefore(escludiAa))
              dataScadenza[i].set(toData.get());
    
            // Controllo periodi di esclusione 2
            String anno2 = new String(new Integer(dataScadenza[i].getYY()+1).toString());
            escludiDa.setFormatted(pag.getDaGiorno2().getFormatted() + "/" +
                                   pag.getDaMese2().getFormatted() + "/" +
                                   anno);
            escludiAa.setFormatted(pag.getAGiorno2().getFormatted() + "/" +
                                   pag.getAMese2().getFormatted() + "/" +
                                   anno2);
            toData.setFormatted(pag.getToGiorno2().getFormatted() + "/" +
                                pag.getToMese2().getFormatted() + "/" +
                                anno2);
            if (dataScadenza[i].isAfter(escludiDa) && dataScadenza[i].isBefore(escludiAa))
              dataScadenza[i].set(toData.get());
                
            // Controllo esistenza Scadenza
            Scadenza scadenza = (Scadenza) Factory.createObject(Scadenza.class, this.getApplication());
            if (this.getTipoDocumento().getFormatted().equals("F")) {
              scadenza.elementAt(SQLHelpler.compressKey(new String[]{"CLI", this.getCodiceCliente().get(),
        																		this.getNumeroFattura().getFormatted(),
        																		this.getDataFattura().get(),
            	 															dataScadenza[i].get()}));
            } else {
              scadenza.elementAt(SQLHelpler.compressKey(new String[]{"CLI", this.getCodiceCliente().get(),
             																"RF/" + this.getNumeroRicevutaFiscale().get(),
             																this.getDataRicevutaFiscale().get(),
             																dataScadenza[i].get()}));
            }
            // Per Trovato incremento il fatturato e il da pagare
            if (scadenza.ERROR_NO_ENTRY.equals("0")) {
              // Se fattura
            	if (!this.getTipoFattura().getFormatted().equals("3")) {
             	  scadenzaDocumento.getImporto().add(importoRata[i]);
              // se Nota di Credito
              } else {
                scadenzaDocumento.getImporto().sub(importoRata[i]);
              }
            // Per non trovato lo creo
            } else {
             	scadenzaDocumento.setIsNewObj(true);
              scadenzaDocumento.getImporto().setFormatted("0");
              // Se fattura
              if (!this.getTipoFattura().getFormatted().equals("3")) {
             	  scadenzaDocumento.getImporto().add(importoRata[i]);
             	// se Nota di Credito
             	} else {
                scadenzaDocumento.getImporto().sub(importoRata[i]);
              }
              scadenzaDocumento.getDataScadenza().set(dataScadenza[i].get());
            }
            scadenzaDocumento.getNumeroDocumento().setFormatted(this.getNumeroDocumento().getFormatted());
            scadenzaDocumento.getCodicePagamento().setFormatted(this.getPagamento().getFormatted());
            scadenzaDocumento.save();
          }
        }
        // Se sono presenti rate per il pagamento selezionato
        else{
    Nel ramo else devo inserire il calcolo: qualcuno ha qualche dritta da darmi?

    Grazie mille

  2. #2
    I dati da inserire nell'applicazione sono i giorni e la percentuale dell'importo.
    Io ho fatto una cosa del tipo:
    codice:
         	for(int i=0; i<rate.size(); i++){
         		CondizionePagamentoRate pagamentoRate = new CondizionePagamentoRate();
           	// se il numero di giorni in cui suddividere l'importo è != 0
           	if(!pagamentoRate.getGiorni().getFormatted().equals("+0000")){
           		String numGiorni = pagamentoRate.getGiorni().get();
           		// se l'importo % non è stato specificato 
             	if(pagamentoRate.getImporto().getFormatted().equals(pagamentoRate.getGiorni().getNullValue())){
             		// devo dividere l'importo per il numero di giorni così da ottenere l'importo della singola rata  		
             	}
             	// l'importo % è stato specificato
             	else{
             		// devo sottrarre all'importo ogni singola rata % così da ottenere l'importo della singola rata        		
             	}
           	}
           	pagamentoRate.save();	
          }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.