예제 #1
0
        /// <summary>
        /// Creazione nuovo sottofascicolo
        /// </summary>
        /// <param name="folder"></param>
        /// <param name="ruolo"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori">
        /// Ruoli superiori cui è impostata la visibilità del sottofascicolo
        /// </param>
        /// <returns></returns>
        public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            bool retValue = false;

            ruoliSuperiori = null;
            result         = ResultCreazioneFolder.GENERIC_ERROR;

            // Verifica l'univocità del folder: in documentum
            // non possono essere inseriti sottofascicoli
            // dello stesso livello aventi lo stesso nome
            if (!this.ExistFolderName(folder))
            {
                retValue = this.ProjectManagerETDOCS.CreateFolder(folder, ruolo, out result, out ruoliSuperiori);

                if (retValue)
                {
                    retValue = this.ProjectManagerDocumentum.CreateFolder(folder, ruolo, out result);
                }
            }
            else
            {
                result = ResultCreazioneFolder.FOLDER_EXIST;
            }

            return(retValue);
        }
예제 #2
0
        /// <summary></summary>
        /// <param name="ut"></param>
        /// <param name="ruo"></param>
        public InfoUtente(Utente ut, Ruolo ruo)
        {
            if (ut != null)
            {
                this.idPeople              = ut.idPeople;
                this.userId                = ut.userId;
                this.dst                   = ut.dst;
                this.idAmministrazione     = ut.idAmministrazione;
                this.sede                  = ut.sede;
                this.urlWA                 = ut.urlWA;
                this.matricola             = ut.matricola;
                this.extApplications       = ut.extApplications;
                this.codWorkingApplication = ut.codWorkingApplication;
            }

            //BUG - A Volte utente arriva con idAmm nullo
            if (ruo != null)
            {
                this.idCorrGlobali = ruo.systemId;
                this.idGruppo      = ruo.idGruppo;
                if (ut != null && string.IsNullOrEmpty(ut.idAmministrazione))
                {
                    this.idAmministrazione = ruo.idAmministrazione;
                }
            }
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="folder"></param>
        /// <param name="ruolo"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori"></param>
        /// <returns></returns>
        public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            bool retValue = false;

            result         = ResultCreazioneFolder.GENERIC_ERROR;
            ruoliSuperiori = null;

            try
            {
                string idPeopleDelegato = string.Empty;


                if (this.UserInfo.delegato != null && this.UserInfo.delegato.idPeople != null)
                {
                    idPeopleDelegato = this.UserInfo.delegato.idPeople;
                }

                folder.systemID = this.CreateProject(folder.descrizione, idPeopleDelegato);

                if (folder.systemID == null)
                {
                    throw new Exception();
                }

                DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();
                fascicoli.NewFolder(this.UserInfo.idAmministrazione, folder);
                fascicoli.Dispose();

                //Set project trustees
                fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();

                if (ruolo != null)
                {
                    bool isFolder = (folder.idParent != folder.idFascicolo);

                    // sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono
                    // caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo)

                    System.Collections.ArrayList listRuoliSuperiori;

                    fascicoli.SetProjectTrustees(this.UserInfo.idPeople, folder.systemID, ruolo, folder.idFascicolo, isFolder, out listRuoliSuperiori, this.UserInfo.delegato);

                    ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo));
                }

                fascicoli.Dispose();

                retValue = true;
                result   = ResultCreazioneFolder.OK;
            }
            catch (Exception e)
            {
                logger.Debug("Errore durante la creazione di un folder.", e);

                retValue = false;
                result   = ResultCreazioneFolder.GENERIC_ERROR;
            }

            return(retValue);
        }
