All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.cnr.contab.docamm00.comp.FatturaElettronicaPassivaComponent Maven / Gradle / Ivy

/*
 * Copyright (C) 2019  Consiglio Nazionale delle Ricerche
 *
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU Affero General Public License as
 *     published by the Free Software Foundation, either version 3 of the
 *     License, or (at your option) any later version.
 *
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU Affero General Public License for more details.
 *
 *     You should have received a copy of the GNU Affero General Public License
 *     along with this program.  If not, see .
 */

package it.cnr.contab.docamm00.comp;

import it.cnr.contab.anagraf00.core.bulk.AnagraficoBulk;
import it.cnr.contab.anagraf00.core.bulk.AnagraficoHome;
import it.cnr.contab.anagraf00.core.bulk.Modalita_pagamentoBulk;
import it.cnr.contab.anagraf00.core.bulk.Modalita_pagamentoHome;
import it.cnr.contab.anagraf00.core.bulk.TerzoBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoHome;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoHome;
import it.cnr.contab.config00.bulk.Configurazione_cnrBulk;
import it.cnr.contab.config00.bulk.Configurazione_cnrHome;
import it.cnr.contab.config00.bulk.Parametri_cdsBulk;
import it.cnr.contab.config00.bulk.Parametri_cdsHome;
import it.cnr.contab.config00.sto.bulk.Tipo_unita_organizzativaHome;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
import it.cnr.contab.docamm00.docs.bulk.Fattura_passivaBulk;
import it.cnr.contab.docamm00.docs.bulk.Fattura_passivaHome;
import it.cnr.contab.docamm00.docs.bulk.Fattura_passiva_IBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleAcquistoBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleAllegatiBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleDdtBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleIvaBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleLineaBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleScontoMaggBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataHome;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTrasmissioneBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTrasmissioneHome;
import it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTributiBulk;
import it.cnr.contab.docamm00.fatturapa.bulk.StatoDocumentoEleEnum;
import it.cnr.contab.docamm00.fatturapa.bulk.TipoAcquistoEnum;
import it.cnr.contab.docamm00.fatturapa.bulk.TipoIntegrazioneSDI;
import it.cnr.contab.docamm00.service.FatturaPassivaElettronicaService;
import it.cnr.contab.docamm00.tabrif.bulk.Voce_ivaBulk;
import it.cnr.contab.docamm00.tabrif.bulk.Voce_ivaHome;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.utenze00.bulk.Utente_indirizzi_mailBulk;
import it.cnr.contab.utenze00.bulk.Utente_indirizzi_mailHome;
import it.cnr.contab.util.Utility;
import it.cnr.jada.UserContext;
import it.cnr.jada.bulk.BulkList;
import it.cnr.jada.bulk.BusyResourceException;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.persistency.sql.CompoundFindClause;
import it.cnr.jada.persistency.sql.FindClause;
import it.cnr.jada.persistency.sql.Query;
import it.cnr.jada.persistency.sql.SQLBuilder;
import it.cnr.jada.util.SendMail;
import it.gov.agenziaentrate.ivaservizi.docs.xsd.fatture.v1.RegimeFiscaleType;
import it.gov.agenziaentrate.ivaservizi.docs.xsd.fatture.v1.SoggettoEmittenteType;

import java.io.IOException;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.mail.internet.InternetAddress;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class FatturaElettronicaPassivaComponent extends it.cnr.jada.comp.CRUDComponent 
	implements Cloneable,Serializable {
	private static final long serialVersionUID = 1L;
	private transient final static Logger logger = LoggerFactory.getLogger(FatturaPassivaElettronicaService.class);

	public  FatturaElettronicaPassivaComponent(){
    }
	
	@Override
	public OggettoBulk inizializzaBulkPerModifica(UserContext usercontext,
			OggettoBulk oggettobulk) throws ComponentException {
		DocumentoEleTestataBulk documentoEleTestata = (DocumentoEleTestataBulk) super.inizializzaBulkPerModifica(usercontext, oggettobulk);
		try {
			boolean hasAccesso = ((it.cnr.contab.utente00.nav.ejb.GestioneLoginComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRUTENZE00_NAV_EJB_GestioneLoginComponentSession")).controllaAccesso(usercontext, "AMMFATTURDOCSFATPASA");
			documentoEleTestata.setAbilitato(hasAccesso);
			documentoEleTestata.setAttivoSplitPayment(Utility.createFatturaPassivaComponentSession().isAttivoSplitPayment(usercontext, documentoEleTestata.getDataDocumento()));
			
			documentoEleTestata.setDocEleLineaColl(new BulkList(
					getHome(usercontext, DocumentoEleLineaBulk.class).find(new DocumentoEleLineaBulk(documentoEleTestata))));
			documentoEleTestata.setDocEleIVAColl(new BulkList(
					getHome(usercontext, DocumentoEleIvaBulk.class).find(new DocumentoEleIvaBulk(documentoEleTestata))));
			documentoEleTestata.setDocEleAllegatiColl(new BulkList(
					getHome(usercontext, DocumentoEleAllegatiBulk.class).find(new DocumentoEleAllegatiBulk(documentoEleTestata))));
			documentoEleTestata.setDocEleTributiColl(new BulkList(
					getHome(usercontext, DocumentoEleTributiBulk.class).find(new DocumentoEleTributiBulk(documentoEleTestata))));
			documentoEleTestata.setDocEleScontoMaggColl(new BulkList(
					getHome(usercontext, DocumentoEleScontoMaggBulk.class).find(new DocumentoEleScontoMaggBulk(documentoEleTestata))));
			documentoEleTestata.setDocEleAcquistoColl(new BulkList(
					getHome(usercontext, DocumentoEleAcquistoBulk.class).find(new DocumentoEleAcquistoBulk(documentoEleTestata))));
			documentoEleTestata.setDocEleDdtColl(new BulkList(
					getHome(usercontext, DocumentoEleDdtBulk.class).find(new DocumentoEleDdtBulk(documentoEleTestata))));
			if ((documentoEleTestata.getDocEleTributiColl()!=null && !documentoEleTestata.getDocEleTributiColl().isEmpty()) 
					||(documentoEleTestata.getDocumentoEleTrasmissione().getRegimefiscale()!= null && 
					(documentoEleTestata.getDocumentoEleTrasmissione().getRegimefiscale().equals(RegimeFiscaleType.RF_02.name()) ||
							documentoEleTestata.getDocumentoEleTrasmissione().getRegimefiscale().equals(RegimeFiscaleType.RF_19.name()))))
					{
						documentoEleTestata.setAttivoSplitPaymentProf(Utility.createFatturaPassivaComponentSession().isAttivoSplitPaymentProf(usercontext, documentoEleTestata.getDataDocumento()));
					}	
			getHomeCache(usercontext).fetchAll(usercontext);
		} catch (RemoteException | PersistencyException e) {
			throw handleException(e);
		}
		return documentoEleTestata;
	}
	
	@Override
	protected Query select(UserContext userContext,
			CompoundFindClause clauses, OggettoBulk bulk)
			throws ComponentException, PersistencyException {
        if(clauses == null){
            if(bulk != null)
            	clauses = bulk.buildFindClauses(null);
        }else{
        	clauses = CompoundFindClause.and(clauses, bulk.buildFindClauses(Boolean.FALSE));
        }
        SQLBuilder sql = getHome(userContext, bulk, "V_DOCUMENTO_ELE").selectByClause(userContext, clauses);
        if (CNRUserContext.getCd_unita_organizzativa(userContext) != null) {
			Unita_organizzativaBulk uoScrivania = ((Unita_organizzativaBulk)getHome(userContext, Unita_organizzativaBulk.class).findByPrimaryKey(new Unita_organizzativaBulk(CNRUserContext.getCd_unita_organizzativa(userContext))));
			boolean isUoEnte = uoScrivania.getCd_tipo_unita().compareTo(Tipo_unita_organizzativaHome.TIPO_UO_ENTE)==0;
			if (!isUoEnte) {
				sql.openParenthesis(FindClause.AND);
				sql.addSQLClause(FindClause.AND, "V_DOCUMENTO_ELE.CD_UNITA_ORGANIZZATIVA", SQLBuilder.EQUALS, uoScrivania.getCd_unita_organizzativa());
				sql.addSQLClause(FindClause.OR, "V_DOCUMENTO_ELE.CD_UNITA_COMPETENZA", SQLBuilder.EQUALS, uoScrivania.getCd_unita_organizzativa());
				sql.closeParenthesis();			
			}			
		}
		return sql;
	}
	
    @SuppressWarnings("unchecked")
	public void completaDocumento(UserContext usercontext, DocumentoEleTrasmissioneBulk documentoEleTrasmissioneBulk) throws ComponentException{
        try{
        	AnagraficoHome anagraficoHome = (AnagraficoHome)getHome(usercontext,AnagraficoBulk.class);
        	TerzoHome terzoHome = (TerzoHome)getHome(usercontext,TerzoBulk.class);
        	Rif_modalita_pagamentoHome rifModPagHome = (Rif_modalita_pagamentoHome) getHome(usercontext,Rif_modalita_pagamentoBulk.class);
        	Modalita_pagamentoHome modPagHome = (Modalita_pagamentoHome) getHome(usercontext,Modalita_pagamentoBulk.class);
        	Voce_ivaHome voceIvaHome = (Voce_ivaHome) getHome(usercontext, Voce_ivaBulk.class);

        	List anomalieTrasmissione = new ArrayList();
        	SQLBuilder sql = terzoHome.createSQLBuilder();
        	sql.addClause(FindClause.AND, "codiceUnivocoUfficioIpa", SQLBuilder.EQUALS, documentoEleTrasmissioneBulk.getCodiceDestinatario());
        	sql.addSQLClause("AND", "DT_FINE_RAPPORTO", sql.ISNULL, null);
        	List terzoUOS = terzoHome.fetchAll(sql);
        	if (terzoUOS != null && !terzoUOS.isEmpty()) {
        		documentoEleTrasmissioneBulk.setUnitaOrganizzativa(terzoUOS.get(0).getUnita_organizzativa());
        		documentoEleTrasmissioneBulk.setCommittente(terzoUOS.get(0));       		
        	} else {
        		TerzoBulk terzoEnte = terzoHome.findTerzoEnte();
        		documentoEleTrasmissioneBulk.setUnitaOrganizzativa(terzoEnte.getUnita_organizzativa());
        		documentoEleTrasmissioneBulk.setCommittente(terzoEnte);
        	}
    		/**
    		 * Invio mail di notifica Ricezione
    		 */
        	try {
        		String subject= "[SIGLA] Notifica ricezione fattura passiva con Identificativo SdI:" + documentoEleTrasmissioneBulk.getIdentificativoSdi();
        		subject += " UO: " + documentoEleTrasmissioneBulk.getUnitaOrganizzativa().getCd_unita_organizzativa();
        		String text = "E' pervenuta la fattura dal trasmittente: " +documentoEleTrasmissioneBulk.getIdCodice() + "
"+ "Prestatore: " + documentoEleTrasmissioneBulk.getDenominzionePrestatore() +"
" + "Il documento è presente nell'area temporanea di SIGLA."; String addressTO = null; Utente_indirizzi_mailHome utente_indirizzi_mailHome = (Utente_indirizzi_mailHome)getHome(usercontext,Utente_indirizzi_mailBulk.class); for (java.util.Iterator i = utente_indirizzi_mailHome.findUtenteNotificaRicezioneFatturaElettronica( documentoEleTrasmissioneBulk.getUnitaOrganizzativa()).iterator();i.hasNext();){ Utente_indirizzi_mailBulk utente_indirizzi = (Utente_indirizzi_mailBulk)i.next(); if (addressTO == null) addressTO = new String(); else addressTO = addressTO + ","; addressTO = addressTO+utente_indirizzi.getIndirizzo_mail(); } if (addressTO != null){ SendMail.sendMail(subject, text, InternetAddress.parse(addressTO)); } }catch (Exception _ex) { } if (documentoEleTrasmissioneBulk.getPrestatoreCodicefiscale() != null || documentoEleTrasmissioneBulk.getPrestatoreCodice() != null) { List anagraficoBulks = anagraficoHome.findByCodiceFiscaleOrPartitaIVA( documentoEleTrasmissioneBulk.getPrestatoreCodicefiscale(), documentoEleTrasmissioneBulk.getPrestatoreCodice()); if (anagraficoBulks != null && !anagraficoBulks.isEmpty()) { if (anagraficoBulks.size() == 1) { documentoEleTrasmissioneBulk.setPrestatoreAnag(anagraficoBulks.get(0)); List terzi = terzoHome.findTerzi(anagraficoBulks.get(0)); if (terzi != null && !terzi.isEmpty() && terzi.size() == 1) { documentoEleTrasmissioneBulk.setPrestatore(terzi.get(0)); } } else { anomalieTrasmissione.add("Esistono più di una riga in anagrafica per il CF:" + documentoEleTrasmissioneBulk.getPrestatoreCodicefiscale() +" o la partita IVA: " + documentoEleTrasmissioneBulk.getPrestatoreCodice()); } } } if (documentoEleTrasmissioneBulk.getRappresentanteCodicefiscale() != null || documentoEleTrasmissioneBulk.getRappresentanteCodice() != null) { List anagraficoBulks = anagraficoHome.findByCodiceFiscaleOrPartitaIVA( documentoEleTrasmissioneBulk.getRappresentanteCodicefiscale(), documentoEleTrasmissioneBulk.getRappresentanteCodice()); if (anagraficoBulks != null && !anagraficoBulks.isEmpty()) { if (anagraficoBulks.size() == 1) { documentoEleTrasmissioneBulk.setRappresentanteAnag(anagraficoBulks.get(0)); List terzi = terzoHome.findTerzi(anagraficoBulks.get(0)); if (terzi != null && !terzi.isEmpty() && terzi.size() == 1) { documentoEleTrasmissioneBulk.setRappresentante(terzi.get(0)); } } else { anomalieTrasmissione.add("Esistono più di una riga in anagrafica per il CF:" + documentoEleTrasmissioneBulk.getRappresentanteCodicefiscale() +" o la partita IVA: " + documentoEleTrasmissioneBulk.getRappresentanteCodice()); } } } if (documentoEleTrasmissioneBulk.getIntermediarioCodicefiscale() != null || documentoEleTrasmissioneBulk.getIntermediarioCodice() != null) { List anagraficoBulks = anagraficoHome.findByCodiceFiscaleOrPartitaIVA( documentoEleTrasmissioneBulk.getIntermediarioCodicefiscale(), documentoEleTrasmissioneBulk.getIntermediarioCodice()); if (anagraficoBulks != null && !anagraficoBulks.isEmpty()) { if (anagraficoBulks.size() == 1) { documentoEleTrasmissioneBulk.setIntermediarioAnag(anagraficoBulks.get(0)); List terzi = terzoHome.findTerzi(anagraficoBulks.get(0)); if (terzi != null && !terzi.isEmpty() && terzi.size() == 1) { documentoEleTrasmissioneBulk.setIntermediario(terzi.get(0)); } } else { anomalieTrasmissione.add("Esistono più di una riga in anagrafica per il CF:" + documentoEleTrasmissioneBulk.getIntermediarioCodicefiscale() +" o la partita IVA: " + documentoEleTrasmissioneBulk.getIntermediarioCodice()); } } } if (!anomalieTrasmissione.isEmpty()) documentoEleTrasmissioneBulk.setAnomalieRicezione(StringUtils.join(anomalieTrasmissione.toArray()," - ")); for (DocumentoEleTestataBulk docTestata : documentoEleTrasmissioneBulk.getDocEleTestataColl()) { List anomalieTestata = new ArrayList(); if (docTestata.getBeneficiarioModPag() != null) { SQLBuilder sqlRifModPag = rifModPagHome.createSQLBuilder(); sqlRifModPag.addClause(FindClause.AND, "tipoPagamentoSdi", SQLBuilder.EQUALS, docTestata.getBeneficiarioModPag()); List rifModPags = rifModPagHome.fetchAll(sqlRifModPag); boolean trovataModPag = Boolean.FALSE; for (Rif_modalita_pagamentoBulk rif_modalita_pagamentoBulk : rifModPags) { Modalita_pagamentoBulk modalitaPagamento = (Modalita_pagamentoBulk) modPagHome.findByPrimaryKey(new Modalita_pagamentoBulk( rif_modalita_pagamentoBulk.getCd_modalita_pag(), docTestata.getDocumentoEleTrasmissione().getPrestatoreCdTerzo())); if (modalitaPagamento != null) { trovataModPag = Boolean.TRUE; docTestata.setModalitaPagamento(modalitaPagamento); break; } } if (!trovataModPag) { anomalieTestata.add("Modalità di pagamento non trovata"); } } if (!anomalieTestata.isEmpty()) docTestata.setAnomalie(StringUtils.join(anomalieTestata.toArray()," - ")); docTestata.setStatoDocumento(StatoDocumentoEleEnum.AGGIORNATO.name()); docTestata.setToBeUpdated(); for (DocumentoEleIvaBulk documentoEleIvaBulk : docTestata.getDocEleIVAColl()) { List anomalieIVA = new ArrayList(); SQLBuilder sqlVoceIva = voceIvaHome.createSQLBuilder(); sqlVoceIva.addClause(FindClause.AND, "percentuale", SQLBuilder.EQUALS, documentoEleIvaBulk.getAliquotaIva()); sqlVoceIva.addSQLClause(FindClause.AND, "NATURA_OPER_NON_IMP_SDI", SQLBuilder.EQUALS, documentoEleIvaBulk.getNatura()); List results = voceIvaHome.fetchAll(sqlVoceIva); if (results.isEmpty()) anomalieIVA.add("Codice Iva non trovato!"); if (results.size() > 1) anomalieIVA.add("Esistonio piu codici Iva associabili alla riga!"); if (results.size() == 1) documentoEleIvaBulk.setVoceIva(results.get(0)); if (!anomalieIVA.isEmpty()) documentoEleIvaBulk.setAnomalie(StringUtils.join(anomalieIVA.toArray()," - ")); documentoEleIvaBulk.setToBeUpdated(); } } documentoEleTrasmissioneBulk.setToBeUpdated(); modificaConBulk(usercontext, documentoEleTrasmissioneBulk); }catch(Throwable throwable){ throw handleException(throwable); } } private boolean isDocumentoCompletato(UserContext usercontext, DocumentoEleTestataBulk documentoEleTestata) { DocumentoEleTrasmissioneBulk documentoEleTrasmissioneBulk= documentoEleTestata.getDocumentoEleTrasmissione(); boolean isCompletato = Boolean.TRUE; if ((documentoEleTrasmissioneBulk.getPrestatore() == null || documentoEleTrasmissioneBulk.getPrestatore().getCrudStatus() == OggettoBulk.UNDEFINED || documentoEleTrasmissioneBulk.getPrestatoreAnag() == null || documentoEleTrasmissioneBulk.getPrestatoreAnag().getCrudStatus() == OggettoBulk.UNDEFINED) && (documentoEleTrasmissioneBulk.getPrestatoreCodicefiscale() != null || documentoEleTrasmissioneBulk.getPrestatoreCodice() != null)) return false; if (documentoEleTestata.getCdUnitaCompetenza() != null && ((documentoEleTrasmissioneBulk.getFlCompletato() != null && !documentoEleTrasmissioneBulk.getFlCompletato()) || documentoEleTrasmissioneBulk.getFlCompletato() == null)) return false; return isCompletato; } private void cambiaStatoCompletato(UserContext usercontext, DocumentoEleTestataBulk documentoEleTestata) { if (isDocumentoCompletato(usercontext, documentoEleTestata)) { if (documentoEleTestata.getStatoDocumentoEle().equals(StatoDocumentoEleEnum.AGGIORNATO)) { documentoEleTestata.setStatoDocumento(StatoDocumentoEleEnum.COMPLETO.name()); } } else { if (documentoEleTestata.getStatoDocumentoEle().equals(StatoDocumentoEleEnum.COMPLETO)) { documentoEleTestata.setStatoDocumento(StatoDocumentoEleEnum.AGGIORNATO.name()); } } } public OggettoBulk modificaConBulk(UserContext usercontext, OggettoBulk oggettobulk) throws ComponentException { if (oggettobulk instanceof DocumentoEleTestataBulk){ ((DocumentoEleTestataBulk)oggettobulk).getDocumentoEleTrasmissione().setToBeUpdated(); notificaUOCompetenza(usercontext, ((DocumentoEleTestataBulk)oggettobulk)); super.modificaConBulk(usercontext, ((DocumentoEleTestataBulk)oggettobulk).getDocumentoEleTrasmissione()); cambiaStatoCompletato(usercontext, ((DocumentoEleTestataBulk)oggettobulk)); } return super.modificaConBulk(usercontext, oggettobulk); } @SuppressWarnings("unchecked") private void notificaUOCompetenza(UserContext usercontext, DocumentoEleTestataBulk testata) throws ComponentException { DocumentoEleTestataHome home = (DocumentoEleTestataHome) getHome(usercontext, DocumentoEleTestataBulk.class); try { DocumentoEleTestataBulk testataDB = (DocumentoEleTestataBulk) home.findByPrimaryKey(testata); if ((testataDB.getUnitaCompetenza() == null && testata.getUnitaCompetenza() != null && testata.getUnitaCompetenza().getCd_unita_organizzativa() != null) || (testataDB.getUnitaCompetenza() != null && testata.getUnitaCompetenza() != null && testata.getUnitaCompetenza().getCd_unita_organizzativa() != null && !testataDB.getUnitaCompetenza().equalsByPrimaryKey(testata.getUnitaCompetenza()))) { try { String subject= "[SIGLA] Notifica assegnazione fattura passiva con Identificativo SdI:" + testata.getIdentificativoSdi(); subject += " UO: " + testata.getUnitaCompetenza().getCd_unita_organizzativa(); String text = "E' pervenuta la fattura dal trasmittente: " +testata.getIdCodice() + "
"+ "Prestatore: " + testata.getDocumentoEleTrasmissione().getDenominzionePrestatore() +"
" + "Il documento è presente nell'area temporanea di SIGLA."; String addressTO = null; Utente_indirizzi_mailHome utente_indirizzi_mailHome = (Utente_indirizzi_mailHome)getHome(usercontext,Utente_indirizzi_mailBulk.class); for (java.util.Iterator i = utente_indirizzi_mailHome.findUtenteNotificaRicezioneFatturaElettronica( testata.getUnitaCompetenza()).iterator();i.hasNext();){ Utente_indirizzi_mailBulk utente_indirizzi = (Utente_indirizzi_mailBulk)i.next(); if (addressTO == null) addressTO = new String(); else addressTO = addressTO + ","; addressTO = addressTO+utente_indirizzi.getIndirizzo_mail(); } if (addressTO != null){ SendMail.sendMail(subject, text, InternetAddress.parse(addressTO)); } }catch (Exception _ex) { logger.error("NotificaUOCompetenza: " + _ex.getMessage(), _ex); } } } catch (PersistencyException e) { throw handleException(e); } } public SQLBuilder selectVoceIvaByClause(UserContext usercontext, DocumentoEleIvaBulk documentoEleIvaBulk, Voce_ivaBulk voce_ivaBulk, CompoundFindClause compoundfindclause) throws ComponentException, PersistencyException{ Voce_ivaHome voceIvaHome = (Voce_ivaHome) getHome(usercontext, Voce_ivaBulk.class); SQLBuilder sqlVoceIva = voceIvaHome.selectByClause(compoundfindclause); sqlVoceIva.addClause(FindClause.AND, "percentuale", SQLBuilder.EQUALS, documentoEleIvaBulk.getAliquotaIva()); sqlVoceIva.addSQLClause(FindClause.AND, "NATURA_OPER_NON_IMP_SDI", SQLBuilder.EQUALS, documentoEleIvaBulk.getNatura()); sqlVoceIva.addSQLClause("AND", "ti_applicazione", SQLBuilder.NOT_EQUALS, Voce_ivaBulk.VENDITE); return sqlVoceIva; } @SuppressWarnings("unchecked") public SQLBuilder selectModalitaPagamentoByClause(UserContext usercontext, DocumentoEleTestataBulk docTestata, Modalita_pagamentoBulk modalita_pagamentoBulk, CompoundFindClause compoundfindclause) throws ComponentException, PersistencyException{ Rif_modalita_pagamentoHome rifModPagHome = (Rif_modalita_pagamentoHome) getHome(usercontext,Rif_modalita_pagamentoBulk.class); SQLBuilder sqlRifModPag = rifModPagHome.selectByClause(compoundfindclause); sqlRifModPag.addClause(FindClause.AND, "tipoPagamentoSdi", SQLBuilder.EQUALS, docTestata.getBeneficiarioModPag()); List rifModPags = rifModPagHome.fetchAll(sqlRifModPag); SQLBuilder sql = (SQLBuilder) super.select( usercontext, compoundfindclause, modalita_pagamentoBulk ); if (docTestata.getDocumentoEleTrasmissione().getSoggettoEmittente() != null && docTestata.getDocumentoEleTrasmissione().getSoggettoEmittente().equals(SoggettoEmittenteType.TZ.value())) { if (docTestata.getDocumentoEleTrasmissione().getIntermediarioCdTerzo() != null) sql.addSQLClause(FindClause.AND, "CD_TERZO", SQLBuilder.EQUALS, docTestata.getDocumentoEleTrasmissione().getIntermediarioCdTerzo()); else if (docTestata.getDocumentoEleTrasmissione().getRappresentanteCdTerzo() != null) sql.addSQLClause(FindClause.AND, "CD_TERZO", SQLBuilder.EQUALS, docTestata.getDocumentoEleTrasmissione().getRappresentanteCdTerzo()); else sql.addSQLClause(FindClause.AND, "CD_TERZO", SQLBuilder.EQUALS, docTestata.getDocumentoEleTrasmissione().getPrestatoreCdTerzo()); } else { sql.addSQLClause(FindClause.AND, "CD_TERZO", SQLBuilder.EQUALS, docTestata.getDocumentoEleTrasmissione().getPrestatoreCdTerzo()); } sql.openParenthesis(FindClause.AND); for (Rif_modalita_pagamentoBulk rif_modalita_pagamentoBulk : rifModPags) { sql.addSQLClause(FindClause.OR, "CD_MODALITA_PAG", SQLBuilder.EQUALS, rif_modalita_pagamentoBulk.getCd_modalita_pag()); } sql.closeParenthesis(); return sql; } public Fattura_passivaBulk cercaFatturaPassiva(UserContext usercontext, DocumentoEleTestataBulk oggettobulk) throws ComponentException { Fattura_passivaHome fatturaPassivaHome = (Fattura_passivaHome) getHome(usercontext, oggettobulk.getInstanceFattura()); SQLBuilder sqlFatturaPassiva = fatturaPassivaHome.createSQLBuilder(); sqlFatturaPassiva.addClause(FindClause.AND, "documentoEleTestata", SQLBuilder.EQUALS, oggettobulk); try { return (Fattura_passivaBulk) fatturaPassivaHome.fetchAll(fatturaPassivaHome.createBroker(sqlFatturaPassiva)).get(0); } catch (PersistencyException e) { throw handleException(e); } } public Fattura_passivaBulk cercaFatturaPassivaForNota(UserContext usercontext, DocumentoEleTestataBulk oggettobulk) throws ComponentException { Fattura_passivaHome fatturaPassivaHome = (Fattura_passivaHome) getHome(usercontext, Fattura_passiva_IBulk.class); String numeroFatturaFornitore = null; Timestamp dataFatturaFornitore = null; for (DocumentoEleAcquistoBulk documentoEleAcquistoBulk : oggettobulk.getDocEleAcquistoColl()) { if (documentoEleAcquistoBulk.getTipoRifacquisto().equalsIgnoreCase(TipoAcquistoEnum.Fatture_Collegate.name())){ numeroFatturaFornitore = documentoEleAcquistoBulk.getAcquistoDocumento(); dataFatturaFornitore = documentoEleAcquistoBulk.getAcquistoData(); break; } } // Rospuc 22/09/2016 consentito registrazione nota credito anche senza riferimenti alla fattura collegata /* if (numeroFatturaFornitore == null || dataFatturaFornitore == null) { throw new ApplicationException("Fattura collegata alla nota non trovata! Informazioni mancanti!"); } */ SQLBuilder sqlFatturaPassiva = fatturaPassivaHome.createSQLBuilder(); sqlFatturaPassiva.addClause(FindClause.AND, "fornitore", SQLBuilder.EQUALS, oggettobulk.getDocumentoEleTrasmissione().getPrestatore()); // Rospuc 22/09/2016 consentito registrazione nota credito anche con riferimenti simili alla fattura collegata indicata sqlFatturaPassiva.addClause(FindClause.AND, "cd_unita_organizzativa", SQLBuilder.EQUALS, oggettobulk.getDocumentoEleTrasmissione().getUnitaOrganizzativa().getCd_unita_organizzativa()); sqlFatturaPassiva.addClause(FindClause.AND, "nr_fattura_fornitore", SQLBuilder.CONTAINS, numeroFatturaFornitore); sqlFatturaPassiva.addClause(FindClause.AND, "dt_fattura_fornitore", SQLBuilder.EQUALS, dataFatturaFornitore); try { List fattureCol = fatturaPassivaHome.fetchAll(fatturaPassivaHome.createBroker(sqlFatturaPassiva)); if (fattureCol.isEmpty()||fattureCol.size()>1){ // Rospuc 22/09/2016 consentito registrazione nota credito su ultima fattura registrata sqlFatturaPassiva = fatturaPassivaHome.createSQLBuilder(); sqlFatturaPassiva.addClause(FindClause.AND, "fornitore", SQLBuilder.EQUALS, oggettobulk.getDocumentoEleTrasmissione().getPrestatore()); sqlFatturaPassiva.addClause(FindClause.AND, "cd_unita_organizzativa", SQLBuilder.EQUALS, oggettobulk.getDocumentoEleTrasmissione().getUnitaOrganizzativa().getCd_unita_organizzativa()); sqlFatturaPassiva.setOrderBy("dt_registrazione", it.cnr.jada.util.OrderConstants.ORDER_ASC); List fatture = fatturaPassivaHome.fetchAll(fatturaPassivaHome.createBroker(sqlFatturaPassiva)); if (fatture.isEmpty()){ throw new ApplicationException("Fattura collegata alla nota non trovata!"); } return (Fattura_passivaBulk) fatture.get(fatture.size()-1); } return (Fattura_passivaBulk) fattureCol.get(0); } catch (PersistencyException e) { throw handleException(e); } } private boolean isRibaltato(it.cnr.jada.UserContext userContext, String cd_cds, Integer esercizio) throws ComponentException { try { return ((Parametri_cdsHome)getHome(userContext,Parametri_cdsBulk.class)).isRibaltato(userContext, cd_cds, esercizio); } catch(Throwable e) { throw handleException(e); } } public Configurazione_cnrBulk getEmailPecSdi(UserContext userContext) throws it.cnr.jada.comp.ComponentException { try { Configurazione_cnrBulk configurazione_cnrBulk = new Configurazione_cnrBulk(Configurazione_cnrBulk.PK_EMAIL_PEC,Configurazione_cnrBulk.SK_SDI, "*", new Integer(0)); Configurazione_cnrHome configurazione_cnrHome = (Configurazione_cnrHome) getHome(userContext, Configurazione_cnrBulk.class); configurazione_cnrBulk = (Configurazione_cnrBulk) configurazione_cnrHome.findAndLock(configurazione_cnrBulk); if ("Y".equalsIgnoreCase(configurazione_cnrBulk.getVal04())) return null; configurazione_cnrBulk.setVal04("Y"); configurazione_cnrBulk.setToBeUpdated(); configurazione_cnrHome.update(configurazione_cnrBulk, userContext); return configurazione_cnrBulk; } catch (BusyResourceException _ex) { return null; } catch(Throwable e) { throw handleException(e); } } public void unlockEmailPEC(UserContext userContext) throws it.cnr.jada.comp.ComponentException { try { Configurazione_cnrBulk configurazione_cnrBulk = new Configurazione_cnrBulk(Configurazione_cnrBulk.PK_EMAIL_PEC,Configurazione_cnrBulk.SK_SDI, "*", new Integer(0)); Configurazione_cnrHome configurazione_cnrHome = (Configurazione_cnrHome) getHome(userContext, Configurazione_cnrBulk.class); configurazione_cnrBulk = (Configurazione_cnrBulk) configurazione_cnrHome.findAndLock(configurazione_cnrBulk); configurazione_cnrBulk.setVal04("N"); configurazione_cnrBulk.setToBeUpdated(); configurazione_cnrHome.update(configurazione_cnrBulk, userContext); } catch(Throwable e) { throw handleException(e); } } public void notificaEsito(UserContext usercontext, TipoIntegrazioneSDI tipoIntegrazioneSDI, DocumentoEleTestataBulk documentoEleTestataBulk) throws ComponentException{ DocumentoEleTestataHome home = (DocumentoEleTestataHome) getHome(usercontext, DocumentoEleTestataBulk.class); try { List lista = recuperoTrasmissione(usercontext, documentoEleTestataBulk.getIdentificativoSdi()); documentoEleTestataBulk.setDocumentoEleTrasmissione(lista.get(0)); home.notificaEsito(usercontext, tipoIntegrazioneSDI, documentoEleTestataBulk); } catch (IOException e) { handleException(e); } } public boolean existsIdentificativo(UserContext usercontext, Long identificativoSdI) throws ComponentException { return !recuperoTrasmissione(usercontext, identificativoSdI).isEmpty(); } public List recuperoTrasmissione(UserContext usercontext, Long identificativoSdI) throws ComponentException { DocumentoEleTrasmissioneHome home = (DocumentoEleTrasmissioneHome) getHome(usercontext, DocumentoEleTrasmissioneBulk.class); SQLBuilder sql = home.createSQLBuilder(); sql.addClause(FindClause.AND, "identificativoSdi", SQLBuilder.EQUALS, identificativoSdI); try { return home.fetchAll(sql); } catch (PersistencyException e) { throw handleException(e); } } public List recuperoDocumento(UserContext usercontext, Long identificativoSdI) throws ComponentException { DocumentoEleTestataHome home = (DocumentoEleTestataHome) getHome(usercontext, DocumentoEleTestataBulk.class); SQLBuilder sql = home.createSQLBuilder(); sql.addClause(FindClause.AND, "identificativoSdi", SQLBuilder.EQUALS, identificativoSdI); try { return home.fetchAll(sql); } catch (PersistencyException e) { throw handleException(e); } } public void aggiornaDecorrenzaTerminiSDI(UserContext userContext, List listaDoc) throws PersistencyException, ComponentException,java.rmi.RemoteException { for (DocumentoEleTestataBulk doc : listaDoc) { doc.setFlDecorrenzaTermini("S"); doc.setToBeUpdated(); updateBulk(userContext, doc); } } public void aggiornaConsegnaEsitoPec(UserContext userContext, List listaDoc, Calendar dataRicevimentoMail) throws PersistencyException, ComponentException,java.rmi.RemoteException { for (DocumentoEleTestataBulk doc : listaDoc) { doc.setStatoNotificaEsito(DocumentoEleTestataBulk.STATO_CONSEGNA_ESITO_CONSEGNATO_SDI); doc.setDataRicevimentoMailRifiuto(dataRicevimentoMail!=null?new Timestamp(dataRicevimentoMail.getTime().getTime()):doc.getDataRicevimentoMailRifiuto()); doc.setToBeUpdated(); updateBulk(userContext, doc); } } public void aggiornaScartoEsitoPec(UserContext userContext, List listaDoc, Calendar dataRicevimentoMail) throws PersistencyException, ComponentException,java.rmi.RemoteException { for (DocumentoEleTestataBulk doc : listaDoc) { doc.setStatoNotificaEsito(DocumentoEleTestataBulk.STATO_CONSEGNA_ESITO_SCARTATO_SDI); doc.setDataRicevimentoMailRifiuto(dataRicevimentoMail!=null?new Timestamp(dataRicevimentoMail.getTime().getTime()):doc.getDataRicevimentoMailRifiuto()); doc.setToBeUpdated(); updateBulk(userContext, doc); } } @SuppressWarnings("unchecked") public void allineaEsitoCommitente(UserContext usercontext, TipoIntegrazioneSDI tipoIntegrazioneSDI) throws ComponentException { DocumentoEleTestataHome home = (DocumentoEleTestataHome) getHome(usercontext, DocumentoEleTestataBulk.class); SQLBuilder sql = home.createSQLBuilder(); sql.addClause(FindClause.AND, "statoNotificaEsito", SQLBuilder.EQUALS, DocumentoEleTestataBulk.STATO_CONSEGNA_ESITO_SCARTATO_SDI); sql.addClause(FindClause.AND, "flDecorrenzaTermini", SQLBuilder.EQUALS, "N"); try { List results = home.fetchAll(sql); getHomeCache(usercontext).fetchAll(usercontext); for (DocumentoEleTestataBulk documentoEleTestata : results) { notificaEsito(usercontext, tipoIntegrazioneSDI, documentoEleTestata); documentoEleTestata.setStatoNotificaEsito(null); documentoEleTestata.setToBeUpdated(); modificaConBulk(usercontext, documentoEleTestata); logger.info("Inviata notifica per identificativo:" + documentoEleTestata.getIdentificativoSdi()); } } catch (PersistencyException e) { throw handleException(e); } } @SuppressWarnings("unchecked") public void allineaEsitoCommitente(UserContext usercontext, Long identificativoSdI, String statoSDI, TipoIntegrazioneSDI tipoIntegrazioneSDI) throws ComponentException { DocumentoEleTestataHome home = (DocumentoEleTestataHome) getHome(usercontext, DocumentoEleTestataBulk.class); SQLBuilder sql = home.createSQLBuilder(); sql.addClause(FindClause.AND, "identificativoSdi", SQLBuilder.EQUALS, identificativoSdI); sql.addClause(FindClause.AND, "statoNotificaEsito", SQLBuilder.EQUALS, DocumentoEleTestataBulk.STATO_CONSEGNA_ESITO_SCARTATO_SDI); try { List results = home.fetchAll(sql); getHomeCache(usercontext).fetchAll(usercontext); if (!results.isEmpty() && results.size() == 1) { DocumentoEleTestataBulk documentoEleTestata = results.get(0); if (!documentoEleTestata.getStatoDocumentoEle().equals(StatoDocumentoEleEnum.fromStatoSDI(statoSDI)) && (documentoEleTestata.isRegistrata() || documentoEleTestata.isRifiutata())){ notificaEsito(usercontext, tipoIntegrazioneSDI, documentoEleTestata); documentoEleTestata.setStatoNotificaEsito(null); documentoEleTestata.setToBeUpdated(); modificaConBulk(usercontext, documentoEleTestata); logger.info("Inviata notifica per identificativo:" + identificativoSdI + " STATO SIGLA:"+ documentoEleTestata.getStatoDocumentoEle() + " - STATO SDI:" + StatoDocumentoEleEnum.fromStatoSDI(statoSDI)); } } } catch (PersistencyException e) { throw handleException(e); } } @SuppressWarnings("unchecked") public void allineaEsitoCommitente(UserContext usercontext, List identificativi, TipoIntegrazioneSDI tipoIntegrazioneSDI) throws ComponentException { DocumentoEleTestataHome home = (DocumentoEleTestataHome) getHome(usercontext, DocumentoEleTestataBulk.class); SQLBuilder sql = home.createSQLBuilder(); for (Long identificativoSdI : identificativi) { sql.addClause(FindClause.AND, "identificativoSdi", SQLBuilder.NOT_EQUALS, identificativoSdI); } sql.openParenthesis(FindClause.AND); sql.addClause(FindClause.OR, "statoDocumento", SQLBuilder.EQUALS, StatoDocumentoEleEnum.RIFIUTATO.name()); sql.addClause(FindClause.OR, "statoDocumento", SQLBuilder.EQUALS, StatoDocumentoEleEnum.REGISTRATO.name()); sql.closeParenthesis(); sql.addClause(FindClause.AND, "statoNotificaEsito", SQLBuilder.EQUALS, DocumentoEleTestataBulk.STATO_CONSEGNA_ESITO_SCARTATO_SDI); try { List results = home.fetchAll(sql); getHomeCache(usercontext).fetchAll(usercontext); for (DocumentoEleTestataBulk documentoEleTestata : results) { notificaEsito(usercontext, tipoIntegrazioneSDI, documentoEleTestata); documentoEleTestata.setStatoNotificaEsito(null); documentoEleTestata.setToBeUpdated(); modificaConBulk(usercontext, documentoEleTestata); logger.info("Inviata notifica per identificativo:" + documentoEleTestata.getIdentificativoSdi() + " STATO SIGLA:"+ documentoEleTestata.getStatoDocumentoEle() + " - STATO SDI NON PRESENTE"); } } catch (PersistencyException e) { throw handleException(e); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy