Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="classifica"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUfficioReferente"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori"></param>
        /// <returns></returns>
        public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            logger.Info("BEGIN");
            bool retValue = false;

            ruoliSuperiori = null;

            using (DocsPaDB.DBProvider dbProvider = new DocsPaDB.DBProvider())
            {
                using (System.Data.IDataReader reader = dbProvider.ExecuteReader("select a.CHA_STATO from project a where a.SYSTEM_ID in (select b.ID_TITOLARIO from project b where b.SYSTEM_ID =" + classifica.systemID + ")"))
                {
                    if (reader.FieldCount > 0)
                    {
                        while (reader.Read())
                        {
                            string valorechiave = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_FASC_TUTTI_TIT");
                            if (string.IsNullOrEmpty(valorechiave) || !valorechiave.Equals("1"))
                            {
                                if (reader.GetString(reader.GetOrdinal("CHA_STATO")).ToUpper().Equals("C"))
                                {
                                    logger.Debug("sottofascilo chiuso");
                                    throw new Exception("sottofascilo chiuso");
                                }
                            }
                        }
                    }
                }

                logger.Debug(" *** INIZIO TRANSAZIONE CREAZIONE FASCICOLO ***");
                dbProvider.BeginTransaction();

                fascicolo.idClassificazione = classifica.systemID;

                result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.OK;
                DocsPaVO.fascicolazione.Folder             folder    = new DocsPaVO.fascicolazione.Folder();
                DocsPaDB.Query_DocsPAWS.AmministrazioneXml objAX     = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml();
                DocsPaDB.Query_DocsPAWS.Fascicoli          fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli();

                try
                {
                    fascicolo.stato = "A";
                    fascicolo.tipo  = "P";

                    // 6 - Si aggiorna il codUltimo relativo al fascicolo (solo per ora perchè andrà tolta questa gestione)
                    if (!fascicoli.aggiornaDpaRegFasc(ref fascicolo.codUltimo, fascicolo.idClassificazione, fascicolo.idRegistro, dbProvider))
                    {
                        throw new Exception("Errore nell'aggiornamento della tabella dpa_reg_fasc");
                    }

                    //prova per verifica codice univoco
                    string format = DocsPaDB.Utils.Personalization.getInstance(this.UserInfo.idAmministrazione).FormatoFascicolatura;
                    if (format == null || format.Equals(""))
                    {
                        //in alcuni casi, l'oggetto Personalization non è not null, ma il formato segnatura è null!!
                        //per evitare il blocco della protocollazione a meno di un iisreset inserisco questo codice.
                        logger.Debug("Ricalcolo Personalization");
                        DocsPaDB.Utils.Personalization.Reset();
                        format = DocsPaDB.Utils.Personalization.getInstance(this.UserInfo.idAmministrazione).FormatoFascicolatura;
                        if (format == null || format.Equals(""))
                        {
                            throw new FormatoFascicolaturaException();
                        }
                    }

                    //string codiceFasc = this.CalcolaCodiceFascicolo(this.UserInfo.idAmministrazione, classifica.codice, fascicolo.apertura, classifica.systemID, ref fascicolo.codUltimo, true, dbProvider);
                    string codiceFasc = this.CalcolaCodiceFascicolo(this.UserInfo.idAmministrazione, classifica, fascicolo.apertura, ref fascicolo.codUltimo, true, dbProvider);
                    string idReg      = fascicolo.idRegistro;

                    if (idReg != null && idReg == "")
                    {
                        idReg = classifica.registro.systemId;
                    }

                    // 4 - Si verifica che il codice sia univoco
                    if (!objAX.CheckUniqueCode("PROJECT", "VAR_CODICE", codiceFasc, "AND ((ID_REGISTRO IS NULL OR ID_REGISTRO=" + idReg + " ) ) AND ID_AMM =" + this.UserInfo.idAmministrazione + " AND ID_PARENT = " + classifica.systemID + "", dbProvider))
                    {
                        // 4 - Si verifica se il codice è già presente vienelanciata una eccezione
                        //codiceFascNew = calcolaCodiceFascicolo(infoUtente.idAmministrazione,classificazione.codice, fascicolo.apertura, classificazione.systemID, ref fascicolo.codUltimo, false, dbProvider);
                        throw new FascicoloPresenteException();
                    }

                    // Creazione fascicolo
                    string idPeopleDelegato = string.Empty;
                    if (fascicolo.creatoreFascicolo != null && fascicolo.creatoreFascicolo.idPeopleDelegato != null)
                    {
                        idPeopleDelegato = fascicolo.creatoreFascicolo.idPeopleDelegato;
                    }
                    string systemIdFasc = this.CreateProject(fascicolo.descrizione, idPeopleDelegato);

                    if (systemIdFasc != null && systemIdFasc != "")
                    {
                        fascicolo.systemID = systemIdFasc;

                        /* 2 - VIENE INVOCATO IL METODO PER LA CREAZIONE DEL FASCICOLO
                         * e della ROOT FOLDER */
                        bool resultNewFasc = this.CreazioneFascicoloConTransazione(classifica, fascicolo, this.UserInfo, ruolo, enableUfficioReferente, folder, codiceFasc, dbProvider, out ruoliSuperiori);

                        //3 - SE LA CREAZIONE DEL FASCICOLO è ANDATA A BUON FINE SI EFFETTUA IL COMMIT
                        //DELLA TRANSAZIONE
                        if (resultNewFasc)
                        {
                            result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.OK;
                        }
                        else
                        {
                            throw new Exception("Errore nella gestione dei fascicoli (newFascicolo)");
                        }
                    }
                    else
                    {
                        throw new Exception("Errore nella gestione dei fascicoli (newFascicolo)");
                    }

                    //Profilazione dinamica fascicoli
                    if (fascicolo.template != null)
                    {
                        DocsPaDB.Query_DocsPAWS.ModelFasc modelFasc = new DocsPaDB.Query_DocsPAWS.ModelFasc();
                        modelFasc.salvaInserimentoUtenteProfDimFasc(fascicolo.template, fascicolo.systemID);
                    }
                    //Fine profilazione dinamica fascicoli

                    logger.Debug("Fascicolo creato: idFascicolo = " + fascicolo.systemID);
                    logger.Debug("Folder creata: = " + folder.systemID);

                    if (result == ResultCreazioneFascicolo.OK)
                    {
                        retValue = true;
                    }
                }
                catch (FascicoloPresenteException e)
                {
                    retValue  = false;
                    fascicolo = null;
                    result    = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.FASCICOLO_GIA_PRESENTE;

                    logger.Debug(e.Message);
                }
                catch (FormatoFascicolaturaException e)
                {
                    retValue  = false;
                    fascicolo = null;
                    result    = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.FORMATO_FASCICOLATURA_NON_PRESENTE;

                    logger.Debug(e.Message);
                }
                catch (Exception e)
                {
                    //SE LA CREAZIONE DEL FASCICOLO GENERA ERRORE,
                    //SI RILASCIANO RISORSE ALLOCATE E SI EFFETTUA IL ROLLBACK DELLA TRANSAZIONE
                    retValue  = false;
                    fascicolo = null;
                    result    = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.GENERIC_ERROR;

                    logger.Debug(e.Message);
                }

                if (retValue)
                {
                    dbProvider.CommitTransaction();
                }
                else
                {
                    dbProvider.RollbackTransaction();
                }
            }
            logger.Info("END");
            return(retValue);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creazione nuovo fascicolo
        /// </summary>
        /// <param name="classifica"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUfficioReferente"></param>
        /// <returns></returns>
        public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result)
        {
            logger.Info("BEGIN");
            bool retValue = this.ProjectManagerETDOCS.CreateProject(classifica, fascicolo, ruolo, enableUfficioReferente, out result);

            if (retValue)
            {
                retValue = this.ProjectManagerDocumentum.CreateProject(classifica, fascicolo, ruolo, enableUfficioReferente, out result);
            }

            logger.Info("END");
            return(retValue);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Creazione di un nuovo fascicolo
 /// </summary>
 /// <param name="classifica">Nodo di classificazione in cui creare il fascicolo</param>
 /// <param name="fascicolo">Metadati del fascicolo</param>
 /// <param name="ruolo">Ruolo dell'utente che inserisce il fascicolo</param>
 /// <param name="enableUfficioReferente"></param>
 /// <param name="result">Esito dettagliato dell'inserimento del fascicolo</param>
 /// <returns></returns>
 public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result)
 {
     Ruolo[] ruoliSuperiori;
     return(this.CreateProject(classifica, fascicolo, ruolo, enableUfficioReferente, out result, out ruoliSuperiori));
 }