예제 #4
0
        private bool uo_is_autorizzata(string _codice, DocsPaVO.utente.Ruolo ruolo_caller, string[] ruoli_autorizzati)
        {
            string codice = _codice;

            if (_codice.StartsWith(@"E\") || _codice.StartsWith(@"I\"))
            {
                codice = _codice.Substring(_codice.IndexOf(@"\") + 1);
            }

            //			if (h_ruoli == null)
            //				h_ruoli = UOManager.GetRuoliUOSemplice (_user.idAmministrazione);

            string[] ruoli = (string[])h_ruoli[codice];
            if (ruoli != null && ruoli.Length > 0)
            {
                foreach (string cod_ruolo in ruoli)
                {
                    if (ruolo_is_autorizzato(cod_ruolo, ruoli_autorizzati))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
예제 #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="folder"></param>
        /// <param name="ruolo"></param>
        /// <returns></returns>
        public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result)
        {
            bool retValue = true;

            //... non fa nulla
            result = ResultCreazioneFolder.OK;
            return(retValue);
        }
예제 #6
0
        /// <summary>
        /// Costruisce un oggetto InfoUtente a partire dagli id recuperati
        /// dalla tabella di configurazione stampa
        /// </summary>
        /// <param name="reg">Oggetto RegistroConservazionePrint contentente user_id e id_gruppo</param>
        /// <returns></returns>
        private InfoUtente GetInfoUtenteStampa(RegistroConservazionePrint reg)
        {

            DocsPaVO.utente.Utente u = Utenti.UserManager.getUtenteById(reg.print_userId);
            DocsPaVO.utente.Ruolo r = Utenti.UserManager.getRuoloByIdGruppo(reg.print_role);

            InfoUtente retVal = Utenti.UserManager.GetInfoUtente(u, r);

            return retVal;

        }
예제 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="folder"></param>
        /// <param name="ruolo"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori"></param>
        /// <returns></returns>
        public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            bool retValue = false;

            result         = ResultCreazioneFolder.GENERIC_ERROR;
            ruoliSuperiori = null;

            try
            {
                string idPeopleDelegato = string.Empty;
                if (this.UserInfo.delegato != null && this.UserInfo.delegato.idPeople != null)
                {
                    idPeopleDelegato = this.UserInfo.delegato.idPeople;
                }

                folder.systemID = this.CreateProject(folder.descrizione, idPeopleDelegato);
                if (folder.systemID == null)
                {
                    throw new Exception();
                }

                DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();
                fascicoli.NewFolder(this.UserInfo.idAmministrazione, folder);

                //Set project trustees
                bool isFolder = (folder.idParent != folder.idFascicolo);
                if (ruolo != null)
                {
                    // sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono
                    // caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo)
                    System.Collections.ArrayList listRuoliSuperiori;
                    fascicoli.SetProjectTrustees(this.UserInfo.idPeople, folder.systemID, ruolo, folder.idFascicolo, isFolder, out listRuoliSuperiori, this.UserInfo.delegato);
                    ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo));
                }

                string valorechiave = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_LEVEL");
                if (!string.IsNullOrEmpty(valorechiave) && valorechiave.Equals("1") && isFolder)
                {
                    fascicoli.UpdateFolderLevels(UserInfo.idPeople, UserInfo.idGruppo, UserInfo.idAmministrazione, folder);
                }

                retValue = true;
                result   = ResultCreazioneFolder.OK;
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                retValue = false;
                result   = ResultCreazioneFolder.GENERIC_ERROR;
            }

            return(retValue);
        }
예제 #8
0
        public static RicercaSmistamentoElement AggiungiElementoRicerca(string idElemento, string tipo, InfoUtente infoUtente, string idRegistro)
        {
            //List<RicercaSmistamentoElement> elements = new List<RicercaSmistamentoElement>();

            //string tipo = idElemento.Split('§')[0];
            //string id = idElemento.Split('§')[1];

            try
            {
                RicercaSmistamentoElement el = new RicercaSmistamentoElement();

                // RUOLO
                if (tipo.Equals("R"))
                {
                    string idGruppo            = BusinessLogic.Utenti.UserManager.getRuoloById(idElemento).idGruppo;
                    DocsPaVO.utente.Ruolo role = BusinessLogic.Utenti.UserManager.getRuoloByIdGruppo(idGruppo);

                    el.IdUO = role.uo.systemId;

                    el.IdRuolo          = idElemento;
                    el.DescrizioneRuolo = role.descrizione;

                    el.Type = SmistamentoNodeType.RUOLO;
                }
                // UTENTE
                else
                {
                    DocsPaVO.utente.Utente ut = BusinessLogic.Utenti.UserManager.getUtenteById(idElemento);
                    ut.ruoli = BusinessLogic.Utenti.UserManager.getRuoliUtente(idElemento);
                    Ruolo role = ((Ruolo[])ut.ruoli.ToArray(typeof(Ruolo))).FirstOrDefault();

                    el.IdUO = role.uo.systemId;

                    el.IdRuolo = role.systemId;
                    //el.DescrizioneRuolo = role.descrizione;

                    el.IdUtente          = ut.idPeople;
                    el.DescrizioneUtente = ut.cognome + " " + ut.nome;

                    el.Type = SmistamentoNodeType.UTENTE;
                }

                return(el);
            }
            catch (Exception ex)
            {
                logger.Debug("Elemento non trovato - tipo=" + tipo + ", id=" + idElemento);
                return(null);
            }
        }
예제 #9
0
        private static string GetToken(DocsPaVO.utente.Utente utente, DocsPaVO.utente.Ruolo ruolo)
        {
            //Controllo Correttezza Ruolo
            bool okRuolo = false;

            foreach (DocsPaVO.utente.Ruolo rl in utente.ruoli)
            {
                if (rl.idGruppo == ruolo.idGruppo)
                {
                    okRuolo = true;
                }
            }

            if (okRuolo)
            {
                string tokenDiAutenticazione = null;
                try
                {
                    string clearToken = string.Empty;
                    clearToken += ruolo.systemId + "|";
                    clearToken += utente.idPeople + "|";
                    clearToken += ruolo.idGruppo + "|";
                    clearToken += utente.dst + "|";
                    clearToken += utente.idAmministrazione + "|";
                    clearToken += utente.userId + "|";
                    clearToken += utente.sede + "|";
                    clearToken += utente.urlWA;

                    tokenDiAutenticazione = Utils.Encrypt(clearToken);
                }
                catch (Exception e)
                {
                    //  logger.Debug("Errore durante il GetInfoUtente.", e);
                }

                tokenDiAutenticazione = "SSO=" + tokenDiAutenticazione;
                return(tokenDiAutenticazione);
            }
            else
            {
                //logger.Debug("L'utente : " + utente.descrizione + " non appartiene al ruolo : " + ruolo.descrizione);
                return(null);
            }
        }
예제 #10
0
        /// <summary>
        /// Questo metodo restituisce la lista dei corrispondenti destinatari della trasmissione.
        /// Nel caso in cui il destinatario sia una UO, restituisce la lista dei ruoli,
        /// definiti nella UO abilitati alla ricezione di trasmissioni.
        /// Nel caso in cui il destinatario sia un ruolo, restituisce la lista dei ruoli,
        /// definiti nella uo di appartenenza del ruolo, abilitati alla ricezione di trasmissioni.
        /// </summary>
        /// <param name="reg">AOO destinataria della spedizione</param>
        /// <param name="uoId">Identificativo della UO destinataria della spedizione</param>
        /// <returns>Lista dei ruoli cui trasmettere il documento</returns>
        private static List <Ruolo> GetRecipients(Registro reg, String uoId)
        {
            List <Ruolo> retVal = new List <Ruolo>();

            try
            {
                Interoperabilita obj = new Interoperabilita();

                DataSet ds = new DataSet();
                obj.GetSelectiveRecipients(out ds, reg, uoId);

                for (int i = 0; i < ds.Tables["RUOLI"].Rows.Count; i++)
                {
                    DataRow ruoloRow            = ds.Tables["RUOLI"].Rows[i];
                    DocsPaVO.utente.Ruolo ruolo = new DocsPaVO.utente.Ruolo();
                    ruolo.systemId             = ruoloRow["SYSTEM_ID"].ToString();
                    ruolo.codiceCorrispondente = ruoloRow["VAR_CODICE"].ToString();
                    ruolo.codiceRubrica        = ruoloRow["VAR_COD_RUBRICA"].ToString();
                    ruolo.descrizione          = ruoloRow["VAR_DESC_RUOLO"].ToString() + " " + ruoloRow["VAR_DESC_CORR"].ToString();
                    ruolo.livello  = ruoloRow["NUM_LIVELLO"].ToString();
                    ruolo.idGruppo = ruoloRow["ID_GRUPPO"].ToString();
                    DocsPaVO.utente.UnitaOrganizzativa uoDest = new DocsPaVO.utente.UnitaOrganizzativa();
                    ruolo.uo                 = uoDest;
                    ruolo.uo.systemId        = ruoloRow["ID_UO"].ToString();
                    ruolo.tipoCorrispondente = "R";
                    retVal.Add(ruolo);
                }
            }
            catch (Exception e)
            {
                logger.Debug(e.ToString());
                //db.closeConnection();
                logger.Debug("Errore nella gestione dell'interoperabilità. (GetRecipients)", e);
                throw e;
            }

            return(retVal);
        }
예제 #11
0
        /// <summary>
        /// Creazione di un nuovo documento per la stampa registro.
        /// </summary>
        /// <param name="schedaDocumento"></param>
        /// <param name="ruolo"></param>
        /// <param name="ruoliSuperiori"></param>
        /// <returns>ID del documento o 'null' se si è verificato un errore</returns>
        public bool CreateDocumentoStampaRegistro(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            bool retValue = false;

            ruoliSuperiori = null;

            try
            {
                retValue = this.DocumentManagerETDOCS.CreateDocumentoStampaRegistro(schedaDocumento, ruolo, out ruoliSuperiori);

                if (retValue)
                {
                    retValue = this.DocumentManagerHERMES.CreateDocumentoStampaRegistro(schedaDocumento, ruolo);
                }
            }
            catch (Exception ex)
            {
                retValue = false;

                string errorMessage = string.Format("Errore nella creazione di un documento stampa registro: {0}", ex.Message);
                logger.Debug(errorMessage, ex);
            }

            return(retValue);
        }
예제 #12
0
 /// <summary>
 /// Creazione di un nuovo documento per la stampa registro.
 /// </summary>
 /// <param name="schedaDocumento"></param>
 /// <param name="ruolo"></param>
 /// <returns></returns>
 public bool CreateDocumentoStampaRegistro(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo)
 {
     DocsPaVO.utente.Ruolo[] ruoliSuperiori;
     return(this.CreateDocumentoStampaRegistro(schedaDocumento, ruolo, out ruoliSuperiori));
 }
예제 #13
0
        /// <summary>
        /// Operazione per la creazione di un nuovo protocollo
        ///
        /// PreCondizioni:
        ///     - Fornire un oggetto SchedaDocumento valido, completo
        ///       degli attributi e degli oggetti significativi per il protocollo
        ///       (es. numero, dataProtocollo, segnatura, oggetto "Protocollo")
        ///
        /// PostCondizioni:
        ///     - Operazione di protocollazione documento effettuata con successo
        ///
        ///
        /// </summary>
        /// <param name="schedaDocumento">Oggetto contenente i metadati del documento da protocollare</param>
        /// <param name="ruolo">Ruolo dell'utente che protocolla il documento</param>
        /// <param name="risultatoProtocollazione">Parametro output: Esito più dettagliato dell'operazione</param>
        /// <param name="ruoliSuperiori"></param>
        /// <returns>Boolean, l'operazione di protocollazione è andata a buon fine o meno</returns>
        public bool CreateProtocollo(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.documento.ResultProtocollazione risultatoProtocollazione, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            logger.Info("BEGIN");
            //Performance.PerformanceLogWriter.CreatePerformanceLogWriter(@"c:\temp\DocumentManager.txt");

            //Performance.PerformanceLogWriter log = new Performance.PerformanceLogWriter();
            //log.StartLogEntry("CreateProtocollo");

            bool retValue = false;

            risultatoProtocollazione = ResultProtocollazione.APPLICATION_ERROR;
            ruoliSuperiori           = null;

            try
            {
                //log.StartLogEntry("CreateProtocollo_ETDOCS", true);
                retValue = this.DocumentManagerETDOCS.CreateProtocollo(schedaDocumento, ruolo, out risultatoProtocollazione, out ruoliSuperiori);
                //log.EndLogEntry();

                //log.StartLogEntry("CreateProtocollo_DCTM", true);
                if (retValue)
                {
                    retValue = this.DocumentManagerDocumentum.CreateProtocollo(schedaDocumento, ruolo, out risultatoProtocollazione);
                }
                //log.EndLogEntry();
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("Errore nella protocollazione del documento: {0}", ex.Message);
                logger.Debug(errorMessage, ex);

                retValue = false;
                risultatoProtocollazione = ResultProtocollazione.APPLICATION_ERROR;
            }

            //log.EndLogEntry();
            //Performance.PerformanceLogWriter.FlushPerformanceLogWriter();
            logger.Info("END");
            return(retValue);
        }
예제 #14
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="idAmministrazione"></param>
 /// <param name="schedaDocumento"></param>
 /// <param name="ruolo"></param>
 /// <param name="sede"></param>
 /// <param name="risultatoProtocollazione"></param>
 /// <returns></returns>
 public bool CreateProtocollo(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.documento.ResultProtocollazione risultatoProtocollazione)
 {
     DocsPaVO.utente.Ruolo[] ruoliSuperiori;
     return(this.CreateProtocollo(schedaDocumento, ruolo, out risultatoProtocollazione, out ruoliSuperiori));
 }
예제 #15
0
        /// <summary>
        /// Protocollazione di un documento predisposto
        /// </summary>
        /// <param name="schedaDocumento"></param>
        /// <param name="ruolo"></param>
        /// <param name="risultatoProtocollazione"></param>
        /// <returns></returns>
        public bool ProtocollaDocumentoPredisposto(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.documento.ResultProtocollazione risultatoProtocollazione)
        {
            bool retValue = false;

            risultatoProtocollazione = ResultProtocollazione.APPLICATION_ERROR;

            try
            {
                retValue = this.DocumentManagerETDOCS.ProtocollaDocumentoPredisposto(schedaDocumento, ruolo, out risultatoProtocollazione);

                if (retValue)
                {
                    retValue = this.DocumentManagerDocumentum.ProtocollaDocumentoPredisposto(schedaDocumento, ruolo, out risultatoProtocollazione);
                }
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("Errore nella protocollazione del documento: {0}", ex.Message);
                logger.Debug(errorMessage, ex);

                retValue = false;
                risultatoProtocollazione = ResultProtocollazione.APPLICATION_ERROR;
            }

            return(retValue);
        }
예제 #16
0
        /// <summary>
        /// Creazione nuovo sottofascicolo
        /// </summary>
        /// <param name="folder"></param>
        /// <param name="ruolo"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori">
        /// Ruoli superiori cui è impostata la visibilità del sottofascicolo
        /// </param>
        /// <returns></returns>
        public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            bool retValue = false;

            result         = ResultCreazioneFolder.GENERIC_ERROR;
            ruoliSuperiori = null;

            try
            {
                // Recuperare l'ID del padre del folder: dato che la modalità è diversa se il padre
                // è Fascicolo o Sottofascicolo, è necessario verificare la casistica

                // Caso in cui il parent del sottofascicolo è un sottofascicolo stesso
                Qualification qualSottoFascicoloParent = Dfs4DocsPa.getSottofascicoloQualificationById(folder.idParent);
                string        parentId = DfsHelper.getDctmObjectId(this.GetServiceInstance <IQueryService>(false), qualSottoFascicoloParent);

                if (string.IsNullOrEmpty(parentId))
                {
                    // Caso in cui il parent del sottofascicolo è un fascicolo stesso
                    qualSottoFascicoloParent = Dfs4DocsPa.getFascicoloQualificationById(folder.idFascicolo);
                    parentId = DfsHelper.getDctmObjectId(this.GetServiceInstance <IQueryService>(false), qualSottoFascicoloParent);
                }

                if (!string.IsNullOrEmpty(parentId))
                {
                    ObjectIdentity parentIdentity = new ObjectIdentity(new ObjectId(parentId), DctmConfigurations.GetRepositoryName());

                    ObjectIdentity identity   = new ObjectIdentity(DctmConfigurations.GetRepositoryName());
                    DataObject     dataObject = new DataObject(identity, ObjectTypes.SOTTOFASCICOLO);
                    dataObject.Properties.Properties.AddRange(Dfs4DocsPa.getSottoFascicoloProperties(folder));
                    dataObject.Relationships.Add(DfsHelper.createParentFolderRelationship(parentIdentity));

                    // Reperimento ACL del fascicolo di appartenenza e associazione al sottofascicolo
                    CustomServices.AclDefinition aclDefinition = this.GetAclDefinitionSottoFascicolo(folder);
                    AclHelper.setAclObjectProperties(dataObject.Properties, aclDefinition);

                    DataPackage dataPackage = new DataPackage(dataObject);
                    dataPackage = this.GetServiceInstance <IObjectService>(false).Create(dataPackage, null);

                    retValue = (dataPackage.DataObjects.Count == 1);

                    if (retValue)
                    {
                        result = ResultCreazioneFolder.OK;

                        logger.Debug(string.Format("Documentum.CreateFolder: creato sottofascicolo con id {0}", folder.systemID));
                    }
                }
                else
                {
                    throw new ApplicationException(string.Format("Non è stato possibile reperire l'oggetto parent per il folder con id '{0}'", folder.systemID));
                }
            }
            catch (Exception ex)
            {
                retValue = false;

                logger.Debug(string.Format("Errore in Documentum.CreateFolder:\n{0}", ex.ToString()));
            }

            return(retValue);
        }
예제 #17
0
        /// <summary>
        /// Import dei sottofascicoli per un fascicolo
        /// </summary>
        /// <param name="infoUtente"></param>
        /// <param name="amministrazione"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="statoMigrazione"></param>
        /// <param name="folders"></param>
        private static void ImportaSottofascicoli(InfoUtente infoUtente, InfoAmministrazione amministrazione, DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.fascicolazione.Folder[] folders, DocsPaVO.utente.Ruolo ruolo, InfoStatoMigrazione statoMigrazione)
        {
            DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager projectManager = new DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager(infoUtente);

            // Fascicolo precedentementei importato
            DocsPaVO.fascicolazione.Folder previousFolder = null;
            int countRenamed = 0;

            if (folders == null)
            {
                folders = GetFolders(infoUtente, fascicolo);
            }

            // 1. Reperimento sottofascicoli contenuti nel fascicolo
            foreach (DocsPaVO.fascicolazione.Folder folder in folders)
            {
                if (projectManager.ContainsSottofascicolo(folder.systemID))
                {
                    // Inserimento dei metadati di migrazione per il folder
                    InfoFascicoloMigrazione infoFascicolo = new InfoFascicoloMigrazione(fascicolo, folder);

                    // Sottofascicolo è già esistente, save dei dati
                    infoFascicolo.EsitoMigrazione = projectManager.ModifyFolder(folder);

                    if (!infoFascicolo.EsitoMigrazione)
                    {
                        infoFascicolo.ErroreMigrazione = string.Format("Errore nella modifica del sottofascicolo: '{0}'", folder.descrizione);
                    }

                    statoMigrazione.SetFascicoloMigrazione(infoFascicolo);

                    if (folder.childs.Count > 0)
                    {
                        // Import dei sottofascicoli figli
                        ImportaSottofascicoli(infoUtente, amministrazione, fascicolo,
                                              (DocsPaVO.fascicolazione.Folder[])folder.childs.ToArray(typeof(DocsPaVO.fascicolazione.Folder)),
                                              ruolo, statoMigrazione);
                    }

                    // Sottofascicolo già esistente
                    Log.GetInstance(amministrazione).Write(string.Format("Sottofascicolo con codice {0} già esistente. Aggiornamento.", folder.descrizione), false);
                }
                else
                {
                    // Il sottofascicolo non ha descrizione, viene impostata la system_id
                    if (string.IsNullOrEmpty(folder.descrizione))
                    {
                        folder.descrizione = folder.systemID;
                    }

                    string oldDescription = folder.descrizione;

                    // Verifica se, nell'ambito dello stesso fascicolo, esistono sottofascicoli con descrizione duplicata
                    // if (DocsPaDocumentale_DOCUMENTUM.DctmServices.Dfs4DocsPa.containsSottofascicoloByDescription(folder.idFascicolo, folder.descrizione))
                    // {
                    folder.descrizione = string.Format("{0} ({1})", folder.descrizione, folder.systemID);

                    // Log.GetInstance(amministrazione).Write(string.Format("Migrazione sottofascicolo. Rinominato sottofascicolo duplicato '{0}' in '{1}'", oldDescription, folder.descrizione), false);
                    // }

                    DocsPaVO.fascicolazione.ResultCreazioneFolder resultCreazioneFolder;

                    // 3. Creazione oggetto Folder
                    if (projectManager.CreateFolder(folder, ruolo, out resultCreazioneFolder))
                    {
                        // Inserimento dei metadati di migrazione per il folder
                        InfoFascicoloMigrazione infoFascicolo = new InfoFascicoloMigrazione(fascicolo, folder);
                        infoFascicolo.EsitoMigrazione = true;
                        statoMigrazione.SetFascicoloMigrazione(infoFascicolo);

                        Log.GetInstance(amministrazione).Write(string.Format("Migrazione sottofascicolo. Descrizione sottofascicolo: '{0}' - Codice: '{1}' - Descrizione: '{2}'", folder.descrizione, fascicolo.codice, fascicolo.descrizione), false);

                        folder.descrizione = oldDescription;
                        previousFolder     = folder;

                        if (folder.childs.Count > 0)
                        {
                            // Import dei sottofascicoli figli
                            ImportaSottofascicoli(infoUtente, amministrazione, fascicolo,
                                                  (DocsPaVO.fascicolazione.Folder[])folder.childs.ToArray(typeof(DocsPaVO.fascicolazione.Folder)),
                                                  ruolo, statoMigrazione);
                        }
                    }
                    else
                    {
                        // 2a. Errore nell'inserimento del folder
                        throw new ApplicationException(
                                  string.Format("Si è verificato un errore nell'inserimento del sottofascicolo '{0}' per il fascicolo '{1}' per l'amministrazione '{2}'",
                                                folder.descrizione, fascicolo.codice, amministrazione.Codice));
                    }
                }
            }
        }
예제 #18
0
        /// <summary>
        /// Creazione delle ACL per il fascicolo
        /// NOTA: RW di DocsPA equivale a DELETE di Documentum
        /// </summary>
        /// <param name="fascicolo"></param>
        /// <param name="ruoloCreatore"></param>
        /// <returns>ACL creata, ma ancora non associata al documento</returns>
        protected virtual CustomServices.AclDefinition CreateAclFascicolo(DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.utente.Ruolo ruoloCreatore)
        {
            CustomServices.AclDefinition aclData = null;

            try
            {
                // Reperimento ACL per il fascicolo
                aclData = Dfs4DocsPa.getAclDefinition(fascicolo.systemID, ObjectTypes.FASCICOLO, this.InfoUtente);

                // istanziamo ACLservice in modalità super-user per poter comunque creare una acl di sistema
                // nota: questo non sarebbe strettamente necessario (si potrebbe usare una user-acl, di tipo public)
                // ma si ritiene che non sia bello avere le acl di proprietà degli utenti creatori del documento
                CustomServices.IAclService aclSvcSuper = DctmServiceFactory.GetCustomServiceInstance <CustomServices.IAclService>(UserManager.ImpersonateSuperUser());

                CustomServices.ObjectIdentity aclIdentity = aclSvcSuper.Create(aclData);

                if (aclIdentity == null)
                {
                    throw new ApplicationException(string.Concat("Errore nella creazione dell'ACL per il fascicolo con id '{0}'", fascicolo.systemID));
                }
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("Errore in Documentum.CreateAclFascicolo:\n{0}", ex.ToString());
                logger.Debug(errorMessage);

                throw new ApplicationException(errorMessage);
            }

            return(aclData);
        }
예제 #19
0
 /// <summary>
 /// Creazione di un nuovo folder in un fascicolo in docspa e documentum
 /// </summary>
 /// <param name="folder"></param>
 /// <param name="ruolo"></param>
 /// <returns></returns>
 public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result)
 {
     Ruolo[] ruoliSuperiori;
     return(this.CreateFolder(folder, ruolo, out result, out ruoliSuperiori));
 }
예제 #20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="classificazione"></param>
        /// <param name="fascicolo"></param>
        /// <param name="infoUtente"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUffRef"></param>
        /// <param name="folder"></param>
        /// <param name="codiceFasc"></param>
        /// <param name="dbProvider"></param>
        /// <returns></returns>
        private bool CreazioneFascicoloConTransazione(DocsPaVO.fascicolazione.Classificazione classificazione, DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.utente.InfoUtente infoUtente, DocsPaVO.utente.Ruolo ruolo, bool enableUffRef, DocsPaVO.fascicolazione.Folder folder, string codiceFasc, DocsPaDB.DBProvider dbProvider, out Ruolo[] ruoliSuperiori)
        {
            logger.Info("BEGIN");
            bool result = true;

            ruoliSuperiori = null;

            DocsPaDB.Query_DocsPAWS.AmministrazioneXml objAX     = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml();
            DocsPaDB.Query_DocsPAWS.Fascicoli          fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();
            string systemIdRoot;

            try
            {
                // 3 - Si calcola il formato del codice del fascicolo
                fascicolo.codice = codiceFasc;

                string chiaveFascicolo = CalcolaChiaveFascicolo(fascicolo.idClassificazione, DateTime.Today.Year.ToString(), fascicolo.codUltimo, fascicolo.idRegistro);
                if (string.IsNullOrEmpty(chiaveFascicolo))
                {
                    throw new Exception("errore nel calcolo del VAR_CHIAVE_FASCICOLO - DATI MANCANTI");
                }

                // 5 - Si aggiorna il record relativo al fascicolo con i nuovi dati
                fascicolo = NewFascicolo(infoUtente.idAmministrazione, classificazione.registro, fascicolo, enableUffRef, chiaveFascicolo);
                if (fascicoli == null)
                {
                    throw new Exception("errore durante l'Update sulla Project");
                }

                // 6 - Si crea la folder associata al fascicolo
                folder.descrizione = fascicolo.codice;
                folder.idFascicolo = fascicolo.systemID;
                folder.idParent    = fascicolo.systemID;
                string idPeopleDelegato = string.Empty;
                if (infoUtente.delegato != null && infoUtente.delegato.idPeople != null)
                {
                    idPeopleDelegato = infoUtente.delegato.idPeople;
                }

                systemIdRoot = CreateProject(folder.descrizione, idPeopleDelegato);
                if (string.IsNullOrEmpty(systemIdRoot))
                {
                    throw new Exception("errore durante la creazione della Root Folder");
                }

                // 7 - La creazione è andata a buon fine, quindi si aggiorna il record relativo alla folder con i dati del fascicolo
                folder.systemID = systemIdRoot;
                if (!fascicoli.NewFolder(infoUtente.idAmministrazione, folder, dbProvider))
                {
                    throw new Exception("errore durante l'aggiornamento della Root Folder");
                }

                // 8 - Imposto ID_TITOLARIO, cioe' il titolario di appartenenza sia per il fascicolo che per il folder
                DocsPaDB.Query_DocsPAWS.Amministrazione   amm     = new DocsPaDB.Query_DocsPAWS.Amministrazione();
                DocsPaVO.amministrazione.OrgNodoTitolario nodoTit = amm.getNodoTitolario(fascicolo.idClassificazione);
                if (nodoTit.ID_Titolario != null && nodoTit.ID_Titolario != "")
                {
                    if (!fascicoli.updateIdTitolario(nodoTit.ID_Titolario, fascicolo.systemID, folder.systemID, dbProvider))
                    {
                        throw new Exception("errore durante l'aggiornamento dell'ID_TITOLARIO per il Fascicolo e il Folder");
                    }
                }

                bool isPrivato = fascicolo.privato != "0";
                if (ruolo != null)
                {
                    System.Collections.ArrayList listRuoliSuperiori;

                    // 9 - Si estende la visibilità sul fascicolo creato
                    if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, fascicolo.systemID, ruolo, fascicolo.idClassificazione, fascicolo.idRegistro, isPrivato, out listRuoliSuperiori, infoUtente.delegato, fascicolo.pubblico))
                    {
                        throw new Exception("errore durante estensione della visibilità sul Fascicolo");
                    }

                    // 10 -  Si estende la visibilità sulla folder creata
                    bool isSottofascicolo = (folder.idParent != folder.idFascicolo);

                    System.Collections.ArrayList tmp; // Variabile temporanea: i ruoli superiori sono già stati reperiti

                    //10.1 - sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono
                    //10.2 caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo)
                    if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, folder.systemID, ruolo, folder.idFascicolo, isSottofascicolo, fascicolo.idRegistro, isPrivato, out tmp, infoUtente.delegato, fascicolo.pubblico))
                    {
                        throw new Exception("errore durante estensione della visibilità della Folder");
                    }

                    ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo));
                }

                string key_beprojectlevel = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_LEVEL");
                if (!string.IsNullOrEmpty(key_beprojectlevel) && key_beprojectlevel.Equals("1"))
                {
                    folder.codicelivello = string.Format("{0:0000}", Convert.ToInt32(fascicolo.codUltimo));
                    UpdateFolderCodLivello(folder, infoUtente);
                }

                string key_beprojectstructure = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_STRUCTURE");
                if (!string.IsNullOrEmpty(key_beprojectstructure) && key_beprojectstructure.Equals("1"))
                {
                    CreateStrutturaFascicolo(fascicolo, infoUtente, ruolo);
                }
            }
            catch (Exception ex)
            {
                logger.Debug("*** ESEGUITA ROLLBACK DELLA TRANSAZIONE CREAZIONE FASCICOLO: ***");
                logger.DebugFormat("errore nel metodo: creazioneFascicoloConTransazione - {0}", ex.Message);
                logger.DebugFormat("StackTrace : {0}", ex.StackTrace);
                result = false;
            }
            logger.Info("END");
            return(result);
        }
예제 #21
0
        public static Services.Registers.GetRegistersOrRF.GetRegistersOrRFResponse GetRegistersOrRF(Services.Registers.GetRegistersOrRF.GetRegistersOrRFRequest request)
        {
            Services.Registers.GetRegistersOrRF.GetRegistersOrRFResponse response = new Services.Registers.GetRegistersOrRF.GetRegistersOrRFResponse();
            try
            {
                DocsPaVO.utente.Utente     utente     = null;
                DocsPaVO.utente.InfoUtente infoUtente = null;

                //Inizio controllo autenticazione utente
                infoUtente = Utils.CheckAuthentication(request, "GetRegistersOrRF");

                utente = BusinessLogic.Utenti.UserManager.getUtenteById(infoUtente.idPeople);
                if (utente == null)
                {
                    //Utente non trovato
                    throw new PisException("USER_NO_EXIST");
                }
                //Fine controllo autenticazione utente

                if (string.IsNullOrEmpty(request.CodeRole) && string.IsNullOrEmpty(request.IdRole))
                {
                    throw new PisException("REQUIRED_CODE_OR_ID_ROLE");
                }

                if (!string.IsNullOrEmpty(request.CodeRole) && !string.IsNullOrEmpty(request.IdRole))
                {
                    throw new PisException("REQUIRED_ONLY_CODE_OR_ID_ROLE");
                }

                Domain.Register[] registerResponse = null;

                DocsPaVO.utente.Registro[] registri = null;

                DocsPaVO.utente.Ruolo ruolo         = null;
                ArrayList             registriLista = new ArrayList();

                if (!string.IsNullOrEmpty(request.CodeRole))
                {
                    ruolo = BusinessLogic.Utenti.UserManager.getRuoloByCodice(request.CodeRole);
                }
                else
                {
                    if (!string.IsNullOrEmpty(request.IdRole))
                    {
                        try
                        {
                            //Id gruppo
                            ruolo = BusinessLogic.Utenti.UserManager.getRuoloByIdGruppo(request.IdRole);
                        }
                        catch
                        {
                            //Ruolo non trovato
                            throw new PisException("ROLE_NO_EXIST");
                        }
                    }
                }

                if (ruolo != null)
                {
                    //Prendi i registri e gli rf
                    if ((!request.OnlyRegisters && !request.OnlyRF) || (request.OnlyRegisters && request.OnlyRF))
                    {
                        registriLista = BusinessLogic.Utenti.RegistriManager.getListaRegistriRfRuolo(ruolo.systemId, string.Empty, string.Empty);
                    }
                    else
                    {
                        //Prendi solo i registri
                        if (request.OnlyRegisters && !request.OnlyRF)
                        {
                            registriLista = BusinessLogic.Utenti.RegistriManager.getListaRegistriRfRuolo(ruolo.systemId, "0", string.Empty);
                        }
                        else
                        {
                            //Prendi solo gli RF
                            if (request.OnlyRF && !request.OnlyRegisters)
                            {
                                registriLista = BusinessLogic.Utenti.RegistriManager.getListaRegistriRfRuolo(ruolo.systemId, "1", string.Empty);
                            }
                        }
                    }
                    if (registriLista != null && registriLista.Count > 0)
                    {
                        registerResponse = new Domain.Register[registriLista.Count];
                        int i = 0;
                        foreach (DocsPaVO.utente.Registro reg in registriLista)
                        {
                            Domain.Register regTemp = new Domain.Register();
                            regTemp             = Utils.GetRegister(reg);
                            registerResponse[i] = regTemp;
                            i++;
                        }
                    }
                }
                else
                {
                    //Ruolo non trovato
                    throw new PisException("ROLE_NO_EXIST");
                }

                response.Registers = registerResponse;

                response.Success = true;
            }
            catch (PisException pisEx)
            {
                logger.ErrorFormat("PISException: {0}, {1}", pisEx.ErrorCode, pisEx.Description);
                response.Error = new Services.ResponseError
                {
                    Code        = pisEx.ErrorCode,
                    Description = pisEx.Description
                };

                response.Success = false;
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Eccezione Generica: APPLICATION_ERROR, {0}", ex.Message);
                response.Error = new Services.ResponseError
                {
                    Code        = "APPLICATION_ERROR",
                    Description = ex.Message
                };

                response.Success = false;
            }

            return(response);
        }
예제 #22
0
        /// <summary>
        /// Protocollazione di un documento predisposto
        /// </summary>
        /// <param name="schedaDocumento"></param>
        /// <param name="ruolo"></param>
        /// <param name="risultatoProtocollazione"></param>
        /// <returns></returns>
        public bool ProtocollaDocumentoPredisposto(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.documento.ResultProtocollazione risultatoProtocollazione)
        {
            bool retValue = false;

            risultatoProtocollazione = ResultProtocollazione.APPLICATION_ERROR;

            try
            {
                // Stacco del numero di protocollo da parte di WSPia
                retValue = this._documentManagerWSPIA.CreateProtocollo(schedaDocumento, ruolo, out risultatoProtocollazione);

                // Se il risultato è positivo, si procede con una protocollazione di predisposto su ETDocs
                if (retValue && risultatoProtocollazione == ResultProtocollazione.OK)
                {
                    retValue = this._documentManagerETDOCS.ProtocollaDocumentoPredisposto(schedaDocumento, ruolo, out risultatoProtocollazione);
                }

                // Se la protocollazione del predisposto è andata a buon fine, si procede con la put file su WsPia
                if (retValue && risultatoProtocollazione == ResultProtocollazione.OK)
                {
                    if (schedaDocumento.documenti.Count > 0)
                    {
                        List <FileRequest> versions = new List <DocsPaVO.documento.FileRequest>(
                            (DocsPaVO.documento.FileRequest[])
                            schedaDocumento.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));
                        }
                            );

                        // Invio file ultima versione del doc principale
                        TransferFileToWsPia(versions[0]);
                    }

                    if (schedaDocumento.allegati != null && schedaDocumento.allegati.Count > 0)
                    {
                        foreach (FileRequest attachment in schedaDocumento.allegati)
                        {
                            this.TransferFileToWsPia(attachment);
                        }
                    }
                }

                // Protocollazione classica
                //retValue = this.CreateProtocollo(schedaDocumento, ruolo, out risultatoProtocollazione);

                /*
                 * if(retValue)
                 *  retValue = this.DocumentManagerETDOCS.ProtocollaDocumentoPredisposto(schedaDocumento, ruolo, out risultatoProtocollazione);
                 */
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("Errore nella protocollazione del documento: {0}", ex.Message);
                logger.Debug(errorMessage, ex);

                retValue = false;
                risultatoProtocollazione = ResultProtocollazione.APPLICATION_ERROR;
            }

            return(retValue);
        }
예제 #23
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="schedaDocumento"></param>
        /// <param name="ruolo"></param>
        /// <param name="ruoliSuperiori"></param>
        /// <returns></returns>
        public bool CreateDocumentoGrigio(DocsPaVO.documento.SchedaDocumento schedaDocumento, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.utente.Ruolo[] ruoliSuperiori, string conCopia = null)
        {
            logger.Info("BEGIN");
            //Performance.PerformanceLogWriter.CreatePerformanceLogWriter(@"c:\temp\DocumentManager.txt");

            //Performance.PerformanceLogWriter log = new Performance.PerformanceLogWriter();
            //log.StartLogEntry("CreateDocumentoGrigio");

            bool retValue = false;

            ruoliSuperiori = null;

            try
            {
                //log.StartLogEntry("CreateDocumentoGrigio_ETDOCS", true);
                retValue = this.DocumentManagerETDOCS.CreateDocumentoGrigio(schedaDocumento, ruolo, out ruoliSuperiori);
                //log.EndLogEntry();

                //log.StartLogEntry("CreateDocumentoGrigio_DCTM", true);

                //log.EndLogEntry();
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("Errore nella creazione di un documento grigio: {0}", ex.Message);
                logger.Debug(errorMessage, ex);
                retValue = false;
            }

            //log.EndLogEntry();
            //Performance.PerformanceLogWriter.FlushPerformanceLogWriter();
            logger.Info("END");
            return(retValue);
        }
예제 #24
0
 /// <summary>
 /// Creazione nuovo sottofascicolo
 /// </summary>
 /// <param name="folder"></param>
 /// <param name="ruolo"></param>
 /// <param name="result"></param>
 /// <param name="ruoliSuperiori">
 /// Ruoli superiori cui è impostata la visibilità del sottofascicolo
 /// </param>
 /// <returns></returns>
 public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
 {
     result         = ResultCreazioneFolder.OK;
     ruoliSuperiori = null;
     return(true);
 }
예제 #25
0
        private void CreateStrutturaFascicolo(Fascicolo fascicolo, InfoUtente infoUtente, DocsPaVO.utente.Ruolo ruolo)
        {
            DocsPaDB.Query_DocsPAWS.Amministrazione   amm       = new DocsPaDB.Query_DocsPAWS.Amministrazione();
            DocsPaDB.Query_DocsPAWS.Fascicoli         fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();
            DocsPaVO.amministrazione.OrgNodoTitolario nodoTit   = amm.getNodoTitolario(fascicolo.idClassificazione);

            string idPeopleDelegato = string.Empty;

            if (infoUtente.delegato != null && infoUtente.delegato.idPeople != null)
            {
                idPeopleDelegato = infoUtente.delegato.idPeople;
            }

            using (DocsPaDB.DBProvider dbProvider = new DocsPaDB.DBProvider())
            {
                // Leggo la struttura del template associato al fascicolo e ricreo la struttura su project
                Folder[] template = new DocsPaDB.Query_DocsPAWS.Fascicoli().GetFascicoloTemplate(fascicolo.systemID, nodoTit.ID, infoUtente.idAmministrazione);
                if (template == null)
                {
                    return;
                }

                string key_beprojectlevel = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_LEVEL");

                var rootfolder = fascicoli.getRootFolderFasc(fascicolo.systemID);
                foreach (var item in template)
                {
                    if (string.IsNullOrEmpty(item.idParent))
                    {
                        item.idParent = rootfolder;
                    }
                }
                for (int i = 0; i < template.Length; i++)
                {
                    string tempID = template[i].systemID;
                    template[i].idFascicolo = fascicolo.systemID;

                    // Creazione del folder
                    template[i].systemID = CreateProject(template[i].descrizione, idPeopleDelegato);
                    if (string.IsNullOrEmpty(template[i].systemID))
                    {
                        throw new Exception("errore durante la creazione del folder da template");
                    }

                    // La creazione è andata a buon fine, quindi si aggiorna il record relativo alla folder con i dati del fascicolo
                    if (!fascicoli.NewFolder(infoUtente.idAmministrazione, template[i], dbProvider))
                    {
                        throw new Exception("errore aggiornamento dati del folder da template");
                    }

                    // Imposto ID_TITOLARIO, cioe' il titolario di appartenenza sia per il fascicolo che per il folder
                    if (string.IsNullOrEmpty(nodoTit.ID_Titolario))
                    {
                        if (!fascicoli.updateIdTitolario(nodoTit.ID_Titolario, fascicolo.systemID, template[i].systemID, dbProvider))
                        {
                            throw new Exception("errore durante l'aggiornamento dell'ID_TITOLARIO per il Fascicolo e il Folder");
                        }
                    }

                    // Si da la visibilità dei sottofascicoli a tutti coloro che vedono il fascicolo a cui essi appartengono
                    if (ruolo != null)
                    {
                        System.Collections.ArrayList tmp; // Variabile temporanea: i ruoli superiori sono già stati reperiti
                        if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, template[i].systemID, ruolo, template[i].idFascicolo, true, fascicolo.idRegistro, fascicolo.privato != "0", out tmp, infoUtente.delegato))
                        {
                            throw new Exception("errore durante estensione visibilità del Folder da template");
                        }
                    }

                    if (!string.IsNullOrEmpty(key_beprojectlevel) && key_beprojectlevel.Equals("1"))
                    {
                        UpdateFolderCodLivello(template[i], infoUtente);
                    }

                    foreach (Folder item in template)
                    {
                        if (item.idParent == tempID)
                        {
                            item.idParent = template[i].systemID;
                        }
                    }
                }
            }
        }
예제 #26
0
        /// <summary>
        /// Migrazione di un singolo fascicolo
        /// </summary>
        /// <param name="fascicolo"></param>
        /// <param name="infoUtente"></param>
        /// <param name="amministrazione"></param>
        /// <param name="statoMigrazione"></param>
        private static void ImportaFascicolo(DocsPaVO.fascicolazione.Fascicolo fascicolo, InfoUtente infoUtente, InfoAmministrazione amministrazione, InfoStatoMigrazione statoMigrazione)
        {
            DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager projectManager   = new DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager(infoUtente);
            DocsPaDocumentale.Interfaces.IAclEventListener          aclEventListener = new DocsPaDocumentale_DOCUMENTUM.Documentale.AclEventListener(infoUtente);

            // 1. Reperimento del ruolo creatore del fascicolo
            DocsPaVO.utente.Ruolo ruolo = DocsPaDocumentale_DOCUMENTUM.DocsPaServices.DocsPaQueryHelper.getRuoloCreatore(fascicolo.systemID);

            // NB: il reperimento dei fascicoli generali serve solo per migrare
            // gli eventuali sottofascicoli, non per migrare il fascicolo stesso,
            // che è già stato creato in sede di creazione del nodo di titolario
            if (fascicolo.tipo == "G")
            {
                // 2. Migrazione dei sottofascicoli, in caso di fascicolo generale (già creato in sede di creazione del titolario)
                ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, null, ruolo, statoMigrazione);
            }
            else
            {
                InfoFascicoloMigrazione fascicoloMigrazione = new InfoFascicoloMigrazione(fascicolo);

                // Calcolo dell'hash del fascicolo
                fascicoloMigrazione.HashFascicolo = GetHashFascicolo(fascicolo, true);

                // 2. Creazione del corrispondente fascicolo in documentum
                DocsPaVO.fascicolazione.ResultCreazioneFascicolo result;
                DocsPaVO.utente.Ruolo[] ruoliSuperiori;

                if (projectManager.ContainsFascicoloProcedimentale(fascicolo.systemID))
                {
                    // Fascicolo è già esistente, save dei dati con refresh delle entries dell'acl associata
                    fascicoloMigrazione.EsitoMigrazione = projectManager.ModifyProject(fascicolo, true);

                    if (!fascicoloMigrazione.EsitoMigrazione)
                    {
                        fascicoloMigrazione.ErroreMigrazione = string.Format("Si è verificato un errore nella modifica del fascicolo '{0}' per l'amministrazione '{1}'", fascicolo.codice, amministrazione.Codice);
                    }
                    else
                    {
                        // Migrazione dei sottofascicoli
                        ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, null, ruolo, statoMigrazione);
                    }

                    Log.GetInstance(amministrazione).Write(string.Format("Migrazione fascicolo. Codice: '{0}' - Descrizione: '{1}'. Aggiornamento.", fascicolo.codice, fascicolo.descrizione), false);
                }
                else if (projectManager.CreateProject(null,
                                                      fascicolo,
                                                      ruolo,
                                                      false,
                                                      out result,
                                                      out ruoliSuperiori))
                {
                    if (result == DocsPaVO.fascicolazione.ResultCreazioneFascicolo.OK)
                    {
                        fascicoloMigrazione.EsitoMigrazione = true;

                        Log.GetInstance(amministrazione).Write(string.Format("Migrazione fascicolo. Codice: '{0}' - Descrizione: '{1}'", fascicolo.codice, fascicolo.descrizione), false);

                        // 3. Notifica evento di creazione fascicolo completato
                        aclEventListener.FascicoloCreatoEventHandler(null, fascicolo, ruolo, ruoliSuperiori);

                        try
                        {
                            // 4. Migrazione dei sottofascicoli
                            ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, null, ruolo, statoMigrazione);
                        }
                        catch (Exception ex)
                        {
                            //4a. Errore nella migrazione dei sottofascicoli, viene rimosso il fascicolo creato
                            ((DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager)projectManager).DeleteProject(fascicolo);

                            fascicoloMigrazione.EsitoMigrazione  = false;
                            fascicoloMigrazione.ErroreMigrazione = ex.Message;
                        }

                        // 5. Impostazione ownership del fascicolo
                        string utenteCreatore = DocsPaDocumentale_DOCUMENTUM.DocsPaObjectTypes.TypeUtente.NormalizeUserName(DocsPaDocumentale_DOCUMENTUM.DocsPaServices.DocsPaQueryHelper.getUtenteCreatore(fascicolo.systemID).userId);
                        ((DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager)projectManager).SetOwnershipFascicolo(fascicolo.systemID, utenteCreatore);
                    }
                    else
                    {
                        // 3a. Errore nella creazione del fascicolo
                        fascicoloMigrazione.EsitoMigrazione  = false;
                        fascicoloMigrazione.ErroreMigrazione = string.Format("Si è verificato un errore nella creazione del fascicolo '{0}' per l'amministrazione '{1}'", fascicolo.codice, amministrazione.Codice);
                    }
                }

                fascicoloMigrazione.DataMigrazione = DateTime.Now.ToString();
                statoMigrazione.SetFascicoloMigrazione(fascicoloMigrazione);
            }
        }
예제 #27
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="classificazione"></param>
        /// <param name="fascicolo"></param>
        /// <param name="infoUtente"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUffRef"></param>
        /// <param name="folder"></param>
        /// <param name="codiceFasc"></param>
        /// <param name="dbProvider"></param>
        /// <returns></returns>
        private bool CreazioneFascicoloConTransazione(DocsPaVO.fascicolazione.Classificazione classificazione, DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.utente.InfoUtente infoUtente, DocsPaVO.utente.Ruolo ruolo, bool enableUffRef, DocsPaVO.fascicolazione.Folder folder, string codiceFasc, DocsPaDB.DBProvider dbProvider, out Ruolo[] ruoliSuperiori)
        {
            logger.Info("BEGIN");
            bool result = true;

            ruoliSuperiori = null;

            DocsPaDB.Query_DocsPAWS.AmministrazioneXml objAX     = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml();
            DocsPaDB.Query_DocsPAWS.Fascicoli          fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();

            string msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante la creazione del fascicolo";

            try
            {
                // 3 - Si calcola il formato del codice del fascicolo

                fascicolo.codice = codiceFasc;

                string chiaveFascicolo = this.CalcolaChiaveFascicolo(fascicolo.idClassificazione, DateTime.Today.Year.ToString(), fascicolo.codUltimo, fascicolo.idRegistro);

                if (string.IsNullOrEmpty(chiaveFascicolo))
                {
                    logger.Debug("errore nella calcolo del VAR_CHIAVE_FASCICOLO - DATI MANCANTI ");
                    throw new Exception();
                }

                // 5 - Si aggiorna il record relativo al fascicolo con i nuovi dati
                fascicolo = this.NewFascicolo(infoUtente.idAmministrazione, classificazione.registro, fascicolo, enableUffRef, chiaveFascicolo);

                if (fascicolo != null)
                {
                    //6 - Si crea la folder associata al fascicolo
                    folder.descrizione = fascicolo.codice;
                    folder.idFascicolo = fascicolo.systemID;
                    folder.idParent    = fascicolo.systemID;
                    string idPeopleDelegato = string.Empty;
                    if (infoUtente.delegato != null && infoUtente.delegato.idPeople != null)
                    {
                        idPeopleDelegato = infoUtente.delegato.idPeople;
                    }

                    folder.systemID = this.CreateProject(folder.descrizione, idPeopleDelegato);

                    if (!string.IsNullOrEmpty(folder.systemID))
                    {
                        //7 - La creazione è andata a buon fine, quindi si aggiorna il record relativo alla folder con i dati del fascicolo
                        if (fascicoli.NewFolder(infoUtente.idAmministrazione, folder, dbProvider))
                        {
                            //8 - Imposto ID_TITOLARIO, cioe' il titolario di appartenenza sia per il fascicolo che per il folder
                            DocsPaDB.Query_DocsPAWS.Amministrazione   amm     = new DocsPaDB.Query_DocsPAWS.Amministrazione();
                            DocsPaVO.amministrazione.OrgNodoTitolario nodoTit = amm.getNodoTitolario(fascicolo.idClassificazione);
                            if (!string.IsNullOrEmpty(nodoTit.ID_Titolario))
                            {
                                if (!fascicoli.updateIdTitolario(nodoTit.ID_Titolario, fascicolo.systemID, folder.systemID, dbProvider))
                                {
                                    msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante l'aggiornamento dell'ID_TITOLARIO per il Fascicolo e il Folder";
                                    throw new Exception();
                                }
                            }
                        }
                        else
                        {
                            msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante l'aggiornamento della Root Folder";
                            throw new Exception();
                        }
                        //creazione dei sottofascicoli relativi alla tipologia con gara e senza gara
                        fascicolo.folderSelezionato = folder;
                        CreateFolderHermes(fascicolo, ruolo);
                    }
                    else
                    {
                        msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante la creazione della Root Folder";
                        throw new Exception();
                    }
                }
                else
                {
                    //Se il fascicolo è NULL viene lanciata una eccezione e viene eseguita la Rollback dell'operazione
                    msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante l'Update sulla Project";
                    throw new Exception();
                }

                bool isPrivato = true;
                if (fascicolo.privato.Equals("0"))
                {
                    isPrivato = false;
                }

                if (ruolo != null)
                {
                    System.Collections.ArrayList listRuoliSuperiori;

                    // 9 - Si estende la visibilità sul fascicolo creato
                    if (fascicoli.SetProjectTrustees(infoUtente.idPeople, fascicolo.systemID, ruolo, fascicolo.idClassificazione, fascicolo.idRegistro, isPrivato, out listRuoliSuperiori, infoUtente.delegato))
                    {
                        // 10 -  Si estende la visibilità sulla folder creata
                        bool isSottofascicolo = (folder.idParent != folder.idFascicolo);

                        System.Collections.ArrayList tmp; // Variabile temporanea: i ruoli superiori sono già stati reperiti

                        //10.1 - sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono
                        //10.2 caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo)
                        if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, folder.systemID, ruolo, folder.idFascicolo, isSottofascicolo, fascicolo.idRegistro, isPrivato, out tmp, infoUtente.delegato))
                        {
                            msgError = "errore durante estensione della visibilità della Folder";
                            throw new Exception();
                        }
                    }
                    else
                    {
                        msgError = "errore durante estenzione della visibilità sul Fascicolo";
                        throw new Exception();
                    }

                    ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo));
                }
            }
            catch
            {
                logger.Debug("*** ESEGUITA ROLLBACK DELLA TRANSAZIONE CREAZIONE FASCICOLO: " + msgError + "***");
                result = false;
            }
            logger.Info("END");
            return(result);
        }
예제 #28
0
        public static Services.Authentication.LogIn.LogInResponse LogIn(Services.Authentication.LogIn.LogInRequest request)
        {
            Services.Authentication.LogIn.LogInResponse response = new Services.Authentication.LogIn.LogInResponse();

            try
            {
                DocsPaVO.utente.Utente utente = null;
                string idWebSession           = string.Empty;
                string ipAddress = string.Empty;

                if (request != null && (string.IsNullOrEmpty(request.UserName) || string.IsNullOrEmpty(request.Password)))
                {
                    throw new PisException("MISSING_PARAMETER");
                }

                DocsPaVO.utente.UserLogin.LoginResult loginResult = DocsPaVO.utente.UserLogin.LoginResult.OK;

                DocsPaVO.utente.UserLogin login = new DocsPaVO.utente.UserLogin
                {
                    UserName = request.UserName,
                    Password = request.Password,
                };

                utente = BusinessLogic.Utenti.Login.loginMethod(login, out loginResult, true, idWebSession, out ipAddress);

                if (utente == null)
                {
                    //Utente non trovato
                    throw new PisException("USER_NO_EXIST");
                }

                // Giovanni Olivari - 06/11/2012
                // Se l'utente non ha Ruoli viene generata un'eccezione prima di questo blocco di codice,
                // quindi arrivati qui posso essere sicuro di avere almeno un ruolo, prendo il primo della lista
                //
                DocsPaVO.utente.Ruolo ruolo = null;
                ruolo = (DocsPaVO.utente.Ruolo)utente.ruoli[0];

                if (loginResult == DocsPaVO.utente.UserLogin.LoginResult.OK)
                {
                    // Generazione del token di autenticazione
                    response.AuthenticationToken = CreateAuthToken(utente, ruolo);

                    BusinessLogic.Utenti.Login.logoff(utente.userId, utente.idAmministrazione, utente.dst);
                }
                else
                {
                    throw new PisException("MISSING_PARAMETER");
                }

                response.Success = true;
            }
            catch (PisException pisEx)
            {
                logger.ErrorFormat("PISException: {0}, {1}", pisEx.ErrorCode, pisEx.Description);
                response.Error = new Services.ResponseError
                {
                    Code        = pisEx.ErrorCode,
                    Description = pisEx.Description
                };

                response.Success = false;
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Eccezione Generica: APPLICATION_ERROR, {0}", ex.Message);
                response.Error = new Services.ResponseError
                {
                    Code        = "APPLICATION_ERROR",
                    Description = ex.Message
                };

                response.Success = false;
            }

            return(response);
        }
예제 #29
0
        public void filtra_trasmissioni(DocsPaVO.rubrica.ParametriRicercaRubrica qr, ref ArrayList ers)
        {
            ArrayList a = new ArrayList();
            ArrayList ruoli_autorizzati = new ArrayList();

            DocsPaVO.trasmissione.TipoOggetto tipo_oggetto;
            tipo_oggetto = (qr.ObjectType.StartsWith("F:")) ? DocsPaVO.trasmissione.TipoOggetto.FASCICOLO : DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO;
            string id_nodo_titolario = (tipo_oggetto == DocsPaVO.trasmissione.TipoOggetto.FASCICOLO) ? qr.ObjectType.Substring(2) : null;

            DocsPaVO.utente.Ruolo    r = BusinessLogic.Utenti.UserManager.getRuolo(qr.caller.IdRuolo);
            DocsPaDB.Utils.Gerarchia g = new DocsPaDB.Utils.Gerarchia();

            switch (qr.calltype)
            {
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_ALL:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_ALL:
                ruoli_autorizzati = g.getRuoliAut(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_SUP:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_SUP:
                ruoli_autorizzati = g.getGerarchiaSup(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_INF:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_INF:
                ruoli_autorizzati = g.getGerarchiaInf(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_PARILIVELLO:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_PARILIVELLO:
                ruoli_autorizzati = g.getGerarchiaPariLiv(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_PROTO_INT_DEST:
                DocsPaVO.trasmissione.RagioneTrasmissione rTo = BusinessLogic.Trasmissioni.RagioniManager.GetRagione("TO", _user.idAmministrazione);
                DocsPaVO.trasmissione.TipoGerarchia       gTo = rTo.tipoDestinatario;

                switch (gTo)
                {
                case DocsPaVO.trasmissione.TipoGerarchia.INFERIORE:
                    ruoli_autorizzati = g.getGerarchiaInf(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                    break;

                case DocsPaVO.trasmissione.TipoGerarchia.PARILIVELLO:
                    ruoli_autorizzati = g.getGerarchiaPariLiv(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                    break;

                case DocsPaVO.trasmissione.TipoGerarchia.SUPERIORE:
                    ruoli_autorizzati = g.getGerarchiaSup(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                    break;

                case DocsPaVO.trasmissione.TipoGerarchia.TUTTI:
                    ruoli_autorizzati = g.getRuoliAut(r, qr.caller.IdRegistro, null, tipo_oggetto);
                    break;
                }
                break;

            default:
                return;
            }
            string[] c_ruoli_aut = new string[ruoli_autorizzati.Count];
            for (int i = 0; i < ruoli_autorizzati.Count; i++)
            {
                c_ruoli_aut[i] = ((DocsPaVO.utente.Ruolo)ruoli_autorizzati[i]).codiceRubrica;
            }

            Array.Sort(c_ruoli_aut);

            foreach (DocsPaVO.rubrica.ElementoRubrica er in ers)
            {
                try
                {
                    switch (er.tipo)
                    {
                    case "U":
                        if (uo_is_autorizzata((er.interno ? "I" : "E") + @"\" + er.codice, r, c_ruoli_aut) || (qr.ObjectType == "G"))
                        {
                            a.Add(er);
                        }
                        break;

                    case "R":
                        if (ruolo_is_autorizzato(er.codice, c_ruoli_aut) || (qr.ObjectType == "G"))
                        {
                            a.Add(er);
                        }
                        break;

                    case "P":
                        if (utente_is_autorizzato((er.interno ? "I" : "E") + @"\" + er.codice, c_ruoli_aut) || (qr.ObjectType == "G"))
                        {
                            a.Add(er);
                        }
                        break;

                    case "L":
                    case "F":
                        //if (utente_is_autorizzato ((er.interno ? "I" : "E") + @"\" + er.codice, c_ruoli_aut) || (qr.ObjectType == "G"))
                        a.Add(er);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            ers = a;
        }
예제 #30
0
        public static Services.Authentication.Authenticate.AuthenticateResponse Authenticate(Services.Authentication.Authenticate.AuthenticateRequest request)
        {
            Services.Authentication.Authenticate.AuthenticateResponse response = new Services.Authentication.Authenticate.AuthenticateResponse();
            try
            {
                DocsPaVO.utente.Utente utente = null;
                if (request == null || string.IsNullOrEmpty(request.UserName))
                {
                    throw new PisException("MISSING_PARAMETER");
                }

                if (string.IsNullOrEmpty(request.Password))
                {
                    throw new PisException("MISSING_PARAMETER");
                }

                DocsPaVO.utente.UserLogin    userlog    = new UserLogin(request.UserName, request.Password, null);
                System.Collections.ArrayList listaAmmin = BusinessLogic.Utenti.UserManager.getListaIdAmmUtente(userlog);

                if (listaAmmin != null && listaAmmin.Count > 0)
                {
                    if (listaAmmin.Count == 1)
                    {
                        userlog.IdAmministrazione = listaAmmin[0].ToString();
                    }
                    else
                    {
                        throw new PisException("APPLICATION_ERROR");
                    }
                }
                if (listaAmmin == null)
                {
                    throw new PisException("APPLICATION_ERROR");
                }
                utente = BusinessLogic.Utenti.UserManager.getUtente(request.UserName, userlog.IdAmministrazione);
                if (utente == null)
                {
                    //Utente non trovato
                    throw new PisException("APPLICATION_ERROR");
                }
                string encPass = BusinessLogic.Amministrazione.AmministraManager.GetPasswordUtenteMultiAmm(request.UserName.ToUpper());
                encPass = encPass.Split('^')[0];
                if (DocsPaUtils.Security.CryptographyManager.CalcolaImpronta(System.Text.Encoding.Unicode.GetBytes(request.Password)) != encPass)
                {
                    throw new PisException("APPLICATION_ERROR");
                }


                DocsPaVO.utente.Ruolo ruolo = Utils.GetRuoloPreferito(utente.idPeople);
                if (ruolo == null)
                {
                    //L'utente non ha ruoli
                    throw new PisException("APPLICATION_ERROR");
                }

                DocsPaVO.utente.InfoUtente infoUtente = new DocsPaVO.utente.InfoUtente(utente, ruolo);


                utente.ruoli = new System.Collections.ArrayList();
                utente.ruoli.Add(ruolo);

                response.AuthenticationToken = CreateAuthToken(utente, ruolo);
                DocsPaVO.utente.Corrispondente corr = BusinessLogic.Utenti.UserManager.getCorrispondenteBySystemID(utente.systemId);
                response.User = Utils.GetCorrespondent(corr, infoUtente);

                //response.User = new Domain.Correspondent();
                //response.User.Name = utente.nome;
                //response.User.Surname = utente.cognome;
                //response.User.Location = utente.sede;
                //response.User.Email = utente.email;
                //response.User.Id = utente.systemId;
                //response.User.CorrespondentType = utente.tipoCorrispondente;
                //response.User.Type = "I";
                //response.User.Description = utente.descrizione;
                //response.User.Code = utente.userId;


                response.Success = true;
            }
            catch (PisException pisEx)
            {
                logger.ErrorFormat("PISException: {0}, {1}", pisEx.ErrorCode, pisEx.Description);
                response.Error = new Services.ResponseError
                {
                    Code        = pisEx.ErrorCode,
                    Description = pisEx.Description
                };

                response.Success = false;
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Eccezione Generica: APPLICATION_ERROR, {0}", ex.Message);
                response.Error = new Services.ResponseError
                {
                    Code        = "APPLICATION_ERROR",
                    Description = ex.Message
                };

                response.Success = false;
            }
            return(response);
        }