/// <summary> /// /// </summary> /// <param name="userInfo"></param> /// <param name="idDocument"></param> /// <param name="toState"></param> /// <param name="bypassFinalStateCheck"> /// Se true, indica di non effettuare i controlli sul consolidamento di un documento in stato finale /// </param> /// <returns></returns> internal static DocsPaVO.documento.DocumentConsolidationStateInfo ConsolidateNoSecurity(DocsPaVO.utente.InfoUtente userInfo, string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum toState, bool bypassFinalStateCheck) { bool cont = true; //if (!HasDocumentConsolidationRights(userInfo)) // throw new ApplicationException(string.Format("L'utente {0} non dispone dei diritti necessari per effettuare l'operazione di consolidamento", userInfo.userId)); // Reperimento stato di consolidamento del documento richiesto DocsPaVO.documento.SchedaDocumento savedDocument = BusinessLogic.Documenti.DocManager.getDettaglioNoSecurity(userInfo, idDocument); if (savedDocument.documentoPrincipale != null) { cont = false; } if (savedDocument.checkOutStatus != null) { cont = false; } // Verifica sei il documento si trova nello stato finale if (!bypassFinalStateCheck) { DocsPaVO.DiagrammaStato.Stato workflowState = BusinessLogic.DiagrammiStato.DiagrammiStato.getStatoDoc(savedDocument.docNumber); if (workflowState != null && workflowState.STATO_FINALE) { cont = false; } } //// Verifica dei diritti di lettura / scrittura sul documento //int accessRights; //Int32.TryParse(savedDocument.accessRights, out accessRights); //if (accessRights > 0 && accessRights < 63) // throw new ApplicationException(string.Format("L'utente {0} non dispone dei diritti di lettura / scrittura sul documento necessari per effettuare l'operazione di consolidamento", userInfo.userId)); DocsPaVO.documento.DocumentConsolidationStateInfo state = savedDocument.ConsolidationState; // Controllo sullo stato di destinazione if (toState <= state.State) { cont = false; } // Un documento predisposto alla protocollazione non può essere consolidato in quanto rappresenta uno stato intermedio if (savedDocument.predisponiProtocollazione) { cont = false; } if (cont) { using (DocsPaDB.TransactionContext transactionalContext = new DocsPaDB.TransactionContext()) { // Operazione di consolidamento DocsPaDB.Query_DocsPAWS.DocumentConsolidation consolidationDb = new DocsPaDB.Query_DocsPAWS.DocumentConsolidation(userInfo); state = consolidationDb.SetState(idDocument, toState); // Operazione di consolidamento sui singoli allegati del documento foreach (DocsPaVO.documento.Allegato attatchment in AllegatiManager.getAllegati(idDocument, string.Empty)) { DocsPaVO.documento.DocumentConsolidationStateInfo attState = null; attState = consolidationDb.SetState(attatchment.docNumber, toState); } transactionalContext.Complete(); } } return(state); }
/// <summary> /// /// </summary> /// <param name="userInfo"></param> /// <param name="idDocument"></param> /// <param name="toState"></param> /// <param name="bypassFinalStateCheck"> /// Se true, indica di non effettuare i controlli sul consolidamento di un documento in stato finale /// </param> /// <returns></returns> internal static DocsPaVO.documento.DocumentConsolidationStateInfo Consolidate(DocsPaVO.utente.InfoUtente userInfo, string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum toState, bool bypassFinalStateCheck) { if (!HasDocumentConsolidationRights(userInfo)) { throw new ApplicationException(string.Format("L'utente {0} non dispone dei diritti necessari per effettuare l'operazione di consolidamento", userInfo.userId)); } // Reperimento stato di consolidamento del documento richiesto DocsPaVO.documento.SchedaDocumento savedDocument = BusinessLogic.Documenti.DocManager.getDettaglio(userInfo, idDocument, idDocument); if (savedDocument.documentoPrincipale != null) { throw new ApplicationException("Il documento risulta un allegato di un altro documento, pertanto non può essere consolidato singolarmente"); } if (savedDocument.checkOutStatus != null) { throw new ApplicationException(string.Format("Il documento risulta bloccato dall'utente {0}, pertanto non può essere consolidato", savedDocument.checkOutStatus.UserName)); } if (BusinessLogic.LibroFirma.LibroFirmaManager.IsDocOrAllInLibroFirma(savedDocument.docNumber)) { throw new ApplicationException("Il documento o uno dei suoi allegati risulta coinvolto in un processo di firma, pertanto non può essere consolidato "); } // Verifica sei il documento si trova nello stato finale if (!bypassFinalStateCheck) { DocsPaVO.DiagrammaStato.Stato workflowState = BusinessLogic.DiagrammiStato.DiagrammiStato.getStatoDoc(savedDocument.docNumber); if (workflowState != null && workflowState.STATO_FINALE) { throw new ApplicationException("Il documento risulta in stato finale"); } } // Verifica dei diritti di lettura / scrittura sul documento int accessRights; Int32.TryParse(savedDocument.accessRights, out accessRights); if (accessRights > 0 && accessRights < 63) { throw new ApplicationException(string.Format("L'utente {0} non dispone dei diritti di lettura / scrittura sul documento necessari per effettuare l'operazione di consolidamento", userInfo.userId)); } DocsPaVO.documento.DocumentConsolidationStateInfo state = savedDocument.ConsolidationState; // Controllo sullo stato di destinazione if (toState <= state.State) { throw new ApplicationException(string.Format("Il documento è attualmente in stato '{1}'", idDocument, DocsPaVO.documento.DocumentConsolidationStateDescriptionAttribute.GetDescription(state.State))); } // Un documento predisposto alla protocollazione non può essere consolidato in quanto rappresenta uno stato intermedio if (savedDocument.predisponiProtocollazione) { throw new ApplicationException("Il documento risulta predisposto alla protocollazione e non può essere consolidato"); } using (DocsPaDB.TransactionContext transactionalContext = new DocsPaDB.TransactionContext()) { // Operazione di consolidamento DocsPaDB.Query_DocsPAWS.DocumentConsolidation consolidationDb = new DocsPaDB.Query_DocsPAWS.DocumentConsolidation(userInfo); state = consolidationDb.SetState(idDocument, toState); // Operazione di consolidamento sui singoli allegati del documento foreach (DocsPaVO.documento.Allegato attatchment in AllegatiManager.getAllegati(idDocument, string.Empty)) { DocsPaVO.documento.DocumentConsolidationStateInfo attState = null; attState = consolidationDb.SetState(attatchment.docNumber, toState); } transactionalContext.Complete(); } return(state); }