Search in sources :

Example 21 with ComponentException

use of it.cnr.jada.comp.ComponentException 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();
}
Also used : V_classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.V_classificazione_vociBulk) Pdg_variazione_riga_gestBulk(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestBulk) EsercizioBulk(it.cnr.contab.config00.esercizio.bulk.EsercizioBulk) Voce_piano_economico_prgBulk(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgBulk) BigDecimal(java.math.BigDecimal) Liquidazione_iva_variazioniBulk(it.cnr.contab.gestiva00.core.bulk.Liquidazione_iva_variazioniBulk) Var_stanz_res_rigaBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaBulk) CostantiTi_gestione(it.cnr.contab.config00.latt.bulk.CostantiTi_gestione) it.cnr.contab.progettiric00.core.bulk(it.cnr.contab.progettiric00.core.bulk) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) Ass_var_stanz_res_cdrBulk(it.cnr.contab.varstanz00.bulk.Ass_var_stanz_res_cdrBulk) Pdg_variazioneBulk(it.cnr.contab.pdg00.bulk.Pdg_variazioneBulk) PersistentHome(it.cnr.jada.persistency.sql.PersistentHome) CdrHome(it.cnr.contab.config00.sto.bulk.CdrHome) Classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.Classificazione_vociBulk) Timestamp(java.sql.Timestamp) it.cnr.contab.config00.bulk(it.cnr.contab.config00.bulk) SQLBuilder(it.cnr.jada.persistency.sql.SQLBuilder) Tipo_unita_organizzativaHome(it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome) Pdg_modulo_speseBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_speseBulk) Collectors(java.util.stream.Collectors) Ass_pdg_variazione_cdrHome(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrHome) Serializable(java.io.Serializable) RemoteException(java.rmi.RemoteException) Ass_var_stanz_res_cdrHome(it.cnr.contab.varstanz00.bulk.Ass_var_stanz_res_cdrHome) EJBException(javax.ejb.EJBException) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) Stream(java.util.stream.Stream) Var_stanz_resBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_resBulk) WorkpackageBulk(it.cnr.contab.config00.latt.bulk.WorkpackageBulk) Voce_piano_economico_prgHome(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgHome) UserContext(it.cnr.jada.UserContext) java.util(java.util) OggettoBulk(it.cnr.jada.bulk.OggettoBulk) Unita_organizzativaBulk(it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) Utility(it.cnr.contab.util.Utility) it.cnr.contab.prevent00.bulk(it.cnr.contab.prevent00.bulk) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) Pdg_variazioneHome(it.cnr.contab.pdg00.bulk.Pdg_variazioneHome) Pdg_modulo_costiBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_costiBulk) SQLException(java.sql.SQLException) it.cnr.contab.config00.pdcfin.bulk(it.cnr.contab.config00.pdcfin.bulk) V_classificazione_vociHome(it.cnr.contab.config00.pdcfin.cla.bulk.V_classificazione_vociHome) Var_stanz_res_rigaHome(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaHome) Tipo_variazioneBulk(it.cnr.contab.pdg01.bulk.Tipo_variazioneBulk) FindClause(it.cnr.jada.persistency.sql.FindClause) CNRUserContext(it.cnr.contab.utenze00.bp.CNRUserContext) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) WorkpackageHome(it.cnr.contab.config00.latt.bulk.WorkpackageHome) ApplicationException(it.cnr.jada.comp.ApplicationException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ContrattoBulk(it.cnr.contab.config00.contratto.bulk.ContrattoBulk) Var_stanz_resHome(it.cnr.contab.varstanz00.bulk.Var_stanz_resHome) CdrBulk(it.cnr.contab.config00.sto.bulk.CdrBulk) BulkList(it.cnr.jada.bulk.BulkList) Pdg_variazione_riga_gestHome(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestHome) Numerazione_doc_contBulk(it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk) ObbligazioneBulk(it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk) EsercizioHome(it.cnr.contab.config00.esercizio.bulk.EsercizioHome) ComponentException(it.cnr.jada.comp.ComponentException) Ass_pdg_variazione_cdrBulk(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrBulk) WorkpackageHome(it.cnr.contab.config00.latt.bulk.WorkpackageHome) Pdg_variazioneBulk(it.cnr.contab.pdg00.bulk.Pdg_variazioneBulk) Pdg_variazione_riga_gestBulk(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestBulk) PersistencyException(it.cnr.jada.persistency.PersistencyException) BulkList(it.cnr.jada.bulk.BulkList) UserContext(it.cnr.jada.UserContext) CNRUserContext(it.cnr.contab.utenze00.bp.CNRUserContext) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) ContrattoBulk(it.cnr.contab.config00.contratto.bulk.ContrattoBulk) Var_stanz_resBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_resBulk) java.util(java.util) ComponentException(it.cnr.jada.comp.ComponentException) EJBException(javax.ejb.EJBException) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) Var_stanz_res_rigaBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaBulk) WorkpackageBulk(it.cnr.contab.config00.latt.bulk.WorkpackageBulk) BigDecimal(java.math.BigDecimal) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) RemoteException(java.rmi.RemoteException) EJBException(javax.ejb.EJBException) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) SQLException(java.sql.SQLException) ApplicationException(it.cnr.jada.comp.ApplicationException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ComponentException(it.cnr.jada.comp.ComponentException) ApplicationException(it.cnr.jada.comp.ApplicationException) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) Var_stanz_resHome(it.cnr.contab.varstanz00.bulk.Var_stanz_resHome) RemoteException(java.rmi.RemoteException) Pdg_variazioneHome(it.cnr.contab.pdg00.bulk.Pdg_variazioneHome)

