use of it.cnr.contab.compensi00.docs.bulk.Contributo_ritenutaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponent method proposeScritturaPartitaDoppiaMandatoStipendi.
private Scrittura_partita_doppiaBulk proposeScritturaPartitaDoppiaMandatoStipendi(UserContext userContext, MandatoBulk mandato) throws ComponentException, PersistencyException, RemoteException {
// recupero il documento generico passivo leggendolo dalla tabelle stipendiCofiBulk
Stipendi_cofiBulk stipendiCofiBulk = ((Stipendi_cofiHome) getHome(userContext, Stipendi_cofiBulk.class)).findStipendiCofi(mandato);
if (!Optional.ofNullable(stipendiCofiBulk).isPresent())
throw new ApplicationException("Il mandato " + mandato.getEsercizio() + "/" + mandato.getCds() + "/" + mandato.getPg_mandato() + " non risulta pagare uno stipendio. Proposta di prima nota non possibile.");
CompensoBulk compensoStipendi = (CompensoBulk) Utility.createCompensoComponentSession().inizializzaBulkPerModifica(userContext, new CompensoBulk(stipendiCofiBulk.getCd_cds_comp(), stipendiCofiBulk.getCd_uo_comp(), stipendiCofiBulk.getEsercizio_comp(), stipendiCofiBulk.getPg_comp()));
// Recupero dal compenso tutti i conti patrimoniali aperti
List<Movimento_cogeBulk> dettPnPatrimonialePartita = this.findContoAnag(userContext, compensoStipendi);
if (dettPnPatrimonialePartita == null || dettPnPatrimonialePartita.isEmpty())
throw new ApplicationException("Non è stato possibile individuare la riga di tipo debito/credito per il compenso " + stipendiCofiBulk.getEsercizio_comp() + "/" + stipendiCofiBulk.getCd_cds_comp() + "/" + stipendiCofiBulk.getCd_uo_comp() + "/" + stipendiCofiBulk.getPg_comp() + ". Proposta di prima nota non possibile.");
TestataPrimaNota testataPrimaNota = new TestataPrimaNota(mandato.getMandato_terzo().getCd_terzo(), null, null);
// Chiudo i conti patrimoniali
Voce_epBulk voceEpBanca = this.findContoBanca(userContext, CNRUserContext.getEsercizio(userContext));
for (Iterator<Movimento_cogeBulk> i = dettPnPatrimonialePartita.iterator(); i.hasNext(); ) {
Movimento_cogeBulk dettPN = i.next();
testataPrimaNota.addDettaglio(compensoStipendi.getTipoDocumentoEnum().getTipoPatrimoniale(), Movimento_cogeBulk.getControSezione(compensoStipendi.getTipoDocumentoEnum().getSezionePatrimoniale()), dettPN.getCd_voce_ep(), dettPN.getIm_movimento());
testataPrimaNota.addDettaglio(Movimento_cogeBulk.TipoRiga.TESORERIA.value(), compensoStipendi.getTipoDocumentoEnum().getSezionePatrimoniale(), voceEpBanca.getCd_voce_ep(), dettPN.getIm_movimento());
}
// Devo leggere la reversale vincolata
List<Contributo_ritenutaBulk> righeCori = compensoStipendi.getChildren();
BigDecimal imRitenute = righeCori.stream().map(Contributo_ritenutaBulk::getAmmontare).reduce(BigDecimal.ZERO, BigDecimal::add);
if (imRitenute.compareTo(mandato.getIm_ritenute()) != 0)
throw new ApplicationException("L'importo delle righe ritenute del compenso associato al mandato non corrisponde con l'importo ritenute associato al mandato.");
// Registrazione conto CONTRIBUTI-RITENUTE
righeCori.stream().forEach(cori -> {
try {
BigDecimal imCori = cori.getAmmontare();
Pair<Voce_epBulk, Voce_epBulk> pairContoCori = this.findPairContiMandato(userContext, cori);
Voce_epBulk contoVersamentoCori = pairContoCori.getSecond();
testataPrimaNota.openDettaglioPatrimoniale(compensoStipendi, contoVersamentoCori.getCd_voce_ep(), imCori, false);
testataPrimaNota.addDettaglio(Movimento_cogeBulk.TipoRiga.TESORERIA.value(), Movimento_cogeBulk.getControSezione(compensoStipendi.getTipoDocumentoEnum().getSezionePatrimoniale()), voceEpBanca.getCd_voce_ep(), imCori);
} catch (ComponentException | PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
return this.generaScrittura(userContext, mandato, Arrays.asList(testataPrimaNota), true);
}
use of it.cnr.contab.compensi00.docs.bulk.Contributo_ritenutaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponent method getCORI.
private List<Contributo_ritenutaBulk> getCORI(UserContext userContext, Mandato_rigaBulk mandatoRiga) throws PersistencyException, ComponentException {
Documento_generico_rigaHome dgHome = (Documento_generico_rigaHome) getHome(userContext, Documento_generico_rigaBulk.class);
Ass_obb_acr_pgiroHome assObbAccHome = (Ass_obb_acr_pgiroHome) getHome(userContext, Ass_obb_acr_pgiroBulk.class);
Contributo_ritenutaHome coriHome = (Contributo_ritenutaHome) getHome(userContext, Contributo_ritenutaBulk.class);
List<Contributo_ritenutaBulk> coriList = new ArrayList<>();
Documento_generico_rigaBulk docRiga = (Documento_generico_rigaBulk) dgHome.findByPrimaryKey(new Documento_generico_rigaBulk(mandatoRiga.getEsercizio_doc_amm().toString(), mandatoRiga.getCd_tipo_documento_amm(), mandatoRiga.getCd_uo_doc_amm(), mandatoRiga.getEsercizio_doc_amm(), mandatoRiga.getPg_doc_amm(), BigDecimal.ONE.longValue()));
if (docRiga.getPg_obbligazione() != null) {
List<Ass_obb_acr_pgiroBulk> assObbAccList = (List<Ass_obb_acr_pgiroBulk>) assObbAccHome.findPgiroMandatoRiga(userContext, mandatoRiga);
assObbAccList.stream().forEach(assObbAcc -> {
try {
SQLBuilder sqlCori = coriHome.createSQLBuilder();
sqlCori.addClause(FindClause.AND, "cd_cds_accertamento", SQLBuilder.EQUALS, assObbAcc.getCd_cds());
sqlCori.addClause(FindClause.AND, "esercizio_accertamento", SQLBuilder.EQUALS, assObbAcc.getEsercizio());
sqlCori.addClause(FindClause.AND, "esercizio_ori_accertamento", SQLBuilder.EQUALS, assObbAcc.getEsercizio_ori_accertamento());
sqlCori.addClause(FindClause.AND, "pg_accertamento", SQLBuilder.EQUALS, assObbAcc.getPg_accertamento());
coriList.addAll(coriHome.fetchAll(sqlCori));
} catch (PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
}
return coriList;
}
use of it.cnr.contab.compensi00.docs.bulk.Contributo_ritenutaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponent method proposeScritturaPartitaDoppiaMandatoCompenso.
private Scrittura_partita_doppiaBulk proposeScritturaPartitaDoppiaMandatoCompenso(UserContext userContext, MandatoBulk mandato) throws ComponentException, PersistencyException, RemoteException {
if (!mandato.getMandato_rigaColl().stream().map(Mandato_rigaBulk::getCd_tipo_documento_amm).filter(el -> TipoDocumentoEnum.fromValue(el).isCompenso()).findAny().isPresent())
throw new ApplicationException("Il mandato " + mandato.getEsercizio() + "/" + mandato.getCds() + "/" + mandato.getPg_mandato() + " non risulta pagare un compenso. Proposta di prima nota non possibile.");
if (mandato.getMandato_rigaColl().isEmpty() || mandato.getMandato_rigaColl().size() > 1)
throw new ApplicationException("Il mandato " + mandato.getEsercizio() + "/" + mandato.getCds() + "/" + mandato.getPg_mandato() + " ha un numero di righe non coerente con l'unica prevista per un mandato di compenso. Proposta di prima nota non possibile.");
Mandato_rigaBulk rigaMandato = mandato.getMandato_rigaColl().get(0);
TestataPrimaNota testataPrimaNota = new TestataPrimaNota(mandato.getMandato_terzo().getCd_terzo(), null, null);
CompensoBulk compenso = (CompensoBulk) Utility.createCompensoComponentSession().inizializzaBulkPerModifica(userContext, new CompensoBulk(rigaMandato.getCd_cds_doc_amm(), rigaMandato.getCd_uo_doc_amm(), rigaMandato.getEsercizio_doc_amm(), rigaMandato.getPg_doc_amm()));
List<Contributo_ritenutaBulk> righeCori = compenso.getChildren();
// recupero la scrittura del compenso
Scrittura_partita_doppiaBulk scritturaCompenso = this.proposeScritturaPartitaDoppiaCompenso(userContext, compenso);
BigDecimal imSaldoPatrimoniale = scritturaCompenso.getAllMovimentiColl().stream().filter(el -> Movimento_cogeBulk.TipoRiga.DEBITO.value().equals(el.getTi_riga())).map(el -> el.isSezioneAvere() ? el.getIm_movimento() : el.getIm_movimento().negate()).reduce(BigDecimal.ZERO, BigDecimal::add);
if (imSaldoPatrimoniale.compareTo(rigaMandato.getIm_mandato_riga()) != 0)
throw new ApplicationException("La scrittura Prima Nota associata al compenso del mandato presenta in Avere movimenti di conti patrimoniali " + "per un importo non coincidente con quello del mandato stesso.");
BigDecimal imRitenute = righeCori.stream().map(Contributo_ritenutaBulk::getAmmontare).reduce(BigDecimal.ZERO, BigDecimal::add);
if (imRitenute.compareTo(rigaMandato.getIm_ritenute_riga()) != 0)
throw new ApplicationException("L'importo delle righe ritenute del compenso associato al mandato non corrisponde con l'importo ritenute associato al mandato.");
BigDecimal imNettoMandato = rigaMandato.getIm_mandato_riga().subtract(rigaMandato.getIm_ritenute_riga());
// Chiudo il patrimoniale principale del compenso.... quello con la partita
Voce_epBulk voceEpBanca = this.findContoBanca(userContext, CNRUserContext.getEsercizio(userContext));
Voce_epBulk contoPatrimonialePartita = this.findPairCosto(userContext, compenso).getSecond();
testataPrimaNota.closeDettaglioPatrimoniale(compenso, contoPatrimonialePartita.getCd_voce_ep(), imNettoMandato, true);
testataPrimaNota.addDettaglio(Movimento_cogeBulk.TipoRiga.TESORERIA.value(), compenso.getTipoDocumentoEnum().getSezionePatrimoniale(), voceEpBanca.getCd_voce_ep(), imNettoMandato);
// Registrazione conto CONTRIBUTI-RITENUTE
righeCori.stream().forEach(cori -> {
try {
BigDecimal imCori = cori.getAmmontare();
Pair<Voce_epBulk, Voce_epBulk> pairContoCori = this.findPairContiMandato(userContext, cori);
Voce_epBulk contoPatrimonialeClose = cori.isContributoPercipiente() ? contoPatrimonialePartita : pairContoCori.getFirst();
Voce_epBulk contoVersamentoCori = pairContoCori.getSecond();
testataPrimaNota.closeDettaglioPatrimoniale(compenso, contoPatrimonialeClose.getCd_voce_ep(), imCori, cori.isContributoPercipiente());
testataPrimaNota.openDettaglioPatrimoniale(compenso, contoVersamentoCori.getCd_voce_ep(), imCori, false);
} catch (ComponentException | PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
return this.generaScrittura(userContext, mandato, Arrays.asList(testataPrimaNota), true);
}
use of it.cnr.contab.compensi00.docs.bulk.Contributo_ritenutaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponent method getCORI.
private List<Contributo_ritenutaBulk> getCORI(UserContext userContext, Reversale_rigaBulk reversaleRiga) throws PersistencyException, ComponentException {
Documento_generico_rigaHome dgHome = (Documento_generico_rigaHome) getHome(userContext, Documento_generico_rigaBulk.class);
Ass_obb_acr_pgiroHome assObbAccHome = (Ass_obb_acr_pgiroHome) getHome(userContext, Ass_obb_acr_pgiroBulk.class);
Contributo_ritenutaHome coriHome = (Contributo_ritenutaHome) getHome(userContext, Contributo_ritenutaBulk.class);
List<Contributo_ritenutaBulk> coriList = new ArrayList<>();
Documento_generico_rigaBulk docRiga = (Documento_generico_rigaBulk) dgHome.findByPrimaryKey(new Documento_generico_rigaBulk(reversaleRiga.getEsercizio_doc_amm().toString(), reversaleRiga.getCd_tipo_documento_amm(), reversaleRiga.getCd_uo_doc_amm(), reversaleRiga.getEsercizio_doc_amm(), reversaleRiga.getPg_doc_amm(), BigDecimal.ONE.longValue()));
if (docRiga.getPg_obbligazione() != null) {
List<Ass_obb_acr_pgiroBulk> assObbAccList = (List<Ass_obb_acr_pgiroBulk>) assObbAccHome.findPgiroReversaleriga(userContext, reversaleRiga);
assObbAccList.stream().forEach(assObbAcc -> {
try {
SQLBuilder sqlCori = coriHome.createSQLBuilder();
sqlCori.addClause(FindClause.AND, "cd_cds_obbligazione", SQLBuilder.EQUALS, assObbAcc.getCd_cds());
sqlCori.addClause(FindClause.AND, "esercizio_obbligazione", SQLBuilder.EQUALS, assObbAcc.getEsercizio());
sqlCori.addClause(FindClause.AND, "esercizio_ori_obbligazione", SQLBuilder.EQUALS, assObbAcc.getEsercizio_ori_obbligazione());
sqlCori.addClause(FindClause.AND, "pg_obbligazione", SQLBuilder.EQUALS, assObbAcc.getPg_obbligazione());
coriList.addAll(coriHome.fetchAll(sqlCori));
} catch (PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
}
return coriList;
}
use of it.cnr.contab.compensi00.docs.bulk.Contributo_ritenutaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponent method proposeScritturaPartitaDoppiaCompenso.
private Scrittura_partita_doppiaBulk proposeScritturaPartitaDoppiaCompenso(UserContext userContext, CompensoBulk compenso) throws ComponentException {
try {
List<Contributo_ritenutaBulk> righeCori = compenso.getChildren();
Optional<AnticipoBulk> optAnticipo = Optional.ofNullable(compenso.getMissione()).flatMap(el -> Optional.ofNullable(el.getAnticipo()));
TestataPrimaNota testataPrimaNota = new TestataPrimaNota(compenso.getCd_terzo(), compenso.getDt_da_competenza_coge(), compenso.getDt_a_competenza_coge());
// Nel caso dei compensi rilevo subito il costo prelevando le informazioni dalla riga del compenso stesso
// Registrazione conto COSTO COMPENSO
BigDecimal imCostoCompenso = compenso.getIm_lordo_percipiente();
if (imCostoCompenso.compareTo(BigDecimal.ZERO) != 0) {
Pair<Voce_epBulk, Voce_epBulk> pairContoCostoCompenso = this.findPairCosto(userContext, compenso);
testataPrimaNota.openDettaglioCostoRicavo(compenso, pairContoCostoCompenso.getFirst().getCd_voce_ep(), imCostoCompenso);
testataPrimaNota.openDettaglioPatrimoniale(compenso, pairContoCostoCompenso.getSecond().getCd_voce_ep(), imCostoCompenso, true);
}
// Registrazione conto CONTRIBUTI-RITENUTE
// Vengono registrati tutti i CORI a carico Ente
// Se anticipo risulta maggiore/uguale al compenso allora vengono registrati anche i CORI carico percipiente perchè il mandato non verrà emesso
boolean isCompensoMaggioreAnticipo = compenso.getIm_netto_percipiente().compareTo(optAnticipo.map(AnticipoBulk::getIm_anticipo).orElse(BigDecimal.ZERO)) > 0;
righeCori.stream().filter(el -> !isCompensoMaggioreAnticipo || el.isContributoEnte()).forEach(cori -> {
try {
BigDecimal imCostoCori = cori.getAmmontare();
Pair<Voce_epBulk, Voce_epBulk> pairContoCostoCori = this.findPairCostoCompenso(userContext, cori);
testataPrimaNota.openDettaglioCostoRicavo(compenso, pairContoCostoCori.getFirst().getCd_voce_ep(), imCostoCori);
testataPrimaNota.openDettaglioPatrimoniale(compenso, pairContoCostoCori.getSecond().getCd_voce_ep(), imCostoCori, false);
} catch (ComponentException | PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
// se esiste anticipo devo fare registrazioni inverse
optAnticipo.ifPresent(anticipo -> {
try {
BigDecimal imCostoAnticipo = anticipo.getIm_anticipo();
Pair<Voce_epBulk, Voce_epBulk> pairContoCostoAnticipo = this.findPairCosto(userContext, anticipo);
testataPrimaNota.closeDettaglioCostoRicavo(anticipo, pairContoCostoAnticipo.getFirst().getCd_voce_ep(), imCostoAnticipo);
testataPrimaNota.closeDettaglioPatrimoniale(anticipo, pairContoCostoAnticipo.getSecond().getCd_voce_ep(), imCostoAnticipo, true);
} catch (ComponentException | RemoteException | PersistencyException e) {
throw new ApplicationRuntimeException(e);
}
});
return this.generaScrittura(userContext, compenso, Arrays.asList(testataPrimaNota), false);
} catch (Exception e) {
throw handleException(e);
}
}
Aggregations