public static bool processaRicevutaConferma(DocsPaVO.Interoperabilita.RicevutaRitorno ricevuta, out string message) { message = string.Empty; try { CultureInfo ci = new CultureInfo("it-IT"); string[] formati = { "dd/MM/yyyy", "yyyy-MM-dd", "DD/MM/YYYY hh:mm:ss", "DD/MM/YYYY hh.mm.ss", "DD/MM/YYYY HH.mm.ss", "DD/MM/YYYY HH:mm:ss" }; string codiceAmministrazione = ricevuta.codAmm; string codiceAOO = ricevuta.codAOO; string numeroRegistrazione = ricevuta.numeroRegistrazione; DateTime dataRegistrazione = DateTime.ParseExact(ricevuta.dataRegistrazione, formati, ci.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces); //info sul messaggio string codiceAmministrazioneMitt = ricevuta.codAmm_Mitt; string codiceAOOMitt = ricevuta.codAOO_Mitt; string numeroRegistrazioneMitt = ricevuta.numeroRegistr_Mitt; DateTime dataRegistrazioneMitt = DateTime.ParseExact(ricevuta.dataRegistr_Mitt, formati, ci.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces); //si trova il numero del documento logger.Debug("Ricerca id del profilo..."); string idProf = Interoperabilità.InteroperabilitaUtils.findIdProfile(codiceAOOMitt, numeroRegistrazioneMitt, dataRegistrazioneMitt.Year); logger.Debug("idProfile=" + idProf); if (idProf == null) { logger.Debug("Documento mittente non trovato"); message = "Documento mittente non trovato"; return(false); } //si esegue l'update della tabella stato invio if (codiceAOO != null && !codiceAOO.Equals("") && codiceAmministrazione != null && !codiceAmministrazione.Equals("")) { logger.Debug("Update della tabella stato invio: idProfile=" + idProf + ", CodiceAOO=" + codiceAOO + ", CodiceAmm=" + codiceAmministrazione + ", data=" + dataRegistrazione.ToString("dd/MM/yyyy")); bool res_update = updateStatoInvio(idProf, codiceAOO, codiceAmministrazione, dataRegistrazione.ToString("dd/MM/yyyy"), numeroRegistrazione, dataRegistrazione.Year); if (!res_update) { logger.Debug("Errore: non e' stato eseguito l'update del profilo"); message = "Si è verificato un errore nell'aggiornamento della ricevuta di ritorno"; return(false); } } else { logger.Debug("L'update della tabella profile non può essere eseguito: codiceAOO o codiceAmministrazione nullo"); message = "Si è verificato un errore: dati mancanti "; return(false); } return(true); } catch (Exception e) { logger.Error("Si è verificato un problema nella ricevuta di ritorno. Eccezione: " + e.ToString()); return(false); } }
/// <summary> /// </summary> /// <param name="idProfile"></param> /// <param name="reg"></param> public static void sendRicevutaRitorno(DocsPaVO.documento.SchedaDocumento schedaDoc, DocsPaVO.utente.Registro reg, DocsPaVO.utente.Ruolo ruolo, DocsPaVO.utente.InfoUtente infoUtente, out string messaggioErrore) { messaggioErrore = string.Empty; #region nuova gestione interop string err = ""; //todo da calcolare; try { // estrazione dati + controllo mittente est o int System.Data.DataSet dsMitt = null; System.Data.DataSet dsProto = null; DocsPaDB.Query_DocsPAWS.Interoperabilita obj = new DocsPaDB.Query_DocsPAWS.Interoperabilita(); obj.getMittSegn(out dsMitt, schedaDoc.systemId); if (InteroperabilitaUtils.InteropIntNoMail && schedaDoc.interop != null && schedaDoc.interop == "I" && dsMitt != null && dsMitt.Tables[0].Rows.Count > 0 && dsMitt.Tables["INFO_MITT"].Rows[0]["CHA_TIPO_IE"] != null && !dsMitt.Tables["INFO_MITT"].Rows[0]["CHA_TIPO_IE"].Equals(System.DBNull.Value)) { obj.getDatiProtoSpedito(out dsProto, schedaDoc.systemId); string sep = DocsPaDB.Utils.Personalization.getInstance(reg.idAmministrazione).getSepSegnatura(); string codAmm = DocsPaDB.Utils.Personalization.getInstance(reg.idAmministrazione).getCodiceAmministrazione(); //string[] protoMitt=dsMitt.Tables["INFO_MITT"].Rows[0]["VAR_PROTO_IN"].ToString().Split(sep.ToCharArray(),2); int index = dsMitt.Tables["INFO_MITT"].Rows[0]["VAR_PROTO_IN"].ToString().LastIndexOf(sep); string[] protoMitt = new String[2]; protoMitt[0] = dsMitt.Tables["INFO_MITT"].Rows[0]["VAR_PROTO_IN"].ToString().Substring(0, index); protoMitt[1] = dsMitt.Tables["INFO_MITT"].Rows[0]["VAR_PROTO_IN"].ToString().Substring(index + 1);; string dataProtoMitt = dsMitt.Tables["INFO_MITT"].Rows[0]["DTA_PROTO_IN"].ToString(); string dataProto = dsProto.Tables["INFO_PROTO"].Rows[0]["DTA_PROTO"].ToString(); string numProto = dsProto.Tables["INFO_PROTO"].Rows[0]["NUM_PROTO"].ToString(); if (protoMitt != null && dataProtoMitt != null && protoMitt[0] != null && protoMitt[1] != null) { DocsPaVO.Interoperabilita.RicevutaRitorno ric = new DocsPaVO.Interoperabilita.RicevutaRitorno(); ric.codAmm = codAmm; ric.codAmm_Mitt = codAmm; //so che viene dalla stessa amm, ma in futuro posso valutarlo nelle multiamm, dalla dpa_stato_invio ?. ric.codAOO = reg.codRegistro; ric.codAOO_Mitt = protoMitt[0]; ric.dataRegistr_Mitt = dataProtoMitt.Substring(0, dataProtoMitt.IndexOf(" ")); ric.dataRegistrazione = dataProto.Substring(0, dataProtoMitt.IndexOf(" "));; ric.numeroRegistr_Mitt = protoMitt[1]; ric.numeroRegistrazione = numProto; BusinessLogic.Interoperabilità.InteroperabilitaControlloRicevute.processaRicevutaConferma(ric, out err); if (reg.autoInterop != null && reg.autoInterop != "0") { DocsPaVO.documento.SchedaDocumento schedaDocUscita = new DocsPaVO.documento.SchedaDocumento(); //ricavo il protocollo in uscita a partire dal protocollo //predisposto in arrivo schedaDocUscita = getDocumentoInUscitaByDocPredisposto(infoUtente, schedaDoc); // bool verificaRagioni; string message = ""; BusinessLogic.trasmissioni.TrasmProtoIntManager.TrasmissioneProtocolloAutomatico(schedaDoc, schedaDoc.registro.systemId, schedaDocUscita, ruolo, infoUtente, infoUtente.urlWA, false, out verificaRagioni, out message); } } dsMitt.Dispose(); dsProto.Dispose(); } else #endregion { sendRicRitorno(schedaDoc.systemId, reg, schedaDoc, out messaggioErrore); } } catch (Exception e) { if (string.IsNullOrEmpty(messaggioErrore)) { messaggioErrore = "errore nell' invio della ricevuta"; } logger.Error("Errore nella gestione dell'interoperabilità. (sendRicevutaRitorno)" + " ", e); throw e; } }