///// <summary> ///// Verifica se l'utente può consolidare il documento fornito ///// </summary> ///// <param name="userInfo"></param> ///// <param name="idDocument"></param> ///// <returns></returns> //public static bool HasDocumentConsolidationRights(DocsPaVO.utente.InfoUtente userInfo, string idDocument) //{ // bool enabled = false; // // Verifica // enabled = (HasDocumentConsolidationRights(userInfo)); // if (enabled) // { // // Verifica se l'utente dispone dei diritti di lettura / scrittura sul documento // DocsPaDB.Query_DocsPAWS.Security securityDb = new DocsPaDB.Query_DocsPAWS.Security(); // enabled = securityDb.HasReadWriteAccessRights(idDocument, userInfo.idPeople, userInfo.idGruppo); // } // return enabled; //} /// <summary> /// Verifica se, in base allo stato di consolidamento del documento, l'utente è autorizzato ad effettuare una determinata azione /// </summary> /// <param name="userInfo"></param> /// <param name="idDocument"></param> /// <param name="action"></param> /// <param name="throwOnError"></param> /// <returns></returns> public static bool CanExecuteAction(DocsPaVO.utente.InfoUtente userInfo, string idDocument, ConsolidationActionsDeniedEnum action, bool throwOnError) { if (IsConfigEnabled()) { DocsPaVO.documento.DocumentConsolidationStateInfo actualState = GetState(userInfo, idDocument); if (actualState.State == DocsPaVO.documento.DocumentConsolidationStateEnum.None) { return(true); } else { // Determina, dai metadati dell'enumeration, a quale stato di consolidamento si riferisce l'azione richiesta DocsPaVO.documento.DocumentConsolidationStateEnum actionApplyState = DocumentConsolidationAttribute.GetState(action); bool canExecute = (actualState.State < actionApplyState); if (!canExecute && throwOnError) { throw new ApplicationException("L'azione non può essere eseguita, il documento risulta in stato consolidato"); } return(canExecute); } } else { return(true); } }
/// <summary> /// Verifica se, in base allo stato di consolidamento del documento, l'utente è autorizzato ad effettuare modifiche ai metadati del documento /// </summary> /// <param name="userInfo"></param> /// <param name="idDocument"></param> /// <param name="action"></param> /// <returns></returns> public static bool CanChangeMetadata( DocsPaVO.utente.InfoUtente userInfo, string idDocument, ConsolidationMetadataChangeDeniedEnum metadata) { DocsPaVO.documento.DocumentConsolidationStateInfo actualState = GetState(userInfo, idDocument); if (actualState.State == DocsPaVO.documento.DocumentConsolidationStateEnum.None) { return(true); } else { // Determina, dai metadati dell'enumeration, a quale stato di consolidamento si riferisce la modifica dei metadati DocsPaVO.documento.DocumentConsolidationStateEnum actionApplyState = DocumentConsolidationAttribute.GetState(metadata); return(actualState.State < actionApplyState); } }
/// <summary> /// Modifica dello stato di consolidamento di un documento /// </summary> /// <param name="idDocument"></param> /// <param name="state"></param> public DocsPaVO.documento.DocumentConsolidationStateInfo SetState(string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum toState) { DocsPaVO.documento.DocumentConsolidationStateInfo retValue = null; // Reperimento stato attuale DocsPaVO.documento.DocumentConsolidationStateInfo actualState = GetState(idDocument); if (actualState.State >= toState) { throw new ApplicationException(string.Format("Stato di consolidamento non valido per il documento con id {0}", idDocument)); } if (actualState.State == DocsPaVO.documento.DocumentConsolidationStateEnum.None && toState == DocsPaVO.documento.DocumentConsolidationStateEnum.Step2) { // Richiesta due passaggi di consolidamento in un'unica operazione this.InternalSetState(idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum.Step1); retValue = this.InternalSetState(idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum.Step2); } else { retValue = this.InternalSetState(idDocument, toState); } return(retValue); }
/// <summary> /// /// </summary> /// <param name="idDocument"></param> /// <param name="toState"></param> /// <returns></returns> protected virtual DocsPaVO.documento.DocumentConsolidationStateInfo InternalSetState(string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum toState) { try { DocsPaVO.documento.DocumentConsolidationStateInfo retValue = null; using (DocsPaDB.DBProvider dbProvider = new DBProvider()) { DocsPaUtils.Query queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("S_SET_DOCUMENT_CONSOLIDATION_STATE"); queryDef.setParam("state", ((int)toState).ToString()); queryDef.setParam("author", this.UserInfo.idPeople); queryDef.setParam("role", this.UserInfo.idGruppo); queryDef.setParam("date", DocsPaDbManagement.Functions.Functions.GetDate()); queryDef.setParam("idDocument", idDocument); string commandText = queryDef.getSQL(); logger.Debug(commandText); int rowsAffected; if (dbProvider.ExecuteNonQuery(commandText, out rowsAffected)) { // Reperimento stato di consolidamento aggiornato retValue = this.GetState(idDocument); if (toState == DocsPaVO.documento.DocumentConsolidationStateEnum.Step2) { // Inserimento dei dati fondamentali del documento consolidato nella tabella dello storico queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("I_INSERT_CONSOLIDATED_DOCUMENT"); queryDef.setParam("idDocument", idDocument); queryDef.setParam("userdb", DocsPaDbManagement.Functions.Functions.GetDbUserSession()); commandText = queryDef.getSQL(); logger.Debug(commandText); if (dbProvider.ExecuteNonQuery(commandText, out rowsAffected)) { if (rowsAffected == 0) { throw new ApplicationException("Errore nella storicizzazione dei dati del documento consolidato"); } } else { throw new ApplicationException("Errore nell'esecuzione della query I_INSERT_CONSOLIDATED_DOCUMENT"); } } } else { throw new ApplicationException("Errore nell'esecuzione della query U_SET_DOCUMENT_CONSOLIDATION_STATE"); } return(retValue); } } catch (Exception ex) { string errorMessage = string.Format("Errore nell'impostazione dello stato di consolidamento del documento con id {0}", idDocument); logger.Debug(errorMessage, ex); throw new ApplicationException(errorMessage, ex); } }
public static DocsPaVO.documento.DocumentConsolidationStateInfo ConsolidateNoSecurity(DocsPaVO.utente.InfoUtente userInfo, string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum toState, bool bypassFinalStateCheck) { return(BusinessLogic.Documenti.DocumentConsolidation.ConsolidateNoSecurity(userInfo, idDocument, toState, bypassFinalStateCheck)); }
/// <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); }
/// <summary> /// Determina se un documento si trova in uno stato di consolidamento particolare /// </summary> /// <param name="userInfo"></param> /// <param name="idDocument"></param> /// <param name="requestedState">Stato di consolidamento richiesto</param> /// <returns></returns> public static bool IsDocumentConsoldated(DocsPaVO.utente.InfoUtente userInfo, string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum requestedState) { // Reperimento stato di consolidamento del documento richiesto DocsPaVO.documento.DocumentConsolidationStateInfo actualState = GetState(userInfo, idDocument); return(actualState.State >= requestedState); }
public static DocsPaVO.documento.DocumentConsolidationStateInfo ConsolidateNoSecurity(DocsPaVO.utente.InfoUtente userInfo, string idDocument, DocsPaVO.documento.DocumentConsolidationStateEnum toState) { return(ConsolidateNoSecurity(userInfo, idDocument, toState, false)); }
/// <summary> /// /// </summary> /// <param name="state"></param> public DocumentConsolidationAttribute(DocsPaVO.documento.DocumentConsolidationStateEnum state) { this.State = state; }