diff --git a/sigla-ejb/src/main/java/it/cnr/contab/doccont00/comp/SaldoComponent.java b/sigla-ejb/src/main/java/it/cnr/contab/doccont00/comp/SaldoComponent.java index 5e36f1692f..761c2e534b 100644 --- a/sigla-ejb/src/main/java/it/cnr/contab/doccont00/comp/SaldoComponent.java +++ b/sigla-ejb/src/main/java/it/cnr/contab/doccont00/comp/SaldoComponent.java @@ -56,7 +56,6 @@ import it.cnr.contab.prevent01.bulk.Pdg_modulo_speseBulk; import it.cnr.contab.progettiric00.core.bulk.ProgettoBulk; import it.cnr.contab.progettiric00.core.bulk.ProgettoHome; -import it.cnr.contab.progettiric00.core.bulk.Progetto_other_fieldBulk; import it.cnr.contab.progettiric00.core.bulk.Progetto_other_fieldHome; import it.cnr.contab.progettiric00.core.bulk.Progetto_piano_economicoBulk; import it.cnr.contab.progettiric00.core.bulk.Progetto_piano_economicoHome; @@ -128,6 +127,7 @@ private class CtrlPianoEcoDett { private boolean isUoArea; private boolean isCdrPersonale; private boolean isVoceSpeciale; + private String tipoDett; private BigDecimal importo = BigDecimal.ZERO; private final static String TIPO_REIMPIEGO = "RIM"; @@ -158,6 +158,12 @@ public boolean isVoceSpeciale() { public void setVoceSpeciale(boolean isVoceSpeciale) { this.isVoceSpeciale = isVoceSpeciale; } + public String getTipoDett() { + return tipoDett; + } + public void setTipoDett(String tipoDett) { + this.tipoDett = tipoDett; + } public BigDecimal getImporto() { return importo; } @@ -173,6 +179,12 @@ public boolean isNaturaFonteEsterna(){ public boolean isNaturaFonteInterna(){ return TIPO_FONTE_INTERNA.equals(getTipoNatura()); } + public boolean isTipoEntrata(){ + return Elemento_voceHome.GESTIONE_ENTRATE.equals(getTipoDett()); + } + public boolean isTipoSpesa(){ + return Elemento_voceHome.GESTIONE_SPESE.equals(getTipoDett()); + } } private class CtrlPianoEco { public CtrlPianoEco(ProgettoBulk progetto) { @@ -195,53 +207,61 @@ public List getDett() { public void setDett(List dett) { this.dett = dett; } - public BigDecimal getImpPositivi() { - return this.getImpPositivi(dett.stream()); + public BigDecimal getImpSpesaPositivi() { + return this.getImpSpesaPositivi(dett.stream()); } - public BigDecimal getImpNegativi() { - return this.getImpNegativi(dett.stream()); + public BigDecimal getImpSpesaNegativi() { + return this.getImpSpesaNegativi(dett.stream()); } - public BigDecimal getImpPositiviArea() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea)); + public BigDecimal getImpSpesaPositiviArea() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea)); } - public BigDecimal getImpNegativiArea() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea)); + public BigDecimal getImpSpesaNegativiArea() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea)); } - public BigDecimal getImpPositiviAreaNaturaReimpiego() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaReimpiego())); + public BigDecimal getImpSpesaPositiviAreaNaturaReimpiego() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaReimpiego())); } - public BigDecimal getImpNegativiAreaNaturaReimpiego() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaReimpiego())); + public BigDecimal getImpSpesaNegativiAreaNaturaReimpiego() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaReimpiego())); } - public BigDecimal getImpPositiviAreaNaturaFonteEsterna() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteEsterna())); + public BigDecimal getImpSpesaPositiviAreaNaturaFonteEsterna() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteEsterna())); } - public BigDecimal getImpNegativiAreaNaturaFonteEsterna() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteEsterna())); + public BigDecimal getImpSpesaNegativiAreaNaturaFonteEsterna() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteEsterna())); } - public BigDecimal getImpPositiviAreaNaturaFonteInterna() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteInterna())); + public BigDecimal getImpSpesaPositiviAreaNaturaFonteInterna() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteInterna())); } - public BigDecimal getImpNegativiAreaNaturaFonteInterna() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteInterna())); + public BigDecimal getImpSpesaNegativiAreaNaturaFonteInterna() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isUoArea).filter(el->el.isNaturaFonteInterna())); } - public BigDecimal getImpPositiviCdrPersonale() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isCdrPersonale)); + public BigDecimal getImpSpesaPositiviCdrPersonale() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isCdrPersonale)); } - public BigDecimal getImpNegativiCdrPersonale() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isCdrPersonale)); + public BigDecimal getImpSpesaNegativiCdrPersonale() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isCdrPersonale)); } - public BigDecimal getImpPositiviNaturaReimpiego() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isNaturaReimpiego)); + public BigDecimal getImpSpesaPositiviNaturaReimpiego() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isNaturaReimpiego)); } - public BigDecimal getImpNegativiNaturaReimpiego() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isNaturaReimpiego)); + public BigDecimal getImpSpesaNegativiNaturaReimpiego() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isNaturaReimpiego)); } - public BigDecimal getImpPositiviVoceSpeciale() { - return this.getImpPositivi(dett.stream().filter(CtrlPianoEcoDett::isVoceSpeciale)); + public BigDecimal getImpSpesaPositiviVoceSpeciale() { + return this.getImpSpesaPositivi(dett.stream().filter(CtrlPianoEcoDett::isVoceSpeciale)); } - public BigDecimal getImpNegativiVoceSpeciale() { - return this.getImpNegativi(dett.stream().filter(CtrlPianoEcoDett::isVoceSpeciale)); + public BigDecimal getImpSpesaNegativiVoceSpeciale() { + return this.getImpSpesaNegativi(dett.stream().filter(CtrlPianoEcoDett::isVoceSpeciale)); + } + public BigDecimal getImpEntrataPositivi(){ + return dett.stream().filter(CtrlPianoEcoDett::isTipoEntrata).filter(el->el.getImporto().compareTo(BigDecimal.ZERO)>0) + .map(CtrlPianoEcoDett::getImporto).reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); + } + public BigDecimal getImpEntrataNegativi(){ + return dett.stream().filter(CtrlPianoEcoDett::isTipoEntrata).filter(el->el.getImporto().compareTo(BigDecimal.ZERO)<0) + .map(CtrlPianoEcoDett::getImporto).reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO).abs(); } public Timestamp getDtScadenza() { return Optional.ofNullable( @@ -251,12 +271,12 @@ public Timestamp getDtScadenza() { public boolean isScaduto(Timestamp dataRiferimento) { return Optional.ofNullable(this.getDtScadenza()).map(dt->dt.before(dataRiferimento)).orElse(Boolean.FALSE); } - private BigDecimal getImpPositivi(Stream stream){ - return stream.filter(el->el.getImporto().compareTo(BigDecimal.ZERO)>0) + private BigDecimal getImpSpesaPositivi(Stream stream){ + return stream.filter(CtrlPianoEcoDett::isTipoSpesa).filter(el->el.getImporto().compareTo(BigDecimal.ZERO)>0) .map(CtrlPianoEcoDett::getImporto).reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); } - private BigDecimal getImpNegativi(Stream stream){ - return stream.filter(el->el.getImporto().compareTo(BigDecimal.ZERO)<0) + private BigDecimal getImpSpesaNegativi(Stream stream){ + return stream.filter(CtrlPianoEcoDett::isTipoSpesa).filter(el->el.getImporto().compareTo(BigDecimal.ZERO)<0) .map(CtrlPianoEcoDett::getImporto).reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO).abs(); } } @@ -1580,63 +1600,7 @@ private String getMessaggioSfondamentoPianoEconomico(UserContext userContext, Pd BigDecimal annoFrom = configSession.getIm01(userContext, new Integer(0), null, Configurazione_cnrBulk.PK_GESTIONE_PROGETTI, Configurazione_cnrBulk.SK_PROGETTO_PIANO_ECONOMICO); if (Optional.ofNullable(annoFrom).map(BigDecimal::intValue).filter(el->el.compareTo(pdgVariazione.getEsercizio())<=0).isPresent()) { - List listCtrlDispPianoEcoEtr = new ArrayList(); - Pdg_variazioneHome detHome = (Pdg_variazioneHome)getHome(userContext,Pdg_variazioneBulk.class); - - for (java.util.Iterator dett = detHome.findDettagliEntrataVariazioneGestionale(pdgVariazione).iterator();dett.hasNext();){ - Pdg_variazione_riga_gestBulk rigaVar = (Pdg_variazione_riga_gestBulk)dett.next(); - - WorkpackageBulk latt = ((WorkpackageHome)getHome(userContext, WorkpackageBulk.class)).searchGAECompleta(userContext,CNRUserContext.getEsercizio(userContext), - rigaVar.getLinea_attivita().getCd_centro_responsabilita(), rigaVar.getLinea_attivita().getCd_linea_attivita()); - ProgettoBulk progetto = latt.getProgetto(); - - BigDecimal imVariazioneFin = Utility.nvl(rigaVar.getIm_entrata()); - - //recupero il record se presente altrimenti ne creo uno nuovo - CtrlDispPianoEco dispPianoEco = listCtrlDispPianoEcoEtr.stream() - .filter(el->el.getProgetto().getPg_progetto().equals(progetto.getPg_progetto())) - .findFirst() - .orElse(new CtrlDispPianoEco(progetto, null)); - - dispPianoEco.setImpFinanziato(dispPianoEco.getImpFinanziato().add(imVariazioneFin)); - - if (!listCtrlDispPianoEcoEtr.contains(dispPianoEco)) - listCtrlDispPianoEcoEtr.add(dispPianoEco); - } - - for (CtrlDispPianoEco ctrlDispPianoEco : listCtrlDispPianoEcoEtr) { - ProgettoBulk progetto = ctrlDispPianoEco.getProgetto(); - BigDecimal totFinanziato = BigDecimal.ZERO; - if (progetto.isPianoEconomicoRequired()) { - List pianoEconomicoList = (List)((Progetto_piano_economicoHome)getHome(userContext,Progetto_piano_economicoBulk.class)).findProgettoPianoEconomicoList(progetto.getPg_progetto()); - totFinanziato = pianoEconomicoList.stream() - .filter(el->el.getEsercizio_piano().equals(pdgVariazione.getEsercizio())) - .map(Progetto_piano_economicoBulk::getIm_spesa_finanziato) - .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); - } else { - totFinanziato = Optional.ofNullable(progetto.getOtherField()) - .map(Progetto_other_fieldBulk::getImFinanziato).orElse(BigDecimal.ZERO); - } - - //Controllo che la quota finanziata sia almeno pari alle entrate del progetto - BigDecimal assestatoEtrPrg = Utility.createSaldoComponentSession() - .getStanziamentoAssestatoProgetto(userContext, progetto, Elemento_voceHome.GESTIONE_ENTRATE, null); - - if (totFinanziato.compareTo(assestatoEtrPrg.add(ctrlDispPianoEco.getImpFinanziato()))<0) { - if (messaggio!=null && messaggio.length()>0) - messaggio = messaggio+ "\n"; - messaggio = messaggio + - "L'assestato entrate ("+ - new it.cnr.contab.util.EuroFormat().format(assestatoEtrPrg.add(ctrlDispPianoEco.getImpFinanziato())) + - ") del progetto " + progetto.getCd_progetto() + - " risulterebbe superiore alla quota finanziata dello stesso " - + (progetto.isPianoEconomicoRequired()?"per l'anno "+pdgVariazione.getEsercizio():"")+ - " che risulta di " + - new it.cnr.contab.util.EuroFormat().format(totFinanziato) + ".\n"; - } - } - List listCtrlDispPianoEco = new ArrayList(); for (java.util.Iterator dett = detHome.findDettagliSpesaVariazioneGestionale(pdgVariazione).iterator();dett.hasNext();){ @@ -1690,19 +1654,6 @@ else if (pianoEconomicoList.size()>1) listCtrlDispPianoEco.add(dispPianoEco); } } - } else { - //recupero il record se presente altrimenti ne creo uno nuovo - CtrlDispPianoEco dispPianoEco = listCtrlDispPianoEco.stream() - .filter(el->el.getProgetto().getPg_progetto().equals(progetto.getPg_progetto())) - .filter(el->!Optional.ofNullable(el.getProgettoPianoEconomico()).isPresent()) - .findFirst() - .orElse(new CtrlDispPianoEco(progetto, null)); - - dispPianoEco.setImpFinanziato(dispPianoEco.getImpFinanziato().add(imVariazioneFin)); - dispPianoEco.setImpCofinanziato(dispPianoEco.getImpCofinanziato().add(imVariazioneCofin)); - - if (!listCtrlDispPianoEco.contains(dispPianoEco)) - listCtrlDispPianoEco.add(dispPianoEco); } } @@ -1750,42 +1701,6 @@ else if (pianoEconomicoList.size()>1) catch (Exception ex ){ throw new RuntimeException( ex ); } - } else { - ProgettoBulk prg = ctrlDispPianoEco.getProgetto(); - { - BigDecimal totFinanziato = Optional.ofNullable(prg.getOtherField()) - .map(Progetto_other_fieldBulk::getImFinanziato).orElse(BigDecimal.ZERO); - BigDecimal assestatoSpePrgFes = Utility.createSaldoComponentSession() - .getStanziamentoAssestatoProgetto(userContext, prg, Elemento_voceHome.GESTIONE_SPESE, Progetto_other_fieldHome.TI_IMPORTO_FINANZIATO); - - if (totFinanziato.compareTo(assestatoSpePrgFes.add(ctrlDispPianoEco.getImpFinanziato()))<0) { - if (messaggio!=null && messaggio.length()>0) - messaggio = messaggio+ "\n"; - messaggio = messaggio + - "L'assestato spese fonte esterne ("+ - new it.cnr.contab.util.EuroFormat().format(assestatoSpePrgFes.add(ctrlDispPianoEco.getImpFinanziato())) + - ") del progetto " +prg.getCd_progetto()+ - " risulterebbe superiore alla quota finanziata dello stesso che risulta di " + - new it.cnr.contab.util.EuroFormat().format(totFinanziato) + ".\n"; - } - } - { - BigDecimal totCofinanziato = Optional.ofNullable(prg.getOtherField()) - .map(Progetto_other_fieldBulk::getImCofinanziato).orElse(BigDecimal.ZERO); - BigDecimal assestatoSpePrgReimpiego = Utility.createSaldoComponentSession() - .getStanziamentoAssestatoProgetto(userContext, prg, Elemento_voceHome.GESTIONE_SPESE, Progetto_other_fieldHome.TI_IMPORTO_COFINANZIATO); - - if (totCofinanziato.compareTo(assestatoSpePrgReimpiego.add(ctrlDispPianoEco.getImpCofinanziato()))<0) { - if (messaggio!=null && messaggio.length()>0) - messaggio = messaggio+ "\n"; - messaggio = messaggio + - "L'assestato spese fonti interne e natura reimpiego ("+ - new it.cnr.contab.util.EuroFormat().format(assestatoSpePrgReimpiego.add(ctrlDispPianoEco.getImpCofinanziato())) + - ") del progetto " +prg.getCd_progetto()+ - " risulterebbe superiore alla quota cofinanziata dello stesso che risulta di " + - new it.cnr.contab.util.EuroFormat().format(totCofinanziato) + ".\n"; - } - } } } } @@ -1957,9 +1872,9 @@ public void checkPdgPianoEconomico(UserContext userContext, Pdg_variazioneBulk v CdrBulk cdrPersonaleBulk = (CdrBulk)getHome(userContext, CdrBulk.class).findByPrimaryKey(new CdrBulk(cdrPersonale)); Ass_pdg_variazione_cdrHome ass_cdrHome = (Ass_pdg_variazione_cdrHome)getHome(userContext,Ass_pdg_variazione_cdrBulk.class); - java.util.Collection dettagliSpesa = ass_cdrHome.findDettagliSpesa(variazione); + java.util.Collection dettagliVariazione = ass_cdrHome.findDettagli(variazione); - for (Pdg_variazione_riga_gestBulk varStanzRiga : dettagliSpesa) { + for (Pdg_variazione_riga_gestBulk varStanzRiga : dettagliVariazione) { //verifico se si tratta di area CdrBulk cdrBulk = (CdrBulk)getHome(userContext, CdrBulk.class).findByPrimaryKey(new CdrBulk(varStanzRiga.getCd_cdr_assegnatario())); Unita_organizzativaBulk uoBulk = (Unita_organizzativaBulk)getHome(userContext, Unita_organizzativaBulk.class).findByPrimaryKey(new Unita_organizzativaBulk(cdrBulk.getCd_unita_organizzativa())); @@ -2026,6 +1941,7 @@ public void checkPdgPianoEconomico(UserContext userContext, Pdg_variazioneBulk v //creo il dettaglio CtrlPianoEcoDett dett = new CtrlPianoEcoDett(); + dett.setTipoDett(varStanzRiga.getTi_gestione()); dett.setImporto(varStanzRiga.getIm_variazione()); dett.setCdrPersonale(isDettPersonale); dett.setUoArea(isUoArea); @@ -2048,6 +1964,7 @@ public void checkPdgPianoEconomico(UserContext userContext, Pdg_variazioneBulk v if (!listCtrlPianoEco.contains(pianoEco)) listCtrlPianoEco.add(pianoEco); } + controllaPdgPianoEconomico(userContext, variazione, listCtrlPianoEco, cdVoceSpeciale); } } catch (DetailedRuntimeException _ex) { @@ -2058,60 +1975,82 @@ public void checkPdgPianoEconomico(UserContext userContext, Pdg_variazioneBulk v } private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk variazione, List listCtrlPianoEco, String cdVoceSpeciale) throws ComponentException{ + //se è una variazione di competenza per maggiori entrate/spese controllo solo che non siano stati sottratti erroneamente fondi a progetti + boolean isVariazioneCompetenzaMaggioreEntrateSpese = Optional.of(variazione) + .filter(Pdg_variazioneBulk.class::isInstance) + .map(Pdg_variazioneBulk.class::cast) + .map(Pdg_variazioneBulk::getTipo_variazione) + .map(Tipo_variazioneBulk::isVariazioneMaggioriEntrateSpese) + .orElse(Boolean.FALSE); + //se è una variazione di competenza per minori entrate/spese controllo solo che non siano stati assegnati erroneamente fondi a progetti - if (Optional.of(variazione) + boolean isVariazioneCompetenzaMinoriEntrateSpese = Optional.of(variazione) .filter(Pdg_variazioneBulk.class::isInstance) .map(Pdg_variazioneBulk.class::cast) .map(Pdg_variazioneBulk::getTipo_variazione) .map(Tipo_variazioneBulk::isVariazioneMinoriEntrateSpese) - .orElse(Boolean.FALSE)) { - listCtrlPianoEco.stream() - .filter(el->el.getImpPositivi().compareTo(BigDecimal.ZERO)>0) - .findFirst().ifPresent(el->{ - throw new DetailedRuntimeException("Attenzione! Non è possibile attribuire fondi al progetto "+ - el.getProgetto().getCd_progetto()+" in quanto la variazione è di tipo 'Minori Entrate/Spese'."); - }); - return; - } + .orElse(Boolean.FALSE); - //se è una variazione di competenza per maggiori entrate/spese controllo solo che non siano stati sottratti erroneamente fondi a progetti - boolean isVariazioneCompetenzaMaggioreEntrateSpese = Optional.of(variazione) + //se è una variazione di competenza per minori entrate/spese controllo solo che non siano stati assegnati erroneamente fondi a progetti + boolean isVariazioneStornoSpese = Optional.of(variazione) .filter(Pdg_variazioneBulk.class::isInstance) .map(Pdg_variazioneBulk.class::cast) .map(Pdg_variazioneBulk::getTipo_variazione) - .map(Tipo_variazioneBulk::isVariazioneMaggioriEntrateSpese) + .map(Tipo_variazioneBulk::isStornoSpesa) .orElse(Boolean.FALSE); - BigDecimal impPositiviVoceSpeciale = listCtrlPianoEco.stream() - .filter(el->el.getImpPositiviVoceSpeciale().compareTo(BigDecimal.ZERO)>0) - .map(CtrlPianoEco::getImpPositiviVoceSpeciale) + BigDecimal impSpesaPositiviVoceSpeciale = listCtrlPianoEco.stream() + .filter(el->el.getImpSpesaPositiviVoceSpeciale().compareTo(BigDecimal.ZERO)>0) + .map(CtrlPianoEco::getImpSpesaPositiviVoceSpeciale) .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); - BigDecimal impPositiviNaturaReimpiego = listCtrlPianoEco.stream() - .filter(el->el.getImpPositiviNaturaReimpiego().compareTo(BigDecimal.ZERO)>0) - .map(CtrlPianoEco::getImpPositiviNaturaReimpiego) + BigDecimal impSpesaPositiviNaturaReimpiego = listCtrlPianoEco.stream() + .filter(el->el.getImpSpesaPositiviNaturaReimpiego().compareTo(BigDecimal.ZERO)>0) + .map(CtrlPianoEco::getImpSpesaPositiviNaturaReimpiego) .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); - if (isVariazioneCompetenzaMaggioreEntrateSpese) { + if (isVariazioneCompetenzaMaggioreEntrateSpese || isVariazioneCompetenzaMinoriEntrateSpese) { listCtrlPianoEco.stream() - .filter(el->el.getImpNegativi().compareTo(BigDecimal.ZERO)>0) + .filter(el->el.getImpEntrataPositivi().subtract(el.getImpEntrataNegativi()) + .compareTo(el.getImpSpesaPositivi().subtract(el.getImpSpesaNegativi()))!=0) .findFirst().ifPresent(el->{ - throw new DetailedRuntimeException("Attenzione! Non è possibile sottrarre fondi al progetto "+ - el.getProgetto().getCd_progetto()+" in quanto la variazione è di tipo 'Maggiori Entrate/Spese'."); - }); + throw new DetailedRuntimeException("Attenzione! Il saldo entrata (" + + new it.cnr.contab.util.EuroFormat().format(el.getImpEntrataPositivi().subtract(el.getImpEntrataNegativi())) + + ") non corrisponde al saldo spesa (" + + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaPositivi().subtract(el.getImpSpesaNegativi())) + + ") per il progetto "+el.getProgetto().getCd_progetto()+"."); + }); - if (impPositiviNaturaReimpiego.compareTo(BigDecimal.ZERO)>0) - throw new ApplicationException("Attenzione! Risultano trasferimenti a GAE di natura 6 - 'Reimpiego di risorse' " - + " per un importo di " + new it.cnr.contab.util.EuroFormat().format(impPositiviNaturaReimpiego) - + " non consentito in quanto la variazione è di tipo 'Maggiori Entrate/Spese'."); - } else { + if (isVariazioneCompetenzaMaggioreEntrateSpese) { + listCtrlPianoEco.stream() + .filter(el->el.getImpEntrataNegativi().compareTo(BigDecimal.ZERO)>0 || + el.getImpSpesaNegativi().compareTo(BigDecimal.ZERO)>0) + .findFirst().ifPresent(el->{ + throw new DetailedRuntimeException("Attenzione! Non è possibile sottrarre fondi al progetto "+ + el.getProgetto().getCd_progetto()+" in quanto la variazione è di tipo 'Maggiori Entrate/Spese'."); + }); + + if (impSpesaPositiviNaturaReimpiego.compareTo(BigDecimal.ZERO)>0) + throw new ApplicationException("Attenzione! Risultano trasferimenti a GAE di natura 6 - 'Reimpiego di risorse' " + + " per un importo di " + new it.cnr.contab.util.EuroFormat().format(impSpesaPositiviNaturaReimpiego) + + " non consentito in quanto la variazione è di tipo 'Maggiori Entrate/Spese'."); + } else { + listCtrlPianoEco.stream() + .filter(el->el.getImpEntrataPositivi().compareTo(BigDecimal.ZERO)>0 || + el.getImpSpesaPositivi().compareTo(BigDecimal.ZERO)>0) + .findFirst().ifPresent(el->{ + throw new DetailedRuntimeException("Attenzione! Non è possibile attribuire fondi al progetto "+ + el.getProgetto().getCd_progetto()+" in quanto la variazione è di tipo 'Minori Entrate/Spese'."); + }); + } + } else if (isVariazioneStornoSpese){ /** * 1. non è possibile attribuire fondi alla voce speciale (11048) */ - if (impPositiviVoceSpeciale.compareTo(BigDecimal.ZERO)>0) + if (impSpesaPositiviVoceSpeciale.compareTo(BigDecimal.ZERO)>0) throw new ApplicationException("Attenzione! Non è possibile attribuire fondi alla voce " + cdVoceSpeciale + " (" - + new it.cnr.contab.util.EuroFormat().format(impPositiviVoceSpeciale)+") " + + new it.cnr.contab.util.EuroFormat().format(impSpesaPositiviVoceSpeciale)+") " + "in quanto la variazione non è di tipo 'Maggiori Entrate/Spese'."); //Controlli su tutte le altre tipologie di variazioni @@ -2134,7 +2073,7 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var */ listCtrlPianoEco.stream() .filter(el->el.isScaduto(dataChiusura)) - .filter(el->el.getImpPositivi().compareTo(BigDecimal.ZERO)>0) + .filter(el->el.getImpSpesaPositivi().compareTo(BigDecimal.ZERO)>0) .findFirst().ifPresent(el->{ throw new DetailedRuntimeException("Attenzione! Non è possibile attribuire fondi al progetto "+ el.getProgetto().getCd_progetto()+ @@ -2147,15 +2086,15 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var */ listCtrlPianoEco.stream() .filter(el->!el.isScaduto(dataChiusura)) - .filter(el->el.getImpNegativiNaturaReimpiego().compareTo(BigDecimal.ZERO)>0) - .filter(el->el.getImpNegativiNaturaReimpiego().compareTo(el.getImpPositiviNaturaReimpiego())!=0) + .filter(el->el.getImpSpesaNegativiNaturaReimpiego().compareTo(BigDecimal.ZERO)>0) + .filter(el->el.getImpSpesaNegativiNaturaReimpiego().compareTo(el.getImpSpesaPositiviNaturaReimpiego())!=0) .findFirst().ifPresent(el->{ throw new DetailedRuntimeException("Attenzione! Sono stati prelevati fondi dal progetto "+ el.getProgetto().getCd_progetto()+"(" + - new it.cnr.contab.util.EuroFormat().format(el.getImpNegativiNaturaReimpiego()) + + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaNegativiNaturaReimpiego()) + ") da GAE di natura 6 - 'Reimpiego di risorse' non compensati da un'equivalente " + "assegnazione nell'ambito dello stesso progetto e della stessa natura ("+ - new it.cnr.contab.util.EuroFormat().format(el.getImpPositiviNaturaReimpiego()) + ")");}); + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaPositiviNaturaReimpiego()) + ")");}); /** * 3. se un progetto è aperto è possibile attribuire somme su GAE non di natura 6 solo se stornate dallo stesso progetto @@ -2163,26 +2102,26 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var */ listCtrlPianoEco.stream() .filter(el->!el.isScaduto(dataChiusura)) - .filter(el->el.getImpPositivi().subtract(el.getImpPositiviNaturaReimpiego()) - .subtract(el.getImpPositiviArea().subtract(el.getImpPositiviAreaNaturaReimpiego())) - .subtract(el.getImpPositiviCdrPersonale()) + .filter(el->el.getImpSpesaPositivi().subtract(el.getImpSpesaPositiviNaturaReimpiego()) + .subtract(el.getImpSpesaPositiviArea().subtract(el.getImpSpesaPositiviAreaNaturaReimpiego())) + .subtract(el.getImpSpesaPositiviCdrPersonale()) .compareTo(BigDecimal.ZERO)>0) - .filter(el->el.getImpPositivi().subtract(el.getImpPositiviNaturaReimpiego()) - .subtract(el.getImpPositiviArea().subtract(el.getImpPositiviAreaNaturaReimpiego())) - .subtract(el.getImpPositiviCdrPersonale()) - .compareTo(el.getImpNegativi().subtract(el.getImpNegativiNaturaReimpiego()) - .subtract(el.getImpNegativiArea().subtract(el.getImpNegativiAreaNaturaReimpiego())) - .subtract(el.getImpNegativiCdrPersonale()))>0) + .filter(el->el.getImpSpesaPositivi().subtract(el.getImpSpesaPositiviNaturaReimpiego()) + .subtract(el.getImpSpesaPositiviArea().subtract(el.getImpSpesaPositiviAreaNaturaReimpiego())) + .subtract(el.getImpSpesaPositiviCdrPersonale()) + .compareTo(el.getImpSpesaNegativi().subtract(el.getImpSpesaNegativiNaturaReimpiego()) + .subtract(el.getImpSpesaNegativiArea().subtract(el.getImpSpesaNegativiAreaNaturaReimpiego())) + .subtract(el.getImpSpesaNegativiCdrPersonale()))>0) .findFirst().ifPresent(el->{ throw new DetailedRuntimeException("Attenzione! Sono stati attribuiti fondi al progetto "+ el.getProgetto().getCd_progetto()+"(" + - new it.cnr.contab.util.EuroFormat().format(el.getImpPositivi().subtract(el.getImpPositiviNaturaReimpiego()) - .subtract(el.getImpPositiviArea().subtract(el.getImpPositiviAreaNaturaReimpiego())) - .subtract(el.getImpPositiviCdrPersonale())) + + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaPositivi().subtract(el.getImpSpesaPositiviNaturaReimpiego()) + .subtract(el.getImpSpesaPositiviArea().subtract(el.getImpSpesaPositiviAreaNaturaReimpiego())) + .subtract(el.getImpSpesaPositiviCdrPersonale())) + ") non compensati da un equivalente prelievo nell'ambito dello stesso progetto ("+ - new it.cnr.contab.util.EuroFormat().format(el.getImpNegativi().subtract(el.getImpNegativiNaturaReimpiego()) - .subtract(el.getImpNegativiArea().subtract(el.getImpNegativiAreaNaturaReimpiego())) - .subtract(el.getImpNegativiCdrPersonale())) + ")");}); + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaNegativi().subtract(el.getImpSpesaNegativiNaturaReimpiego()) + .subtract(el.getImpSpesaNegativiArea().subtract(el.getImpSpesaNegativiAreaNaturaReimpiego())) + .subtract(el.getImpSpesaNegativiCdrPersonale())) + ")");}); /** * 4. se un progetto è aperto e vengono sottratte somme ad un'area queste devono essere riassegnate @@ -2190,14 +2129,14 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var */ listCtrlPianoEco.stream() .filter(el->!el.isScaduto(dataChiusura)) - .filter(el->el.getImpNegativiArea().compareTo(BigDecimal.ZERO)>0) - .filter(el->el.getImpNegativiArea().compareTo(el.getImpPositiviArea())>0) + .filter(el->el.getImpSpesaNegativiArea().compareTo(BigDecimal.ZERO)>0) + .filter(el->el.getImpSpesaNegativiArea().compareTo(el.getImpSpesaPositiviArea())>0) .findFirst().ifPresent(el->{ throw new DetailedRuntimeException("Attenzione! Sono stati prelevati dall'area fondi dal progetto "+ el.getProgetto().getCd_progetto()+"(" + - new it.cnr.contab.util.EuroFormat().format(el.getImpNegativiArea()) + + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaNegativiArea()) + ") non compensati da un equivalente assegnazione nell'ambito dello stesso progetto e della stessa area ("+ - new it.cnr.contab.util.EuroFormat().format(el.getImpPositiviArea()) + ")");}); + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaPositiviArea()) + ")");}); /** * 5. se un progetto è aperto e vengono sottratte somme al CDR Personale queste devono essere riassegnate @@ -2205,20 +2144,20 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var */ listCtrlPianoEco.stream() .filter(el->!el.isScaduto(dataChiusura)) - .filter(el->el.getImpNegativiCdrPersonale().compareTo(BigDecimal.ZERO)>0) - .filter(el->el.getImpNegativiCdrPersonale().compareTo(el.getImpPositiviCdrPersonale())>0) + .filter(el->el.getImpSpesaNegativiCdrPersonale().compareTo(BigDecimal.ZERO)>0) + .filter(el->el.getImpSpesaNegativiCdrPersonale().compareTo(el.getImpSpesaPositiviCdrPersonale())>0) .findFirst().ifPresent(el->{ throw new DetailedRuntimeException("Attenzione! Sono stati prelevati dal CDR Personale fondi dal progetto "+ el.getProgetto().getCd_progetto()+"(" + - new it.cnr.contab.util.EuroFormat().format(el.getImpNegativiCdrPersonale()) + + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaNegativiCdrPersonale()) + ") non compensati da un equivalente assegnazione nell'ambito dello stesso progetto e della stessa area ("+ - new it.cnr.contab.util.EuroFormat().format(el.getImpPositiviCdrPersonale()) + ")");}); + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaPositiviCdrPersonale()) + ")");}); //CONTROLLI SUL TOTALE PROGETTI BigDecimal impNegativiPrgScaduti = listCtrlPianoEco.stream() .filter(el->el.isScaduto(dataChiusura)) - .filter(el->el.getImpNegativi().compareTo(BigDecimal.ZERO)>0) - .map(CtrlPianoEco::getImpNegativi) + .filter(el->el.getImpSpesaNegativi().compareTo(BigDecimal.ZERO)>0) + .map(CtrlPianoEco::getImpSpesaNegativi) .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); { @@ -2321,26 +2260,26 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var */ listCtrlPianoEco.stream() .filter(el->!el.isScaduto(dataChiusura)) - .filter(el->el.getImpNegativiNaturaReimpiego().compareTo(BigDecimal.ZERO)>0) - .filter(el->el.getImpNegativiNaturaReimpiego().compareTo(el.getImpPositiviNaturaReimpiego())!=0) + .filter(el->el.getImpSpesaNegativiNaturaReimpiego().compareTo(BigDecimal.ZERO)>0) + .filter(el->el.getImpSpesaNegativiNaturaReimpiego().compareTo(el.getImpSpesaPositiviNaturaReimpiego())!=0) .findFirst().ifPresent(el->{ throw new DetailedRuntimeException("Attenzione! Sono stati prelevati fondi dal progetto "+ el.getProgetto().getCd_progetto()+"(" + - new it.cnr.contab.util.EuroFormat().format(el.getImpNegativiNaturaReimpiego()) + + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaNegativiNaturaReimpiego()) + ") da GAE di natura 6 - 'Reimpiego di risorse' non compensati da un'equivalente " + "assegnazione nell'ambito dello stesso progetto e della stessa natura ("+ - new it.cnr.contab.util.EuroFormat().format(el.getImpPositiviNaturaReimpiego()) + ")");}); + new it.cnr.contab.util.EuroFormat().format(el.getImpSpesaPositiviNaturaReimpiego()) + ")");}); BigDecimal saldoPositivoNaturaReimpiego = listCtrlPianoEco.stream() - .filter(el->el.getImpPositiviNaturaReimpiego().subtract(el.getImpNegativiNaturaReimpiego()).compareTo(BigDecimal.ZERO)>0) - .map(el->el.getImpPositiviNaturaReimpiego().subtract(el.getImpNegativiNaturaReimpiego())) + .filter(el->el.getImpSpesaPositiviNaturaReimpiego().subtract(el.getImpSpesaNegativiNaturaReimpiego()).compareTo(BigDecimal.ZERO)>0) + .map(el->el.getImpSpesaPositiviNaturaReimpiego().subtract(el.getImpSpesaNegativiNaturaReimpiego())) .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); if (saldoPositivoNaturaReimpiego.compareTo(BigDecimal.ZERO)>0) { BigDecimal impNegativiVoceSpecialePrgInCorso = listCtrlPianoEco.stream() .filter(el->!el.isScaduto(dataChiusura)) - .filter(el->el.getImpNegativiVoceSpeciale().compareTo(BigDecimal.ZERO)>0) - .map(CtrlPianoEco::getImpNegativiVoceSpeciale) + .filter(el->el.getImpSpesaNegativiVoceSpeciale().compareTo(BigDecimal.ZERO)>0) + .map(CtrlPianoEco::getImpSpesaNegativiVoceSpeciale) .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); if (saldoPositivoNaturaReimpiego.compareTo(impNegativiPrgScaduti.add(impNegativiVoceSpecialePrgInCorso))!=0) throw new ApplicationException("Attenzione! Risultano trasferimenti a GAE di natura 6 - 'Reimpiego di risorse' " @@ -2354,15 +2293,15 @@ private void controllaPdgPianoEconomico(UserContext userContext, OggettoBulk var * 6. se vengono spostate somme dalla voce speciale (11048) devono essere girate a GaeNatura6 */ BigDecimal impNegativiVoceSpeciale = listCtrlPianoEco.stream() - .filter(el->el.getImpNegativiVoceSpeciale().compareTo(BigDecimal.ZERO)>0) - .map(CtrlPianoEco::getImpNegativiVoceSpeciale) + .filter(el->el.getImpSpesaNegativiVoceSpeciale().compareTo(BigDecimal.ZERO)>0) + .map(CtrlPianoEco::getImpSpesaNegativiVoceSpeciale) .reduce((x,y)->x.add(y)).orElse(BigDecimal.ZERO); - if (impNegativiVoceSpeciale.compareTo(BigDecimal.ZERO)>0 && impNegativiVoceSpeciale.compareTo(impPositiviNaturaReimpiego)>0) + if (impNegativiVoceSpeciale.compareTo(BigDecimal.ZERO)>0 && impNegativiVoceSpeciale.compareTo(impSpesaPositiviNaturaReimpiego)>0) throw new ApplicationException("Attenzione! Risultano prelievi dalla voce " + cdVoceSpeciale + " per un importo di " + new it.cnr.contab.util.EuroFormat().format(impNegativiVoceSpeciale) + " che non risultano totalmente coperti da variazioni a favore" + " di GAE di natura 6 - 'Reimpiego di risorse' (" - + new it.cnr.contab.util.EuroFormat().format(impPositiviNaturaReimpiego)+")."); + + new it.cnr.contab.util.EuroFormat().format(impSpesaPositiviNaturaReimpiego)+")."); } } } diff --git a/sigla-ejb/src/main/java/it/cnr/contab/pdg00/cdip/bulk/Ass_pdg_variazione_cdrHome.java b/sigla-ejb/src/main/java/it/cnr/contab/pdg00/cdip/bulk/Ass_pdg_variazione_cdrHome.java index 23e98e0c9b..c2b2bf6a16 100644 --- a/sigla-ejb/src/main/java/it/cnr/contab/pdg00/cdip/bulk/Ass_pdg_variazione_cdrHome.java +++ b/sigla-ejb/src/main/java/it/cnr/contab/pdg00/cdip/bulk/Ass_pdg_variazione_cdrHome.java @@ -184,11 +184,11 @@ public java.util.Collection findDettagliDipartimento(Ass_pdg_variazione_cdrBulk return home.fetchAll(sql); } - public java.util.Collection findDettagliSpesa(Pdg_variazioneBulk testata) throws IntrospectionException, PersistencyException { + public java.util.Collection findDettagli(Pdg_variazioneBulk testata) throws IntrospectionException, PersistencyException { PersistentHome dettHome = getHomeCache().getHome(Pdg_variazione_riga_gestBulk.class); SQLBuilder sql = dettHome.createSQLBuilder(); sql.addSQLClause(FindClause.AND,"ESERCIZIO",SQLBuilder.EQUALS,testata.getEsercizio()); sql.addSQLClause(FindClause.AND,"PG_VARIAZIONE_PDG",SQLBuilder.EQUALS,testata.getPg_variazione_pdg()); return dettHome.fetchAll(sql); - } + } } \ No newline at end of file diff --git a/sigla-ejb/src/main/java/it/cnr/contab/pdg01/bulk/Tipo_variazioneBulk.java b/sigla-ejb/src/main/java/it/cnr/contab/pdg01/bulk/Tipo_variazioneBulk.java index 8a87b7a3a9..f11c77eb71 100644 --- a/sigla-ejb/src/main/java/it/cnr/contab/pdg01/bulk/Tipo_variazioneBulk.java +++ b/sigla-ejb/src/main/java/it/cnr/contab/pdg01/bulk/Tipo_variazioneBulk.java @@ -147,6 +147,17 @@ public boolean isStorno(){ getTi_tipo_variazione().equals(STORNO_SPESA_ISTITUTI_DIVERSI) || getTi_tipo_variazione().equals(STORNO_SPESA_STESSO_ISTITUTO)); } + /* + * Serve per sapere se la variazione è di tipo Storno Spesa + * Ritorna un boolean con valore true se la tipologia della variazione è: + * STORNO_SPESA_ISTITUTI_DIVERSI + * STORNO_SPESA_STESSO_ISTITUTO + */ + public boolean isStornoSpesa(){ + return getTi_tipo_variazione() != null && + (getTi_tipo_variazione().equals(STORNO_SPESA_ISTITUTI_DIVERSI) || + getTi_tipo_variazione().equals(STORNO_SPESA_STESSO_ISTITUTO)); + } /* * Serve per sapere se la variazione è di tipo Variazione * Ritorna un boolean con valore true se la tipologia della variazione è: diff --git a/sigla-ejb/src/main/java/it/cnr/contab/pdg01/comp/CRUDPdgVariazioneGestionaleComponent.java b/sigla-ejb/src/main/java/it/cnr/contab/pdg01/comp/CRUDPdgVariazioneGestionaleComponent.java index 1d0bce5d0b..9ebbe05205 100644 --- a/sigla-ejb/src/main/java/it/cnr/contab/pdg01/comp/CRUDPdgVariazioneGestionaleComponent.java +++ b/sigla-ejb/src/main/java/it/cnr/contab/pdg01/comp/CRUDPdgVariazioneGestionaleComponent.java @@ -1200,12 +1200,7 @@ private void checkDispAssestatoCdrGAEVoce(UserContext userContext, Pdg_variazion } } - String messaggioPianoEco = Utility.createSaldoComponentSession().getMessaggioSfondamentoPianoEconomico(userContext, pdgVariazione); - if (messaggioPianoEco!=null && messaggioPianoEco.length()>0) { - if (messaggio!=null) - messaggio = messaggio+ "
"; - messaggio = messaggio + messaggioPianoEco.replace("\n", "
"); - } + Utility.createSaldoComponentSession().checkDispPianoEconomicoProgetto(userContext, pdgVariazione); } catch (PersistencyException e) { throw new ComponentException(e); }catch (RemoteException e) { diff --git a/sigla-ejb/src/main/java/it/cnr/contab/progettiric00/comp/ProgettoRicercaComponent.java b/sigla-ejb/src/main/java/it/cnr/contab/progettiric00/comp/ProgettoRicercaComponent.java index de5f2c7223..0973a6ed94 100644 --- a/sigla-ejb/src/main/java/it/cnr/contab/progettiric00/comp/ProgettoRicercaComponent.java +++ b/sigla-ejb/src/main/java/it/cnr/contab/progettiric00/comp/ProgettoRicercaComponent.java @@ -1690,38 +1690,7 @@ private void validaVociPianoEconomicoGestionale(UserContext userContext, Progett private void validaSaldiPianoEconomico(UserContext userContext, ProgettoBulk progetto, Integer annoFrom) throws ComponentException { try{ - if (!progetto.isPianoEconomicoRequired()) { - //Controllo che la quota finanziata sia almeno pari alle entrate del progetto - BigDecimal assestatoEtrPrg = Utility.createSaldoComponentSession() - .getStanziamentoAssestatoProgetto(userContext, progetto, Elemento_voceHome.GESTIONE_ENTRATE, null); - - if (Optional.ofNullable(progetto.getImFinanziato()).orElse(BigDecimal.ZERO).compareTo(assestatoEtrPrg)<0) - throw new ApplicationRuntimeException("Attenzione: la quota finanziata ("+ - new it.cnr.contab.util.EuroFormat().format(progetto.getImFinanziato()) + - ") del progetto " + progetto.getCd_progetto() + - " risulterebbe inferiore all'assestato entrate dello stesso (" + - new it.cnr.contab.util.EuroFormat().format(assestatoEtrPrg) + "). Operazione non consentita!"); - - BigDecimal assestatoSpePrgFes = Utility.createSaldoComponentSession() - .getStanziamentoAssestatoProgetto(userContext, progetto, Elemento_voceHome.GESTIONE_SPESE, Progetto_other_fieldHome.TI_IMPORTO_FINANZIATO); - - if (Optional.ofNullable(progetto.getImFinanziato()).orElse(BigDecimal.ZERO).compareTo(assestatoSpePrgFes)<0) - throw new ApplicationRuntimeException("Attenzione: la quota finanziata ("+ - new it.cnr.contab.util.EuroFormat().format(progetto.getImFinanziato()) + - ") del progetto " + progetto.getCd_progetto() + - " risulterebbe inferiore all'assestato spese fonte esterne dello stesso (" + - new it.cnr.contab.util.EuroFormat().format(assestatoSpePrgFes) + "). Operazione non consentita!"); - - BigDecimal assestatoSpePrgReimpiego = Utility.createSaldoComponentSession() - .getStanziamentoAssestatoProgetto(userContext, progetto, Elemento_voceHome.GESTIONE_SPESE, Progetto_other_fieldHome.TI_IMPORTO_COFINANZIATO); - - if (Optional.ofNullable(progetto.getImCofinanziato()).orElse(BigDecimal.ZERO).compareTo(assestatoSpePrgReimpiego)<0) - throw new ApplicationRuntimeException("Attenzione: la quota cofinanziata ("+ - new it.cnr.contab.util.EuroFormat().format(progetto.getImFinanziato()) + - ") del progetto " + progetto.getCd_progetto() + - " risulterebbe inferiore all'assestato spese fonti interne e natura reimpiego dello stesso (" + - new it.cnr.contab.util.EuroFormat().format(assestatoSpePrgReimpiego) + "). Operazione non consentita!"); - } else { + if (progetto.isPianoEconomicoRequired()) { progetto.getAllDetailsProgettoPianoEconomico().stream() .filter(el->el.getEsercizio_piano().compareTo(annoFrom)>=0).forEach(ppe->{ V_saldi_piano_econom_progettoBulk saldo; diff --git a/sigla-ejb/src/main/resources/it/cnr/contab/pdg01/bulk/Pdg_variazione_riga_entrata_gestBulkInfo.xml b/sigla-ejb/src/main/resources/it/cnr/contab/pdg01/bulk/Pdg_variazione_riga_entrata_gestBulkInfo.xml index f33026f229..e4c63d798f 100644 --- a/sigla-ejb/src/main/resources/it/cnr/contab/pdg01/bulk/Pdg_variazione_riga_entrata_gestBulkInfo.xml +++ b/sigla-ejb/src/main/resources/it/cnr/contab/pdg01/bulk/Pdg_variazione_riga_entrata_gestBulkInfo.xml @@ -26,7 +26,7 @@