Example 22 with ComponentException

use of it.cnr.jada.comp.ComponentException in project sigla-main by consiglionazionaledellericerche.

the class SaldoComponent method checkPdgPianoEconomico.

public void checkPdgPianoEconomico(UserContext userContext, Pdg_variazioneBulk variazione) throws ComponentException {
    try {
        if (Utility.createParametriEnteComponentSession().isProgettoPianoEconomicoEnabled(userContext, CNRUserContext.getEsercizio(userContext))) {
            Unita_organizzativaBulk uoScrivania = (Unita_organizzativaBulk) getHome(userContext, Unita_organizzativaBulk.class).findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext)));
            /*
				 * non effettuo alcun controllo se è collegata la UO Ente e la variazione è fatta dalla UO Ente
				 * oppure
				 * la variazione è generata automaticamente (es. in fase di emissione obbligazione)
				 */
            if (variazione.getCentro_responsabilita().getUnita_padre().isUoEnte() && (uoScrivania.isUoEnte() || Pdg_variazioneBulk.MOTIVAZIONE_VARIAZIONE_AUTOMATICA.equals(variazione.getTiMotivazioneVariazione())))
                return;
            /*
				 * non effettuo alcun controllo se si tratta di variazione IVA
				 */
            PersistentHome homeLiqVar = getHome(userContext, Liquidazione_iva_variazioniBulk.class);
            SQLBuilder sqlLiqVar = homeLiqVar.createSQLBuilder();
            sqlLiqVar.addClause(FindClause.AND, "esercizio_variazione_comp", SQLBuilder.EQUALS, variazione.getEsercizio());
            sqlLiqVar.addClause(FindClause.AND, "pg_variazione_comp", SQLBuilder.EQUALS, variazione.getPg_variazione_pdg());
            if (sqlLiqVar.executeCountQuery(getConnection(userContext)) > 0)
                return;
            it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession configSession = Utility.createConfigurazioneCnrComponentSession();
            List<CtrlPianoEco> listCtrlPianoEco = new ArrayList<CtrlPianoEco>();
            String cdNaturaReimpiego = configSession.getVal01(userContext, new Integer(0), null, Configurazione_cnrBulk.PK_GESTIONE_PROGETTI, Configurazione_cnrBulk.SK_NATURA_REIMPIEGO);
            String cdVoceSpeciale = configSession.getVal01(userContext, new Integer(0), null, Configurazione_cnrBulk.PK_ELEMENTO_VOCE_SPECIALE, Configurazione_cnrBulk.SK_TEMPO_IND_SU_PROGETTI_FINANZIATI);
            String cdrPersonale = Optional.ofNullable(((Configurazione_cnrHome) getHome(userContext, Configurazione_cnrBulk.class)).getCdrPersonale(CNRUserContext.getEsercizio(userContext))).orElseThrow(() -> new ComponentException("Non è possibile individuare il codice CDR del Personale."));
            CdrBulk cdrPersonaleBulk = (CdrBulk) getHome(userContext, CdrBulk.class).findByPrimaryKey(new CdrBulk(cdrPersonale));
            String uoRagioneria = ((Configurazione_cnrHome) getHome(userContext, Configurazione_cnrBulk.class)).getUoRagioneria(CNRUserContext.getEsercizio(userContext));
            Ass_pdg_variazione_cdrHome ass_cdrHome = (Ass_pdg_variazione_cdrHome) getHome(userContext, Ass_pdg_variazione_cdrBulk.class);
            java.util.Collection<Pdg_variazione_riga_gestBulk> dettagliVariazione = ass_cdrHome.findDettagli(variazione);
            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()));
                boolean isUoArea = uoBulk.getCd_tipo_unita().equals(Tipo_unita_organizzativaHome.TIPO_UO_AREA);
                // verifico se si tratta di voce accentrata verso il personale
                Elemento_voceBulk voce = (Elemento_voceBulk) getHome(userContext, Elemento_voceBulk.class).findByPrimaryKey(varStanzRiga.getElemento_voce());
                Classificazione_vociBulk classif = (Classificazione_vociBulk) getHome(userContext, Classificazione_vociBulk.class).findByPrimaryKey(new Classificazione_vociBulk(voce.getId_classificazione()));
                boolean isDettPersonale = classif.getFl_accentrato() && cdrPersonale.equals(classif.getCdr_accentratore());
                boolean isUoRagioneria = uoBulk.getCd_unita_organizzativa().equals(uoRagioneria);
                // recupero la GAE
                WorkpackageBulk linea = ((WorkpackageHome) getHome(userContext, WorkpackageBulk.class)).searchGAECompleta(userContext, varStanzRiga.getEsercizio(), varStanzRiga.getCd_cdr_assegnatario(), varStanzRiga.getCd_linea_attivita());
                Optional.ofNullable(linea).orElseThrow(() -> new ApplicationException("Errore in fase di ricerca linea_attivita " + varStanzRiga.getEsercizio() + "/" + varStanzRiga.getCd_centro_responsabilita() + "/" + varStanzRiga.getCd_linea_attivita() + "."));
                ProgettoBulk progetto = linea.getProgetto();
                // effettuo controlli sulla validità del progetto
                Optional.of(progetto.getOtherField()).filter(el -> el.isStatoApprovato() || el.isStatoChiuso()).orElseThrow(() -> new ApplicationException("Attenzione! Il progetto " + progetto.getCd_progetto() + " non risulta in stato approvato o chiuso. Variazione non consentita!"));
                if (progetto.getOtherField().isDatePianoEconomicoRequired()) {
                    Optional.ofNullable(progetto.getOtherField().getDtInizio()).orElseThrow(() -> new ApplicationException("Attenzione! GAE " + linea.getCd_linea_attivita() + " non selezionabile. " + "La data inizio del progetto non risulta impostata."));
                    Optional.ofNullable(progetto.getOtherField().getDtFine()).orElseThrow(() -> new ApplicationException("Attenzione! GAE " + linea.getCd_linea_attivita() + " non selezionabile. " + "La data fine del progetto non risulta impostata."));
                    // Nelle variazioni controllare la più piccola data tra data inizio progetto e data stipula contratto definitivo
                    // 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());
                    Optional<ContrattoBulk> optContratto = contrattiAssociati.stream().filter(el -> el.isAttivo() || el.isAttivo_e_Passivo()).min((p1, p2) -> p1.getDt_stipula().compareTo(p2.getDt_stipula())).filter(el -> el.getDt_stipula().before(progetto.getOtherField().getDtInizio()));
                    if (optContratto.isPresent())
                        optContratto.filter(ctr -> ctr.getDt_stipula().after(variazione.getDt_chiusura())).ifPresent(ctr -> {
                            throw new ApplicationRuntimeException("Attenzione! GAE " + linea.getCd_linea_attivita() + " non selezionabile. " + "La data stipula (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(ctr.getDt_stipula()) + ") del primo contratto " + ctr.getEsercizio() + "/" + ctr.getStato() + "/" + ctr.getPg_contratto() + " associato al progetto " + progetto.getCd_progetto() + " è successiva " + "rispetto alla data di chiusura della variazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(variazione.getDt_chiusura()) + ").");
                        });
                    else
                        Optional.of(progetto.getOtherField().getDtInizio()).filter(dt -> !dt.after(variazione.getDt_chiusura())).orElseThrow(() -> new ApplicationException("Attenzione! GAE " + linea.getCd_linea_attivita() + " non selezionabile. " + "La data inizio (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(progetto.getOtherField().getDtInizio()) + ") del progetto " + progetto.getCd_progetto() + " associato è successiva " + "rispetto alla data di chiusura della variazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(variazione.getDt_chiusura()) + ")."));
                }
                // recupero il record se presente altrimenti ne creo uno nuovo
                CtrlPianoEco pianoEco = listCtrlPianoEco.stream().filter(el -> el.getProgetto().getPg_progetto().equals(progetto.getPg_progetto())).findFirst().orElse(new CtrlPianoEco(progetto));
                if (variazione.isVariazioneRimodulazioneProgetto()) {
                    if (variazione.getProgettoRimodulazione().getPg_progetto().compareTo(progetto.getPg_progetto()) != 0)
                        throw new ApplicationException("Attenzione! Nella variazione " + variazione.getEsercizio() + "/" + variazione.getPg_variazione_pdg() + " risulta movimentato un progetto differente rispetto a quello della " + "rimodulazione associata. Operazione non possibile!");
                    pianoEco.setRimodulazione(variazione.getProgettoRimodulazione());
                }
                // creo il dettaglio
                CtrlPianoEcoDett dett = new CtrlPianoEcoDett();
                dett.setTipoDett(varStanzRiga.getTi_gestione());
                dett.setImporto(varStanzRiga.getIm_variazione());
                dett.setCdrPersonale(isDettPersonale);
                dett.setUoArea(isUoArea);
                dett.setUoRagioneria(isUoRagioneria);
                dett.setElementoVoce(varStanzRiga.getElemento_voce());
                if (Optional.ofNullable(cdNaturaReimpiego).map(el -> el.equals(linea.getNatura().getCd_natura())).orElse(Boolean.FALSE)) {
                    dett.setTipoNatura(CtrlPianoEcoDett.TIPO_REIMPIEGO);
                    if (!variazione.getTipo_variazione().isStorno())
                        throw new ApplicationException("Attenzione! Risultano movimentazioni sulla GAE " + linea.getCd_linea_attivita() + " con natura 6 - 'Reimpiego di risorse' " + " consentito solo per operazioni di storno. Operazione non possibile.");
                } else if (linea.getNatura().isFonteEsterna())
                    dett.setTipoNatura(CtrlPianoEcoDett.TIPO_FONTE_ESTERNA);
                else
                    dett.setTipoNatura(CtrlPianoEcoDett.TIPO_FONTE_INTERNA);
                dett.setVoceSpeciale(Optional.ofNullable(cdVoceSpeciale).map(el -> el.equals(varStanzRiga.getCd_elemento_voce())).orElse(Boolean.FALSE));
                pianoEco.getDett().add(dett);
                if (!listCtrlPianoEco.contains(pianoEco))
                    listCtrlPianoEco.add(pianoEco);
            }
            controllaPdgPianoEconomico(userContext, variazione, listCtrlPianoEco, cdVoceSpeciale, cdrPersonaleBulk);
        }
    } catch (DetailedRuntimeException _ex) {
        throw new ApplicationException(_ex.getMessage());
    } catch (PersistencyException | RemoteException | IntrospectionException | SQLException e) {
        throw new ComponentException(e);
    }
}
Also used : V_classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.V_classificazione_vociBulk) Pdg_variazione_riga_gestBulk(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestBulk) EsercizioBulk(it.cnr.contab.config00.esercizio.bulk.EsercizioBulk) Voce_piano_economico_prgBulk(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgBulk) BigDecimal(java.math.BigDecimal) Liquidazione_iva_variazioniBulk(it.cnr.contab.gestiva00.core.bulk.Liquidazione_iva_variazioniBulk) Var_stanz_res_rigaBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaBulk) CostantiTi_gestione(it.cnr.contab.config00.latt.bulk.CostantiTi_gestione) it.cnr.contab.progettiric00.core.bulk(it.cnr.contab.progettiric00.core.bulk) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) Ass_var_stanz_res_cdrBulk(it.cnr.contab.varstanz00.bulk.Ass_var_stanz_res_cdrBulk) Pdg_variazioneBulk(it.cnr.contab.pdg00.bulk.Pdg_variazioneBulk) PersistentHome(it.cnr.jada.persistency.sql.PersistentHome) CdrHome(it.cnr.contab.config00.sto.bulk.CdrHome) Classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.Classificazione_vociBulk) Timestamp(java.sql.Timestamp) it.cnr.contab.config00.bulk(it.cnr.contab.config00.bulk) SQLBuilder(it.cnr.jada.persistency.sql.SQLBuilder) Tipo_unita_organizzativaHome(it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome) Pdg_modulo_speseBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_speseBulk) Collectors(java.util.stream.Collectors) Ass_pdg_variazione_cdrHome(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrHome) Serializable(java.io.Serializable) RemoteException(java.rmi.RemoteException) Ass_var_stanz_res_cdrHome(it.cnr.contab.varstanz00.bulk.Ass_var_stanz_res_cdrHome) EJBException(javax.ejb.EJBException) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) Stream(java.util.stream.Stream) Var_stanz_resBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_resBulk) WorkpackageBulk(it.cnr.contab.config00.latt.bulk.WorkpackageBulk) Voce_piano_economico_prgHome(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgHome) UserContext(it.cnr.jada.UserContext) java.util(java.util) OggettoBulk(it.cnr.jada.bulk.OggettoBulk) Unita_organizzativaBulk(it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) Utility(it.cnr.contab.util.Utility) it.cnr.contab.prevent00.bulk(it.cnr.contab.prevent00.bulk) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) Pdg_variazioneHome(it.cnr.contab.pdg00.bulk.Pdg_variazioneHome) Pdg_modulo_costiBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_costiBulk) SQLException(java.sql.SQLException) it.cnr.contab.config00.pdcfin.bulk(it.cnr.contab.config00.pdcfin.bulk) V_classificazione_vociHome(it.cnr.contab.config00.pdcfin.cla.bulk.V_classificazione_vociHome) Var_stanz_res_rigaHome(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaHome) Tipo_variazioneBulk(it.cnr.contab.pdg01.bulk.Tipo_variazioneBulk) FindClause(it.cnr.jada.persistency.sql.FindClause) CNRUserContext(it.cnr.contab.utenze00.bp.CNRUserContext) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) WorkpackageHome(it.cnr.contab.config00.latt.bulk.WorkpackageHome) ApplicationException(it.cnr.jada.comp.ApplicationException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ContrattoBulk(it.cnr.contab.config00.contratto.bulk.ContrattoBulk) Var_stanz_resHome(it.cnr.contab.varstanz00.bulk.Var_stanz_resHome) CdrBulk(it.cnr.contab.config00.sto.bulk.CdrBulk) BulkList(it.cnr.jada.bulk.BulkList) Pdg_variazione_riga_gestHome(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestHome) Numerazione_doc_contBulk(it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk) ObbligazioneBulk(it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk) EsercizioHome(it.cnr.contab.config00.esercizio.bulk.EsercizioHome) ComponentException(it.cnr.jada.comp.ComponentException) Ass_pdg_variazione_cdrBulk(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrBulk) SQLBuilder(it.cnr.jada.persistency.sql.SQLBuilder) Unita_organizzativaBulk(it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk) SQLException(java.sql.SQLException) WorkpackageHome(it.cnr.contab.config00.latt.bulk.WorkpackageHome) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) Ass_pdg_variazione_cdrHome(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrHome) CdrBulk(it.cnr.contab.config00.sto.bulk.CdrBulk) Ass_pdg_variazione_cdrBulk(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrBulk) Pdg_variazione_riga_gestBulk(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestBulk) PersistencyException(it.cnr.jada.persistency.PersistencyException) UserContext(it.cnr.jada.UserContext) CNRUserContext(it.cnr.contab.utenze00.bp.CNRUserContext) WorkpackageBulk(it.cnr.contab.config00.latt.bulk.WorkpackageBulk) Classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.Classificazione_vociBulk) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) ContrattoBulk(it.cnr.contab.config00.contratto.bulk.ContrattoBulk) ApplicationException(it.cnr.jada.comp.ApplicationException) java.util(java.util) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) ComponentException(it.cnr.jada.comp.ComponentException) PersistentHome(it.cnr.jada.persistency.sql.PersistentHome) RemoteException(java.rmi.RemoteException)

Example 23 with ComponentException

use of it.cnr.jada.comp.ComponentException in project sigla-main by consiglionazionaledellericerche.

the class SaldoComponent method checkDispPianoEconomicoProgetto.

/**
 * Metodo che verifica la congruenza delle disponibilità sul piano economico del progetto
 *
 * @param userContext
 * @param moduloCosti
 * @param isFromChangeStato indica che la modifica è stata richiesta in fase di cambio stato progetto
 * @throws ComponentException
 */
public void checkDispPianoEconomicoProgetto(UserContext userContext, Pdg_modulo_costiBulk moduloCosti, boolean isFromChangeStato) throws ComponentException {
    try {
        it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession configSession = (it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession", it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession.class);
        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(moduloCosti.getEsercizio()) <= 0).isPresent()) {
            Progetto_piano_economicoHome ppeHome = (Progetto_piano_economicoHome) getHome(userContext, Progetto_piano_economicoBulk.class);
            List<Progetto_piano_economicoBulk> pianoEconomicoList = (List<Progetto_piano_economicoBulk>) ppeHome.findProgettoPianoEconomicoList(moduloCosti.getPg_progetto());
            List<Pdg_modulo_speseBulk> speseList = (List<Pdg_modulo_speseBulk>) moduloCosti.getDettagliSpese();
            pianoEconomicoList.stream().filter(e -> e.getFl_ctrl_disp() && (e.getEsercizio_piano().equals(0) || e.getEsercizio_piano().equals(moduloCosti.getEsercizio()))).forEach(e -> {
                try {
                    Progetto_piano_economicoBulk bulk = null;
                    Progetto_piano_economicoBulk bulkToFind = new Progetto_piano_economicoBulk();
                    bulkToFind.setVoce_piano_economico(e.getVoce_piano_economico());
                    bulkToFind.setPg_progetto(e.getPg_progetto());
                    bulkToFind.setEsercizio_piano(e.getEsercizio_piano());
                    try {
                        bulk = (Progetto_piano_economicoBulk) getHome(userContext, Progetto_piano_economicoBulk.class).findAndLock(bulkToFind);
                    } catch (ObjectNotFoundException ex) {
                    }
                    if (bulk != null && bulk.getFl_ctrl_disp()) {
                        V_saldi_piano_econom_progettoBulk saldo = ((V_saldi_piano_econom_progettoHome) getHome(userContext, V_saldi_piano_econom_progettoBulk.class)).cercaSaldoPianoEconomico(bulk, "S");
                        BigDecimal dispResiduaFin = saldo.getDispResiduaFinanziamento();
                        if (!isFromChangeStato)
                            dispResiduaFin = dispResiduaFin.subtract(speseList.stream().filter(x -> Optional.ofNullable(x.getVoce_piano_economico()).isPresent()).filter(x -> x.getVoce_piano_economico().equalsByPrimaryKey(e.getVoce_piano_economico())).map(el -> Utility.nvl(el.getIm_spese_gest_decentrata_est())).collect(Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)));
                        if (dispResiduaFin.compareTo(BigDecimal.ZERO) < 0)
                            throw new ApplicationException("Impossibile effettuare l'operazione !\n" + "L'importo indicato in previsione per le fonti decentrate esterne supera di " + new it.cnr.contab.util.EuroFormat().format(dispResiduaFin.abs()) + "  l'importo finanziato indicato sul piano economico " + e.getCd_voce_piano() + " del progetto " + (e.getEsercizio_piano().equals(0) ? "" : "per l'esercizio " + e.getEsercizio_piano()) + ".");
                        if (isFromChangeStato && Optional.ofNullable(moduloCosti).flatMap(el -> Optional.ofNullable(el.getPdg_modulo())).flatMap(el -> Optional.ofNullable(el.getProgetto())).flatMap(el -> Optional.ofNullable(el.getOtherField())).flatMap(el -> Optional.ofNullable(el.getTipoFinanziamento())).map(TipoFinanziamentoBulk::getFlAllPrevFin).orElse(Boolean.TRUE) && dispResiduaFin.compareTo(BigDecimal.ZERO) != 0) {
                            Voce_piano_economico_prgBulk vocePianoEconomico = (Voce_piano_economico_prgBulk) ((Voce_piano_economico_prgHome) getHome(userContext, Voce_piano_economico_prgBulk.class)).findByPrimaryKey(e.getVoce_piano_economico());
                            if (Optional.ofNullable(vocePianoEconomico).map(Voce_piano_economico_prgBulk::getFlAllPrevFin).orElse(Boolean.TRUE))
                                throw new ApplicationException("Impossibile effettuare l'operazione !\n" + "L'importo totale indicato in previsione per le fonti decentrate esterne non corrisponde " + "  all'importo finanziato indicato sul piano economico " + e.getCd_voce_piano() + " del progetto " + (e.getEsercizio_piano().equals(0) ? "" : "per l'esercizio " + e.getEsercizio_piano()) + "(diff: " + new it.cnr.contab.util.EuroFormat().format(dispResiduaFin) + ").");
                        }
                        BigDecimal dispResiduaCofin = saldo.getDispResiduaCofinanziamento();
                        if (!isFromChangeStato)
                            dispResiduaCofin = dispResiduaCofin.subtract(speseList.stream().filter(x -> Optional.ofNullable(x.getVoce_piano_economico()).isPresent()).filter(x -> x.getVoce_piano_economico().equalsByPrimaryKey(e.getVoce_piano_economico())).map(el -> Utility.nvl(el.getIm_spese_gest_decentrata_int())).collect(Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)));
                        if (dispResiduaCofin.compareTo(BigDecimal.ZERO) < 0)
                            throw new ApplicationException("Impossibile effettuare l'operazione !\n" + "L'importo indicato in previsione per le fonti decentrate interne supera di " + new it.cnr.contab.util.EuroFormat().format(dispResiduaCofin.abs()) + "  l'importo cofinanziato indicato sul piano economico " + e.getCd_voce_piano() + " del progetto " + (e.getEsercizio_piano().equals(0) ? "" : "per l'esercizio " + e.getEsercizio_piano()) + ".");
                    }
                } catch (Exception ex) {
                    throw new RuntimeException(ex);
                }
            });
        }
    } catch (Exception e) {
        if (e instanceof RuntimeException)
            throw handleException(e.getCause());
        throw handleException(e);
    }
}
Also used : V_classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.V_classificazione_vociBulk) Pdg_variazione_riga_gestBulk(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestBulk) EsercizioBulk(it.cnr.contab.config00.esercizio.bulk.EsercizioBulk) Voce_piano_economico_prgBulk(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgBulk) BigDecimal(java.math.BigDecimal) Liquidazione_iva_variazioniBulk(it.cnr.contab.gestiva00.core.bulk.Liquidazione_iva_variazioniBulk) Var_stanz_res_rigaBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaBulk) CostantiTi_gestione(it.cnr.contab.config00.latt.bulk.CostantiTi_gestione) it.cnr.contab.progettiric00.core.bulk(it.cnr.contab.progettiric00.core.bulk) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) Ass_var_stanz_res_cdrBulk(it.cnr.contab.varstanz00.bulk.Ass_var_stanz_res_cdrBulk) Pdg_variazioneBulk(it.cnr.contab.pdg00.bulk.Pdg_variazioneBulk) PersistentHome(it.cnr.jada.persistency.sql.PersistentHome) CdrHome(it.cnr.contab.config00.sto.bulk.CdrHome) Classificazione_vociBulk(it.cnr.contab.config00.pdcfin.cla.bulk.Classificazione_vociBulk) Timestamp(java.sql.Timestamp) it.cnr.contab.config00.bulk(it.cnr.contab.config00.bulk) SQLBuilder(it.cnr.jada.persistency.sql.SQLBuilder) Tipo_unita_organizzativaHome(it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome) Pdg_modulo_speseBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_speseBulk) Collectors(java.util.stream.Collectors) Ass_pdg_variazione_cdrHome(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrHome) Serializable(java.io.Serializable) RemoteException(java.rmi.RemoteException) Ass_var_stanz_res_cdrHome(it.cnr.contab.varstanz00.bulk.Ass_var_stanz_res_cdrHome) EJBException(javax.ejb.EJBException) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) Stream(java.util.stream.Stream) Var_stanz_resBulk(it.cnr.contab.varstanz00.bulk.Var_stanz_resBulk) WorkpackageBulk(it.cnr.contab.config00.latt.bulk.WorkpackageBulk) Voce_piano_economico_prgHome(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgHome) UserContext(it.cnr.jada.UserContext) java.util(java.util) OggettoBulk(it.cnr.jada.bulk.OggettoBulk) Unita_organizzativaBulk(it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) Utility(it.cnr.contab.util.Utility) it.cnr.contab.prevent00.bulk(it.cnr.contab.prevent00.bulk) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) Pdg_variazioneHome(it.cnr.contab.pdg00.bulk.Pdg_variazioneHome) Pdg_modulo_costiBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_costiBulk) SQLException(java.sql.SQLException) it.cnr.contab.config00.pdcfin.bulk(it.cnr.contab.config00.pdcfin.bulk) V_classificazione_vociHome(it.cnr.contab.config00.pdcfin.cla.bulk.V_classificazione_vociHome) Var_stanz_res_rigaHome(it.cnr.contab.varstanz00.bulk.Var_stanz_res_rigaHome) Tipo_variazioneBulk(it.cnr.contab.pdg01.bulk.Tipo_variazioneBulk) FindClause(it.cnr.jada.persistency.sql.FindClause) CNRUserContext(it.cnr.contab.utenze00.bp.CNRUserContext) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) WorkpackageHome(it.cnr.contab.config00.latt.bulk.WorkpackageHome) ApplicationException(it.cnr.jada.comp.ApplicationException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ContrattoBulk(it.cnr.contab.config00.contratto.bulk.ContrattoBulk) Var_stanz_resHome(it.cnr.contab.varstanz00.bulk.Var_stanz_resHome) CdrBulk(it.cnr.contab.config00.sto.bulk.CdrBulk) BulkList(it.cnr.jada.bulk.BulkList) Pdg_variazione_riga_gestHome(it.cnr.contab.pdg01.bulk.Pdg_variazione_riga_gestHome) Numerazione_doc_contBulk(it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk) ObbligazioneBulk(it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk) EsercizioHome(it.cnr.contab.config00.esercizio.bulk.EsercizioHome) ComponentException(it.cnr.jada.comp.ComponentException) Ass_pdg_variazione_cdrBulk(it.cnr.contab.pdg00.cdip.bulk.Ass_pdg_variazione_cdrBulk) Voce_piano_economico_prgBulk(it.cnr.contab.progettiric00.tabrif.bulk.Voce_piano_economico_prgBulk) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) BulkList(it.cnr.jada.bulk.BulkList) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) Configurazione_cnrComponentSession(it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession) BigDecimal(java.math.BigDecimal) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) RemoteException(java.rmi.RemoteException) EJBException(javax.ejb.EJBException) DetailedRuntimeException(it.cnr.jada.DetailedRuntimeException) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) SQLException(java.sql.SQLException) ApplicationException(it.cnr.jada.comp.ApplicationException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ComponentException(it.cnr.jada.comp.ComponentException) Pdg_modulo_speseBulk(it.cnr.contab.prevent01.bulk.Pdg_modulo_speseBulk) ApplicationException(it.cnr.jada.comp.ApplicationException) java.util(java.util) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException)

Example 24 with ComponentException

use of it.cnr.jada.comp.ComponentException in project sigla-main by consiglionazionaledellericerche.

the class ObbligazioneComponent method verificaCoperturaContratto.

public void verificaCoperturaContratto(UserContext aUC, ObbligazioneBulk obbligazione, int flag) throws ComponentException {
    // Controllo che l'obbligazione non abbia sfondato il contratto
    if (obbligazione.isCheckDisponibilitaContrattoEseguito())
        return;
    if (obbligazione.getContratto() != null && obbligazione.getContratto().getPg_contratto() != null) {
        try {
            ContrattoHome contrattoHome = (ContrattoHome) getHome(aUC, ContrattoBulk.class);
            SQLBuilder sql = contrattoHome.calcolaTotObbligazioni(aUC, obbligazione.getContratto());
            BigDecimal totale = null;
            try {
                java.sql.ResultSet rs = null;
                LoggableStatement ps = null;
                try {
                    ps = sql.prepareStatement(getConnection(aUC));
                    try {
                        rs = ps.executeQuery();
                        if (rs.next())
                            totale = rs.getBigDecimal(1);
                    } catch (java.sql.SQLException e) {
                        throw handleSQLException(e);
                    } finally {
                        if (rs != null)
                            try {
                                rs.close();
                            } catch (java.sql.SQLException e) {
                            }
                        ;
                    }
                } finally {
                    if (ps != null)
                        try {
                            ps.close();
                        } catch (java.sql.SQLException e) {
                        }
                    ;
                }
            } catch (java.sql.SQLException ex) {
                throw handleException(ex);
            }
            if (flag == INSERIMENTO)
                totale = totale.add(obbligazione.getIm_obbligazione());
            if (totale != null) {
                if (totale.compareTo(obbligazione.getContratto().getIm_contratto_passivo()) > 0) {
                    throw handleException(new CheckDisponibilitaContrattoFailed("La somma degli impegni associati supera l'importo definito nel contratto."));
                }
            }
        } catch (IntrospectionException e1) {
            throw new it.cnr.jada.comp.ComponentException(e1);
        } catch (PersistencyException e1) {
            throw new it.cnr.jada.comp.ComponentException(e1);
        }
    }
}
Also used : ContrattoHome(it.cnr.contab.config00.contratto.bulk.ContrattoHome) SQLBuilder(it.cnr.jada.persistency.sql.SQLBuilder) LoggableStatement(it.cnr.jada.persistency.sql.LoggableStatement) SQLException(java.sql.SQLException) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) ContrattoBulk(it.cnr.contab.config00.contratto.bulk.ContrattoBulk) BigDecimal(java.math.BigDecimal) SQLException(java.sql.SQLException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ComponentException(it.cnr.jada.comp.ComponentException)

Example 25 with ComponentException

use of it.cnr.jada.comp.ComponentException in project sigla-main by consiglionazionaledellericerche.

the class ObbligazioneComponent method modificaConBulk.

/**
 *  Tutti i controlli superati - contesto non transazionale
 *    PreCondition:
 *      Una richiesta di modifica di un'obbligazione e' stata generata
 *      L'obbligazione ha superato i controlli eseguiti dal metodo 'verificaObbligazione'
 *      L'obbligazione ha superato i controlli sulla disponibilità di cassa delle voci del piano eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
 *      L'obbligazione non e' stata modificata in un contesto transazionale
 *    PostCondition:
 *      L'obbligazione viene aggiornata
 *		 I dettagli di tutte le scadenze vengono aggiornati (metodo generaDettagliScadenzaObbligazione)
 *      I saldi dei capitoli dei dettagli delle scadenze vengono aggiornati (metodo aggiornaCapitoloSaldoObbligazione)
 *      Lo stato COFI/COGE degli eventuali doc. amministrativi associati all'obbligazione e' stato aggiornato
 *  Tutti i controlli superati - contesto transazionale
 *    PreCondition:
 *      Una richiesta di modifica di un'obbligazione e' stata generata
 *      L'obbligazione ha superato i controlli eseguiti dal metodo 'verificaObbligazione'
 *      L'obbligazione ha superato i controlli sulla disponibilità di cassa delle voci del piano eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
 *      L'obbligazione e' stata modificata in un contesto transazionale
 *    PostCondition:
 *      L'obbligazione viene aggiornata e i dettagli di tutte le scadenze vengono aggiornati (metodo generaDettagliScadenzaObbligazione)
 *  Errore di verifica obbligazione
 *    PreCondition:
 *      Una richiesta di modifica di un'obbligazione e' stata generata e l'obbligazione non ha superato i
 *      controlli eseguiti dal metodo 'verificaObbligazione'
 *    PostCondition:
 *      Viene generata un'ApplicationException che descrive all'utente l'errore che si e' verificato
 *  Errore di disponibilità di cassa
 *    PreCondition:
 *      Una richiesta di modifica di un'obbligazione e' stata generata e l'obbligazione non ha superato i
 *      controlli di disponibilità di cassa eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
 *    PostCondition:
 *      Viene generata un'ApplicationException che descrive all'utente l'errore che si e' verificato
 *  Errore di disponibilità di cassa - forzatura
 *    PreCondition:
 *      Una richiesta di modifica di un'obbligazione e' stata generata e l'obbligazione non ha superato i
 *      controlli di disponibilità di cassa eseguiti dal metodo 'aggiornaCapitoloSaldoObbligazione'
 *		 e l'utente ha scelto di forzare l'emissione dell'obbligazione
 *    PostCondition:
 *      L'obbligazione viene modificata, i dettagli di tutte le scadenze vengono modificati (metodo generaDettagliScadenzaObbligazione) e i saldi
 *      dei capitoli dei dettagli delle scadenze vengono aggiornati (metodo aggiornaCapitoloSaldoObbligazione)
 *
 * @param aUC lo user context
 * @param bulk l'istanza di  <code>ObbligazioneBulk</code> da modificare
 * @return l'istanza di  <code>ObbligazioneBulk</code> modificata
 */
public OggettoBulk modificaConBulk(UserContext aUC, OggettoBulk bulk) throws ComponentException {
    try {
        Obbligazione_scadenzarioBulk scadenza;
        ObbligazioneBulk obbligazione = (ObbligazioneBulk) bulk;
        validaCampi(aUC, obbligazione);
        /* simona 23.10.2002 : invertito l'ordine della verifica e della generzione dettagli x problema 344 */
        // genera eventualmente i dettagli che non erano ancora stati generati
        generaDettagliScadenzaObbligazione(aUC, obbligazione, null);
        // verifica la correttezza dell'obbligazione
        verificaObbligazione(aUC, obbligazione);
        // verifica la correttezza dell'imputazione finanziaria
        validaImputazioneFinanziaria(aUC, obbligazione);
        // aggiorna il db:
        updateBulk(aUC, obbligazione);
        makeBulkListPersistent(aUC, obbligazione.getObbligazione_scadenzarioColl());
        // esegue il check di disponibilita di cassa
        controllaDisponibilitaCassaPerVoce(aUC, obbligazione, MODIFICA);
        verificaCoperturaContratto(aUC, obbligazione);
        verificaCoerenzaGaeContratto(aUC, obbligazione);
        verificaCoperturaIncaricoRepertorio(aUC, obbligazione);
        if (!aUC.isTransactional()) {
            // aggiorna il capitolo saldo
            aggiornaCapitoloSaldoObbligazione(aUC, obbligazione, MODIFICA);
            aggiornaStatoCOAN_COGEDocAmm(aUC, obbligazione);
        }
        // Se utente non è supervisore e la voce va azzerata non è possibile aumentare l'importo dell'impegno residuo
        if (obbligazione.isObbligazioneResiduo())
            if (verificaVoceResidua(aUC, obbligazione))
                if (obbligazione.getIm_iniziale_obbligazione().compareTo(obbligazione.getIm_obbligazione()) < 0)
                    throw new ApplicationException("Aggiornamento non consentito! L'impegno residuo non può essere aumentato");
        obbligazione.setIm_iniziale_obbligazione(obbligazione.getIm_obbligazione());
        obbligazione.setCd_iniziale_elemento_voce(obbligazione.getCd_elemento_voce());
        if (obbligazione.isObbligazioneResiduo()) {
            if (((ObbligazioneResBulk) obbligazione).isSaldiDaAggiornare()) {
                // aggiorniamo i saldi legati alle modifiche agli impegni residui
                aggiornaSaldiImpegniResiduiPropri(aUC, obbligazione);
                // aggiorniamo il progressivo in definitivo
                Obbligazione_modificaBulk obbMod = ((ObbligazioneResBulk) obbligazione).getObbligazione_modifica();
                if (obbMod != null && obbMod.isTemporaneo()) {
                    aggiornaObbligazioneModificaTemporanea(aUC, obbMod);
                }
            }
        }
        verificaStatoEsercizio(aUC, ((CNRUserContext) aUC).getEsercizio(), obbligazione.getCd_cds());
        validaCreaModificaOrigineFonti(aUC, obbligazione);
        obbligazione = validaCreaModificaElementoVoceNext(aUC, obbligazione);
        return obbligazione;
    } catch (Exception e) {
        throw handleException(e);
    }
}
Also used : ApplicationException(it.cnr.jada.comp.ApplicationException) ObjectNotFoundException(it.cnr.jada.persistency.ObjectNotFoundException) ValidationException(it.cnr.jada.bulk.ValidationException) RemoteException(java.rmi.RemoteException) EJBException(javax.ejb.EJBException) ApplicationRuntimeException(it.cnr.jada.comp.ApplicationRuntimeException) IntrospectionException(it.cnr.jada.persistency.IntrospectionException) SQLException(java.sql.SQLException) ApplicationException(it.cnr.jada.comp.ApplicationException) PersistencyException(it.cnr.jada.persistency.PersistencyException) ApplicationMessageFormatException(it.cnr.contab.util.ApplicationMessageFormatException) ComponentException(it.cnr.jada.comp.ComponentException)

Aggregations

ComponentException (it.cnr.jada.comp.ComponentException)1112 PersistencyException (it.cnr.jada.persistency.PersistencyException)670 ApplicationException (it.cnr.jada.comp.ApplicationException)504 RemoteException (java.rmi.RemoteException)491 IntrospectionException (it.cnr.jada.persistency.IntrospectionException)341 EJBException (javax.ejb.EJBException)255 SQLException (java.sql.SQLException)248 SQLBuilder (it.cnr.jada.persistency.sql.SQLBuilder)202 BigDecimal (java.math.BigDecimal)201 DetailedRuntimeException (it.cnr.jada.DetailedRuntimeException)195 UserContext (it.cnr.jada.UserContext)175 CNRUserContext (it.cnr.contab.utenze00.bp.CNRUserContext)158 List (java.util.List)153 Unita_organizzativaBulk (it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk)151 Iterator (java.util.Iterator)143 BulkList (it.cnr.jada.bulk.BulkList)142 BusinessProcessException (it.cnr.jada.action.BusinessProcessException)131 ApplicationRuntimeException (it.cnr.jada.comp.ApplicationRuntimeException)129 ApplicationMessageFormatException (it.cnr.contab.util.ApplicationMessageFormatException)124 OggettoBulk (it.cnr.jada.bulk.OggettoBulk)117