use of it.cnr.contab.coepcoan00.core.bulk.Scrittura_partita_doppiaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaFromDocumentoComponent method caricaScrittura.
protected void caricaScrittura(UserContext userContext, IDocumentoCogeBulk documentoCogeBulk) throws ComponentException {
try {
if (Optional.ofNullable(getHome(userContext, Configurazione_cnrBulk.class)).filter(Configurazione_cnrHome.class::isInstance).map(Configurazione_cnrHome.class::cast).orElseThrow(() -> new DetailedRuntimeException("Configurazione Home not found")).isAttivaEconomicaParallela(userContext)) {
Scrittura_partita_doppiaHome partitaDoppiaHome = Optional.ofNullable(getHome(userContext, Scrittura_partita_doppiaBulk.class)).filter(Scrittura_partita_doppiaHome.class::isInstance).map(Scrittura_partita_doppiaHome.class::cast).orElseThrow(() -> new DetailedRuntimeException("Partita doppia Home not found"));
final Optional<Scrittura_partita_doppiaBulk> scritturaOpt = partitaDoppiaHome.findByDocumentoAmministrativo(documentoCogeBulk);
if (scritturaOpt.isPresent()) {
Scrittura_partita_doppiaBulk scrittura = scritturaOpt.get();
scrittura.setMovimentiDareColl(new BulkList(((Scrittura_partita_doppiaHome) getHome(userContext, scrittura.getClass())).findMovimentiDareColl(userContext, scrittura)));
scrittura.setMovimentiAvereColl(new BulkList(((Scrittura_partita_doppiaHome) getHome(userContext, scrittura.getClass())).findMovimentiAvereColl(userContext, scrittura)));
documentoCogeBulk.setScrittura_partita_doppia(scrittura);
}
}
} catch (PersistencyException | ComponentException e) {
throw handleException((OggettoBulk) documentoCogeBulk, e);
}
}
use of it.cnr.contab.coepcoan00.core.bulk.Scrittura_partita_doppiaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponent method validaAssociazioneAnagConto.
/**
* valida la correttezza dell'associazione fra anagrafico e conto
*
* Nome: Nessuna associzione fra anagrafico-conto
* Pre: Per la scrittura in partita doppia e' stato selezionato un terzo le cui caratteristiche anagrafiche non
* sono state messe in relazione con neanche un conto definito per la scrittura (sia in avere che in dare)
* Post: Una segnalazione di errore viene restituita all'utente
*
* Nome: Almeno un'associzione fra anagrafico-conto
* Pre: Per la scrittura in partita doppia e' stato selezionato un terzo le cui caratteristiche anagrafiche
* sono state messe in relazione con un conto definito per la scrittura (in avere o in dare)
* Post: La scrittura supera la validazione anagrafica-conto
*
* @param userContext <code>UserContext</code>
* @param scrittura <code>Scrittura_partita_doppiaBulk</code> da validare
*/
private void validaAssociazioneAnagConto(UserContext userContext, Scrittura_partita_doppiaBulk scrittura) throws ComponentException, PersistencyException {
List result = ((Ass_anag_voce_epHome) getHome(userContext, Ass_anag_voce_epBulk.class)).findAssociazioniPerScrittura(scrittura);
if (result == null || (result != null && result.size() == 0))
throw new ApplicationException("Non esiste nessuna associazione fra l'anagrafica selezionata e i conti economico-patrimoniali");
Ass_anag_voce_epBulk ass = (Ass_anag_voce_epBulk) result.get(0);
Movimento_cogeBulk movimento;
for (Iterator j = scrittura.getMovimentiAvereColl().iterator(); j.hasNext(); ) {
movimento = (Movimento_cogeBulk) j.next();
if (movimento.getConto().equalsByPrimaryKey(ass.getConto()))
return;
}
for (Iterator j = scrittura.getMovimentiDareColl().iterator(); j.hasNext(); ) {
movimento = (Movimento_cogeBulk) j.next();
if (movimento.getConto().equalsByPrimaryKey(ass.getConto()))
return;
}
throw new ApplicationException("Non esiste nessuna associazione fra l'anagrafica selezionata e i conti economico-patrimoniali");
}
use of it.cnr.contab.coepcoan00.core.bulk.Scrittura_partita_doppiaBulk in project sigla-main by consiglionazionaledellericerche.
the class ScritturaPartitaDoppiaComponentSessionBean method proposeScritturaPartitaDoppia.
public Scrittura_partita_doppiaBulk proposeScritturaPartitaDoppia(UserContext param0, IDocumentoCogeBulk param1) throws ComponentException, RemoteException {
pre_component_invocation(param0, componentObj);
try {
Scrittura_partita_doppiaBulk result = ((ScritturaPartitaDoppiaComponent) componentObj).proposeScritturaPartitaDoppia(param0, param1);
component_invocation_succes(param0, componentObj);
return result;
} catch (it.cnr.jada.comp.NoRollbackException e) {
component_invocation_succes(param0, componentObj);
throw e;
} catch (it.cnr.jada.comp.ComponentException e) {
component_invocation_failure(param0, componentObj);
throw e;
} catch (RuntimeException e) {
throw uncaughtRuntimeException(param0, componentObj, e);
} catch (Error e) {
throw uncaughtError(param0, componentObj, e);
}
}
use of it.cnr.contab.coepcoan00.core.bulk.Scrittura_partita_doppiaBulk in project sigla-main by consiglionazionaledellericerche.
the class CostiDipendenteComponent method innerContabilizzaFlussoStipendialeMensile.
public void innerContabilizzaFlussoStipendialeMensile(UserContext userContext, int aEsercizio, int aMese) throws ComponentException {
try {
boolean isCNR = Utility.createParametriEnteComponentSession().getParametriEnte(userContext).isEnteCNR();
Stipendi_cofiHome stipendi_cofiHome = (Stipendi_cofiHome) getHome(userContext, it.cnr.contab.pdg00.cdip.bulk.Stipendi_cofiBulk.class);
java.util.Collection<Stipendi_cofiBulk> stipendiCofi = stipendi_cofiHome.findStipendiCofiAnno(aEsercizio);
int lastMesePagato = stipendiCofi.stream().filter(el -> el.getMese().compareTo(15) < 0).filter(Stipendi_cofiBulk::isLiquidato).mapToInt(Stipendi_cofiBulk::getMese).max().orElse(0);
if (aMese > 15) {
if (isCNR)
throw new ApplicationException("Il mese deve avere un valore compreso tra 1 e 15");
if (lastMesePagato == 0)
throw new ApplicationException("Non è possibile effettuare pagamenti 'Straordinari' senza aver effettuato almeno un pagamento stipendiale nell'anno" + aEsercizio);
} else if (aMese != 15) {
if (aMese < 1 || aMese > 13)
throw new ApplicationException("Il mese deve essere compreso tra 1 (Gennaio) e 13 (Mese Tredicesima)");
// se il mese è > 1 verifico che la liquidazione del mese precedente sia stata fatta
if (lastMesePagato == aMese)
throw new ApplicationException("Dati stipendiali non trovati o contabilizzazione già effettuata per mese n." + aMese + " es." + aEsercizio);
if (lastMesePagato != aMese - 1)
throw new ApplicationException("Dati stipendiali non trovati o ultimo mese pagato (" + lastMesePagato + ") diverso da quello precedente al corrente (" + aMese + ")");
}
Stipendi_cofiBulk stipendiCofiBulk = stipendiCofi.stream().filter(el -> el.getEsercizio().equals(aEsercizio)).filter(el -> el.getMese().equals(aMese)).findAny().orElseThrow(() -> new ApplicationRuntimeException("StipendiCofi non esistente per mese n. " + aMese + " es. " + aEsercizio + "."));
String cdrPersonale = Optional.ofNullable(((Configurazione_cnrHome) getHome(userContext, Configurazione_cnrBulk.class)).getCdrPersonale(aEsercizio)).orElseThrow(() -> new ComponentException("Non è possibile individuare il codice CDR del Personale nell'anno " + aEsercizio + "."));
CdrBulk cdrPersonaleBulk = (CdrBulk) getHome(userContext, CdrBulk.class).findByPrimaryKey(new CdrBulk(cdrPersonale));
cdrPersonaleBulk.setUnita_padre((Unita_organizzativaBulk) getHome(userContext, Unita_organizzativaBulk.class).findByPrimaryKey(cdrPersonaleBulk.getUnita_padre()));
GregorianCalendar aDateInizioComp = new GregorianCalendar();
GregorianCalendar aDateFineComp = new GregorianCalendar();
if (aMese == 13) {
aDateInizioComp = new GregorianCalendar(aEsercizio, 11, 1);
aDateFineComp = new GregorianCalendar(aEsercizio, 11, 31);
} else if (aMese < 13) {
aDateInizioComp = new GregorianCalendar(aEsercizio, aMese - 1, 1);
aDateFineComp = new GregorianCalendar(aEsercizio, aMese - 1, 1);
aDateFineComp.set(Calendar.DAY_OF_MONTH, aDateFineComp.getActualMaximum(Calendar.DAY_OF_MONTH));
}
GregorianCalendar aDateCont = new GregorianCalendar();
if (LocalDate.now().getYear() == aEsercizio + 1)
aDateCont = new GregorianCalendar(aEsercizio, 11, 31);
else if (LocalDate.now().getYear() < aEsercizio)
aDateCont = new GregorianCalendar(aEsercizio, 0, 1);
else if (LocalDate.now().getYear() > aEsercizio) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy");
throw new ApplicationException("La data di sistema (" + formatter.format(aDateCont) + ") è superiore all''esercizio di scrivania (" + aEsercizio + ") di almeno 2 anni");
}
aDateCont.set(Calendar.HOUR_OF_DAY, aDateCont.getActualMinimum(Calendar.HOUR_OF_DAY));
aDateCont.set(Calendar.MINUTE, aDateCont.getActualMinimum(Calendar.MINUTE));
aDateCont.set(Calendar.SECOND, aDateCont.getActualMinimum(Calendar.SECOND));
aDateCont.set(Calendar.MILLISECOND, aDateCont.getActualMinimum(Calendar.MILLISECOND));
aDateInizioComp.set(Calendar.HOUR_OF_DAY, aDateCont.getActualMinimum(Calendar.HOUR_OF_DAY));
aDateInizioComp.set(Calendar.MINUTE, aDateInizioComp.getActualMinimum(Calendar.MINUTE));
aDateInizioComp.set(Calendar.SECOND, aDateInizioComp.getActualMinimum(Calendar.SECOND));
aDateInizioComp.set(Calendar.MILLISECOND, aDateInizioComp.getActualMinimum(Calendar.MILLISECOND));
aDateFineComp.set(Calendar.HOUR_OF_DAY, aDateCont.getActualMinimum(Calendar.HOUR_OF_DAY));
aDateFineComp.set(Calendar.MINUTE, aDateFineComp.getActualMinimum(Calendar.MINUTE));
aDateFineComp.set(Calendar.SECOND, aDateFineComp.getActualMinimum(Calendar.SECOND));
aDateFineComp.set(Calendar.MILLISECOND, aDateFineComp.getActualMinimum(Calendar.MILLISECOND));
MandatoAutomaticoWizardBulk mandatoWizard = new MandatoAutomaticoWizardBulk();
mandatoWizard.setTi_automatismo(MandatoAutomaticoWizardBulk.AUTOMATISMO_DA_IMPEGNI);
mandatoWizard.setEsercizio(aEsercizio);
mandatoWizard.setCds(cdrPersonaleBulk.getUnita_padre().getUnita_padre());
mandatoWizard.setUnita_organizzativa(cdrPersonaleBulk.getUnita_padre());
mandatoWizard.setCd_cds_origine(cdrPersonaleBulk.getUnita_padre().getUnita_padre().getCd_unita_organizzativa());
mandatoWizard.setCd_uo_origine(cdrPersonaleBulk.getUnita_padre().getCd_unita_organizzativa());
mandatoWizard.setDt_emissione(new java.sql.Timestamp(aDateCont.getTime().getTime()));
mandatoWizard.setUser(CNRUserContext.getUser(userContext));
mandatoWizard.setDs_mandato("Mandato di liquidazione stipendi_cofi mese:" + aMese);
DocumentoGenericoWizardBulk modelloDocumento = new DocumentoGenericoWizardBulk();
modelloDocumento.setEsercizio(aEsercizio);
modelloDocumento.setCd_cds(cdrPersonaleBulk.getUnita_padre().getUnita_padre().getCd_unita_organizzativa());
modelloDocumento.setCd_unita_organizzativa(cdrPersonaleBulk.getUnita_padre().getCd_unita_organizzativa());
modelloDocumento.setCd_cds_origine(cdrPersonaleBulk.getUnita_padre().getUnita_padre().getCd_unita_organizzativa());
modelloDocumento.setCd_uo_origine(cdrPersonaleBulk.getUnita_padre().getCd_unita_organizzativa());
modelloDocumento.setTipo_documento(new Tipo_documento_ammBulk(TipoDocumentoEnum.GEN_STIPENDI_SPESA.getValue()));
modelloDocumento.setData_registrazione(new java.sql.Timestamp(aDateCont.getTime().getTime()));
modelloDocumento.setDt_da_competenza_coge(new java.sql.Timestamp(aDateInizioComp.getTime().getTime()));
modelloDocumento.setDt_a_competenza_coge(new java.sql.Timestamp(aDateFineComp.getTime().getTime()));
modelloDocumento.setDs_documento_generico("Generico di versamento stipendi mese:" + aMese);
modelloDocumento.setTi_istituz_commerc(TipoIVA.ISTITUZIONALE.value());
modelloDocumento.setUser(CNRUserContext.getUser(userContext));
mandatoWizard.setModelloDocumento(modelloDocumento);
/**
***************** CREO IL MANDATO *************
*/
// Per il mandato non setto il terzo in quanto deve essere creato con quelli indicati sugli impegni di spesa
Mandato_terzoBulk mandatoTerzo = new Mandato_terzoIBulk();
mandatoTerzo.setTipoBollo(((Tipo_bolloHome) getHome(userContext, Tipo_bolloBulk.class)).findTipoBolloStipendi(Tipo_bolloBulk.TIPO_SPESA));
mandatoWizard.setMandato_terzo(mandatoTerzo);
MandatoBulk mandatoStipendio = this.createMandatoStipendio(userContext, stipendiCofiBulk, mandatoWizard);
/**
***************** CREO IL COMPENSO *************
*/
// Per il compenso setto come terzo quello diversi per stipendi
MandatoAutomaticoWizardBulk compensoWizard = MandatoAutomaticoWizardBulk.createBy(mandatoWizard);
Integer cdTerzoStipendi = Utility.createConfigurazioneCnrComponentSession().getCdTerzoDiversiStipendi(userContext);
compensoWizard.getMandato_terzo().setTerzo((TerzoBulk) (getHome(userContext, TerzoBulk.class)).findByPrimaryKey(new TerzoBulk(cdTerzoStipendi)));
CompensoBulk compensoBulk = this.createCompensoStipendio(userContext, stipendiCofiBulk, compensoWizard, mandatoStipendio);
/**
***************** CREO LE RITENUTE *************
*/
ReversaleAutomaticaWizardBulk reversaleWizard = ReversaleAutomaticaWizardBulk.createBy(mandatoWizard);
reversaleWizard.setStato_coge(MandatoBulk.STATO_COGE_X);
reversaleWizard.getModelloDocumento().setTipo_documento(new Tipo_documento_ammBulk(TipoDocumentoEnum.GEN_CORI_ACCANTONAMENTO_ENTRATA.getValue()));
reversaleWizard.getModelloDocumento().setTerzoWizardBulk(mandatoStipendio.getMandato_terzo().getTerzo());
reversaleWizard.getModelloDocumento().setDs_documento_generico("CORI - mese:" + stipendiCofiBulk.getMese() + " es:" + stipendiCofiBulk.getEsercizio());
// Imposto le variabili da utilizzare per il caricamento degli oggetti
Documento_generico_rigaBulk docRiga = new Documento_generico_rigaBulk();
docRiga.setTerzo_uo_cds(((TerzoHome) getHome(userContext, TerzoBulk.class)).findTerzoPerUo(cdrPersonaleBulk.getUnita_padre()));
docRiga.setModalita_pagamento_uo_cds(((TerzoHome) getHome(userContext, TerzoBulk.class)).findModalitaPagamentoPerUo(userContext, cdrPersonaleBulk.getUnita_padre()).getRif_modalita_pagamento());
docRiga.setBanca_uo_cds(((TerzoHome) getHome(userContext, TerzoBulk.class)).findBancaPerUo(userContext, cdrPersonaleBulk.getUnita_padre()));
reversaleWizard.getModelloDocumento().addToDocumento_generico_dettColl(docRiga);
Mandato_rigaBulk mandatoRiga = mandatoStipendio.getMandato_rigaColl().stream().findFirst().get();
reversaleWizard.getReversale_terzo().setTerzo(mandatoStipendio.getMandato_terzo().getTerzo());
reversaleWizard.setModalita_pagamento(mandatoRiga.getModalita_pagamento());
reversaleWizard.setBanca(mandatoRiga.getBanca());
this.createRitenuteStipendio(userContext, stipendiCofiBulk, reversaleWizard, mandatoWizard, mandatoStipendio, compensoBulk);
// Aggiorno la riga della liquidazione
stipendiCofiBulk.setEsercizio_mandato(mandatoStipendio.getEsercizio());
stipendiCofiBulk.setCd_cds_mandato(mandatoStipendio.getCd_cds());
stipendiCofiBulk.setPg_mandato(mandatoStipendio.getPg_mandato());
Mandato_rigaBulk riga = mandatoStipendio.getMandato_rigaColl().stream().findFirst().get();
stipendiCofiBulk.setEsercizio_doc_gen(riga.getEsercizio_doc_amm());
stipendiCofiBulk.setCd_tipo_doc_gen(riga.getCd_tipo_documento_amm());
stipendiCofiBulk.setCd_cds_doc_gen(riga.getCd_cds_doc_amm());
stipendiCofiBulk.setCd_uo_doc_gen(riga.getCd_uo_doc_amm());
stipendiCofiBulk.setPg_doc_gen(riga.getPg_doc_amm());
stipendiCofiBulk.setEsercizio_comp(compensoBulk.getEsercizio());
stipendiCofiBulk.setCd_cds_comp(compensoBulk.getCd_cds());
stipendiCofiBulk.setCd_uo_comp(compensoBulk.getCd_unita_organizzativa());
stipendiCofiBulk.setPg_comp(compensoBulk.getPg_compenso());
stipendiCofiBulk.setToBeUpdated();
makeBulkPersistent(userContext, stipendiCofiBulk);
// Effettuo scritture prima nota
Scrittura_partita_doppiaBulk scritturaPartitaDoppiaBulk = Utility.createScritturaPartitaDoppiaComponentSession().proposeScritturaPartitaDoppia(userContext, compensoBulk);
makeBulkPersistent(userContext, scritturaPartitaDoppiaBulk);
} catch (Exception e) {
throw handleException(e);
}
}
use of it.cnr.contab.coepcoan00.core.bulk.Scrittura_partita_doppiaBulk 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);
}
Aggregations