Exemplo n.º 4
0
        /// <summary>
        /// Aggiornamento Acl per il documento
        /// </summary>
        /// <param name="idProfile"></param>

        /// <summary>
        /// Creazione nuovo fascicolo
        /// </summary>
        /// <param name="classifica"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUfficioReferente"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori">
        /// Ruoli superiori cui è stata impostata la visibilità del fascicolo
        /// </param>
        /// <returns></returns>
        public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            result         = ResultCreazioneFascicolo.OK;
            ruoliSuperiori = null;
            return(true);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Creazione di un nuovo fascicolo in DocsPa
        /// </summary>
        /// <remarks>
        ///
        /// PreCondizioni:
        ///     Il fascicolo è stato inserito correttamente in DocsPa
        ///     ed è stato generato un'identificativo univoco
        ///
        /// PostCondizioni:
        ///     Creato un oggetto in Documentum corrispondente all'oggetto
        ///     fascicolo di DocsPa. L'oggetto avrà i metadati del fascicolo
        ///     per la sola consultazione in documentum.
        ///
        /// </remarks>
        /// <param name="classifica"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUfficioReferente"></param>
        /// <returns></returns>
        public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result)
        {
            bool retValue = true;

            //... non fa nulla
            result = ResultCreazioneFascicolo.OK;
            return(retValue);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creazione nuovo fascicolo
        /// </summary>
        /// <param name="classifica"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUfficioReferente"></param>
        /// <param name="result"></param>
        /// <param name="ruoliSuperiori">
        /// Ruoli superiori cui è stata impostata la visibilità del fascicolo
        /// </param>
        /// <returns></returns>
        public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori)
        {
            bool retValue = this.ProjectManagerETDOCS.CreateProject(classifica, fascicolo, ruolo, enableUfficioReferente, out result, out ruoliSuperiori);

            if (retValue)
            {
                retValue = this.ProjectManagerOCS.CreateProject(classifica, fascicolo, ruolo, enableUfficioReferente, out result);
            }

            return(retValue);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creazione di un nuovo fascicolo in DCTM
        /// </summary>
        /// <remarks>
        ///
        /// PreCondizioni:
        ///     Il fascicolo è stato inserito correttamente in DocsPa
        ///     ed è stato generato un'identificativo univoco
        ///
        /// PostCondizioni:
        ///     Creato un oggetto in Documentum corrispondente all'oggetto
        ///     fascicolo di DocsPa. L'oggetto avrà i metadati del fascicolo
        ///     per la sola consultazione in documentum.
        ///
        /// </remarks>
        /// <param name="classifica"></param>
        /// <param name="fascicolo"></param>
        /// <param name="ruolo"></param>
        /// <param name="enableUfficioReferente"></param>
        /// <returns></returns>
        public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result)
        {
            logger.Info("BEGIN");
            bool retValue = false;

            result = ResultCreazioneFascicolo.GENERIC_ERROR;

            CustomServices.AclDefinition aclFascicolo = null;

            try
            {
                //fascicolo.systemID  viene SEMPRE valorizzato da ETDOCS; se così non è --> ERRORE
                if (string.IsNullOrEmpty(fascicolo.systemID))
                {
                    logger.Debug("Errore passaggio dati da ETDOCS.");
                }
                else
                {
                    // Reperimento dell'objectidentity relativo al nodo titolario in cui andrà inserito il fascicolo
                    ObjectIdentity nodoTitolarioIdentity = Dfs4DocsPa.getNodoTitolarioIdentity(fascicolo.idClassificazione);

                    // Reperimento properties del fascicolo procedimentale
                    PropertySet props = new PropertySet();
                    props.Properties.AddRange(Dfs4DocsPa.getFascicoloProcedimentaleProperties(fascicolo));

                    // Creazione delle ACL per il fascicolo
                    aclFascicolo = this.CreateAclFascicolo(fascicolo, ruolo);

                    // Associazione delle ACL al fascicolo da creare
                    AclHelper.setAclObjectProperties(props, aclFascicolo);

                    ObjectIdentity identity   = new ObjectIdentity(DctmConfigurations.GetRepositoryName());
                    DataObject     dataObject = new DataObject(identity, ObjectTypes.FASCICOLO_PROCEDIMENTALE);
                    dataObject.Properties = props;
                    dataObject.Relationships.Add(DfsHelper.createParentFolderRelationship(nodoTitolarioIdentity));

                    DataPackage dataPackage = new DataPackage(dataObject);

                    IObjectService objectService = this.GetServiceInstance <IObjectService>(false);
                    dataPackage = objectService.Create(dataPackage, null);

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

                    if (retValue)
                    {
                        result = ResultCreazioneFascicolo.OK;

                        logger.Debug(string.Format("Documentum.CreateProject: creato fascicolo con id {0}", fascicolo.systemID));
                    }
                }
            }
            catch (Exception ex)
            {
                retValue = false;
                result   = ResultCreazioneFascicolo.GENERIC_ERROR;

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

                if (aclFascicolo != null)
                {
                    // Rimozione ACL fascicolo in caso di errore
                    this.DeleteAcl(aclFascicolo);
                }
            }
            logger.Info("END");
            return(retValue);
        }