Skip to content

Commit

Permalink
Lettura mail delle notifiche della fattura elettronica attiva e invio…
Browse files Browse the repository at this point in the history
… via pec della fattura
  • Loading branch information
gianfranco.gasparro committed Apr 9, 2015
1 parent 8c574bf commit 4df96d5
Show file tree
Hide file tree
Showing 29 changed files with 1,769 additions and 116 deletions.
Expand Up @@ -65,7 +65,7 @@ public void setCodPecProtocollo(java.lang.String codPecProtocollo) {
}
public java.lang.String getCodPecProtocolloInChiaro() {
try {
return StringEncrypter.decrypt(emailPecProtocollo, codPecProtocollo).replaceAll("[^a-zA-Z0-9_-]", "");
return StringEncrypter.decrypt(emailPecProtocollo, codPecProtocollo);
} catch (EncryptionException e) {
return codPecProtocollo;
}
Expand Down
Expand Up @@ -3,14 +3,24 @@
* Date 14/06/2010
*/
package it.cnr.contab.config00.sto.bulk;
import java.sql.Connection;
import it.cnr.jada.bulk.BulkHome;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.persistency.PersistentCache;

import java.sql.Connection;
public class UnitaOrganizzativaPecHome extends BulkHome {
public UnitaOrganizzativaPecHome(Connection conn) {
super(UnitaOrganizzativaPecBulk.class, conn);
}
public UnitaOrganizzativaPecHome(Connection conn, PersistentCache persistentCache) {
super(UnitaOrganizzativaPecBulk.class, conn, persistentCache);
}
public UnitaOrganizzativaPecBulk recuperoUoPec(Unita_organizzativaBulk unita_organizzativa)throws PersistencyException{
String uoPec;
if (unita_organizzativa.getCd_tipo_unita().equalsIgnoreCase(Tipo_unita_organizzativaHome.TIPO_UO_SAC))
uoPec = unita_organizzativa.getCd_unita_organizzativa();
else
uoPec = unita_organizzativa.getCd_unita_padre();
return (UnitaOrganizzativaPecBulk)findByPrimaryKey(new UnitaOrganizzativaPecBulk(uoPec));
}
}
Expand Up @@ -3240,6 +3240,8 @@ public Forward doConfirmGeneraNotaDiCreditoAutomatica(ActionContext context,int
return handleException(context, e);
} catch (RemoteException e) {
return handleException(context, e);
} catch (PersistencyException e) {
return handleException(context, e);
}
}
}
Expand Up @@ -5,6 +5,7 @@
import it.cnr.contab.docamm00.docs.bulk.Fattura_attiva_rigaIBulk;
import it.cnr.contab.docamm00.docs.bulk.Nota_di_credito_attivaBulk;
import it.cnr.contab.docamm00.ejb.FatturaAttivaSingolaComponentSession;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.action.BusinessProcessException;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.comp.ComponentException;
Expand Down Expand Up @@ -254,7 +255,7 @@ public boolean isBeni_collButtonHidden() {

return isSearching() || isDeleting();
}
public Nota_di_credito_attivaBulk generaNotaCreditoAutomatica(it.cnr.jada.action.ActionContext context, Fattura_attiva_IBulk fa, Integer esercizio) throws ComponentException, RemoteException {
public Nota_di_credito_attivaBulk generaNotaCreditoAutomatica(it.cnr.jada.action.ActionContext context, Fattura_attiva_IBulk fa, Integer esercizio) throws ComponentException, PersistencyException, RemoteException {
FatturaAttivaSingolaComponentSession h = ((FatturaAttivaSingolaComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession",FatturaAttivaSingolaComponentSession.class));
try {
rollbackUserTransaction();
Expand Down
@@ -1,17 +1,20 @@
package it.cnr.contab.docamm00.bp;


import it.cnr.contab.cmis.CMISAspect;
import it.cnr.contab.cmis.MimeTypes;
import it.cnr.contab.cmis.bulk.CMISFile;
import it.cnr.contab.cmis.service.CMISPath;
import it.cnr.contab.cmis.service.SiglaCMISService;
import it.cnr.contab.config00.sto.bulk.UnitaOrganizzativaPecBulk;
import it.cnr.contab.docamm00.cmis.CMISDocAmmAspect;
import it.cnr.contab.docamm00.cmis.CMISFileFatturaAttiva;
import it.cnr.contab.docamm00.docs.bulk.Fattura_attivaBulk;
import it.cnr.contab.docamm00.docs.bulk.Filtro_ricerca_doc_ammVBulk;
import it.cnr.contab.docamm00.ejb.DocAmmFatturazioneElettronicaComponentSession;
import it.cnr.contab.docamm00.ejb.FatturaAttivaSingolaComponentSession;
import it.cnr.contab.docamm00.service.DocumentiCollegatiDocAmmService;
import it.cnr.contab.docamm00.service.FatturaPassivaElettronicaService;
import it.cnr.contab.firma.bulk.FirmaOTPBulk;
import it.cnr.contab.service.SpringUtil;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
Expand Down Expand Up @@ -41,6 +44,7 @@
import java.util.Iterator;
import java.util.List;

import javax.mail.PasswordAuthentication;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;

Expand All @@ -51,10 +55,14 @@
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONObject;
import org.json.JSONTokener;

public class CRUDSelezionatoreDocumentiAmministrativiFatturazioneElettronicaBP extends SelezionatoreListaBP {
private transient final static Log logger = LogFactory.getLog(CRUDSelezionatoreDocumentiAmministrativiFatturazioneElettronicaBP.class);
private static final long serialVersionUID = 1L;
private DocumentiCollegatiDocAmmService documentiCollegatiDocAmmService;
private boolean utenteNonAbilitatoFirma;
Expand Down Expand Up @@ -142,6 +150,7 @@ public void firmaOTP(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Ex
List<OggettoBulk> lista = getSelectedElements(context);
DocumentiCollegatiDocAmmService cmisService = SpringUtil.getBean("documentiCollegatiDocAmmService", DocumentiCollegatiDocAmmService.class);
DocAmmFatturazioneElettronicaComponentSession component = createComponentSession();

// FatturaAttivaSingolaComponentSession componentFatturaAttiva = Utility.createFatturaAttivaSingolaComponentSession();
FatturaAttivaSingolaComponentSession componentFatturaAttiva = (FatturaAttivaSingolaComponentSession) createComponentSession(
"CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession",
Expand All @@ -151,10 +160,20 @@ public void firmaOTP(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Ex
OggettoBulk docAmm = i.next();
if (docAmm instanceof Fattura_attivaBulk) {
Fattura_attivaBulk fattura = (Fattura_attivaBulk) docAmm;

logger.info("Processo la fattura");

UnitaOrganizzativaPecBulk unitaOrganizzativaPecBulk = component.getAuthenticatorFromUo(userContext, fattura.getCd_uo_origine());

if (unitaOrganizzativaPecBulk == null || unitaOrganizzativaPecBulk.getEmailPecProtocollo() == null || unitaOrganizzativaPecBulk.getCodPecProtocollo() == null){
throw new ApplicationException("Impossibile procedere. Non è stato possibile recuperare l'email della PEC dell'istituto per l'invio della fattura elettronica!");
}
PasswordAuthentication authentication = new PasswordAuthentication(unitaOrganizzativaPecBulk.getEmailPecProtocollo(), unitaOrganizzativaPecBulk.getCodPecProtocolloInChiaro());
logger.info("Recuperata Autenticazione PEC");
File file = creaFileXml(userContext, fattura);

logger.info("Creato file XML");
fattura = protocollazione(userContext, fattura);
logger.info("Creato protocollazione");

List<CMISFile> cmisFileCreate = new ArrayList<CMISFile>();
List<CMISFile> cmisFileAnnullati = new ArrayList<CMISFile>();
Expand All @@ -172,6 +191,7 @@ public void firmaOTP(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Ex
cmisFile.getContentType(),
cmisFile.getFileName(),
path);
logger.info("Salvato file XML sul Documentale");
cmisService.addAspect(node, CMISDocAmmAspect.SIGLA_FATTURE_ATTACHMENT_FATTURA_ELETTRONICA_XML_ANTE_FIRMA.value());
cmisService.makeVersionable(node);
cmisFile.setDocument(node);
Expand All @@ -181,6 +201,9 @@ public void firmaOTP(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Ex
throw new ApplicationException("CMIS - File ["+cmisFile.getFileName()+"] già presente o non completo di tutte le proprietà obbligatorie. Inserimento non possibile!");
throw new ApplicationException("CMIS - Errore nella registrazione del file XML sul Documentale (" + e.getMessage() + ")");
}
String nomeFile = file.getName();
String nomeFileP7m = nomeFile+".p7m";
fattura.setNomeFileInvioSdi(nomeFileP7m);
componentFatturaAttiva.aggiornaFatturaInvioSDI(userContext, fattura, Fattura_attivaBulk.FATT_ELETT_CONSEGNATA_SDI, null);
String webScriptURL = documentiCollegatiDocAmmService.getRepositoyURL().concat("service/sigla/firma/fatture");
String json = "{" +
Expand All @@ -191,17 +214,44 @@ public void firmaOTP(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Ex
+ "}";
try {
UrlBuilder url = new UrlBuilder(URIUtil.encodePath(webScriptURL));
logger.info("Prima di firma file XML");
Response response = documentiCollegatiDocAmmService.invokePOST(url, MimeTypes.JSON, json.getBytes("UTF-8"));
int status = response.getResponseCode();
if (status == HttpStatus.SC_NOT_FOUND
|| status == HttpStatus.SC_INTERNAL_SERVER_ERROR
|| status == HttpStatus.SC_UNAUTHORIZED
|| status == HttpStatus.SC_BAD_REQUEST) {
logger.info("Firma Errore");
JSONTokener tokenizer = new JSONTokener(new StringReader(response.getErrorContent()));
JSONObject jsonObject = new JSONObject(tokenizer);
String jsonMessage = jsonObject.getString("message");
throw new ApplicationException(FirmaOTPBulk.errorMessage(jsonMessage));
}
} else {
logger.info("Firma OK");
JSONTokener tokenizer = new JSONTokener(new InputStreamReader(response.getStream()));
JSONObject jsonObject = new JSONObject(tokenizer);
Document nodeSigned = (Document) documentiCollegatiDocAmmService.getNodeByNodeRef(jsonObject.getString("nodeRef"));
logger.info("Recuperato noderef file firmato dal documentale");
InputStream streamSigned = documentiCollegatiDocAmmService.getResource(nodeSigned);
logger.info("Recuperato file firmato dal documentale");
try {
File fileSigned = new File(System.getProperty("tmp.dir.SIGLAWeb")+"/tmp/", nomeFileP7m);
OutputStream outputStream = new FileOutputStream(fileSigned);
IOUtils.copy(streamSigned, outputStream);
outputStream.close();
logger.info("Salvato file firmato temporaneo");
if (fattura.getNcAnnulloSdi() == null || fattura.getNcAnnulloSdi().equals("N")){
FatturaPassivaElettronicaService fatturaService = SpringUtil.getBean("fatturaPassivaElettronicaService", FatturaPassivaElettronicaService.class);
fatturaService.inviaFatturaElettronica(authentication.getUserName(), authentication.getPassword(), fileSigned, cmisFile.getDescription());
logger.info("File firmato inviato");
}
} catch (Exception ex) {
logger.error("Errore nell'invio del file "+ ex.getMessage() == null ? (ex.getCause() == null ? "" : ex.getCause().toString()):ex.getMessage());
documentiCollegatiDocAmmService.removeAspect(cmisFile.getDocument(), CMISAspect.CNR_SIGNEDDOCUMENT.value());
documentiCollegatiDocAmmService.deleteNode(nodeSigned);
throw new ApplicationException("Errore nell'invio della mail PEC per la fatturazione elettronica. Ripetere l'operazione di firma!");
}
}
commitUserTransaction();
} catch (HttpException e) {
throw new BusinessProcessException(e);
Expand Down Expand Up @@ -233,7 +283,6 @@ public void firmaOTP(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Ex
refresh(context);
}


public Fattura_attivaBulk protocollazione(UserContext userContext,
Fattura_attivaBulk fattura) throws BusinessProcessException,
ComponentException, RemoteException, PersistencyException {
Expand Down
Expand Up @@ -12,6 +12,7 @@

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import org.apache.chemistry.opencmis.client.api.Document;
import org.slf4j.Logger;
Expand All @@ -26,6 +27,11 @@ public class CMISFileFatturaAttiva extends CMISFile implements CMISTypeName{
private String originalName;
private String typeName = "D:sigla_fatture_attachment:document";

public CMISFileFatturaAttiva(InputStream inputStream, String contentType, String name, Fattura_attivaBulk fattura) throws IOException{
super(inputStream, contentType, name);
impostaDatiBaseFattura(name, fattura);
}

public CMISFileFatturaAttiva(File file, Fattura_attivaBulk fattura, String prefissoNomeFile) throws IOException{
super(file, null, prefissoNomeFile + fattura.constructCMISNomeFile());
impostaDatiBaseFattura(file.getName(), fattura);
Expand Down
Expand Up @@ -7,6 +7,9 @@
import it.cnr.contab.anagraf00.tabter.bulk.NazioneBulk;
import it.cnr.contab.config00.bulk.Configurazione_cnrBulk;
import it.cnr.contab.config00.contratto.bulk.ContrattoBulk;
import it.cnr.contab.config00.sto.bulk.UnitaOrganizzativaPecBulk;
import it.cnr.contab.config00.sto.bulk.UnitaOrganizzativaPecHome;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
import it.cnr.contab.docamm00.docs.bulk.Fattura_attivaBulk;
import it.cnr.contab.docamm00.docs.bulk.Fattura_attiva_rigaBulk;
import it.cnr.contab.docamm00.docs.bulk.Fattura_attiva_rigaIBulk;
Expand Down Expand Up @@ -287,12 +290,30 @@ private String recuperoCodiceUnivocoFile(Fattura_attivaBulk fattura) throws Comp
}

public String recuperoNomeFileXml(UserContext userContext, Fattura_attivaBulk fattura) throws RemoteException, ComponentException {
try {
return recuperoNomeFileSenzaEstensione(userContext, fattura) +".xml";
} catch(Exception e) {
throw handleException(e);
}
}

public String recuperoNomeFileSenzaEstensione(UserContext userContext, Fattura_attivaBulk fattura) throws RemoteException, ComponentException {
try {
String inizioNomeFile = recuperoInizioNomeFile(userContext);
return inizioNomeFile+"_"+recuperoCodiceUnivocoFile(fattura);
} catch(Exception e) {
throw handleException(e);
}
}

public String recuperoInizioNomeFile(UserContext userContext) throws RemoteException,ComponentException {
try {
TerzoBulk terzoCnr = ((TerzoHome)getHome( userContext, TerzoBulk.class)).findTerzoEnte();

String codiceFiscaleEnte = impostaCodiceFiscale(userContext, terzoCnr);
String idPaese = impostaCodicePaese(userContext, terzoCnr);
return idPaese+codiceFiscaleEnte+"_"+recuperoCodiceUnivocoFile(fattura)+".xml";
String inizioNomeFile = idPaese+codiceFiscaleEnte;
return inizioNomeFile;
} catch(Exception e) {
throw handleException(e);
}
Expand All @@ -318,6 +339,18 @@ public FileSdIBaseType preparaMessaggio(UserContext userContext, DataHandler dat
}
}

public UnitaOrganizzativaPecBulk getAuthenticatorFromUo(UserContext userContext, String uo) throws ComponentException {
try {
Unita_organizzativaBulk unita_organizzativa = (Unita_organizzativaBulk)getHomeCache(userContext).getHome(Unita_organizzativaBulk.class).findByPrimaryKey(new Unita_organizzativaBulk(uo));
if (unita_organizzativa != null){
return ((UnitaOrganizzativaPecHome)getHome( userContext, UnitaOrganizzativaPecBulk.class)).recuperoUoPec(unita_organizzativa);
}
return null;
} catch (PersistencyException e) {
throw new ComponentException(e);
}
}

public JAXBElement<FatturaElettronicaType> creaFatturaElettronicaType(UserContext userContext, Fattura_attivaBulk fattura) throws ComponentException {
try {

Expand Down

0 comments on commit 4df96d5

Please sign in to comment.