use of it.cnr.jada.comp.ApplicationRuntimeException in project sigla-main by consiglionazionaledellericerche.
the class ObbligazioneResComponent method calcolaPercentualeImputazioneObbligazione.
private ObbligazioneBulk calcolaPercentualeImputazioneObbligazione(UserContext aUC, ObbligazioneBulk obbligazione, String tipoErrore, StringBuffer errControllo) throws ComponentException {
try {
BigDecimal percentuale = new BigDecimal(100);
BigDecimal totaleScad = new BigDecimal(0);
BigDecimal diffScad = new BigDecimal(0);
Obbligazione_scad_voceBulk osv;
Obbligazione_scadenzarioBulk os;
Obbligazione_scad_voceBulk key = new Obbligazione_scad_voceBulk();
boolean cdsModObblResImporto = isCdsModObblResImporto(aUC, obbligazione.getCd_cds());
// recupero le percentuali di imputazione finanziaria per le linee di attivita da pdg
// 100 - percentuali specificate x linee att non da PDG
PrimaryKeyHashtable prcImputazioneFinanziariaTable = getOldRipartizioneCdrVoceLinea(aUC, obbligazione);
if (obbligazione.getFl_calcolo_automatico().booleanValue()) {
if (obbligazione.getIm_obbligazione() == null || obbligazione.getIm_obbligazione().compareTo(Utility.ZERO) <= 0)
throw new ApplicationException("Non è possibile effettuare il calcolo automatico su una obbligazione con importo nullo.");
for (Enumeration e = prcImputazioneFinanziariaTable.keys(); e.hasMoreElements(); ) {
key = (Obbligazione_scad_voceBulk) e.nextElement();
totaleScad = (BigDecimal) prcImputazioneFinanziariaTable.get(key);
percentuale = totaleScad.multiply(new BigDecimal(100)).divide(obbligazione.getIm_obbligazione(), 100, BigDecimal.ROUND_HALF_UP);
for (Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); ) {
os = (Obbligazione_scadenzarioBulk) s.next();
for (Iterator d = os.getObbligazione_scad_voceColl().iterator(); d.hasNext(); ) {
osv = (Obbligazione_scad_voceBulk) d.next();
// totale per Cdr e per scadenza
if (key.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) && key.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) && key.getCd_voce().equals(osv.getCd_voce())) {
osv.setToBeUpdated();
osv.setIm_voce(osv.getObbligazione_scadenzario().getIm_scadenza().multiply(percentuale).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));
break;
}
}
}
}
}
boolean trovato = false;
// verifico che nella nuova Obbligazione non ci siano linee o voci nuove rispetto alla precedente
for (Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); ) {
os = (Obbligazione_scadenzarioBulk) s.next();
for (Iterator d = os.getObbligazione_scad_voceColl().iterator(); d.hasNext(); ) {
osv = (Obbligazione_scad_voceBulk) d.next();
trovato = false;
for (Enumeration e = prcImputazioneFinanziariaTable.keys(); e.hasMoreElements(); ) {
key = (Obbligazione_scad_voceBulk) e.nextElement();
if (key.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) && key.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) && key.getCd_voce().equals(osv.getCd_voce())) {
trovato = true;
break;
}
}
if (!trovato)
throw new ApplicationException("Non è possibile aggiungere nuove linee di attività/voci (" + osv.getCd_linea_attivita() + "/" + osv.getCd_voce() + ") ai residui propri.");
}
}
// verifico che nella nuova Obbligazione alle linee/voci siano stati assegnati gli stessi importi
for (Enumeration e = prcImputazioneFinanziariaTable.keys(); e.hasMoreElements(); ) {
key = (Obbligazione_scad_voceBulk) e.nextElement();
totaleScad = new BigDecimal(0);
for (Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext(); ) {
os = (Obbligazione_scadenzarioBulk) s.next();
for (Iterator d = os.getObbligazione_scad_voceColl().iterator(); d.hasNext(); ) {
osv = (Obbligazione_scad_voceBulk) d.next();
// totale per Cdr e per scadenza
if (key.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) && key.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) && key.getCd_voce().equals(osv.getCd_voce())) {
totaleScad = totaleScad.add(Utility.nvl(osv.getIm_voce()));
}
}
}
if (totaleScad.compareTo((BigDecimal) prcImputazioneFinanziariaTable.get(key)) != 0) {
// se modifico l'importo del residuo devo controllare che non sia bloccata la creazione/modifica del residuo se attiva la gestione del limite sui residui sia sul CDS che sulla voce e per la natura e tipo
// finanziamento indicato in CONFIGURAZIONE_CNR
WorkpackageBulk latt = ((WorkpackageHome) getHome(aUC, WorkpackageBulk.class)).searchGAECompleta(aUC, CNRUserContext.getEsercizio(aUC), key.getCd_centro_responsabilita(), key.getCd_linea_attivita());
if (!UtenteBulk.isAbilitatoSbloccoImpegni(aUC))
Utility.createSaldoComponentSession().checkBloccoImpegniNatfin(aUC, latt, obbligazione.getElemento_voce(), obbligazione.isObbligazioneResiduo() ? ObbligazioneBulk.TIPO_RESIDUO_PROPRIO : ObbligazioneBulk.TIPO_RESIDUO_IMPROPRIO);
// se aumento l'importo del residuo devo controllare che il progetto non sia scaduto
if (totaleScad.compareTo((BigDecimal) prcImputazioneFinanziariaTable.get(key)) > 0 && Utility.createParametriEnteComponentSession().isProgettoPianoEconomicoEnabled(aUC, CNRUserContext.getEsercizio(aUC))) {
ProgettoBulk progetto = latt.getProgetto();
Optional.ofNullable(progetto.getOtherField()).filter(el -> el.isStatoApprovato() || el.isStatoChiuso()).orElseThrow(() -> new ApplicationException("Attenzione! Aumento importo GAE " + latt.getCd_linea_attivita() + " non consentito. " + "Il progetto associato " + progetto.getCd_progetto() + " non risulta in stato Approvato o Chiuso."));
if (progetto.isDatePianoEconomicoRequired()) {
// Negli impegni controllare la più piccola data tra data inizio progetto e data stipula contratto definitivo
ProgettoHome progettoHome = (ProgettoHome) getHome(aUC, ProgettoBulk.class);
java.util.Collection<ContrattoBulk> contratti = progettoHome.findContratti(progetto.getPg_progetto());
Optional<ContrattoBulk> optContratto = contratti.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(obbligazione.getDt_registrazione())).ifPresent(ctr -> {
throw new ApplicationRuntimeException("Attenzione! Aumento importo GAE " + latt.getCd_linea_attivita() + " non consentito. " + "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 registrazione dell'obbligazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione()) + ").");
});
else
Optional.ofNullable(progetto.getOtherField().getDtInizio()).filter(dt -> !dt.after(obbligazione.getDt_registrazione())).orElseThrow(() -> new ApplicationException("Attenzione! Aumento importo GAE " + latt.getCd_linea_attivita() + " non consentito. " + "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 registrazione dell'obbligazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione()) + ")."));
}
LocalDate localDateFineProgetto = Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(Optional.ofNullable(progetto.getOtherField().getDtFine()).orElse(DateUtils.firstDateOfTheYear(3000))).toLocalDateTime().toLocalDate();
int ggProroga = Optional.ofNullable(obbligazione.getElemento_voce()).flatMap(el -> {
if (obbligazione.isCompetenza())
return Optional.ofNullable(el.getGg_deroga_obbl_comp_prg_scad());
else
return Optional.ofNullable(el.getGg_deroga_obbl_res_prg_scad());
}).filter(el -> el.compareTo(0) > 0).orElse(0);
localDateFineProgetto = localDateFineProgetto.plusDays(ggProroga);
if (localDateFineProgetto.isBefore(EJBCommonServices.getServerDate().toLocalDateTime().toLocalDate()))
throw new ApplicationMessageFormatException("Attenzione! Aumento importo GAE {0} non consentito. " + "La data fine/proroga del progetto {1} {2} ({3}) è precedente rispetto alla data odierna.", latt.getCd_linea_attivita(), progetto.getCd_progetto(), (ggProroga > 0 ? ", aumentata di " + ggProroga + " giorni," : ""), localDateFineProgetto.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
}
if (!obbligazione.getFl_calcolo_automatico().booleanValue()) {
String errore = "L'importo (" + new it.cnr.contab.util.EuroFormat().format(totaleScad) + ") assegnato alla GAE " + key.getCd_linea_attivita() + " e alla voce " + obbligazione.getElemento_voce().getCd_elemento_voce() + " è " + new String(totaleScad.compareTo((BigDecimal) prcImputazioneFinanziariaTable.get(key)) == 1 ? "maggiore" : "minore") + " di " + new it.cnr.contab.util.EuroFormat().format(totaleScad.subtract((BigDecimal) prcImputazioneFinanziariaTable.get(key)).abs()) + " rispetto al valore originario dell'impegno residuo proprio (" + new it.cnr.contab.util.EuroFormat().format((BigDecimal) prcImputazioneFinanziariaTable.get(key)) + ")";
// un movimento di modifica altrimenti è errore bloccante
if (totaleScad.subtract((BigDecimal) prcImputazioneFinanziariaTable.get(key)).compareTo(Utility.ZERO) < 0) {
// oppure nessun errore
if (tipoErrore.equals(TIPO_ERRORE_CONTROLLO)) {
errControllo.append(errore);
return obbligazione;
}
} else if (totaleScad.subtract((BigDecimal) prcImputazioneFinanziariaTable.get(key)).compareTo(Utility.ZERO) > 0) {
// oppure nessun errore
if (cdsModObblResImporto) {
if (tipoErrore.equals(TIPO_ERRORE_CONTROLLO)) {
errControllo.append(errore);
return obbligazione;
}
} else
throw new ApplicationException(errore);
} else
throw new ApplicationException(errore);
} else // }
{
diffScad = totaleScad.subtract((BigDecimal) prcImputazioneFinanziariaTable.get(key));
for (Iterator s = obbligazione.getObbligazione_scadenzarioColl().iterator(); s.hasNext() && diffScad.compareTo(Utility.ZERO) != 0; ) {
os = (Obbligazione_scadenzarioBulk) s.next();
if (os.getIm_associato_doc_amm().compareTo(Utility.ZERO) == 0) {
for (Iterator d = os.getObbligazione_scad_voceColl().iterator(); d.hasNext() && diffScad.compareTo(Utility.ZERO) != 0; ) {
osv = (Obbligazione_scad_voceBulk) d.next();
// totale per Cdr e per scadenza
if (key.getCd_centro_responsabilita().equals(osv.getCd_centro_responsabilita()) && key.getCd_linea_attivita().equals(osv.getCd_linea_attivita()) && key.getCd_voce().equals(osv.getCd_voce())) {
if (osv.getIm_voce().subtract(diffScad).compareTo(Utility.ZERO) == 1) {
osv.setToBeUpdated();
osv.setIm_voce(osv.getIm_voce().subtract(diffScad));
diffScad = Utility.ZERO;
} else {
osv.setToBeUpdated();
osv.setIm_voce(Utility.ZERO);
diffScad = diffScad.subtract(osv.getIm_voce());
}
}
}
}
}
if (diffScad.compareTo(Utility.ZERO) != 0)
throw new ApplicationException("Si è verificato un errore durante la ripartizione dell'importo assegnato alla GAE " + key.getCd_linea_attivita() + " e alla voce " + obbligazione.getElemento_voce().getCd_elemento_voce() + ". Procedere con l'imputazione manuale.");
}
}
}
return obbligazione;
} catch (Exception ex) {
throw handleException(ex);
}
}
use of it.cnr.jada.comp.ApplicationRuntimeException 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);
}
}
use of it.cnr.jada.comp.ApplicationRuntimeException in project sigla-main by consiglionazionaledellericerche.
the class ReversaleAutomaticaComponent method creaReversaleAutomaticaDaDocAttivi.
private OggettoBulk creaReversaleAutomaticaDaDocAttivi(UserContext userContext, ReversaleAutomaticaWizardBulk wizard, Collection<V_doc_attivo_accertamento_wizardBulk> docAttiviColl) throws ComponentException {
try {
Map<Integer, Map<Optional<String>, Map<Optional<Long>, List<V_doc_attivo_accertamento_wizardBulk>>>> mapTerzo = docAttiviColl.stream().collect(Collectors.groupingBy(V_doc_attivo_accertamento_wizardBulk::getCd_terzo, Collectors.groupingBy(p -> Optional.ofNullable(p.getCd_modalita_pag()), Collectors.groupingBy(q -> Optional.ofNullable(q.getPg_banca())))));
mapTerzo.keySet().stream().forEach(aCdTerzo -> {
mapTerzo.get(aCdTerzo).keySet().forEach(aCdModalitaPag -> {
mapTerzo.get(aCdTerzo).get(aCdModalitaPag).keySet().forEach(aPgBanca -> {
try {
List docAttiviCompetenzaColl = new ArrayList();
List docAttiviResiduiColl = new ArrayList();
mapTerzo.get(aCdTerzo).get(aCdModalitaPag).get(aPgBanca).forEach(docTerzo -> {
try {
Accertamento_scadenzarioBulk as = (Accertamento_scadenzarioBulk) getHome(userContext, Accertamento_scadenzarioBulk.class).findAndLock(new Accertamento_scadenzarioBulk(docTerzo.getCd_cds(), docTerzo.getEsercizio(), docTerzo.getEsercizio_ori_accertamento(), docTerzo.getPg_accertamento(), docTerzo.getPg_accertamento_scadenzario()));
if (as.getIm_scadenza().compareTo(docTerzo.getIm_scadenza()) != 0 || as.getIm_associato_doc_contabile().compareTo(docTerzo.getIm_associato_doc_contabile()) != 0)
throw new ApplicationException("Operazione non possibile! E' stata utilizzata da un altro utente la scadenza nr." + docTerzo.getPg_accertamento_scadenzario() + " dell'accertamento " + docTerzo.getEsercizio_ori_accertamento() + "/" + docTerzo.getPg_accertamento());
if (docTerzo.isCompetenza() || wizard.isFlGeneraReversaleUnica())
docAttiviCompetenzaColl.add(docTerzo);
else
docAttiviResiduiColl.add(docTerzo);
} catch (Exception e) {
throw new ApplicationRuntimeException(e);
}
});
ReversaleBulk reversaleCompetenza, reversaleResiduo;
if (!docAttiviCompetenzaColl.isEmpty()) {
reversaleCompetenza = creaReversaleAutomatica(userContext, wizard, MandatoBulk.TIPO_COMPETENZA);
reversaleCompetenza.setReversale_terzo(creaReversaleTerzo(reversaleCompetenza, cercaTerzo(userContext, aCdTerzo), wizard.getReversale_terzo().getTipoBollo()));
reversaleCompetenza = aggiungiDocAttivi(userContext, reversaleCompetenza, docAttiviCompetenzaColl);
reversaleCompetenza.refreshImporto();
verificaReversale(userContext, reversaleCompetenza, Boolean.TRUE);
super.creaConBulk(userContext, reversaleCompetenza);
aggiornaStatoFattura(userContext, reversaleCompetenza, INSERIMENTO_REVERSALE_ACTION);
wizard.getReversaliColl().add(reversaleCompetenza);
}
if (!docAttiviResiduiColl.isEmpty()) {
reversaleResiduo = creaReversaleAutomatica(userContext, wizard, MandatoBulk.TIPO_RESIDUO);
reversaleResiduo.setReversale_terzo(creaReversaleTerzo(reversaleResiduo, cercaTerzo(userContext, aCdTerzo), wizard.getReversale_terzo().getTipoBollo()));
reversaleResiduo = aggiungiDocAttivi(userContext, reversaleResiduo, docAttiviResiduiColl);
reversaleResiduo.refreshImporto();
verificaReversale(userContext, reversaleResiduo, Boolean.TRUE);
super.creaConBulk(userContext, reversaleResiduo);
aggiornaStatoFattura(userContext, reversaleResiduo, INSERIMENTO_REVERSALE_ACTION);
wizard.getReversaliColl().add(reversaleResiduo);
}
} catch (Exception e) {
throw new DetailedRuntimeException(e);
}
});
});
});
return wizard;
} catch (Exception e) {
throw handleException(e);
}
}
use of it.cnr.jada.comp.ApplicationRuntimeException in project sigla-main by consiglionazionaledellericerche.
the class ObbligazioneComponent method verificaCoerenzaGaeContratto.
public void verificaCoerenzaGaeContratto(UserContext aUC, ObbligazioneBulk obbligazione) throws ComponentException {
try {
Optional<Integer> optPrgContratto = Optional.ofNullable(obbligazione).flatMap(el -> Optional.ofNullable(el.getContratto())).flatMap(el -> Optional.ofNullable(el.getPg_progetto()));
if (optPrgContratto.isPresent()) {
ProgettoHome progettoHome = (ProgettoHome) getHome(aUC, ProgettoBulk.class);
WorkpackageHome home = (WorkpackageHome) getHome(aUC, WorkpackageBulk.class);
obbligazione.getObbligazione_scadenzarioColl().stream().flatMap(el -> Optional.ofNullable(el.getObbligazione_scad_voceColl()).map(List::stream).orElse(Stream.empty())).map(el -> el.getLinea_attivita()).distinct().forEach(el -> {
try {
WorkpackageBulk lineaAttivita = home.searchGAECompleta(aUC, obbligazione.getEsercizio(), el.getCd_centro_responsabilita(), el.getCd_linea_attivita());
if (!lineaAttivita.getPg_progetto().equals(optPrgContratto.get())) {
ProgettoBulk prgContratto = (ProgettoBulk) progettoHome.findByPrimaryKey(new ProgettoBulk(obbligazione.getEsercizio(), optPrgContratto.get(), ProgettoBulk.TIPO_FASE_NON_DEFINITA));
throw new ApplicationRuntimeException("Linea di Attività " + el.getCd_linea_attivita() + " del CDR " + el.getCd_centro_responsabilita() + " non selezionabile in quanto appartenente al progetto " + lineaAttivita.getCd_progetto() + " diverso dal progetto " + prgContratto.getCd_progetto() + " del contratto associato all'impegno.");
}
} catch (ComponentException | PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
}
} catch (Throwable e) {
throw handleException(e);
}
}
use of it.cnr.jada.comp.ApplicationRuntimeException in project sigla-main by consiglionazionaledellericerche.
the class ObbligazioneComponent method validaCdrLineaVoce.
/**
* Effettua controlli sulle combinazione Cdr/Voce/Linea indicati come parametri
* PreCondition:
* Una nuova combinazione Cdr/Voce/Linea è stata scelta o è stato aumentato l'importo
* complessivo assegnato al Cdr/Voce/Linea
* PostCondition:
* Se l'impegno creato è di competenza viene verificato che la disponibilità residua ad assumere
* impegni residui impropri non sia superiore al limite indicato nei Parametri CNR
*
* @param userContext lo user context
* @param obbligazione l'obbligazione di cui sto aggiornando l'imputazione finanziaria
* @param oldRipartizioneCdrVoceLinea la chiave restituita dalla chiamata alla procedura getOldRipartizioneCdrVoceLinea
* @param cdr il centro di responsabilità
* @param latt il codice della GAE
* @param voce l'istanza di <code>Voce_fBulk</code> contenente l'elemento voce da verificare
* @throws ComponentException
*/
private void validaCdrLineaVoce(UserContext userContext, ObbligazioneBulk obbligazione, PrimaryKeyHashtable oldRipartizioneCdrVoceLinea, String cdr, String latt, IVoceBilancioBulk voce) throws ComponentException {
BigDecimal totaleOldScad = new BigDecimal(0);
BigDecimal totaleNewScad = new BigDecimal(0);
Obbligazione_scad_voceBulk key = new Obbligazione_scad_voceBulk();
boolean found = false;
try {
Parametri_cdsBulk param_cds = (Parametri_cdsBulk) (getHome(userContext, Parametri_cdsBulk.class)).findByPrimaryKey(new Parametri_cdsBulk(CNRUserContext.getCd_cds(userContext), CNRUserContext.getEsercizio(userContext)));
boolean isObbligazioneResiduo = obbligazione.isObbligazioneResiduo() || obbligazione.isObbligazioneResiduoImproprio();
SaldoComponentSession saldoSession = Utility.createSaldoComponentSession();
// finanziamento indicato in CONFIGURAZIONE_CNR
if ((obbligazione.isCompetenza() && Optional.ofNullable(param_cds.getIm_soglia_consumo_residuo()).isPresent()) || isObbligazioneResiduo) {
totaleNewScad = obbligazione.getObbligazione_scadenzarioColl().stream().flatMap(os -> os.getObbligazione_scad_voceColl().stream()).filter(osv -> osv.getCd_centro_responsabilita().equals(cdr)).filter(osv -> osv.getCd_linea_attivita().equals(latt)).filter(osv -> osv.getCd_voce().equals(voce.getCd_voce())).map(Obbligazione_scad_voceBulk::getIm_voce).reduce((x, y) -> x.add(y)).orElse(BigDecimal.ZERO);
for (Enumeration e = oldRipartizioneCdrVoceLinea.keys(); e.hasMoreElements(); ) {
key = (Obbligazione_scad_voceBulk) e.nextElement();
found = false;
if (key.getCd_centro_responsabilita().equals(cdr) && key.getCd_linea_attivita().equals(latt) && key.getCd_voce().equals(voce.getCd_voce())) {
totaleOldScad = (BigDecimal) oldRipartizioneCdrVoceLinea.get(key);
found = true;
break;
}
}
/*
* Controllo, in caso di creazione impegni di competenza o aumento dell'importo assegnato,
* che la disponibilità ad assumere impegni residui impropri non sia superiore al limite
* previsto nei parametri CNR
*
**/
if (totaleOldScad.compareTo(totaleNewScad) == -1 || !found) {
if (!UtenteBulk.isAbilitatoSbloccoImpegni(userContext)) {
if (obbligazione.isCompetenza())
saldoSession.checkBloccoImpegniNatfin(userContext, cdr, latt, (Elemento_voceBulk) voce, ObbligazioneBulk.TIPO_COMPETENZA);
if (obbligazione.isObbligazioneResiduo())
saldoSession.checkBloccoImpegniNatfin(userContext, cdr, latt, (Elemento_voceBulk) voce, ObbligazioneBulk.TIPO_RESIDUO_PROPRIO);
if (obbligazione.isObbligazioneResiduoImproprio())
saldoSession.checkBloccoImpegniNatfin(userContext, cdr, latt, (Elemento_voceBulk) voce, ObbligazioneBulk.TIPO_RESIDUO_IMPROPRIO);
}
if (obbligazione.isCompetenza()) {
BigDecimal totaleResidui = saldoSession.getTotaleSaldoResidui(userContext, cdr, latt, voce);
if (totaleResidui.compareTo(param_cds.getIm_soglia_consumo_residuo()) == 1)
if (!found)
throw new ApplicationException("Non è possibile assumere impegni di competenza per il CDR/GAE/Voce (" + cdr + "/" + latt + "/" + voce.getCd_voce() + "), in quanto esiste una disponibilità ad assumere impegni " + "su stanziamenti residui impropri (" + new it.cnr.contab.util.EuroFormat().format(totaleResidui) + ").");
else
throw new ApplicationException("Non è possibile aumentare di " + new it.cnr.contab.util.EuroFormat().format(totaleNewScad.subtract(totaleOldScad)) + " l'importo di competenza già assegnato per il CDR/GAE/Voce (" + cdr + "/" + latt + "/" + voce.getCd_voce() + "), in quanto esiste una disponibilità ad assumere impegni " + "su stanziamenti residui impropri (" + new it.cnr.contab.util.EuroFormat().format(totaleResidui) + ").");
}
}
}
// è già presente in ObbligazioneResComponent
if (!obbligazione.isObbligazioneResiduo() && Utility.createParametriEnteComponentSession().isProgettoPianoEconomicoEnabled(userContext, CNRUserContext.getEsercizio(userContext))) {
WorkpackageBulk linea = ((WorkpackageHome) getHome(userContext, WorkpackageBulk.class)).searchGAECompleta(userContext, CNRUserContext.getEsercizio(userContext), cdr, latt);
ProgettoBulk progetto = linea.getProgetto();
Optional.ofNullable(progetto.getOtherField()).filter(el -> el.isStatoApprovato() || el.isStatoChiuso()).orElseThrow(() -> new ApplicationException("Attenzione! GAE " + linea.getCd_linea_attivita() + " non selezionabile. " + "Il progetto associato " + progetto.getCd_progetto() + " non risulta in stato Approvato o Chiuso."));
if (progetto.isDatePianoEconomicoRequired()) {
// Negli impegni controllare la più piccola data tra data inizio progetto e data stipula contratto definitivo
ProgettoHome progettoHome = (ProgettoHome) getHome(userContext, ProgettoBulk.class);
java.util.Collection<ContrattoBulk> contratti = progettoHome.findContratti(progetto.getPg_progetto());
Optional<ContrattoBulk> optContratto = contratti.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(obbligazione.getDt_registrazione())).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 registrazione dell'obbligazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione()) + ").");
});
else
Optional.of(progetto.getOtherField().getDtInizio()).filter(dt -> !dt.after(obbligazione.getDt_registrazione())).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 registrazione dell'obbligazione (" + new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione()) + ")."));
}
LocalDate localDateFineProgetto = Optional.ofNullable(progetto.getOtherField().getDtProroga()).orElse(Optional.ofNullable(progetto.getOtherField().getDtFine()).orElse(DateUtils.firstDateOfTheYear(3000))).toLocalDateTime().toLocalDate();
int ggProroga = Optional.ofNullable(obbligazione.getElemento_voce()).flatMap(el -> {
if (obbligazione.isCompetenza())
return Optional.ofNullable(el.getGg_deroga_obbl_comp_prg_scad());
else
return Optional.ofNullable(el.getGg_deroga_obbl_res_prg_scad());
}).filter(el -> el.compareTo(0) > 0).orElse(0);
localDateFineProgetto = localDateFineProgetto.plusDays(ggProroga);
if (localDateFineProgetto.isBefore(obbligazione.getDt_registrazione().toLocalDateTime().toLocalDate()))
throw new ApplicationMessageFormatException("Attenzione! GAE {0} non selezionabile. " + "La data fine/proroga del progetto {1} {2} ({3}) è precedente rispetto alla data di registrazione dell''impegno ({4}).", linea.getCd_linea_attivita(), progetto.getCd_progetto(), (ggProroga > 0 ? ", aumentata di " + ggProroga + " giorni," : ""), localDateFineProgetto.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")), new java.text.SimpleDateFormat("dd/MM/yyyy").format(obbligazione.getDt_registrazione()));
}
} catch (Exception e) {
throw handleException(e);
}
}
Aggregations