use of it.cnr.contab.progettiric00.core.bulk.Progetto_rimodulazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class SaldoComponent method getMessaggioSfondamentoPianoEconomico.
// Controllo che restituisce errore.
// Se la variazione passa a definitivo controllo che gli importi inseriti in variazione non superino la disponibilità residua.
// Se la variazione passa ad approvato controllo solo che il piano economico non sia sfondato sul voci del piano economico movimentate dalla variazione
private String getMessaggioSfondamentoPianoEconomico(UserContext userContext, OggettoBulk variazione, boolean locked) throws ComponentException {
StringJoiner messaggio = new StringJoiner("\n\n");
boolean isVariazioneCompetenza = Optional.ofNullable(variazione).map(Pdg_variazioneBulk.class::isInstance).orElse(Boolean.FALSE);
boolean isVariazioneResidua = Optional.ofNullable(variazione).map(Var_stanz_resBulk.class::isInstance).orElse(Boolean.FALSE);
if (!isVariazioneCompetenza && !isVariazioneResidua)
throw new ApplicationException("Errore nella call del metodo getMessaggioSfondamentoPianoEconomico. Contattare il CED.");
try {
Configurazione_cnrComponentSession configSession = (Configurazione_cnrComponentSession) Utility.createConfigurazioneCnrComponentSession();
String cdNaturaReimpiego = configSession.getVal01(userContext, new Integer(0), null, Configurazione_cnrBulk.PK_GESTIONE_PROGETTI, Configurazione_cnrBulk.SK_NATURA_REIMPIEGO);
BigDecimal annoFrom = configSession.getIm01(userContext, new Integer(0), null, Configurazione_cnrBulk.PK_GESTIONE_PROGETTI, Configurazione_cnrBulk.SK_PROGETTO_PIANO_ECONOMICO);
Integer esercizioVariazione = Optional.ofNullable(isVariazioneCompetenza ? Optional.of(variazione).map(Pdg_variazioneBulk.class::cast).map(Pdg_variazioneBulk::getEsercizio).orElse(null) : Optional.of(variazione).map(Var_stanz_resBulk.class::cast).map(Var_stanz_resBulk::getEsercizio_residuo).orElse(null)).orElseThrow(() -> new ApplicationException("Esercizio Variazione non individuata."));
if (Optional.ofNullable(annoFrom).map(BigDecimal::intValue).filter(el -> el.compareTo(esercizioVariazione) <= 0).isPresent()) {
List<CtrlDispPianoEco> listCtrlDispPianoEcoEtr = new ArrayList<CtrlDispPianoEco>();
Pdg_variazioneHome detHome = (Pdg_variazioneHome) getHome(userContext, Pdg_variazioneBulk.class);
Var_stanz_resHome varResHome = (Var_stanz_resHome) getHome(userContext, Var_stanz_resBulk.class);
Progetto_piano_economicoHome ppeHome = (Progetto_piano_economicoHome) getHome(userContext, Progetto_piano_economicoBulk.class);
Optional<Progetto_rimodulazioneBulk> optProgettoRimodulazioneVariazione = isVariazioneCompetenza ? Optional.of(variazione).map(Pdg_variazioneBulk.class::cast).map(Pdg_variazioneBulk::getProgettoRimodulazione) : Optional.of(variazione).map(Var_stanz_resBulk.class::cast).map(Var_stanz_resBulk::getProgettoRimodulazione);
ProgettoBulk progettoRimodulato = null;
if (optProgettoRimodulazioneVariazione.isPresent()) {
Progetto_rimodulazioneHome prgHome = (Progetto_rimodulazioneHome) getHome(userContext, Progetto_rimodulazioneBulk.class);
Progetto_rimodulazioneBulk rimodulazione = prgHome.rebuildRimodulazione(userContext, optProgettoRimodulazioneVariazione.get());
progettoRimodulato = (ProgettoBulk) prgHome.getProgettoRimodulato(rimodulazione).clone();
}
if (isVariazioneCompetenza) {
for (java.util.Iterator dett = detHome.findDettagliEntrataVariazioneGestionale((Pdg_variazioneBulk) variazione).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();
if (Optional.ofNullable(progettoRimodulato).filter(prgRim -> !prgRim.getPg_progetto().equals(progetto.getPg_progetto())).isPresent())
messaggio.add("Progetto " + progetto.getCd_progetto() + ": " + "movimentazione non possibile in quanto la variazione è di tipo rimodulazione di altro progetto (" + progettoRimodulato.getCd_progetto() + ").");
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;
List<Progetto_piano_economicoBulk> pianoEconomicoList = null;
if (Optional.ofNullable(progettoRimodulato).isPresent())
pianoEconomicoList = progettoRimodulato.getAllDetailsProgettoPianoEconomico();
else
pianoEconomicoList = (List<Progetto_piano_economicoBulk>) ppeHome.findProgettoPianoEconomicoList(progetto.getPg_progetto());
// Il controllo puntuale sul piano economico deve partire se:
// 1) sul progetto esiste un piano economico per l'anno della variazione.
// 2) l'anno della variazione è gestita (<=annoFrom)
// 3) l'anno della variazione rientra nel periodo di validità del progetto, ovvero esiste almeno un dettaglio per l'anno della variazione stessa
// In caso contrario viene controllato solo l'importo complessivo del progetto
boolean ctrlFinanziamentoAnnuale = progetto.isPianoEconomicoRequired() && (Optional.ofNullable(progetto).flatMap(prg -> Optional.ofNullable(prg.getOtherField())).filter(of -> of.getAnnoInizio() <= esercizioVariazione).filter(of -> of.getAnnoFine() >= esercizioVariazione).isPresent() || Optional.ofNullable(pianoEconomicoList).orElse(new ArrayList<>()).stream().filter(el -> el.getEsercizio_piano().equals(esercizioVariazione)).findAny().isPresent());
if (ctrlFinanziamentoAnnuale) {
totFinanziato = pianoEconomicoList.stream().filter(el -> el.getEsercizio_piano().equals(esercizioVariazione)).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 = this.getStanziamentoAssestatoProgetto(userContext, progetto, Elemento_voceHome.GESTIONE_ENTRATE, (ctrlFinanziamentoAnnuale ? esercizioVariazione : null), null, null);
if (totFinanziato.compareTo(assestatoEtrPrg.add(ctrlDispPianoEco.getImpFinanziato())) < 0)
messaggio.add("Progetto " + progetto.getCd_progetto() + ": " + (ctrlFinanziamentoAnnuale ? "per l'esercizio " + esercizioVariazione + " " : "") + "l'assestato entrate " + (ctrlFinanziamentoAnnuale ? "" : "totale ") + "(" + new it.cnr.contab.util.EuroFormat().format(assestatoEtrPrg.add(ctrlDispPianoEco.getImpFinanziato())) + ") non può essere superiore alla quota finanziata (" + new it.cnr.contab.util.EuroFormat().format(totFinanziato) + ").");
if (progetto.getOtherField().getTipoFinanziamento().getFlAssociaContratto() && !progetto.getOtherField().getFlControlliDisabled()) {
// Recupero la lista dei contratti attivi collegati al progetto
ProgettoHome progettoHome = (ProgettoHome) getHome(userContext, ProgettoBulk.class);
java.util.Collection<ContrattoBulk> contrattiAssociati = progettoHome.findContratti(progetto.getPg_progetto());
BigDecimal impContrattiAttivi = contrattiAssociati.stream().filter(el -> el.isAttivo() || el.isAttivo_e_Passivo()).filter(el -> !el.getDt_stipula().after(((Pdg_variazioneBulk) variazione).getDt_chiusura())).map(ContrattoBulk::getIm_contratto_attivo).reduce((x, y) -> x.add(y)).orElse(BigDecimal.ZERO);
if (impContrattiAttivi.compareTo(assestatoEtrPrg.add(ctrlDispPianoEco.getImpFinanziato())) < 0)
messaggio.add("Progetto " + progetto.getCd_progetto() + ": " + (ctrlFinanziamentoAnnuale ? "per l'esercizio " + esercizioVariazione + " " : "") + "l'assestato entrate " + (ctrlFinanziamentoAnnuale ? "" : "totale ") + "(" + new it.cnr.contab.util.EuroFormat().format(assestatoEtrPrg.add(ctrlDispPianoEco.getImpFinanziato())) + ") non può essere superiore alla somma dei contratti associati al progetto (" + new it.cnr.contab.util.EuroFormat().format(impContrattiAttivi) + ") stipulati in data precedente rispetto alla data di chiusura della variazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(((Pdg_variazioneBulk) variazione).getDt_chiusura()) + ").");
}
}
}
List<CtrlDispPianoEco> listCtrlDispPianoEco = new ArrayList<CtrlDispPianoEco>();
if (isVariazioneCompetenza) {
for (java.util.Iterator dett = detHome.findDettagliSpesaVariazioneGestionale((Pdg_variazioneBulk) variazione).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();
if (Optional.ofNullable(progettoRimodulato).filter(prgRim -> !prgRim.getPg_progetto().equals(progetto.getPg_progetto())).isPresent())
messaggio.add("Progetto " + progetto.getCd_progetto() + ": " + "movimentazione non possibile in quanto la variazione è di tipo rimodulazione di altro progetto (" + progettoRimodulato.getCd_progetto() + ").");
// la variazione non è di tipo Maggiori Entrate/Spese nell'ambito del CDS
if (Optional.ofNullable(progetto.getOtherField().getAnnoFine()).filter(annoFine -> annoFine.compareTo(esercizioVariazione) >= 0).isPresent() || !Tipo_variazioneBulk.VARIAZIONE_POSITIVA_STESSO_ISTITUTO.equals(((Pdg_variazioneBulk) variazione).getTipologia())) {
boolean isNaturaReimpiego = Optional.ofNullable(cdNaturaReimpiego).map(el -> el.equals(latt.getCd_natura())).orElse(Boolean.FALSE);
BigDecimal imSpeseInterne = Utility.nvl(rigaVar.getIm_spese_gest_decentrata_int()).compareTo(BigDecimal.ZERO) != 0 ? rigaVar.getIm_spese_gest_decentrata_int() : Utility.nvl(rigaVar.getIm_spese_gest_accentrata_int());
BigDecimal imSpeseEsterne = Utility.nvl(rigaVar.getIm_spese_gest_decentrata_est()).compareTo(BigDecimal.ZERO) != 0 ? rigaVar.getIm_spese_gest_decentrata_est() : Utility.nvl(rigaVar.getIm_spese_gest_accentrata_est());
BigDecimal imVariazioneFin = BigDecimal.ZERO;
BigDecimal imVariazioneCofin = imSpeseInterne;
if (isNaturaReimpiego)
imVariazioneCofin = imVariazioneCofin.add(imSpeseEsterne);
else
imVariazioneFin = imSpeseEsterne;
List<Progetto_piano_economicoBulk> pianoEconomicoList = null;
if (Optional.ofNullable(progettoRimodulato).isPresent())
pianoEconomicoList = progettoRimodulato.getAllDetailsProgettoPianoEconomico().stream().filter(ppe -> {
return ppe.getVociBilancioAssociate().stream().filter(ppeVoc -> ppeVoc.getEsercizio_voce().equals(rigaVar.getElemento_voce().getEsercizio())).filter(ppeVoc -> ppeVoc.getTi_appartenenza().equals(rigaVar.getElemento_voce().getTi_appartenenza())).filter(ppeVoc -> ppeVoc.getTi_gestione().equals(rigaVar.getElemento_voce().getTi_gestione())).filter(ppeVoc -> ppeVoc.getCd_elemento_voce().equals(rigaVar.getElemento_voce().getCd_elemento_voce())).findFirst().isPresent();
}).collect(Collectors.toList());
else
pianoEconomicoList = (List<Progetto_piano_economicoBulk>) ppeHome.findProgettoPianoEconomicoList(esercizioVariazione, progetto.getPg_progetto(), rigaVar.getElemento_voce());
// Il controllo puntuale sul piano economico deve partire se:
// 1) sul progetto esiste un piano economico per l'anno della variazione.
// 2) l'anno della variazione è gestita (<=annoFrom)
// 3) l'anno della variazione rientra nel periodo di validità del progetto, ovvero esiste almeno un dettaglio per l'anno della variazione stessa
// In caso contrario viene controllato solo l'importo complessivo del progetto
boolean ctrlFinanziamentoAnnuale = progetto.isPianoEconomicoRequired() && (Optional.ofNullable(progetto).flatMap(prg -> Optional.ofNullable(prg.getOtherField())).filter(of -> of.getAnnoInizio() <= esercizioVariazione).filter(of -> of.getAnnoFine() >= esercizioVariazione).isPresent() || Optional.ofNullable(pianoEconomicoList).orElse(new ArrayList<>()).stream().filter(el -> el.getEsercizio_piano().equals(esercizioVariazione)).findAny().isPresent());
if (ctrlFinanziamentoAnnuale) {
if (pianoEconomicoList == null || pianoEconomicoList.isEmpty()) {
// messaggio che non esce per rimodulazione progetto in quanto controllo effettuato in fase di approvaziomne ultima variazione
if (!Optional.ofNullable(progettoRimodulato).isPresent())
messaggio.add("Non risulta essere stato imputato alcun valore nel piano economico del progetto " + progetto.getCd_progetto() + " per la Voce " + rigaVar.getCd_elemento_voce() + ".");
} else if (pianoEconomicoList.size() > 1)
messaggio.add("La Voce " + rigaVar.getCd_elemento_voce() + " risulta associata a più voci di piano economico del progetto " + progetto.getCd_progetto() + ".");
else {
Progetto_piano_economicoBulk progettoPianoEconomico = pianoEconomicoList.get(0);
if (progettoPianoEconomico.getFl_ctrl_disp() && (progettoPianoEconomico.getEsercizio_piano().equals(0) || progettoPianoEconomico.getEsercizio_piano().equals(rigaVar.getEsercizio()))) {
// 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 -> el.getProgettoPianoEconomico().getPg_progetto().equals(progetto.getPg_progetto())).filter(el -> el.getProgettoPianoEconomico().getCd_unita_organizzativa().equals(progettoPianoEconomico.getCd_unita_organizzativa())).filter(el -> el.getProgettoPianoEconomico().getCd_voce_piano().equals(progettoPianoEconomico.getCd_voce_piano())).findFirst().orElse(new CtrlDispPianoEco(progetto, progettoPianoEconomico));
dispPianoEco.setImpFinanziato(dispPianoEco.getImpFinanziato().add(imVariazioneFin));
dispPianoEco.setImpCofinanziato(dispPianoEco.getImpCofinanziato().add(imVariazioneCofin));
if (!listCtrlDispPianoEco.contains(dispPianoEco))
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);
}
}
}
} else {
for (java.util.Iterator dett = varResHome.findAllVariazioniRiga((Var_stanz_resBulk) variazione).iterator(); dett.hasNext(); ) {
Var_stanz_res_rigaBulk rigaVar = (Var_stanz_res_rigaBulk) dett.next();
WorkpackageBulk latt = ((WorkpackageHome) getHome(userContext, WorkpackageBulk.class)).searchGAECompleta(userContext, CNRUserContext.getEsercizio(userContext), rigaVar.getLinea_di_attivita().getCd_centro_responsabilita(), rigaVar.getLinea_di_attivita().getCd_linea_attivita());
ProgettoBulk progetto = latt.getProgetto();
if (Optional.ofNullable(progettoRimodulato).filter(prgRim -> !prgRim.getPg_progetto().equals(progetto.getPg_progetto())).isPresent())
messaggio.add("Progetto " + progetto.getCd_progetto() + ": " + "movimentazione non possibile in quanto la variazione è di tipo rimodulazione di altro progetto (" + progettoRimodulato.getCd_progetto() + ").");
boolean isNaturaReimpiego = Optional.ofNullable(cdNaturaReimpiego).map(el -> el.equals(latt.getCd_natura())).orElse(Boolean.FALSE);
BigDecimal imVariazioneFin = BigDecimal.ZERO;
BigDecimal imVariazioneCofin = BigDecimal.ZERO;
if (Optional.ofNullable(latt.getNatura()).map(NaturaBulk::isFonteInterna).orElse(Boolean.FALSE) || isNaturaReimpiego)
imVariazioneCofin = Utility.nvl(rigaVar.getIm_variazione());
else if (Optional.ofNullable(latt.getNatura()).map(NaturaBulk::isFonteEsterna).orElse(Boolean.FALSE))
imVariazioneFin = Utility.nvl(rigaVar.getIm_variazione());
List<Progetto_piano_economicoBulk> pianoEconomicoList = null;
if (Optional.ofNullable(progettoRimodulato).isPresent())
pianoEconomicoList = progettoRimodulato.getAllDetailsProgettoPianoEconomico().stream().filter(ppe -> {
return ppe.getVociBilancioAssociate().stream().filter(ppeVoc -> ppeVoc.getEsercizio_voce().equals(rigaVar.getEsercizio_res())).filter(ppeVoc -> ppeVoc.getTi_appartenenza().equals(rigaVar.getElemento_voce().getTi_appartenenza())).filter(ppeVoc -> ppeVoc.getTi_gestione().equals(rigaVar.getElemento_voce().getTi_gestione())).filter(ppeVoc -> ppeVoc.getCd_elemento_voce().equals(rigaVar.getElemento_voce().getCd_elemento_voce())).findFirst().isPresent();
}).collect(Collectors.toList());
else
pianoEconomicoList = (List<Progetto_piano_economicoBulk>) ppeHome.findProgettoPianoEconomicoList(esercizioVariazione, progetto.getPg_progetto(), rigaVar.getElemento_voce());
// Il controllo puntuale sul piano economico deve partire se:
// 1) sul progetto esiste un piano economico per l'anno della variazione.
// 2) l'anno della variazione è gestita (<=annoFrom)
// 3) l'anno della variazione rientra nel periodo di validità del progetto, ovvero esiste almeno un dettaglio per l'anno della variazione stessa
// In caso contrario viene controllato solo l'importo complessivo del progetto
boolean ctrlFinanziamentoAnnuale = progetto.isPianoEconomicoRequired() && (Optional.ofNullable(progetto).flatMap(prg -> Optional.ofNullable(prg.getOtherField())).filter(of -> of.getAnnoInizio() <= esercizioVariazione).filter(of -> of.getAnnoFine() >= esercizioVariazione).isPresent() || Optional.ofNullable(pianoEconomicoList).orElse(new ArrayList<>()).stream().filter(el -> el.getEsercizio_piano().equals(esercizioVariazione)).findAny().isPresent());
if (ctrlFinanziamentoAnnuale) {
if (pianoEconomicoList == null || pianoEconomicoList.isEmpty()) {
// messaggio che non esce per rimodulazione progetto in quanto controllo effettuato in fase di approvaziomne ultima variazione
if (!Optional.ofNullable(progettoRimodulato).isPresent())
messaggio.add("Non risulta essere stato imputato alcun valore nel piano economico del progetto " + progetto.getCd_progetto() + " per la Voce " + rigaVar.getCd_elemento_voce() + ".");
} else if (pianoEconomicoList.size() > 1)
messaggio.add("La Voce " + rigaVar.getCd_elemento_voce() + " risulta associata a più voci di piano economico del progetto " + progetto.getCd_progetto() + ".");
else {
Progetto_piano_economicoBulk progettoPianoEconomico = pianoEconomicoList.get(0);
if (progettoPianoEconomico.getFl_ctrl_disp() && (progettoPianoEconomico.getEsercizio_piano().equals(0) || progettoPianoEconomico.getEsercizio_piano().equals(esercizioVariazione))) {
// 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 -> el.getProgettoPianoEconomico().getPg_progetto().equals(progetto.getPg_progetto())).filter(el -> el.getProgettoPianoEconomico().getCd_unita_organizzativa().equals(progettoPianoEconomico.getCd_unita_organizzativa())).filter(el -> el.getProgettoPianoEconomico().getCd_voce_piano().equals(progettoPianoEconomico.getCd_voce_piano())).findFirst().orElse(new CtrlDispPianoEco(progetto, progettoPianoEconomico));
dispPianoEco.setImpFinanziato(dispPianoEco.getImpFinanziato().add(imVariazioneFin));
dispPianoEco.setImpCofinanziato(dispPianoEco.getImpCofinanziato().add(imVariazioneCofin));
if (!listCtrlDispPianoEco.contains(dispPianoEco))
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);
}
}
}
for (CtrlDispPianoEco ctrlDispPianoEco : listCtrlDispPianoEco) {
Progetto_piano_economicoBulk ppe = ctrlDispPianoEco.getProgettoPianoEconomico();
if (Optional.ofNullable(ppe).isPresent()) {
try {
if (locked) {
Progetto_piano_economicoBulk bulkToFind = new Progetto_piano_economicoBulk();
bulkToFind.setVoce_piano_economico(ppe.getVoce_piano_economico());
bulkToFind.setPg_progetto(ppe.getPg_progetto());
bulkToFind.setEsercizio_piano(ppe.getEsercizio_piano());
try {
bulkToFind = (Progetto_piano_economicoBulk) ppeHome.findAndLock(bulkToFind);
} catch (ObjectNotFoundException ex) {
}
}
if (Optional.ofNullable(progettoRimodulato).isPresent()) {
// Controllo quota FINANZIATA
BigDecimal imRimodulatoFin = progettoRimodulato.getAllDetailsProgettoPianoEconomico().stream().filter(ppeRim -> ppeRim.getEsercizio_piano().equals(ppe.getEsercizio_piano())).filter(ppeRim -> ppeRim.getCd_voce_piano().equals(ppe.getCd_voce_piano())).filter(ppeRim -> ppeRim.getCd_unita_organizzativa().equals(ppe.getCd_unita_organizzativa())).map(Progetto_piano_economicoBulk::getIm_spesa_finanziato).reduce((x, y) -> x.add(y)).orElse(BigDecimal.ZERO);
BigDecimal imStanziatoFin = progettoRimodulato.getAllDetailsProgettoPianoEconomico().stream().filter(ppeRim -> ppeRim.getEsercizio_piano().equals(ppe.getEsercizio_piano())).filter(ppeRim -> ppeRim.getCd_voce_piano().equals(ppe.getCd_voce_piano())).filter(ppeRim -> ppeRim.getCd_unita_organizzativa().equals(ppe.getCd_unita_organizzativa())).filter(ppeRim -> Optional.ofNullable(ppeRim.getVociBilancioAssociate()).isPresent()).flatMap(ppeRim -> ppeRim.getVociBilancioAssociate().stream()).filter(ppeRim -> Optional.ofNullable(ppeRim.getSaldoSpesa()).isPresent()).map(Ass_progetto_piaeco_voceBulk::getSaldoSpesa).map(el -> el.getAssestatoFinanziamento()).reduce((x, y) -> x.add(y)).orElse(BigDecimal.ZERO);
// lo stanziato a quadrare con il rimodulato
if (imStanziatoFin.compareTo(imRimodulatoFin) > 0) {
if (ctrlDispPianoEco.getImpFinanziato().compareTo(BigDecimal.ZERO) > 0)
messaggio.add("La variazione della quota finanziata stanziata del piano economico " + ppe.getCd_voce_piano() + " (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpFinanziato()) + ") risulta essere positiva laddove la variazione richiesta dalla rimodulazione del progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + " deve essere solo negativa.");
// Es. se imRimodulato=1000 e imStanziato=2000 la variazione negativa non deve essere superiore a -1000
if (imRimodulatoFin.subtract(imStanziatoFin).subtract(ctrlDispPianoEco.getImpFinanziato()).compareTo(BigDecimal.ZERO) > 0)
messaggio.add("La variazione della quota finanziata stanziata del piano economico " + ppe.getCd_voce_piano() + " (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpFinanziato()) + ") risulta essere superiore alla variazione richiesta dalla rimodulazione del progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + " (" + new it.cnr.contab.util.EuroFormat().format(imRimodulatoFin.subtract(imStanziatoFin)) + ").");
} else {
// La variazione non deve superare la disponibilità residua data dalla differenza tra imRimodulato e imStanziato
if (imRimodulatoFin.subtract(imStanziatoFin).subtract(ctrlDispPianoEco.getImpFinanziato()).compareTo(BigDecimal.ZERO) < 0)
messaggio.add("La disponibilità rimodulata della quota finanziata del piano economico " + ppe.getCd_voce_piano() + " associato al progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + (ppe.getEsercizio_piano().equals(0) ? "" : " per l'esercizio " + ppe.getEsercizio_piano()) + " (" + new it.cnr.contab.util.EuroFormat().format(imRimodulatoFin.subtract(imStanziatoFin)) + ")" + " non è sufficiente a coprire la variazione (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpFinanziato()) + ").");
}
// Controllo quota COFINANZIATA
BigDecimal imRimodulatoCofin = progettoRimodulato.getAllDetailsProgettoPianoEconomico().stream().filter(ppeRim -> ppeRim.getEsercizio_piano().equals(ppe.getEsercizio_piano())).filter(ppeRim -> ppeRim.getCd_voce_piano().equals(ppe.getCd_voce_piano())).filter(ppeRim -> ppeRim.getCd_unita_organizzativa().equals(ppe.getCd_unita_organizzativa())).map(Progetto_piano_economicoBulk::getIm_spesa_cofinanziato).reduce((x, y) -> x.add(y)).orElse(BigDecimal.ZERO);
BigDecimal imStanziatoCofin = progettoRimodulato.getAllDetailsProgettoPianoEconomico().stream().filter(ppeRim -> ppeRim.getEsercizio_piano().equals(ppe.getEsercizio_piano())).filter(ppeRim -> ppeRim.getCd_voce_piano().equals(ppe.getCd_voce_piano())).filter(ppeRim -> ppeRim.getCd_unita_organizzativa().equals(ppe.getCd_unita_organizzativa())).filter(ppeRim -> Optional.ofNullable(ppeRim.getVociBilancioAssociate()).isPresent()).flatMap(ppeRim -> ppeRim.getVociBilancioAssociate().stream()).filter(ppeRim -> Optional.ofNullable(ppeRim.getSaldoSpesa()).isPresent()).map(Ass_progetto_piaeco_voceBulk::getSaldoSpesa).map(el -> el.getAssestatoCofinanziamento()).reduce((x, y) -> x.add(y)).orElse(BigDecimal.ZERO);
// Se l'importo stanziato è superiore a quello rimodulato, l'importo della variazione deve essere negativa al fine di riportare lo stanziato a quadrare con il rimodulato
if (imStanziatoCofin.compareTo(imRimodulatoCofin) > 0) {
if (ctrlDispPianoEco.getImpCofinanziato().compareTo(BigDecimal.ZERO) > 0)
messaggio.add("La variazione della quota cofinanziata stanziata del piano economico " + ppe.getCd_voce_piano() + " (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpCofinanziato()) + ") risulta essere positiva laddove la variazione richiesta dalla rimodulazione del progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + " deve essere solo negativa.");
// Es. se imRimodulato=1000 e imStanziato=2000 la variazione negativa non deve essere superiore a -1000
if (imRimodulatoCofin.subtract(imStanziatoCofin).subtract(ctrlDispPianoEco.getImpCofinanziato()).compareTo(BigDecimal.ZERO) > 0)
messaggio.add("La variazione della quota cofinanziata stanziata del piano economico " + ppe.getCd_voce_piano() + " (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpCofinanziato()) + ") risulta essere superiore alla variazione richiesta dalla rimodulazione del progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + " (" + new it.cnr.contab.util.EuroFormat().format(imRimodulatoCofin.subtract(imStanziatoCofin)) + ").");
} else {
// La variazione non deve superare la disponibilità residua data dalla differenza tra imRimodulato e imStanzato
if (imRimodulatoCofin.subtract(imStanziatoCofin).subtract(ctrlDispPianoEco.getImpCofinanziato()).compareTo(BigDecimal.ZERO) < 0)
messaggio.add("La disponibilità rimodulata della quota cofinanziata del piano economico " + ppe.getCd_voce_piano() + " associato al progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + (ppe.getEsercizio_piano().equals(0) ? "" : " per l'esercizio " + ppe.getEsercizio_piano()) + " (" + new it.cnr.contab.util.EuroFormat().format(imRimodulatoCofin.subtract(imStanziatoCofin)) + ")" + " non è sufficiente a coprire la variazione (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpCofinanziato()) + ").");
}
} else {
V_saldi_piano_econom_progettoBulk saldo = ((V_saldi_piano_econom_progettoHome) getHome(userContext, V_saldi_piano_econom_progettoBulk.class)).cercaSaldoPianoEconomico(ppe, "S");
BigDecimal dispResiduaFin = Optional.ofNullable(saldo).map(V_saldi_piano_econom_progettoBulk::getDispResiduaFinanziamento).orElse(BigDecimal.ZERO).subtract(ctrlDispPianoEco.getImpFinanziato());
if (dispResiduaFin.compareTo(BigDecimal.ZERO) < 0)
messaggio.add("La disponibilità quota finanziata del piano economico " + ppe.getCd_voce_piano() + " associato al progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + (ppe.getEsercizio_piano().equals(0) ? "" : " per l'esercizio " + ppe.getEsercizio_piano()) + " (" + new it.cnr.contab.util.EuroFormat().format(Optional.ofNullable(saldo).map(V_saldi_piano_econom_progettoBulk::getDispResiduaFinanziamento).orElse(BigDecimal.ZERO)) + ")" + " non è sufficiente a coprire la variazione (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpFinanziato()) + ").");
BigDecimal dispResiduaCofin = Optional.ofNullable(saldo).map(V_saldi_piano_econom_progettoBulk::getDispResiduaCofinanziamento).orElse(BigDecimal.ZERO).subtract(ctrlDispPianoEco.getImpCofinanziato());
if (dispResiduaCofin.compareTo(BigDecimal.ZERO) < 0)
messaggio.add("La disponibilità quota cofinanziata del piano economico " + ppe.getCd_voce_piano() + " associato al progetto " + ctrlDispPianoEco.getProgetto().getCd_progetto() + (ppe.getEsercizio_piano().equals(0) ? "" : " per l'esercizio " + ppe.getEsercizio_piano()) + " (" + new it.cnr.contab.util.EuroFormat().format(saldo.getDispResiduaCofinanziamento()) + ")" + " non è sufficiente a coprire la variazione (" + new it.cnr.contab.util.EuroFormat().format(ctrlDispPianoEco.getImpCofinanziato()) + ").");
}
} catch (Exception ex) {
throw new RuntimeException(ex);
}
} else {
ProgettoBulk prg = ctrlDispPianoEco.getProgetto();
{
BigDecimal totFinanziato = BigDecimal.ZERO;
if (Optional.ofNullable(progettoRimodulato).isPresent())
totFinanziato = progettoRimodulato.getImFinanziato();
else
totFinanziato = prg.getImFinanziato();
BigDecimal assestatoSpePrgFes = this.getStanziamentoAssestatoProgetto(userContext, prg, Elemento_voceHome.GESTIONE_SPESE, null, null, Progetto_other_fieldHome.TI_IMPORTO_FINANZIATO);
if (totFinanziato.compareTo(assestatoSpePrgFes.add(ctrlDispPianoEco.getImpFinanziato())) < 0)
messaggio.add("Progetto " + prg.getCd_progetto() + ": l'assestato totale spese 'fonti esterne' (" + new it.cnr.contab.util.EuroFormat().format(assestatoSpePrgFes.add(ctrlDispPianoEco.getImpFinanziato())) + ") non può essere superiore alla quota finanziata (" + new it.cnr.contab.util.EuroFormat().format(totFinanziato) + ").");
}
{
BigDecimal totCofinanziato = BigDecimal.ZERO;
if (Optional.ofNullable(progettoRimodulato).isPresent())
totCofinanziato = progettoRimodulato.getImCofinanziato();
else
totCofinanziato = prg.getImCofinanziato();
BigDecimal assestatoSpePrgReimpiego = this.getStanziamentoAssestatoProgetto(userContext, prg, Elemento_voceHome.GESTIONE_SPESE, null, null, Progetto_other_fieldHome.TI_IMPORTO_COFINANZIATO);
if (totCofinanziato.compareTo(assestatoSpePrgReimpiego.add(ctrlDispPianoEco.getImpCofinanziato())) < 0)
messaggio.add("Progetto " + prg.getCd_progetto() + ": l'assestato totale spese 'fonti interne' e 'natura reimpiego' (" + new it.cnr.contab.util.EuroFormat().format(assestatoSpePrgReimpiego.add(ctrlDispPianoEco.getImpCofinanziato())) + ") non può essere superiore alla quota cofinanziata (" + new it.cnr.contab.util.EuroFormat().format(totCofinanziato) + ").");
}
}
}
}
} catch (PersistencyException e) {
throw new ComponentException(e);
} catch (RemoteException e) {
throw new ComponentException(e);
} catch (EJBException e) {
throw new ComponentException(e);
}
return messaggio.toString();
}
use of it.cnr.contab.progettiric00.core.bulk.Progetto_rimodulazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class CRUDPdgVariazioneGestionaleComponent method approva.
public Pdg_variazioneBulk approva(UserContext userContext, Pdg_variazioneBulk varPdg) throws ComponentException {
try {
varPdg.setStato(Pdg_variazioneBulk.STATO_APPROVATA);
varPdg.setDt_approvazione(DateUtils.dataContabile(EJBCommonServices.getServerDate(), CNRUserContext.getEsercizio(userContext)));
varPdg.setToBeUpdated();
varPdg = (Pdg_variazioneBulk) super.modificaConBulk(userContext, varPdg);
gestioneVistoDipartimenti(userContext, varPdg);
Pdg_variazioneHome testataHome = (Pdg_variazioneHome) getHome(userContext, Pdg_variazioneBulk.class);
ribaltaCostiPdGArea(userContext, varPdg);
/*
* Ricarico il BULK con i dati presenti sul DB che, nel frattempo, potrebbero essere
* aumentati a causa di procedure DB lanciate da comandi precedenti (es. ribaltaCostiPdGArea)
*/
varPdg = (Pdg_variazioneBulk) testataHome.findByPrimaryKey(varPdg);
varPdg.setAssociazioneCDR(new it.cnr.jada.bulk.BulkList(testataHome.findAssociazioneCDR(varPdg)));
for (Iterator righe = testataHome.findDettagliVariazioneGestionale(varPdg).iterator(); righe.hasNext(); ) {
Pdg_variazione_riga_gestBulk varRiga = (Pdg_variazione_riga_gestBulk) righe.next();
if (!varRiga.isDettaglioScaricato())
aggiornaSaldiCdrLinea(userContext, varRiga);
}
if (varPdg.isVariazioneRimodulazioneProgetto()) {
try {
Progetto_rimodulazioneHome prgHome = (Progetto_rimodulazioneHome) getHome(userContext, Progetto_rimodulazioneBulk.class);
Progetto_rimodulazioneBulk rimodulazione = prgHome.rebuildRimodulazione(userContext, varPdg.getProgettoRimodulazione());
prgHome.validaPassaggioStatoApprovato(userContext, rimodulazione, varPdg);
Utility.createRimodulaProgettoRicercaComponentSession().approva(userContext, rimodulazione, varPdg);
} catch (RimodulazioneNonApprovataException e) {
log.info("Approvazione Variazione di Rimodulazione " + varPdg.getEsercizio() + "\\" + varPdg.getPg_variazione_pdg() + " che non genera " + "approvazione della rimodulazione associata.");
} catch (ComponentException e) {
throw new ApplicationMessageFormatException("Anomalia in fase di approvazione Rimodulazione Progetto.<br>{0}", Optional.ofNullable(e.getDetail()).map(el -> el.getMessage()).orElse(e.getMessage()));
}
}
/*
* Spedisco i messaggi di avvertimento a tutti i CDR interessati alla Variazione
*/
UtenteHome utenteHome = (UtenteHome) getHome(userContext, UtenteBulk.class);
if (!varPdg.isVariazioneInternaIstituto()) {
for (java.util.Iterator j = varPdg.getAssociazioneCDR().iterator(); j.hasNext(); ) {
Ass_pdg_variazione_cdrBulk ass_var = (Ass_pdg_variazione_cdrBulk) j.next();
for (java.util.Iterator i = utenteHome.findUtenteByCDRIncludeFirstLevel(ass_var.getCd_centro_responsabilita()).iterator(); i.hasNext(); ) {
UtenteBulk utente = (UtenteBulk) i.next();
MessaggioBulk messaggio = generaMessaggio(userContext, utente, varPdg, Pdg_variazioneBulk.STATO_APPROVATA);
super.creaConBulk(userContext, messaggio);
}
}
}
generaVariazioneBilancio(userContext, varPdg);
if (!varPdg.isVariazioneInternaIstituto()) {
String soggetto = "E' stata approvata la Variazione al Pdg n° " + varPdg.getPg_variazione_pdg();
generaEMAIL(userContext, varPdg, soggetto, soggetto + " del " + varPdg.getEsercizio() + "<BR>", null, "APP");
}
} catch (IntrospectionException | PersistencyException | EJBException | RemoteException e) {
throw new ComponentException(e);
}
return varPdg;
}
use of it.cnr.contab.progettiric00.core.bulk.Progetto_rimodulazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class RimodulaProgettoRicercaComponent method modificaConBulk.
@Override
public OggettoBulk modificaConBulk(UserContext usercontext, OggettoBulk oggettobulk) throws ComponentException {
// Individuo le righe di variazione da creare/aggiornare
Progetto_rimodulazioneBulk progettoRimodulazione = (Progetto_rimodulazioneBulk) oggettobulk;
progettoRimodulazione.setImVarFinanziato(progettoRimodulazione.getImFinanziatoRimodulato().subtract(progettoRimodulazione.getProgetto().getImFinanziato()));
progettoRimodulazione.setImVarCofinanziato(progettoRimodulazione.getImCofinanziatoRimodulato().subtract(progettoRimodulazione.getProgetto().getImCofinanziato()));
if (progettoRimodulazione.isRimodulatoDtInizio()) {
progettoRimodulazione.setDtInizioOld(progettoRimodulazione.getProgetto().getOtherField().getDtInizio());
progettoRimodulazione.setDtInizio(progettoRimodulazione.getDtInizioRimodulato());
} else {
progettoRimodulazione.setDtInizioOld(null);
progettoRimodulazione.setDtInizio(null);
}
if (progettoRimodulazione.isRimodulatoDtFine()) {
progettoRimodulazione.setDtFineOld(progettoRimodulazione.getProgetto().getOtherField().getDtFine());
progettoRimodulazione.setDtFine(progettoRimodulazione.getDtFineRimodulato());
} else {
progettoRimodulazione.setDtFineOld(null);
progettoRimodulazione.setDtFine(null);
}
if (progettoRimodulazione.isRimodulatoDtProroga()) {
progettoRimodulazione.setDtProrogaOld(progettoRimodulazione.getProgetto().getOtherField().getDtProroga());
progettoRimodulazione.setDtProroga(progettoRimodulazione.getDtProrogaRimodulato());
} else {
progettoRimodulazione.setDtProrogaOld(null);
progettoRimodulazione.setDtProroga(null);
}
Progetto_rimodulazioneHome rimodHome = (Progetto_rimodulazioneHome) getHome(usercontext, Progetto_rimodulazioneBulk.class);
List<Progetto_rimodulazione_ppeBulk> listRim = rimodHome.getDettagliRimodulazioneAggiornato(usercontext, progettoRimodulazione);
// Aggiorno o aggiungo i dettagli presenti
listRim.stream().forEach(newDett -> {
Progetto_rimodulazione_ppeBulk detail = progettoRimodulazione.getDettagliRimodulazione().stream().filter(dett -> Optional.ofNullable(dett.getCd_unita_organizzativa()).orElse("").equals(Optional.ofNullable(newDett.getCd_unita_organizzativa()).orElse(""))).filter(dett -> Optional.ofNullable(dett.getCd_voce_piano()).orElse("").equals(Optional.ofNullable(newDett.getCd_voce_piano()).orElse(""))).filter(dett -> Optional.ofNullable(dett.getEsercizio_piano()).orElse(0).equals(Optional.ofNullable(newDett.getEsercizio_piano()).orElse(0))).findFirst().orElseGet(() -> {
newDett.setToBeCreated();
progettoRimodulazione.addToDettagliRimodulazione(newDett);
return newDett;
});
detail.setImVarEntrata(BigDecimal.ZERO);
detail.setImVarSpesaFinanziato(newDett.getImVarSpesaFinanziato());
detail.setImVarSpesaCofinanziato(newDett.getImVarSpesaCofinanziato());
if (progettoRimodulazione.isStatoProvvisorio()) {
detail.setImStoassSpesaFinanziato(newDett.getImStoassSpesaFinanziato());
detail.setImStoassSpesaCofinanziato(newDett.getImStoassSpesaCofinanziato());
}
detail.setToBeUpdated();
});
// Rimuovo i dettagli non presenti nella lista
List<Progetto_rimodulazione_ppeBulk> bulkToDelete = progettoRimodulazione.getDettagliRimodulazione().stream().filter(rim -> !listRim.stream().filter(newDett -> newDett.getCd_unita_organizzativa().equals(rim.getCd_unita_organizzativa())).filter(newDett -> newDett.getCd_voce_piano().equals(rim.getCd_voce_piano())).filter(newDett -> newDett.getEsercizio_piano().equals(rim.getEsercizio_piano())).findFirst().isPresent()).collect(Collectors.toList());
bulkToDelete.stream().forEach(el -> {
el.setToBeDeleted();
progettoRimodulazione.removeFromDettagliRimodulazione(progettoRimodulazione.getDettagliRimodulazione().indexOf(el));
});
List<Progetto_rimodulazione_voceBulk> listRimVoce = rimodHome.getDettagliRimodulazioneVoceAggiornato(usercontext, progettoRimodulazione);
// Aggiorno o aggiungo le voci presenti
listRimVoce.stream().forEach(newDettVoce -> {
Progetto_rimodulazione_voceBulk detail = progettoRimodulazione.getDettagliVoceRimodulazione().stream().filter(el -> el.getCd_unita_organizzativa().equals(newDettVoce.getCd_unita_organizzativa())).filter(el -> el.getCd_voce_piano().equals(newDettVoce.getCd_voce_piano())).filter(el -> el.getEsercizio_piano().equals(newDettVoce.getEsercizio_piano())).filter(el -> el.getEsercizio_voce().equals(newDettVoce.getEsercizio_voce())).filter(el -> el.getTi_appartenenza().equals(newDettVoce.getTi_appartenenza())).filter(el -> el.getTi_gestione().equals(newDettVoce.getTi_gestione())).filter(el -> el.getCd_elemento_voce().equals(newDettVoce.getCd_elemento_voce())).findFirst().orElseGet(() -> {
newDettVoce.setPg_variazione(progettoRimodulazione.getDettagliVoceRimodulazione().stream().mapToInt(Progetto_rimodulazione_voceBulk::getPg_variazione).max().orElse(0) + 1);
newDettVoce.setToBeCreated();
progettoRimodulazione.addToDettagliVoceRimodulazione(newDettVoce);
return newDettVoce;
});
detail.setTi_operazione(newDettVoce.getTi_operazione());
detail.setImVarSpesaFinanziato(newDettVoce.getImVarSpesaFinanziato());
detail.setImVarSpesaCofinanziato(newDettVoce.getImVarSpesaCofinanziato());
detail.setToBeUpdated();
});
// Rimuovo i dettagli voce non presenti nella lista
List<Progetto_rimodulazione_voceBulk> bulkVoceToDelete = progettoRimodulazione.getDettagliVoceRimodulazione().stream().filter(rim -> !listRimVoce.stream().filter(rimVoce -> rimVoce.getCd_unita_organizzativa().equals(rim.getCd_unita_organizzativa())).filter(rimVoce -> rimVoce.getCd_voce_piano().equals(rim.getCd_voce_piano())).filter(rimVoce -> rimVoce.getEsercizio_piano().equals(rim.getEsercizio_piano())).filter(rimVoce -> rimVoce.getEsercizio_voce().equals(rim.getEsercizio_voce())).filter(rimVoce -> rimVoce.getTi_appartenenza().equals(rim.getTi_appartenenza())).filter(rimVoce -> rimVoce.getTi_gestione().equals(rim.getTi_gestione())).filter(rimVoce -> rimVoce.getCd_elemento_voce().equals(rim.getCd_elemento_voce())).findFirst().isPresent()).collect(Collectors.toList());
bulkVoceToDelete.stream().forEach(el -> {
el.setToBeDeleted();
progettoRimodulazione.removeFromDettagliVoceRimodulazione(progettoRimodulazione.getDettagliVoceRimodulazione().indexOf(el));
});
if (progettoRimodulazione.getDettagliRimodulazione().isEmpty() && progettoRimodulazione.getDettagliVoceRimodulazione().isEmpty() && !progettoRimodulazione.isRimodulatoImportoFinanziato() && !progettoRimodulazione.isRimodulatoImportoCofinanziato() && (!progettoRimodulazione.getProgetto().isDatePianoEconomicoRequired() || (!progettoRimodulazione.isRimodulatoDtInizio() && !progettoRimodulazione.isRimodulatoDtFine() && !progettoRimodulazione.isRimodulatoDtProroga())))
throw new ApplicationException("Salvataggio non consentito. Non risulta alcuna variazione sul piano economico.");
return super.modificaConBulk(usercontext, oggettobulk);
}
use of it.cnr.contab.progettiric00.core.bulk.Progetto_rimodulazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class RimodulaProgettoRicercaComponent method validaCreaModificaConBulk.
@Override
protected void validaCreaModificaConBulk(UserContext usercontext, OggettoBulk oggettobulk) throws ComponentException {
super.validaCreaModificaConBulk(usercontext, oggettobulk);
Optional<Progetto_rimodulazioneBulk> optProgettoRimodulato = Optional.ofNullable(oggettobulk).filter(Progetto_rimodulazioneBulk.class::isInstance).map(Progetto_rimodulazioneBulk.class::cast);
Optional<ProgettoBulk> optProgetto = optProgettoRimodulato.map(Progetto_rimodulazioneBulk::getProgetto);
if (optProgetto.get().isPianoEconomicoRequired() && !optProgettoRimodulato.get().isStatoProvvisorio()) {
if (!optProgettoRimodulato.map(Progetto_rimodulazioneBulk::getImTotaleRimodulato).filter(el -> el.compareTo(BigDecimal.ZERO) > 0).isPresent())
throw new ApplicationException("Operazione non possibile! Indicare almeno un importo rimodulato positivo tra quello finanziato e cofinanziato!");
if (!optProgettoRimodulato.map(Progetto_rimodulazioneBulk::getImFinanziatoRimodulatoDaRipartire).filter(el -> el.compareTo(BigDecimal.ZERO) == 0).isPresent())
throw new ApplicationException("Operazione non possibile! E' obbligatorio ripartire correttamente nel piano economico tutto l'importo finanziato rimodulato del progetto!");
if (!optProgettoRimodulato.map(Progetto_rimodulazioneBulk::getImCofinanziatoRimodulatoDaRipartire).filter(el -> el.compareTo(BigDecimal.ZERO) == 0).isPresent())
throw new ApplicationException("Operazione non possibile! E' obbligatorio ripartire correttamente nel piano economico tutto l'importo cofinanziato rimodulato del progetto!");
}
}
use of it.cnr.contab.progettiric00.core.bulk.Progetto_rimodulazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class RimodulaProgettoRicercaComponent method riportaProvvisorio.
public Progetto_rimodulazioneBulk riportaProvvisorio(UserContext userContext, Progetto_rimodulazioneBulk rimodulazione) throws ComponentException {
Optional.of(rimodulazione).filter(el -> el.isStatoDefinitivo()).orElseThrow(() -> new ApplicationException("Operazione non possibile! Lo stato provvisorio può essere riassegnato solo a rimodulazioni in stato definitivo!"));
rimodulazione.setStato(StatoProgettoRimodulazione.STATO_PROVVISORIO.value());
rimodulazione.setDtStatoDefinitivo(null);
rimodulazione.setToBeUpdated();
rimodulazione = (Progetto_rimodulazioneBulk) super.modificaConBulk(userContext, rimodulazione);
rimodulazione.getArchivioAllegati().stream().filter(AllegatoProgettoRimodulazioneBulk.class::isInstance).map(AllegatoProgettoRimodulazioneBulk.class::cast).filter(AllegatoProgettoRimodulazioneBulk::isStampaAutomatica).forEach(el -> {
SpringUtil.getBean("storeService", StoreService.class).delete(el.getStorageKey());
});
return rimodulazione;
}
Aggregations