use of it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class CRUDFatturaPassivaBP method sdoppiaDettaglioInAutomatico.
public void sdoppiaDettaglioInAutomatico(ActionContext context) throws ValidationException, BusinessProcessException {
try {
it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession h = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);
FatturaPassivaComponentSession session = (FatturaPassivaComponentSession) createComponentSession();
Fattura_passivaBulk documento = (Fattura_passivaBulk) getModel();
Fattura_passiva_rigaIBulk dettaglioSelezionato = (Fattura_passiva_rigaIBulk) getDettaglio().getModel();
Obbligazione_scadenzarioBulk scadenzaNuova = null;
if (dettaglioSelezionato == null)
return;
if (documento.getStato_cofi() != null && documento.getStato_cofi().equals(documento.STATO_PAGATO))
setMessage("Non è possibile sdoppiare righe in un documento pagato.");
if (dettaglioSelezionato.getIm_riga_sdoppia() == null || dettaglioSelezionato.getIm_riga_sdoppia().equals(Utility.ZERO) || dettaglioSelezionato.getIm_riga_sdoppia().compareTo(dettaglioSelezionato.getSaldo()) != -1) {
setMessage("Il nuovo importo della riga da sdoppiare deve essere positivo ed inferiore " + "al saldo originario.");
return;
}
Obbligazione_scadenzarioBulk scadenzaVecchia = dettaglioSelezionato.getObbligazione_scadenziario();
BigDecimal newImportoRigaVecchia = dettaglioSelezionato.getIm_riga_sdoppia().add(dettaglioSelezionato.getIm_diponibile_nc().subtract(dettaglioSelezionato.getSaldo()));
BigDecimal newImportoRigaNuova = dettaglioSelezionato.getSaldo().subtract(dettaglioSelezionato.getIm_riga_sdoppia());
BigDecimal newPrezzoRigaVecchia = newImportoRigaVecchia.divide(documento.getCambio(), 2, BigDecimal.ROUND_HALF_UP).divide(dettaglioSelezionato.getQuantita().multiply(dettaglioSelezionato.getVoce_iva().getPercentuale().divide(new BigDecimal(100)).add(new java.math.BigDecimal(1))), 2, BigDecimal.ROUND_HALF_UP);
BigDecimal newPrezzoRigaNuova = dettaglioSelezionato.getPrezzo_unitario().subtract(newPrezzoRigaVecchia);
BigDecimal oldImportoIvaVecchia = BigDecimal.ZERO;
BigDecimal tot_imp = BigDecimal.ZERO;
if (dettaglioSelezionato.getVoce_iva().getFl_autofattura() || documento.quadraturaInDeroga()) {
oldImportoIvaVecchia = dettaglioSelezionato.getIm_iva();
tot_imp = newPrezzoRigaVecchia.multiply(documento.getCambio()).multiply(dettaglioSelezionato.getQuantita()).setScale(2, BigDecimal.ROUND_HALF_UP);
} else
tot_imp = dettaglioSelezionato.getIm_riga_sdoppia();
if (dettaglioSelezionato.getObbligazione_scadenziario() != null) {
scadenzaNuova = (Obbligazione_scadenzarioBulk) h.sdoppiaScadenzaInAutomatico(context.getUserContext(), scadenzaVecchia, scadenzaVecchia.getIm_scadenza().subtract(dettaglioSelezionato.getSaldo().subtract(oldImportoIvaVecchia)).add(tot_imp));
// ricarico obbligazione e recupero i riferimenti alle scadenze
ObbligazioneBulk obbligazione = (ObbligazioneBulk) h.inizializzaBulkPerModifica(context.getUserContext(), scadenzaNuova.getObbligazione());
if (!obbligazione.getObbligazione_scadenzarioColl().containsByPrimaryKey(scadenzaVecchia) || !obbligazione.getObbligazione_scadenzarioColl().containsByPrimaryKey(scadenzaNuova))
throw new ValidationException("Errore nello sdoppiamento della scadenza dell'impegno.");
scadenzaVecchia = (Obbligazione_scadenzarioBulk) obbligazione.getObbligazione_scadenzarioColl().get(obbligazione.getObbligazione_scadenzarioColl().indexOfByPrimaryKey(scadenzaVecchia));
scadenzaNuova = (Obbligazione_scadenzarioBulk) obbligazione.getObbligazione_scadenzarioColl().get(obbligazione.getObbligazione_scadenzarioColl().indexOfByPrimaryKey(scadenzaNuova));
}
// creo la nuova riga di dettaglio e la associo al documento
Fattura_passiva_rigaIBulk nuovoDettaglio = new Fattura_passiva_rigaIBulk();
getDettaglio().addDetail(nuovoDettaglio);
nuovoDettaglio = copyByRigaDocumento(context, nuovoDettaglio, dettaglioSelezionato);
nuovoDettaglio.setQuantita(dettaglioSelezionato.getQuantita());
nuovoDettaglio.setPrezzo_unitario(newPrezzoRigaNuova);
nuovoDettaglio.calcolaCampiDiRiga();
// setto im_diponibile prime per la verifica e dopo
nuovoDettaglio.setIm_diponibile_nc(nuovoDettaglio.getSaldo());
if (nuovoDettaglio.getIm_diponibile_nc().compareTo(newImportoRigaNuova) != 0) {
nuovoDettaglio.setIm_iva(nuovoDettaglio.getIm_iva().add(newImportoRigaNuova.subtract(nuovoDettaglio.getIm_diponibile_nc())));
nuovoDettaglio.setIm_totale_divisa(newImportoRigaNuova.subtract(nuovoDettaglio.getIm_iva()));
nuovoDettaglio.setFl_iva_forzata(Boolean.TRUE);
nuovoDettaglio.calcolaCampiDiRiga();
}
nuovoDettaglio.setIm_diponibile_nc(nuovoDettaglio.getSaldo());
// Aggiorno la vecchia riga di dettaglio ed in particolare l'importo
// della riga da sdoppiare
// del doc amministrativo
BigDecimal oldImpTotaleDivisa = dettaglioSelezionato.getIm_totale_divisa();
dettaglioSelezionato.setPrezzo_unitario(newPrezzoRigaVecchia);
dettaglioSelezionato.calcolaCampiDiRiga();
// setto im_diponibile prime per la verifica e dopo
dettaglioSelezionato.setIm_diponibile_nc(dettaglioSelezionato.getSaldo());
if (dettaglioSelezionato.getIm_diponibile_nc().compareTo(newImportoRigaVecchia) != 0) {
dettaglioSelezionato.setIm_iva(dettaglioSelezionato.getIm_iva().add(newImportoRigaVecchia.subtract(dettaglioSelezionato.getIm_diponibile_nc())));
dettaglioSelezionato.setIm_totale_divisa(newImportoRigaVecchia.subtract(dettaglioSelezionato.getIm_iva()));
dettaglioSelezionato.setFl_iva_forzata(Boolean.TRUE);
dettaglioSelezionato.calcolaCampiDiRiga();
}
dettaglioSelezionato.setIm_diponibile_nc(dettaglioSelezionato.getSaldo());
dettaglioSelezionato.setToBeUpdated();
if (scadenzaVecchia != null) {
for (Iterator i = documento.getFattura_passiva_dettColl().iterator(); i.hasNext(); ) {
Fattura_passiva_rigaIBulk riga = (Fattura_passiva_rigaIBulk) i.next();
if (riga.getObbligazione_scadenziario() != null && riga.getObbligazione_scadenziario().equalsByPrimaryKey(scadenzaVecchia)) {
riga.setObbligazione_scadenziario(scadenzaVecchia);
documento.addToDefferredSaldi(scadenzaVecchia.getObbligazione(), scadenzaVecchia.getObbligazione().getSaldiInfo());
}
}
}
if (scadenzaNuova != null) {
BulkList selectedModels = new BulkList();
selectedModels.add(nuovoDettaglio);
documento = session.contabilizzaDettagliSelezionati(context.getUserContext(), documento, selectedModels, scadenzaNuova);
documento.addToFattura_passiva_obbligazioniHash(scadenzaNuova, nuovoDettaglio);
documento.addToDefferredSaldi(scadenzaNuova.getObbligazione(), scadenzaNuova.getObbligazione().getSaldiInfo());
// Sdoppia associazione inventario in automatico
if (nuovoDettaglio.isInventariato()) {
// r.p. Prendo il progressivo dalla fattura_passivaBulk
// perchè viene aggiornato
BuonoCaricoScaricoComponentSession r = (it.cnr.contab.inventario01.ejb.BuonoCaricoScaricoComponentSession) it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", it.cnr.contab.inventario01.ejb.BuonoCaricoScaricoComponentSession.class);
Ass_inv_bene_fatturaBulk newAss = r.sdoppiaAssociazioneFor(context.getUserContext(), (Fattura_passiva_rigaBulk) dettaglioSelezionato, (Fattura_passiva_rigaBulk) nuovoDettaglio);
documento.addToAssociazioniInventarioHash(newAss, nuovoDettaglio);
}
}
documento = (Fattura_passivaBulk) session.rebuildDocumento(context.getUserContext(), documento);
getObbligazioniController().getSelection().clear();
getObbligazioniController().setModelIndex(context, -1);
getObbligazioniController().setModelIndex(context, it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(getObbligazioniController().getDetails(), dettaglioSelezionato));
documento.setDetailDoubled(true);
setModel(context, documento);
} catch (Exception e) {
throw handleException(e);
}
}
use of it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class ObbligazioneModificaComponent method inserisciModifiche.
private Obbligazione_modificaBulk inserisciModifiche(UserContext aUC, Obbligazione_modificaBulk bulk) throws it.cnr.jada.comp.ComponentException {
try {
Obbligazione_modificaBulk obbMod = (Obbligazione_modificaBulk) bulk;
ObbligazioneBulk obbligazione = obbMod.getObbligazione();
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();
PrimaryKeyHashtable prcImputazioneFinanziariaTable = getOldRipartizioneCdrVoceLinea(aUC, obbligazione);
// 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) {
Obbligazione_mod_voceBulk obbModVoce = new Obbligazione_mod_voceBulk(obbMod.getCd_cds(), obbMod.getEsercizio(), obbMod.getPg_modifica(), key.getTi_appartenenza(), key.getTi_gestione(), key.getCd_voce(), key.getCd_centro_responsabilita(), key.getCd_linea_attivita());
IVoceBilancioBulk voce = null;
if (((Parametri_cnrHome) getHome(aUC, Parametri_cnrBulk.class)).isNuovoPdg(aUC)) {
voce = new Elemento_voceBulk(key.getCd_voce(), obbMod.getEsercizio(), key.getTi_appartenenza(), key.getTi_gestione());
voce = (Elemento_voceBulk) getHome(aUC, Elemento_voceBulk.class).findByPrimaryKey(voce);
} else {
voce = new Voce_fBulk(key.getCd_voce(), obbMod.getEsercizio(), key.getTi_appartenenza(), key.getTi_gestione());
voce = (Voce_fBulk) getHome(aUC, Voce_fBulk.class).findByPrimaryKey(voce);
}
obbModVoce.setVoce(voce);
WorkpackageBulk linea = new WorkpackageBulk(key.getCd_centro_responsabilita(), key.getCd_linea_attivita());
linea = (WorkpackageBulk) getHome(aUC, linea).findByPrimaryKey(linea);
obbModVoce.setLinea_attivita(linea);
obbModVoce.setIm_modifica(totaleScad.subtract((BigDecimal) prcImputazioneFinanziariaTable.get(key)));
obbModVoce.setToBeCreated();
obbMod.addToObbligazione_mod_voceColl(obbModVoce);
}
}
return obbMod;
} catch (Exception e) {
throw handleException(e);
}
}
use of it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class ObbligazioneResComponent method generaDettagliScadenzaObbligazione.
protected ObbligazioneBulk generaDettagliScadenzaObbligazione(UserContext aUC, ObbligazioneBulk obbligazione, Obbligazione_scadenzarioBulk scadenzario, boolean allineaImputazioneFinanziaria) throws ComponentException {
Obbligazione_scadenzarioBulk os;
// non e' ancora stata selezionata l'imputazione finanziaria
if (obbligazione.getLineeAttivitaSelezionateColl().size() == 0 && obbligazione.getNuoveLineeAttivitaColl().size() == 0)
return obbligazione;
// non sono ancora state inserite le scadenze
if (obbligazione.getObbligazione_scadenzarioColl().size() == 0)
return obbligazione;
if (// una sola scadenza e' stata modificata
scadenzario != null) {
// creo i dettagli della scadenza per le linee attivita da PDG
creaDettagliScadenzaPerLineeAttivitaDaPdG(aUC, obbligazione, scadenzario);
// creo i dettagli della scadenza per le nuove linee attivita
creaDettagliScadenzaPerNuoveLineeAttivita(aUC, obbligazione, scadenzario);
} else // imputazione finanziaria e' stata modificata, quindi rigenero i dettagli per tutte le scadenze
{
// per ogni scadenza aggiorno i suoi dettagli in base alle linee di attività specificate dall'utente
for (Iterator scadIterator = obbligazione.getObbligazione_scadenzarioColl().iterator(); scadIterator.hasNext(); ) {
os = (Obbligazione_scadenzarioBulk) scadIterator.next();
// cancello i dettagli della scadenza per le linee attivita che non esistono piu'
cancellaDettaglioScadenze(aUC, obbligazione, os);
// creo i dettagli della scadenza per le linee attivita da PDG
creaDettagliScadenzaPerLineeAttivitaDaPdG(aUC, obbligazione, os);
// creo i dettagli della scadenza per le nuove linee attivita
creaDettagliScadenzaPerNuoveLineeAttivita(aUC, obbligazione, os);
}
}
if (allineaImputazioneFinanziaria)
obbligazione = calcolaPercentualeImputazioneObbligazione(aUC, obbligazione);
return obbligazione;
}
use of it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk 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.contab.doccont00.core.bulk.ObbligazioneBulk in project sigla-main by consiglionazionaledellericerche.
the class ObbligazioneComponent method aggiornaSaldiInModifica.
/**
* Pre-post-conditions:
*
* Nome: Aggiorna saldi in contesto non transazionale
* Pre: Un'obbligazione e' stata modificata/eliminata in un contesto non transazionale
* La disponibilità di cassa e' già stata verificata
* Post: Per ogni V_mod_saldi_obbligBulk presente nel database a fronte dell'obbligazione e del suo pg_ver_rec
* e' stato richiamato il metodo sulla Component di gestione dei Saldi (SaldoCompoennt) per aggiornare
* il saldo del capitolo corrispondente senza effettuare la verifica della disponibilità di cassa; se necessario
* anche i saldi relativi ai mandati e al pagato vengono aggiornati.
*
* Nome: Aggiorna saldi in contesto transazionale senza verifica disponibilità di cassa sul capitolo
* Pre: Un'obbligazione e' stata modificata in un contesto transazionale
* L'utente ha già confermato che intende forzare la verifica della disponibilità di cassa sui capitoli interessati dall'obbligazione.
* Post: Per ogni V_mod_saldi_obbligBulk presente nel database a fronte dell'obbligazione e del suo pg_ver_rec
* e' stato richiamato il metodo sulla Component di gestione dei Saldi (SaldoCompoennt) per aggiornare
* il saldo del capitolo corrispondente senza effettuare la verifica della disponibilità di cassa
*
* Nome: Aggiorna saldi in contesto transazionale con verifica disponibilità di cassa sul capitolo
* Pre: Un'obbligazione e' stata modificata in un contesto transazionale
* L'utente non ha ancora confermato che intende forzare la verifica della disponibilità di cassa sui capitoli interessati dall'obbligazione.
* Post: Per ogni V_mod_saldi_obbligBulk presente nel database a fronte dell'obbligazione e del suo pg_ver_rec
* e' stato richiamato il metodo sulla Component di gestione dei Saldi (SaldoCompoennt) per aggiornare
* il saldo del capitolo corrispondente richiedendo di effettuare la verifica della disponibilità di cassa.
*
* @param userContext lo UserContext che ha generato la richiesta
* @param obbligazione l'ObbligazioneBulk per cui aggiornare i saldi
* @param pg_ver_rec il "pg_ver_rec" iniziale dell'obbligazione
* @param forzaDispCassa il parametro che indica se l'utente ha confermato di forzare il controllo della disp. di cassa e' necessario
*/
private void aggiornaSaldiInModifica(UserContext userContext, ObbligazioneBulk obbligazione, Long pg_ver_rec, Boolean forzaDispCassa) throws it.cnr.jada.persistency.PersistencyException, ComponentException, java.rmi.RemoteException {
SaldoComponentSession session = createSaldoComponentSession();
/* in realtà siamo sempre a competenza ma è meglio verificare */
String ti_competenza_residuo;
String tipo_imp;
if (obbligazione.isResiduo())
ti_competenza_residuo = ReversaleBulk.TIPO_RESIDUO;
else
ti_competenza_residuo = ReversaleBulk.TIPO_COMPETENZA;
List saldiDaAggiornare = ((V_mod_saldi_obbligHome) getHome(userContext, V_mod_saldi_obbligBulk.class)).findModificheSaldiFor(obbligazione, pg_ver_rec);
if (userContext.isTransactional() && saldiDaAggiornare.size() == 0)
throw new ApplicationException("Attenzione! I saldi relativi all'impegno " + obbligazione.getEsercizio_originale() + "/" + obbligazione.getPg_obbligazione() + " non possono essere aggiornati perchè l'impegno non e' presente nello storico.");
for (Iterator i = saldiDaAggiornare.iterator(); i.hasNext(); ) {
V_mod_saldi_obbligBulk modSaldo = (V_mod_saldi_obbligBulk) i.next();
if (modSaldo.getIm_delta_voce().compareTo(new BigDecimal(0)) != 0) {
Voce_fBulk voce = new Voce_fBulk(modSaldo.getCd_voce(), obbligazione.getEsercizio(), modSaldo.getTi_appartenenza(), modSaldo.getTi_gestione());
/* il check della disponabilità di cassa deve essere eseguito solo se
l'importo delta del saldo e' positivo e
l'utente non ha ancora avuto il warning sulla disp.cassa oppure
l'utente ha avuto il warning sulla disp.cassa e ha risposto no */
boolean checkDispCassa = modSaldo.getIm_delta_voce().compareTo(new BigDecimal(0)) > 0 && (forzaDispCassa == null || forzaDispCassa != null && !forzaDispCassa.booleanValue());
session.aggiornaObbligazioniAccertamenti(userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_voce(), ti_competenza_residuo, checkDispCassa);
if (modSaldo.getIm_delta_man_voce().compareTo(new BigDecimal(0)) != 0)
session.aggiornaMandatiReversali(userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_man_voce(), ti_competenza_residuo, checkDispCassa);
if (modSaldo.getIm_delta_pag_voce().compareTo(new BigDecimal(0)) != 0)
session.aggiornaPagamentiIncassi(userContext, voce, obbligazione.getCd_cds(), modSaldo.getIm_delta_pag_voce(), ti_competenza_residuo);
}
}
/*
* Aggiorno i Saldi per CDR/Linea
*/
List saldiDaAggiornareCdrLinea = ((V_mod_saldi_obblig_scad_voceHome) getHome(userContext, V_mod_saldi_obblig_scad_voceBulk.class)).findModificheSaldiFor(obbligazione, pg_ver_rec);
if (userContext.isTransactional() && saldiDaAggiornareCdrLinea.size() == 0)
throw new ApplicationException("Attenzione! I saldi relativi all'impegno " + obbligazione.getEsercizio_originale() + "/" + obbligazione.getPg_obbligazione() + " non possono essere aggiornati perchè l'impegno non e' presente nello storico.");
for (Iterator i = saldiDaAggiornareCdrLinea.iterator(); i.hasNext(); ) {
V_mod_saldi_obblig_scad_voceBulk modSaldo = (V_mod_saldi_obblig_scad_voceBulk) i.next();
Voce_fBulk voce = new Voce_fBulk(modSaldo.getCd_voce(), obbligazione.getEsercizio(), modSaldo.getTi_appartenenza(), modSaldo.getTi_gestione());
/* il check della disponabilità di cassa deve essere eseguito solo se
l'importo delta del saldo e' positivo e
l'utente non ha ancora avuto il warning sulla disp.cassa oppure
l'utente ha avuto il warning sulla disp.cassa e ha risposto no */
boolean checkDispCassa = modSaldo.getIm_delta_voce().compareTo(new BigDecimal(0)) > 0 && (forzaDispCassa == null || forzaDispCassa != null && !forzaDispCassa.booleanValue());
if (modSaldo.getIm_delta_voce().compareTo(new BigDecimal(0)) != 0) {
// non deve variare il valore sul campo IM_OBBL_RES_IMP
if (!obbligazione.isObbligazioneResiduo())
session.aggiornaObbligazioniAccertamenti(userContext, modSaldo.getCd_centro_responsabilita(), modSaldo.getCd_linea_attivita(), voce, modSaldo.getEsercizio_originale(), modSaldo.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_OBB_RES_IMPROPRIA) ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO : Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO, modSaldo.getIm_delta_voce(), modSaldo.getCd_tipo_documento_cont());
}
if (modSaldo.getIm_delta_man_voce().compareTo(new BigDecimal(0)) != 0)
session.aggiornaMandatiReversali(userContext, modSaldo.getCd_centro_responsabilita(), modSaldo.getCd_linea_attivita(), voce, modSaldo.getEsercizio_originale(), modSaldo.getIm_delta_man_voce(), modSaldo.getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_OBB_RES_IMPROPRIA) ? Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_IMPROPRIO : Voce_f_saldi_cdr_lineaBulk.TIPO_RESIDUO_PROPRIO, checkDispCassa);
if (modSaldo.getIm_delta_pag_voce().compareTo(new BigDecimal(0)) != 0)
session.aggiornaPagamentiIncassi(userContext, modSaldo.getCd_centro_responsabilita(), modSaldo.getCd_linea_attivita(), voce, modSaldo.getEsercizio_originale(), modSaldo.getIm_delta_pag_voce());
}
// aggiorniamo i saldi legati alle modifiche agli impegni residui
aggiornaSaldiImpegniResiduiPropri(userContext, obbligazione);
if (obbligazione.isObbligazioneResiduo()) {
// aggiorniamo il progressivo in definitivo
Obbligazione_modificaBulk obbMod = ((ObbligazioneResBulk) obbligazione).getObbligazione_modifica();
if (obbMod != null && obbMod.isTemporaneo()) {
aggiornaObbligazioneModificaTemporanea(userContext, obbMod);
}
}
checkDispObbligazioniAccertamenti(userContext, obbligazione);
}
Aggregations