/// <summary> /// metodo per inserimento nel registro di conservazione. /// /// </summary> /// <param name="registroCons"> ogetto con i dati del registro </param> /// <returns></returns> public bool inserimentoInRegistroCons(DocsPaVO.Conservazione.RegistroCons registroCons, InfoUtente infoUt) { try { // if (!(infoUt.extApplications != null && infoUt.extApplications.Count > 0 && ((DocsPaVO.utente.ExtApplication)infoUt.extApplications[0]).codice.Equals("CS"))) if (!(infoUt.codWorkingApplication != null && infoUt.codWorkingApplication.Equals("CS"))) { return(false); } DocsPaDB.Query_DocsPAWS.Conservazione cons = new DocsPaDB.Query_DocsPAWS.Conservazione(); string rigaIns = cons.InsertInRegistroCons(registroCons); if (String.IsNullOrEmpty(rigaIns)) { return(false); } } catch (Exception exc) { string err = exc.Message; //logger.Debug(err); return(false); } return(true); }
/// <summary> /// Aggiornamento dello stato dell'istanza di conservazione e del supporto /// </summary> protected virtual void UpdateIstanzaConservazione() { string descrizione, codAzione; logger.Info("UpdateIstanzaConservazione"); if (this._statoVerifica.Esito) { string stato = string.Empty; int countSupportiRimovibiliRegistrati = DocsPaConsManager.GetCountSupportiRimovibiliRegistrati(this._idConservazione); int countSupportiRimovibili = DocsPaConsManager.GetCountSupportiRimovibili(this._idConservazione); logger.InfoFormat("UpdateIstanzaConservazione.countSupportiRimovibiliRegistrati: {0}", countSupportiRimovibiliRegistrati); logger.InfoFormat("UpdateIstanzaConservazione.countSupportiRimovibili: {0}", countSupportiRimovibili); // Modifica per scrittura Log e Registro di conservazione if (countSupportiRimovibiliRegistrati == countSupportiRimovibili) { stato = DocsPaConservazione.StatoIstanza.CHIUSA; descrizione = "Passaggio in stato CHIUSA dell’istanza " + _idConservazione; codAzione = "PASS_ISTANZA_CHIUSA"; } else { stato = DocsPaConservazione.StatoIstanza.CONSERVATA; descrizione = "Passaggio in stato CONSERVATA dell’istanza " + _idConservazione; codAzione = "PASS_ISTANZA_CONSERVATA"; } // Impostazione dello stato dell'istanza allo stato "CONSERVATO" DocsPaConsManager.UpdateStatoIstanzaConservazione(this._idConservazione, stato); //Scrive il log BusinessLogic.UserLog.UserLog.WriteLog(_infoUtente, codAzione, _idConservazione, descrizione, DocsPaVO.Logger.CodAzione.Esito.OK); // Scrive sul Registro di Conservazione DocsPaVO.Conservazione.RegistroCons regCons = new DocsPaVO.Conservazione.RegistroCons(); regCons.idAmm = _infoUtente.idAmministrazione; regCons.idIstanza = _idConservazione; regCons.tipoOggetto = "I"; regCons.tipoAzione = ""; regCons.userId = _infoUtente.userId; regCons.codAzione = codAzione; regCons.descAzione = descrizione; regCons.esito = "1"; RegistroConservazione rc = new RegistroConservazione(); rc.inserimentoInRegistroCons(regCons, _infoUtente); } else { logger.Debug("Si è verificato un errore durante lo spostamento dei file sullo storage remoto. L'istanza torna nello stato Firmata"); DocsPaConsManager.UpdateStatoIstanzaConservazione(_idConservazione, DocsPaConservazione.StatoIstanza.FIRMATA); } DocsPaConsManager.UpdateStatoSupportoRemoto(this._idConservazione, 100, (this._statoVerifica.Esito ? StatoSupporto.VERIFICATO : StatoSupporto.DANNEGGIATO)); logger.Info("UpdateIstanzaConservazione - END"); }
/// <summary> /// /// </summary> protected virtual void IniziaVerificaSupporto() { logger.Debug("BEGIN - IniziaVerificaSupporto"); bool hasError = false; string errorMessage = string.Empty; string dctmCServerAddressRoot = string.Empty; //Per rendere asincrona l'operazione di spostamento dei file Impostare a true //Questa operazione è da fare pure su esitoLeggibilita in Docspaconservazionews.asmx bool operazioneAsincrona = true; if (operazioneAsincrona) { FileManager fm = new FileManager(); fm.createZipFile(this._idConservazione); if (!fm.SubmitToRemoteFolder(this._idConservazione)) { logger.ErrorFormat("Errore inviando i file sullo starge remoto"); hasError = true; return; } else { BusinessLogic.UserLog.UserLog.WriteLog(this._infoUtente, "CREAZIONE_STORAGE", this._idConservazione, String.Format("Memorizzazione nel repository del sistema di conservazione dell’istanza {0}", this._idConservazione), DocsPaVO.Logger.CodAzione.Esito.OK); // Modifica scrittura Log e Registro di Conservazione per la scrittura della Creazione Storage DocsPaVO.Conservazione.RegistroCons regCons = new DocsPaVO.Conservazione.RegistroCons(); regCons.idAmm = this._infoUtente.idAmministrazione; regCons.idIstanza = this._idConservazione; regCons.tipoOggetto = "I"; regCons.tipoAzione = ""; regCons.userId = this._infoUtente.userId; regCons.codAzione = "CREAZIONE_STORAGE"; regCons.descAzione = "Memorizzazione nel repository del sistema di conservazione dell'istanza " + this._idConservazione; regCons.esito = "1"; RegistroConservazione rc = new RegistroConservazione(); rc.inserimentoInRegistroCons(regCons, this._infoUtente); } } try { // Impostazione del supporto in stato "InVerifica" DocsPaConsManager.UpdateStatoSupportoRemoto(this._idConservazione, 0, "I"); // 1. Reperimento path file chiusura XmlDocument xmlFile = new XmlDocument(); Stream fileChiusura; fileChiusura = new MemoryStream(new FileManager().getFileFromStore(this._idConservazione, "\\Chiusura\\file_chiusura.xml", false)); fileChiusura.Seek(0, SeekOrigin.Begin); xmlFile.Load(fileChiusura); XmlNodeList nodes = xmlFile.GetElementsByTagName("sincro:File"); this._statoVerifica.TotaleDocumenti = nodes.Count; foreach (XmlNode n in nodes) { if (this._interrompi) { throw new ApplicationException(string.Format("Verifica integrità interrotta. Verificati {0} documenti su {1}.", this._statoVerifica.DocumentiVerificati, this._statoVerifica.TotaleDocumenti)); } // 2. Estrazione dei documenti conservati da file di chiusura // Reperimento dei metadati dei file conservati dal file di chiusura string idDocumento = ((XmlNode)n.ChildNodes[0]).InnerText; string pathFile = ((XmlNode)n.ChildNodes[1]).InnerText; string hashSupporto = ((XmlNode)n.ChildNodes[2]).InnerText; // Caricamento hash da repository string hashDbRepository, hashFileRepository; this.LoadHashDocumento(idDocumento, out hashDbRepository, out hashFileRepository); byte[] content = new FileManager().getFileFromStore(this._idConservazione, pathFile, false); if (content != null) { string hashFileSupporto = this.GetHash256(content); if (hashFileSupporto != hashSupporto) { hashFileSupporto = this.GetHash128(content); if (hashFileSupporto != hashSupporto) { this._statoVerifica.DocumentiNonValidi++; } } } else { this._statoVerifica.DocumentiNonValidi++; } this._statoVerifica.DocumentiVerificati++; // Calcolo della percentuale per lo stato di avanzamento this._statoVerifica.Percentuale = (this._statoVerifica.DocumentiVerificati * 100 / nodes.Count); this._statoVerifica.Descrizione = string.Format("Verifica integrità documento {0} di {1} in corso...", this._statoVerifica.DocumentiVerificati, nodes.Count); // Impostazione del supporto in stato "InVerifica" DocsPaConsManager.UpdateStatoSupportoRemoto(this._idConservazione, this._statoVerifica.Percentuale, "I"); } } catch (Exception ex) { hasError = true; errorMessage = ex.Message; logger.ErrorFormat("Errore in VerificaSupportoRemoto.IniziaVerificaSupporto: {0}", ex.ToString()); } finally { if (hasError) { this._statoVerifica.Esito = false; this._statoVerifica.Percentuale = 0; this._statoVerifica.Descrizione = errorMessage; } else { this._statoVerifica.Esito = (this._statoVerifica.DocumentiVerificati == this._statoVerifica.TotaleDocumenti); if (this._statoVerifica.Esito) { this._statoVerifica.Percentuale = 100; this._statoVerifica.Descrizione = string.Format("Verifica integrità terminata. Verificati {0} su {1} documenti. Supporto valido.", this._statoVerifica.DocumentiVerificati, this._statoVerifica.TotaleDocumenti); } else { this._statoVerifica.Percentuale = 0; this._statoVerifica.Descrizione = string.Format("Verifica integrità terminata. Individuati {0} documenti non validi su {1}. Supporto corrotto.", this._statoVerifica.DocumentiNonValidi, this._statoVerifica.TotaleDocumenti); } } BusinessLogic.UserLog.UserLog.WriteLog(this._infoUtente, "INTEGRITA_STORAGE", this._idConservazione, String.Format("Esecuzione della verifica di integrità dei documenti dell’istanza {0}", this._idConservazione), (this._statoVerifica.Esito ? DocsPaVO.Logger.CodAzione.Esito.OK : DocsPaVO.Logger.CodAzione.Esito.KO)); DocsPaConsManager consManager = new DocsPaConsManager(); // Modifica per inserimento in dPA_CONS_VERIFICA consManager.RegistraEsitoVerificaSupportoRegistrato( this._infoUtente, this._idConservazione, FetchIdSupporto(), this._statoVerifica.Esito, "100", FetchDataProssimaVerifica(), "Verifica Integrità per chiusura", "C"); // Modifica scrittura Log e Registro di Conservazione per la scrittura della Creazione Storage DocsPaVO.Conservazione.RegistroCons regCons = new DocsPaVO.Conservazione.RegistroCons(); regCons.idAmm = this._infoUtente.idAmministrazione; regCons.idIstanza = this._idConservazione; regCons.tipoOggetto = "I"; regCons.tipoAzione = ""; regCons.userId = this._infoUtente.userId; regCons.codAzione = "INTEGRITA_STORAGE"; regCons.descAzione = "Esecuzione della verifica di integrità dei documenti istanza " + this._idConservazione; regCons.esito = (this._statoVerifica.Esito ? "1" : "0"); RegistroConservazione rc = new RegistroConservazione(); rc.inserimentoInRegistroCons(regCons, this._infoUtente); // Aggiornamento dello stato del supporto this.UpdateIstanzaConservazione(); } logger.Debug("END - IniziaVerificaSupporto"); }