예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }