コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        ///// <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);
            }
        }
コード例 #4
0
        /// <summary>
        /// Reperimento delle informazioni di stato consolidamento di un documento
        /// </summary>
        /// <param name="idDocument"></param>
        /// <returns></returns>
        public DocsPaVO.documento.DocumentConsolidationStateInfo GetState(string idDocument)
        {
            logger.Info("BEGIN");
            try
            {
                DocsPaVO.documento.DocumentConsolidationStateInfo retValue = null;

                using (DocsPaDB.DBProvider dbProvider = new DBProvider())
                {
                    DocsPaUtils.Query queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("S_GET_DOCUMENT_CONSOLIDATION_STATE");
                    queryDef.setParam("idDocument", idDocument);

                    string commandText = queryDef.getSQL();
                    logger.Debug(commandText);

                    using (System.Data.IDataReader reader = dbProvider.ExecuteReader(commandText))
                    {
                        if (reader.Read())
                        {
                            retValue = new DocsPaVO.documento.DocumentConsolidationStateInfo
                            {
                                State = (DocsPaVO.documento.DocumentConsolidationStateEnum)
                                        Enum.Parse(typeof(DocsPaVO.documento.DocumentConsolidationStateEnum),
                                                   DocsPaUtils.Data.DataReaderHelper.GetValue <string>(reader, "CONSOLIDATION_STATE", true, "0"),
                                                   true),
                                Author = DocsPaUtils.Data.DataReaderHelper.GetValue <object>(reader, "CONSOLIDATION_AUTHOR", true, string.Empty).ToString(),
                                Role   = DocsPaUtils.Data.DataReaderHelper.GetValue <object>(reader, "CONSOLIDATION_ROLE", true, string.Empty).ToString(),
                                Date   = DocsPaUtils.Data.DataReaderHelper.GetValue <DateTime>(reader, "CONSOLIDATION_DATE", true).ToString()
                            };
                        }
                        else
                        {
                            throw new Exception(string.Format("Documento con id {0} non trovato: impossibile determinare lo stato di consolidamento", idDocument));
                        }
                    }
                }
                logger.Info("END");
                return(retValue);
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("Errore nel reperimento dello stato di consolidamento del documento con id {0}", idDocument);

                logger.Error(errorMessage, ex);
                throw new ApplicationException(errorMessage, ex);
            }
        }
コード例 #5
0
        /// <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);
            }
        }
コード例 #6
0
        /// <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);
            }
        }
コード例 #7
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);
        }
コード例 #8
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);
        }
コード例 #9
0
        /// <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="document"></param>
        /// <param name="throwOnError">
        /// Se true, lancia un'eccezione se i dati non possono essere modificati
        /// </param>
        /// <returns></returns>
        public static bool CanChangeMetadata(DocsPaVO.utente.InfoUtente userInfo, DocsPaVO.documento.SchedaDocumento document, bool throwOnError)
        {
            bool canChange = false;

            DocsPaVO.documento.DocumentConsolidationStateInfo actualState = GetState(userInfo, document.systemId);

            if (actualState.State == DocsPaVO.documento.DocumentConsolidationStateEnum.None ||
                actualState.State == DocsPaVO.documento.DocumentConsolidationStateEnum.Step1)
            {
                // Il primo stato di consolidamento consente ancora di modificare tutti i metadati??
                canChange = true;
            }
            else if (actualState.State == DocsPaVO.documento.DocumentConsolidationStateEnum.Step2)
            {
                // Nome del campo oggetto del controllo
                string fieldName = string.Empty;

                // Reperimento dati del documento salvati
                DocsPaVO.documento.SchedaDocumento savedDocument = BusinessLogic.Documenti.DocManager.getDettaglio(userInfo, document.systemId, document.docNumber);

                // 1. Verifica oggetto
                fieldName = "dell'oggetto";
                canChange = AreEquals(document.oggetto, savedDocument.oggetto);

                if (canChange && document.protocollo != null && savedDocument.protocollo != null)
                {
                    // 2. Verifica mittenti / destinatari
                    fieldName = "dei mittenti o destinatari";
                    canChange = AreEquals(document.protocollo, savedDocument.protocollo);
                }

                if (canChange)
                {
                    // 3. Verifica data arrivo
                    fieldName = "della data arrivo";

                    string dataArrivoAsString      = string.Empty;
                    string savedDataArrivoAsString = string.Empty;

                    if (document.documenti != null && document.documenti.Count > 0)
                    {
                        DocsPaVO.documento.Documento firstDoc = document.documenti[0] as DocsPaVO.documento.Documento;
                        if (firstDoc != null)
                        {
                            dataArrivoAsString = firstDoc.dataArrivo;
                        }
                    }

                    if (savedDocument.documenti != null && savedDocument.documenti.Count > 0)
                    {
                        DocsPaVO.documento.Documento firstDoc = savedDocument.documenti[0] as DocsPaVO.documento.Documento;
                        if (firstDoc != null)
                        {
                            savedDataArrivoAsString = firstDoc.dataArrivo;
                        }
                    }

                    DateTime dataArrivo;
                    DateTime savedDataArrivo;
                    DateTime.TryParse(dataArrivoAsString, out dataArrivo);
                    DateTime.TryParse(savedDataArrivoAsString, out savedDataArrivo);

                    canChange = (DateTime.Compare(dataArrivo, savedDataArrivo) == 0);
                }

                if (!canChange && throwOnError)
                {
                    throw new ApplicationException(string.Format("La modifica {0} non può essere effettuata in quanto il documento risulta in stato consolidato nei metadati", fieldName));
                }
            }

            return(canChange);
        }