/// <summary> /// /// </summary> /// <param name="userInfo"></param> /// <param name="role"></param> /// <param name="document"></param> /// <param name="fileDocument"></param> /// <param name="superiori"></param> /// <returns></returns> private string SaveDocument(InfoUtente userInfo, Ruolo role, SchedaDocumento document, FileDocumento fileDocument, out Ruolo[] superiori) { // Salvataggio del documento DocsPaDocumentale.Documentale.DocumentManager docManager = new DocsPaDocumentale.Documentale.DocumentManager(userInfo); // Salvataggio dell'oggetto document = ProtoManager.addOggettoLocked(userInfo.idAmministrazione, document); Ruolo[] ruoliSuperiori; if (docManager.CreateDocumentoStampaRegistro(document, role, out ruoliSuperiori)) { // Notifica evento documento creato DocsPaDocumentale.Interfaces.IAclEventListener eventsNotification = new DocsPaDocumentale.Documentale.AclEventListener(userInfo); eventsNotification.DocumentoCreatoEventHandler(document, role, ruoliSuperiori); // Salvataggio del file associato al documento DocsPaVO.documento.FileRequest fileRequest = (DocsPaVO.documento.FileRequest)document.documenti[0]; fileRequest = BusinessLogic.Documenti.FileManager.putFile(fileRequest, fileDocument, userInfo); if (fileRequest == null) { string outmessage = ""; BusinessLogic.Documenti.DocManager.CestinaDocumento(userInfo, document, "", "Errore nella creazione della stampa", out outmessage); throw new ApplicationException("Si è verificato un errore nell'upload del documento per la stampa del registro di repertorio"); } } // Restituzione del numero di documento superiori = ruoliSuperiori; if (superiori == null) { superiori = new Ruolo[] { } } ; return(document.docNumber); }
/// <summary> /// </summary> /// <param name="schedaDoc"></param> /// <param name="objSicurezza"></param> /// <param name="objRuolo"></param> /// <param name="debug"></param> /// <returns></returns> public static DocsPaVO.documento.SchedaDocumento addDocGrigia(DocsPaVO.documento.SchedaDocumento schedaDoc, DocsPaVO.utente.InfoUtente objSicurezza, DocsPaVO.utente.Ruolo objRuolo) { logger.Info("BEGIN"); try { semProtNuovo.WaitOne(); // Avvio del contesto transazionale using (DocsPaDB.TransactionContext transactionContext = new DocsPaDB.TransactionContext()) { //SOSTITUISCO IL CARATTERE SPECIALE if (schedaDoc.oggetto.descrizione.Contains("–")) { schedaDoc.oggetto.descrizione = schedaDoc.oggetto.descrizione.Replace("–", "-"); } // verifico i dati di ingresso ProtoManager.checkInputData(objSicurezza.idAmministrazione, schedaDoc); logger.Debug("nomeUtente=" + schedaDoc.userId); //add massimo digregorio carica dati protocollatore in schedaProtocollo schedaDoc = getDatiProtocollatore(schedaDoc, objRuolo, objSicurezza); schedaDoc = getDatiCreatore(schedaDoc, objRuolo, objSicurezza); // creo il nuovo documento DocsPaDocumentale.Documentale.DocumentManager documentManager = new DocsPaDocumentale.Documentale.DocumentManager(objSicurezza); DocsPaVO.utente.Ruolo[] ruoliSuperiori; List <DocsPaVO.documento.FileRequest> versions = new List <DocsPaVO.documento.FileRequest>(); if (schedaDoc.documenti != null && schedaDoc.documenti.Count > 0) { versions = new List <DocsPaVO.documento.FileRequest>((DocsPaVO.documento.FileRequest[])schedaDoc.documenti.ToArray(typeof(DocsPaVO.documento.FileRequest))); // Ordinamento versioni versions.Sort( delegate(DocsPaVO.documento.FileRequest x, DocsPaVO.documento.FileRequest y) { int versionX, versionY; Int32.TryParse(x.version, out versionX); Int32.TryParse(y.version, out versionY); return(versionX.CompareTo(versionY)); } ); } if (!documentManager.CreateDocumentoGrigio(schedaDoc, objRuolo, out ruoliSuperiori)) { throw new ApplicationException("Errore nella creazione del documento grigio"); } else { // Notifica evento documento creato DocsPaDocumentale.Interfaces.IAclEventListener eventsNotification = new DocsPaDocumentale.Documentale.AclEventListener(objSicurezza); eventsNotification.DocumentoCreatoEventHandler(schedaDoc, objRuolo, ruoliSuperiori); // Sincronizzazione repository if (schedaDoc.repositoryContext != null) { SessionRepositoryFileManager fileManager = SessionRepositoryFileManager.GetFileManager(schedaDoc.repositoryContext); // In fase di inserimento di un repository temporaneo, // possono essere creati: // - la prima versione del documento e, qualora sia stato acquisito un file // e firmato, anche la seconda versione firmata del documento // - la prima versione di n allegati // La prima versione del documento è creata automaticamente con la creazione del documento stesso. // In caso di seconda versione firmata del documento, è necessario procedre alla creazione. foreach (DocsPaVO.documento.FileRequest v in versions) { int version; Int32.TryParse(v.version, out version); DocsPaVO.documento.FileRequest savedVersion = null; if (version > 1) { // Seconda versione firmata del documento, // impostazione dell'id del documento di appartenenza v.docNumber = schedaDoc.docNumber; // Inserimento delle versioni del documento, // acquisite oltre alla versione principale if (!documentManager.AddVersion(v, false)) { throw new ApplicationException(string.Format("Errore nella creazione della versione {0} del documento con id {1}", version, schedaDoc.systemId)); } savedVersion = SessionRepositorySyncronizer.CopyToRepository(fileManager, v); // Inserimento della nuova versione come primo elemento della lista documenti schedaDoc.documenti.Insert(0, savedVersion); } else { // La versione principale del documento è già stata creata al momento dell'inserimento, // pertanto è necessario copiare solamente il file acquisito nel repository savedVersion = SessionRepositorySyncronizer.CopyToRepository(fileManager, (DocsPaVO.documento.FileRequest)schedaDoc.documenti[0]); // Aggiornamento istanza documento principale schedaDoc.documenti[0] = savedVersion; } } if (schedaDoc.allegati != null && schedaDoc.allegati.Count > 0) { // Gli allegati e le rispettive versioni andranno create manualmente foreach (DocsPaVO.documento.Allegato allegato in schedaDoc.allegati) { string oldVersionLabel = allegato.versionLabel; // Impostazione del docnumber del documento principale // cui sarà associato l'allegato allegato.docNumber = schedaDoc.docNumber; if (!documentManager.AddAttachment(allegato, "N")) { throw new ApplicationException(string.Format("Errore nella creazione dell'allegato {0} del documento con id {1}", allegato.position, schedaDoc.systemId)); } allegato.versionLabel = oldVersionLabel; } DocsPaVO.documento.FileRequest[] allegati = (DocsPaVO.documento.FileRequest[])schedaDoc.allegati.ToArray(typeof(DocsPaVO.documento.Allegato)); if (allegati.Length > 0) { schedaDoc.allegati = new ArrayList(SessionRepositorySyncronizer.CopyToRepository(fileManager, allegati)); } } // Se è presente un repository temporaneo, viene effettuato l'inserimento del file nel repository del documentale // Imposta il repository come scaduto fileManager.Delete(); schedaDoc.repositoryContext = null; } } //Richiamo il metodo per il calcolo della atipicità del documento DocsPaDB.Query_DocsPAWS.Documentale documentale = new DocsPaDB.Query_DocsPAWS.Documentale(); schedaDoc.InfoAtipicita = documentale.CalcolaAtipicita(objSicurezza, schedaDoc.docNumber, DocsPaVO.Security.InfoAtipicita.TipoOggettoAtipico.DOCUMENTO); if (schedaDoc != null) { // Impostazione della transazione come completata, // solamente se il documento è stato creato correttamente transactionContext.Complete(); } } logger.Info("END"); return(schedaDoc); } catch (Exception ex) { throw ex; } finally { semProtNuovo.ReleaseMutex(); } }