Esempio n. 1
0
        private long GetEntidadeDetentoraID(GISADataset.NivelRow nRow)
        {
            Debug.Assert(nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length > 0);

            GISADataset.NivelRow nED = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper;

            while (nED.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length > 0)
            {
                nED = nED.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper;
            }

            return(nED.ID);
        }
Esempio n. 2
0
        public static GISADataset.RelacaoHierarquicaRow GetPrimeiraRelacaoEncontrada(GISADataset.NivelRow nivelRow)
        {
            GISADataset.RelacaoHierarquicaRow[] rhRows = null;
            GISADataset.RelacaoHierarquicaRow   rhRow  = null;
            try
            {
                rhRows = nivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica();
                if (rhRows.Length > 0)
                {
                    return(rhRows[0]);
                }

                rhRows = Nivel.GetSelf(GisaDataSetHelper.GetInstance(), nivelRow);
                if (rhRows.Length == 0)
                {
                    return(null);
                }

                rhRow = rhRows[0];
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                throw;
            }
            return(rhRow);
        }
Esempio n. 3
0
		public static GISADataset.RelacaoHierarquicaRow[] GetParentRelations(GISADataset.NivelRow CurrentNivel, GISADataset.NivelRow UpperNivel, IDbConnection connection)
		{
			try
			{
				NivelRule.Current.LoadNivelParents(UpperNivel.ID, GisaDataSetHelper.GetInstance(), connection);
			}
			catch (Exception ex)
			{
				Trace.WriteLine(ex);
				throw;
			}
			return UpperNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica();
		}
Esempio n. 4
0
		public static bool IsDocumentTopLevel(GISADataset.NivelRow dr)
		{
			if (! dr.TipoNivelRow.IsDocument)
			{
				return false;
			}
			foreach (GISADataset.RelacaoHierarquicaRow nh in dr.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica())
			{
				if (nh.NivelRowByNivelRelacaoHierarquicaUpper.TipoNivelRow.IsDocument)
				{
					return false;
				}
			}
			return true;
		}
Esempio n. 5
0
        // returns the updated NivelUnidadeFisicaCodigoRow considering a new Codigo
        public static GISADataset.NivelUnidadeFisicaCodigoRow GetNewCodigoRow(GISADataset.NivelRow nivelRow, int ano)
        {
            GISADataset.NivelRow ParentEDRow = nivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper;
            DataRow[]            DataRows    = GisaDataSetHelper.GetInstance().NivelUnidadeFisicaCodigo.Select("ID=" + ParentEDRow.ID.ToString() + " AND Ano=" + System.DateTime.Now.Year.ToString());
            GISADataset.NivelUnidadeFisicaCodigoRow codigoRow = null;
            if (DataRows.Length == 0)
            {
                codigoRow = GisaDataSetHelper.GetInstance().NivelUnidadeFisicaCodigo.AddNivelUnidadeFisicaCodigoRow(ParentEDRow, System.DateTime.Now.Year, 1M, new byte[] { }, 0);
            }
            else
            {
                codigoRow          = (GISADataset.NivelUnidadeFisicaCodigoRow)(DataRows[0]);
                codigoRow.Contador = codigoRow.Contador + 1;
            }

            return(codigoRow);
        }
Esempio n. 6
0
        public static void EnsureNivelUpperExists(PersistencyHelper.PreConcArguments args)
        {
            PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments pcArgs = null;
            pcArgs = (PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments)args;

            GISADataset.NivelRow nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + pcArgs.nRowID.ToString())[0]);
            long rhRowIDUpper         = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDUpper;

            if (rhRowIDUpper < 0)
            {
                pcArgs.RHNivelUpperExists = true;
            }
            else
            {
                // antes de obter o código verificar se adição de um novo nível ainda é possível (por razões de concorrência)
                pcArgs.RHNivelUpperExists = NivelRule.Current.isNivelDeleted(rhRowIDUpper, args.tran);
            }

            if (!pcArgs.RHNivelUpperExists)
            {
                GISADataset.RelacaoHierarquicaRow rhRow      = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", pcArgs.rhRowID, pcArgs.rhRowIDUpper))[0]);
                GISADataset.NivelDesignadoRow     ndRow      = (GISADataset.NivelDesignadoRow)(GisaDataSetHelper.GetInstance().NivelDesignado.Select("ID=" + pcArgs.ndRowID.ToString())[0]);
                GISADataset.FRDBaseRow            frdBaseRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + pcArgs.frdBaseID.ToString())[0]);

                System.Data.DataSet tempgisaBackup1 = pcArgs.gisaBackup;
                PersistencyHelper.BackupRow(ref tempgisaBackup1, rhRow);
                pcArgs.gisaBackup = tempgisaBackup1;
                rhRow.RejectChanges();
                System.Data.DataSet tempgisaBackup2 = pcArgs.gisaBackup;
                PersistencyHelper.BackupRow(ref tempgisaBackup2, ndRow);
                pcArgs.gisaBackup = tempgisaBackup2;
                ndRow.RejectChanges();
                System.Data.DataSet tempgisaBackup3 = pcArgs.gisaBackup;
                PersistencyHelper.BackupRow(ref tempgisaBackup3, nRow);
                pcArgs.gisaBackup = tempgisaBackup3;
                nRow.RejectChanges();
                System.Data.DataSet tempgisaBackup4 = pcArgs.gisaBackup;
                PersistencyHelper.BackupRow(ref tempgisaBackup4, frdBaseRow);
                pcArgs.gisaBackup = tempgisaBackup4;
                frdBaseRow.RejectChanges();
                pcArgs.message = "Não foi possível criar a unidade informacional uma" + Environment.NewLine + "vez que a unidade superior foi apagada por outro utilizador.";
            }
        }
Esempio n. 7
0
		//TODO: FUNCAO MANTIDA PARA COMPATIBILIDADE DE CODIGO EXISTENTE, DEVERÁ DESAPARECER, SER UNIFICADA COM A ASSINATURA SEGUINTE, OU SER REFORMULADA ASSIM QUE POSSIVEL
		public static GISADataset.RelacaoHierarquicaRow[] GetParents(GISADataset CurrentDataSet, GISADataset.NivelRow CurrentNivel)
		{

			IDbConnection conn = GisaDataSetHelper.GetConnection();
			try
			{
				conn.Open();
				NivelRule.Current.LoadNivelGrandparents(CurrentNivel.ID, GisaDataSetHelper.GetInstance(), conn);
			}
			finally
			{
				conn.Close();
			}

			GISADataset.RelacaoHierarquicaRow[] Parents = null;
			ArrayList Result = new ArrayList();

			Parents = CurrentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica();
			foreach (GISADataset.RelacaoHierarquicaRow rhRow in Parents)
			{
				Result.AddRange(rhRow.NivelRowByNivelRelacaoHierarquicaUpper.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica());
			}
			return (GISADataset.RelacaoHierarquicaRow[])(Result.ToArray(typeof(GISADataset.RelacaoHierarquicaRow)));
		}
        public void LoadData()
        {
            currentODSimples = new List <ObjDigSimples>();
            docSimplesSemOD  = new List <SubDocumento>();
            var tnrID = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First().IDTipoNivelRelacionado;

            // só é considerado válido um contexto definido por um nivel documental
            if (currentNivel.IDTipoNivel != TipoNivel.DOCUMENTAL)
            {
                mContexto = ObjetoDigitalFedoraHelper.Contexto.nenhum;
                return;
            }

            mContexto = IdentifyViewMode(currentNivel);

            GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
            try
            {
                GisaDataSetHelper.ManageDatasetConstraints(false);

                // carregar a informação da bd consuante o tipo nivel selecionado
                if (tnrID == (long)TipoNivelRelacionado.SD)
                {
                    var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper;
                    DBAbstractDataLayer.DataAccessRules.FedoraRule.Current.LoadObjDigitalData(GisaDataSetHelper.GetInstance(), nUpperRow.ID, nUpperRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First().IDTipoNivelRelacionado, ho.Connection);
                }
                else
                {
                    DBAbstractDataLayer.DataAccessRules.FedoraRule.Current.LoadObjDigitalData(GisaDataSetHelper.GetInstance(), currentNivel.ID, tnrID, ho.Connection);
                }

                GisaDataSetHelper.ManageDatasetConstraints(true);
            }
            catch (Exception e)
            {
                // TODO: apanhar a excepção provocada por uma falha com a comunicação com o servidor
                Trace.WriteLine(e);
                throw;
            }
            finally
            {
                ho.Dispose();
            }

            List <string> pidsParaApagar = new List <string>(); // por algum motivo, no repositório, o objeto composto tem na sua estrutura ods simples que já foram apagados

            var frdRow  = currentNivel.GetFRDBaseRows().Single();
            var imgRows = new List <GISADataset.SFRDImagemRow>();

            imgRows.AddRange(frdRow.GetSFRDImagemRows().Where(r => r.Tipo.Equals(FedoraHelper.typeFedora)));

            if (imgRows.Count == 0)
            {
                if (tnrID == (long)TipoNivelRelacionado.SD) // Identificar, caso exista, o OD Composto no documento/processo do subdocumento
                {
                    var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper;
                    // determinar se o documento/processo tem um OD composto associado
                    var imgRowsUpper = nUpperRow.GetFRDBaseRows().Single().GetSFRDImagemRows().Where(r => r.Tipo.Equals(FedoraHelper.typeFedora)).ToList();

                    if (imgRowsUpper.Count != 1)
                    {
                        return;                          // não existe nenhum OD composto para o OD simples associado ao subdocumento
                    }
                    // o documento/processo tem um OD associado. Determinar se esse OD é composto
                    var odRowUpper = imgRowsUpper[0].GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow;

                    if (odRowUpper.GetObjetoDigitalRelacaoHierarquicaRowsByObjetoDigitalObjetoDigitalRelacaoHierarquicaUpper().Count() > 0)
                    {
                        // o OD é composto
                        currentODComp = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(odRowUpper.pid, null) as ObjDigComposto;
                        currentObjetoDigitalRowComp = odRowUpper;

                        if (currentODComp == null)
                        {
                            return;                        // não se conseguiu obter o OD do servidor...
                        }
                        // clona o próprio e todos os seus simples
                        currentODComp.original = currentODComp.Clone();
                    }
                }
                else if (tnrID == (long)TipoNivelRelacionado.D) // documento/processo sem ODs associados directamente mas com subdocumentos com ODs simples
                {
                    GetSubDocsImgRows(imgRows);
                    GetODRows(imgRows);
                }
            }
            else if (imgRows.Count == 1) // existe 1 OD associado mas não se sabe se é simples ou composto
            {
                var odRow = imgRows[0].GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow;
                var od    = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(odRow.pid, null);

                if (od == null)
                {
                    ObjectNotFound(odRow.pid);
                    return;
                }

                od.publicado = odRow.Publicado;

                if (tnrID == (long)TipoNivelRelacionado.SD) // o OD é garantidamente simples
                {
                    PermissoesHelper.LoadObjDigitalPermissions(currentNivel, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.TrusteeRow);
                    currentObjetoDigitalRow = odRow;
                    currentODSimples        = new List <ObjDigSimples>()
                    {
                        od as ObjDigSimples
                    };

                    var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper;
                    // determinar se o documento/processo tem um OD composto associado
                    var imgRowsUpper = nUpperRow.GetFRDBaseRows().Single().GetSFRDImagemRows().Where(r => r.Tipo.Equals(FedoraHelper.typeFedora)).ToList();

                    if (imgRowsUpper.Count == 1)
                    {
                        // o documento/processo tem um OD associado. Determinar se esse OD é composto
                        var odRowUpper = imgRowsUpper[0].GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow;

                        if (odRowUpper.GetObjetoDigitalRelacaoHierarquicaRowsByObjetoDigitalObjetoDigitalRelacaoHierarquicaUpper().Count() > 0)
                        {
                            // o OD é composto
                            currentODComp = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(odRowUpper.pid, null) as ObjDigComposto;
                            currentObjetoDigitalRowComp = odRowUpper;

                            if (currentODComp == null)
                            {
                                ObjectNotFound(odRowUpper.pid); return;
                            }                                                                      // não se conseguiu obter o OD do servidor...

                            ((ObjDigSimples)od).parentDocumentTitle = nUpperRow.GetNivelDesignadoRows().Single().Designacao;
                            //currentODComp.publicado = currentObjetoDigitalRowComp.Publicado;
                            currentODComp.objSimples[currentODComp.objSimples.FindIndex(obj => obj.pid == od.pid)] = od as ObjDigSimples;

                            // clona o próprio e todos os seus simples
                            currentODComp.original = currentODComp.Clone();
                        }
                    }
                }
                else if (tnrID == (long)TipoNivelRelacionado.D) // se a UI selecionada for um documento/processo também tem que se ter em conta os OD simples de subdocumentos
                {
                    if (od.GetType() == typeof(ObjDigSimples))
                    {
                        currentObjetoDigitalRow = imgRows.Single().GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow;
                        GetSubDocsImgRows(imgRows);
                        GetODRows(imgRows);
                    }
                    else
                    {
                        currentODComp = od as ObjDigComposto;
                        currentObjetoDigitalRowComp = odRow;
                        currentODComp.objSimples.ForEach(odSimples =>
                        {
                            var odSimplesRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().SingleOrDefault(r => r.pid.Equals(odSimples.pid));
                            if (odSimplesRow != null)
                            {
                                odSimples.guiorder  = odSimplesRow.GUIOrder;
                                odSimples.publicado = odSimplesRow.Publicado;
                            }
                            else if (odSimples.serverState == ServerState.Deleted)
                            {
                                pidsParaApagar.Add(odSimples.pid);
                            }
                        });

                        if (pidsParaApagar.Count > 0)
                        {
                            FedoraHelper.FixObjetoDigital(ref currentODComp, pidsParaApagar, frdRow, ref currentObjetoDigitalRowComp, ref currentObjetoDigitalRow);
                        }
                    }
                }
                else
                {
                    if (od.GetType() == typeof(ObjDigSimples))
                    {
                        currentODSimples = new List <ObjDigSimples>()
                        {
                            od as ObjDigSimples
                        };
                        currentObjetoDigitalRow = odRow;
                    }
                    else
                    {
                        currentODComp = od as ObjDigComposto;
                        currentObjetoDigitalRowComp = odRow;
                    }
                }

                od.original = od.Clone();
            }
            else
            {
                // caso onde estão associados vários simples soltos e garantidamente a UI selecionada não é um subdocumento (um subdocumento só pode ter um OD simples associado)
                Trace.Assert(tnrID != (long)TipoNivelRelacionado.SD);
                GetSubDocsImgRows(imgRows);
                GetODRows(imgRows);
            }

            // preencher o estado publicado nos objetos digitais
            if (currentODComp != null)
            {
                var odRow = default(GISADataset.ObjetoDigitalRow);
                currentODComp.objSimples.ToList().ForEach(odSimples =>
                {
                    odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().SingleOrDefault(r => r.pid.Equals(odSimples.pid));
                    odSimples.publicado = odRow.Publicado;
                });

                odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.pid.Equals(currentODComp.pid));
                currentODComp.publicado = odRow.Publicado;
            }
            else
            {
                currentODSimples.ToList().ForEach(odSimples =>
                {
                    var odRow           = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.pid.Equals(odSimples.pid));
                    odSimples.publicado = odRow.Publicado;
                });
            }

            // obter documentos simples sem objeto digital para efeitos de ordenação
            GetSubDocsSemODs();
        }
        private void paginatedList_DeeperLevelSelection(object sender, DeeperLevelSelectionEventArgs e)
        {
            // prever a situação onde o utilizador faz duplo click dentro da listview mas sem ser sobre um item dessa lista;
            // nesta situação pretende-se que o contexto seja perdido
            if (e.ItemToBeSelected.ListView == null)
            {
                lstVwPaginated_BeforeNewSelection(sender, new BeforeNewSelectionEventArgs(new ListViewItem(), true));

                return;
            }

            PermissoesHelper.UpdateNivelPermissions((GISADataset.NivelRow)e.ItemToBeSelected.Tag, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.ID);
            if (!PermissoesHelper.AllowExpand)
            {
                MessageBox.Show("Não tem permissão para visualizar os sub-níveis do nível documental selecionado.", "Permissões", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                e.SelectionChange = false;
            }
            else
            {
                if (e.SelectionChange && !(((GISADataset.NivelRow)e.ItemToBeSelected.Tag).RowState == DataRowState.Detached))
                {
                    GISADataset.NivelRow dr = (GISADataset.NivelRow)e.ItemToBeSelected.Tag;

                    // determinar se o nivel actual é um nivel de topo e se está directamente abaixo do produtor de contexto


                    var firstBreadCrumb = BreadCrumbsPath1.Path[0];
                    var rhRow           = dr.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First();

                    if (rhRow.NivelRowByNivelRelacaoHierarquica.IDTipoNivel == TipoNivel.DOCUMENTAL && rhRow.NivelRowByNivelRelacaoHierarquicaUpper.IDTipoNivel == TipoNivel.ESTRUTURAL &&
                        dr.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().SingleOrDefault(r => r.IDUpper == firstBreadCrumb.idNivel) == null)
                    {
                        // o nivel seleccionado é um nivel de topo e não está directamente abaixo do produtor usado como contexto na vista documental

                        BreadCrumbsPath1.ResetBreadCrumbsPath();

                        var ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                        try
                        {
                            NivelRule.Current.LoadNivelLocalizacao(GisaDataSetHelper.GetInstance(), dr.ID, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.ID, ho.Connection);
                        }
                        catch (Exception ex) { Trace.WriteLine(ex.ToString()); throw; }
                        finally { ho.Dispose(); }

                        // identificar os produtores intermédios até chegar ao nivel documental e acrescentá-los na BreadCrumbsPath (método de pesquisa em profundidade: por cada nível identificam-se os níveis hierarquicamente inferiores e dentro desse conjunto e a partir do primeiro, encontram-se os seus descendentes)
                        rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast <GISADataset.RelacaoHierarquicaRow>().Single(r => r.ID == firstBreadCrumb.idNivel && r.IDUpper == firstBreadCrumb.idUpperNivel);

                        var q = new Stack <GISADataset.RelacaoHierarquicaRow>();
                        rhRow.NivelRowByNivelRelacaoHierarquica.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquicaUpper().Where(r => r.IDTipoNivelRelacionado < 7).ToList().ForEach(r => q.Push(r));

                        var path        = new LinkedList <GISADataset.RelacaoHierarquicaRow>();
                        var currentNode = path.AddFirst(rhRow);

                        while (q.Count > 0)
                        {
                            rhRow = q.Pop();

                            // se o caminho seguido não levar ao documento pretendido, deve-se retirar todos os nós até àquele que representa o IDUpper de rhRow
                            while (path.Last.Value.ID != rhRow.IDUpper)
                            {
                                path.RemoveLast();
                                currentNode = path.Last;
                            }

                            if (rhRow.ID != dr.ID)
                            {
                                var rhRows = rhRow.NivelRowByNivelRelacaoHierarquica.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquicaUpper()
                                             .Where(r => r.IDTipoNivelRelacionado < 7 || (r.IDTipoNivelRelacionado >= 7 && r.ID == dr.ID)).ToList();

                                if (rhRows.Count > 0)
                                {
                                    currentNode = path.AddAfter(currentNode, rhRow);
                                    rhRows.ForEach(r => q.Push(r));
                                }
                            }
                            else
                            {
                                path.AddAfter(currentNode, rhRow);
                                break;
                            }
                        }

                        path.ToList().ForEach(rh =>
                        {
                            var imgIndex = SharedResourcesOld.CurrentSharedResources.NivelImageBase(System.Convert.ToInt32(rh.TipoNivelRelacionadoRow.GUIOrder));
                            BreadCrumbsPath1.AddBreadCrumb(GISA.Model.Nivel.GetDesignacao(rh.NivelRowByNivelRelacaoHierarquica), rh.ID, rh.IDUpper, imgIndex);
                        });
                    }
                    else
                    {
                        // acrescentar o nivel documental na BreadCrumbsPath
                        int imageIndex = 0;
                        imageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageBase(System.Convert.ToInt32(dr.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.GUIOrder));
                        BreadCrumbsPath1.AddBreadCrumb(GISA.Model.Nivel.GetDesignacao(dr), dr.ID, BreadCrumbsPath1.getBreadCrumbsPathContextID, imageIndex);
                    }

                    ClearFilter();
                    ReloadList();

                    // Quando não existem elementos a apresentar na lista deve-se forçar uma mudança de contexto para garantir que os paineis de descrição são gravados
                    if (this.Items.Count == 0)
                    {
                        lstVwPaginated_BeforeNewSelection(sender, new BeforeNewSelectionEventArgs(new ListViewItem(), true));
                    }
                    else if (this.Items.Count > 1)
                    {
                        lstVwPaginated_BeforeNewSelection(sender, new BeforeNewSelectionEventArgs(new ListViewItem(), true));
                        PermissoesHelper.UpdateNivelPermissions((GISADataset.NivelRow)e.ItemToBeSelected.Tag, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.ID);
                        if (UpdateToolBarButtonsEvent != null)
                        {
                            UpdateToolBarButtonsEvent(new EventArgs());
                        }
                    }

                    e.SelectionChange = true;
                }
                else
                {
                    e.SelectionChange = false;
                }
            }
        }
Esempio n. 10
0
        void nivelNavigator1_BeforeListItemSelection(object sender, BeforeNewSelectionEventArgs e)
        {
            selectedDocument = e.ItemToBeSelected.Tag as GISADataset.NivelRow;

            btnOk.Enabled = ((selectedDocument != null) && SelectableType.Contains(selectedDocument.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado));
        }
Esempio n. 11
0
        public override void UpdateToolBarButtons(ListViewItem item)
        {
            base.UpdateToolBarButtons(item);

            //Obter selecção actual
            GISATreeNode selectedNode = null;

            GISADataset.NivelRow nRow                  = null;
            GISADataset.NivelRow nUpperRow             = null;
            GISADataset.RelacaoHierarquicaRow   rhRow  = null;
            GISADataset.TipoNivelRelacionadoRow tnrRow = null;
            // Estas variaveis identificam o contexto definido pelo breadcrumbspath da vista documental
            // (só são usadas quando a vista actual é a documental)
            GISADataset.NivelRow nRowBC                  = null;
            GISADataset.NivelRow nUpperRowBC             = null;
            GISADataset.RelacaoHierarquicaRow   rhRowBC  = null;
            GISADataset.TipoNivelRelacionadoRow tnrRowBC = null;

            if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural)
            {
                //vista estrutural
                if (this.nivelNavigator1.EPFilterMode) // modo filtro
                {
                    if (item != null && item.ListView != null && !(((GISADataset.NivelRow)item.Tag).RowState == DataRowState.Detached))
                    {
                        //contexto da listview
                        nRow = (GISADataset.NivelRow)item.Tag;
                    }
                }
                else //modo árvore
                {
                    //vista estrutural
                    selectedNode = (GISATreeNode)this.nivelNavigator1.SelectedNode;
                    if (selectedNode != null && !(selectedNode.NivelRow.RowState == DataRowState.Detached))
                    {
                        nRow      = selectedNode.NivelRow;
                        nUpperRow = selectedNode.NivelUpperRow;
                    }
                }
            }
            else
            {
                //vista documental
                if (item != null && item.ListView != null && !(((GISADataset.NivelRow)item.Tag).RowState == DataRowState.Detached))
                {
                    //contexto da listview
                    nRow      = (GISADataset.NivelRow)item.Tag;
                    nUpperRow = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper;
                }

                //contexto do breadcrumbspath
                nRowBC      = GisaDataSetHelper.GetInstance().Nivel.Cast <GISADataset.NivelRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == this.nivelNavigator1.ContextBreadCrumbsPathID);
                nUpperRowBC = GisaDataSetHelper.GetInstance().Nivel.Cast <GISADataset.NivelRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == this.nivelNavigator1.ContextBreadCrumbsPathIDUpper);
            }

            if (nRow != null && !(nRow.RowState == DataRowState.Detached) && nUpperRow == null)
            {
                tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(null);
            }
            else if (nUpperRow != null && !(nUpperRow.RowState == DataRowState.Detached) && nRow != null && !(nRow.RowState == DataRowState.Detached))
            {
                if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural)
                {
                    rhRow = selectedNode.RelacaoHierarquicaRow;
                    // excluimos desta forma as relacoes hirarquicas entretanto eliminadas (as que seriam NULL mas cujo nó respectivo teria um NivelUpper)
                    if (selectedNode.NivelUpperRow != null && rhRow != null)
                    {
                        tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow);
                    }
                }
                else
                {
                    if (item != null && item.ListView != null)
                    {
                        DataRow[] rhRows = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID.ToString(), nUpperRow.ID.ToString()));
                        // A relação pode ter desaparecido por algum motivo (ie, concorrencia).
                        if (rhRows.Length > 0)
                        {
                            rhRow  = (GISADataset.RelacaoHierarquicaRow)(rhRows[0]);
                            tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow);
                        }
                    }
                    if (nRowBC != null && nUpperRowBC != null)
                    {
                        DataRow[] rhRowBCs = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString()));
                        // A relação pode ter desaparecido por algum motivo (ie, concorrencia).
                        if (rhRowBCs.Length > 0)
                        {
                            rhRowBC  = (GISADataset.RelacaoHierarquicaRow)(rhRowBCs[0]);
                            tnrRowBC = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRowBC);
                        }
                    }
                }
            }

            if (nRow == null && this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Documental && nRowBC != null && nUpperRowBC != null)
            {
                GISADataset.RelacaoHierarquicaRow[] bcRHRow = (GISADataset.RelacaoHierarquicaRow[])(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString())));
                if (bcRHRow.Length > 0)
                {
                    if (bcRHRow[0].IDTipoNivelRelacionado < TipoNivelRelacionado.SD)
                    {
                        ToolBarButtonCreateAny.Enabled = AllowCreate && PermissoesHelper.AllowCreate;
                    }
                    else
                    {
                        ToolBarButtonCreateAny.Enabled = false;
                    }
                    rhRowBC  = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString()))[0]);
                    tnrRowBC = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRowBC);
                    ConfigureContextMenu(nRowBC, nUpperRowBC, tnrRowBC, tnrRowBC);
                    ToolBarButtonEdit.Enabled   = false;
                    ToolBarButtonRemove.Enabled = false;
                }
                else
                {
                    ToolBarButtonCreateAny.Enabled = false;
                    ToolBarButtonPaste.Enabled     = false;
                }
            }
            else if (TipoNivel.isNivelDocumental(nRow))
            {
                ToolBarButtonCreateAny.Enabled = AllowCreate && PermissoesHelper.AllowCreate;
                ConfigureContextMenu(nRowBC, nUpperRowBC, tnrRow, tnrRowBC);
                if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.D)
                {
                    ToolBarButtonEdit.Enabled   = AllowEdit && PermissoesHelper.AllowEdit;
                    ToolBarButtonRemove.Enabled = NiveisHelper.isRemovable(nRow, nUpperRow, false) && AllowDelete && PermissoesHelper.AllowDelete;
                }
                else if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SD)
                {
                    ToolBarButtonEdit.Enabled   = AllowEdit && PermissoesHelper.AllowEdit;
                    ToolBarButtonRemove.Enabled = NiveisHelper.isRemovable(nRow, nUpperRow, false) && AllowDelete && PermissoesHelper.AllowDelete && PermissoesHelper.ObjDigAllowWrite;
                }
                else
                {
                    ToolBarButtonEdit.Enabled   = false;
                    ToolBarButtonRemove.Enabled = false;
                }
            }
            else
            {
                ToolBarButtonCreateAny.Enabled = false;
                ToolBarButtonEdit.Enabled      = false;
                ToolBarButtonRemove.Enabled    = false;
            }
        }
Esempio n. 12
0
		public virtual bool isShowable(GISADataset.NivelRow nivel, GISADataset.NivelRow nivelUpper)
		{
			return (nivelUpper != null && nivelUpper.TipoNivelRow.IsStructure) || nivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.ID < TipoNivelRelacionado.D;
		}
Esempio n. 13
0
        private void SeleccaoActual(out GISADataset.NivelRow NivelRow, out GISADataset.TipoNivelRelacionadoRow TnrRow)
        {
            //Obter selecção actual
            GISATreeNode selectedNode = null;

            GISADataset.NivelRow nRow                  = null;
            GISADataset.NivelRow nUpperRow             = null;
            GISADataset.RelacaoHierarquicaRow   rhRow  = null;
            GISADataset.TipoNivelRelacionadoRow tnrRow = null;

            // Estas variaveis identificam o contexto definido pelo breadcrumbspath da vista documental
            // (só são usadas quando a vista actual é a documental)
            GISADataset.NivelRow nRowBC                  = null;
            GISADataset.NivelRow nUpperRowBC             = null;
            GISADataset.RelacaoHierarquicaRow   rhRowBC  = null;
            GISADataset.TipoNivelRelacionadoRow tnrRowBC = null;

            if (this.mPanelToggleState == ToggleState.Estrutural)
            {
                //vista estrutural
                if (mEPFilterMode)
                {
                    var selItem = this.nivelEstruturalList1.SelectedItems.FirstOrDefault();
                    if (selItem != null)
                    {
                        nRow = selItem.Tag as GISADataset.NivelRow;
                    }
                }
                else
                {
                    selectedNode = (GISATreeNode)this.controloNivelListEstrutural1.SelectedNode;
                    if (selectedNode != null && !(selectedNode.NivelRow.RowState == DataRowState.Detached))
                    {
                        nRow      = selectedNode.NivelRow;
                        nUpperRow = selectedNode.NivelUpperRow;
                    }
                }
            }
            else
            {
                //vista documental
                if (!(this.nivelDocumentalListNavigator1.SelectedItems.Count == 0))
                {
                    nRow = (GISADataset.NivelRow)(this.nivelDocumentalListNavigator1.SelectedItems[0].Tag);
                }

                if (nRow != null && !(nRow.RowState == DataRowState.Detached))
                {
                    nUpperRow = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper;
                }
            }

            if (nRow != null && !(nRow.RowState == DataRowState.Detached) && nUpperRow == null)
            {
                if (this.mPanelToggleState == ToggleState.Estrutural && this.mEPFilterMode)
                {
                    rhRow  = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().FirstOrDefault();
                    tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow);
                }
                else
                {
                    tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(null);
                }
            }
            else if (nUpperRow != null && !(nUpperRow.RowState == DataRowState.Detached) && nRow != null && !(nRow.RowState == DataRowState.Detached))
            {
                if (this.mPanelToggleState == ToggleState.Estrutural)
                {
                    rhRow = selectedNode.RelacaoHierarquicaRow;
                    // excluimos desta forma as relacoes hirarquicas entretanto eliminadas (as que seriam NULL mas cujo nó respectivo teria um NivelUpper)
                    if (selectedNode.NivelUpperRow != null && rhRow != null)
                    {
                        tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow);
                    }
                }
                else
                {
                    //Documental
                    if (nRow != null)
                    {
                        DataRow[] rhRows = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID.ToString(), nUpperRow.ID.ToString()));
                        // A relação pode ter desaparecido por algum motivo (ie, concorrencia).
                        if (rhRows.Length > 0)
                        {
                            rhRow  = (GISADataset.RelacaoHierarquicaRow)(rhRows[0]);
                            tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow);
                        }
                    }
                    if (nRowBC != null && nUpperRowBC != null)
                    {
                        DataRow[] rhRowBCs = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString()));
                        // A relação pode ter desaparecido por algum motivo (ie, concorrencia).
                        if (rhRowBCs.Length > 0)
                        {
                            rhRowBC  = (GISADataset.RelacaoHierarquicaRow)(rhRowBCs[0]);
                            tnrRowBC = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRowBC);
                        }
                    }
                }
            }

            NivelRow = nRow;
            TnrRow   = tnrRow;
        }
Esempio n. 14
0
        private void RemoveNivel()
        {
            GISADataset.NivelRow nUpperRow          = null;
            GISADataset.RelacaoHierarquicaRow rhRow = null;
            GISADataset.NivelRow nRow = null;


            nRow = this.nivelNavigator1.SelectedNivel;
            // Verificar se a relacção hierárquica ainda é a mesma apresentada na interface (se o
            // utilizador estiver a ver a lista que contem o nível a apagar e entretanto outro utilizador
            // o ter colocado noutro ponto da árvore, a relação hierárquica presente em memória deixa
            // de corresponder com aquela que é apresentada na interface quando esse nível é selecionado;
            // quando o nível é selecionado a informação no DataSet de trabalho é actualizado mas não
            // actualiza a interface)
            if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID, this.nivelNavigator1.ContextBreadCrumbsPathID)).Length > 0)
            {
                rhRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID, this.nivelNavigator1.ContextBreadCrumbsPathID))[0]);
            }
            else
            {
                MessageBox.Show("Esta operação não pode ser concluída pelo facto de a localização na estrutura " + System.Environment.NewLine + "do nível selecionado ter sido alterada por outro utilizador.", "Eliminar Nível", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            nUpperRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select(string.Format("ID={0}", this.nivelNavigator1.ContextBreadCrumbsPathID))[0]);

            var assocODs = FedoraHelper.GetAssociatedODsDetailsMsg(nRow.ID);

            if (assocODs.Length > 0)
            {
                FormDeletionReport form = new FormDeletionReport();
                form.Text         = "Eliminação de unidade de informação";
                form.Interrogacao = "A unidade de informação selecionada tem objeto(s) digital(ais) associado(s). " + System.Environment.NewLine +
                                    "Se eliminar esta unidade de informação, os objeto(s) digital(ais) " + System.Environment.NewLine + " também serão eliminado(s)." + System.Environment.NewLine +
                                    "Pretende continuar?";
                form.Detalhes = assocODs;

                if (form.ShowDialog() == DialogResult.Cancel)
                {
                    return;
                }
            }
            else if (MessageBox.Show("Tem a certeza que deseja eliminar o nível selecionado?", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
            {
                return;
            }

            if (!FedoraHelper.CanDeleteODsAssociated2UI(nRow, out objetoDigital))
            {
                return;
            }

            Trace.WriteLine("A apagar nível...");

            if (TipoNivel.isNivelDocumental(nRow) && TipoNivel.isNivelOrganico(nUpperRow))
            {
                // Verificar que existem várias relações hierárquicas deste
                // nível documental a entidades produtoras superiores. Nesse
                // caso deverá ser removida a relação, caso contrário, se não
                // existirem subníveis documentais, será eliminado o próprio
                // nível(documental)
                int numRHs = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length;
                if (numRHs > 1)
                {
                    if (MessageBox.Show(
                            "Por favor tenha em atenção que são vários os produtores deste " + System.Environment.NewLine +
                            "nível documental. O nível documental propriamente dito não " + System.Environment.NewLine +
                            "será eliminado, apenas a sua relação ao nível orgânico " + System.Environment.NewLine +
                            "superior o será.", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
                    {
                        return;
                    }

                    ((frmMain)TopLevelControl).EnterWaitMode();

                    CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                    PersistencyHelper.canDeleteRHRowPreConcArguments args = new PersistencyHelper.canDeleteRHRowPreConcArguments();
                    args.nRowID       = nRow.ID;
                    args.nUpperRowID  = nUpperRow.ID;
                    args.rhRowID      = rhRow.ID;
                    args.rhRowIDUpper = rhRow.IDUpper;
                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, args);
                    PersistencyHelper.cleanDeletedData(PersistencyHelper.determinaNuvem("RelacaoHierarquica"));
                    if (args.deleteSuccessful)
                    {
                        if (successfulSave == PersistencyHelper.SaveResult.successful)
                        {
                            List <string> IDNiveis = new List <string>();
                            IDNiveis.Add(args.nRowID.ToString());
                            GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                        }
                        this.nivelNavigator1.RemoveSelectedLVItem();
                    }
                    else
                    {
                        MessageBox.Show(args.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                    ((frmMain)TopLevelControl).LeaveWaitMode();
                }
                else if (numRHs == 1)
                {
                    // Verificar que não existem subníveis documentais
                    int numSubRHs = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("IDUpper={0}", nRow.ID)).Length;
                    if (numSubRHs > 0)
                    {
                        MessageBox.Show("Só é possível eliminar os níveis que não tenham outros directamente associados", "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        if (MessageBox.Show(
                                "Por favor tenha em atenção que este nível documental é produzido" + System.Environment.NewLine +
                                "por apenas uma entidade. Ao remover esta relação será perdida " + System.Environment.NewLine +
                                "não só a relação como o nível documental propriamente dito.", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
                        {
                            return;
                        }

                        ((frmMain)TopLevelControl).EnterWaitMode();

                        CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                        PersistencyHelper.canDeleteRHRowPreConcArguments argsPca = new PersistencyHelper.canDeleteRHRowPreConcArguments();
                        argsPca.nRowID       = nRow.ID;
                        argsPca.nUpperRowID  = nUpperRow.ID;
                        argsPca.rhRowID      = 0;
                        argsPca.rhRowIDUpper = 0;
                        PersistencyHelper.DeleteIDXPreSaveArguments argsPsa = new PersistencyHelper.DeleteIDXPreSaveArguments();
                        argsPsa.ID = nRow.ID;

                        // actualizar objecto digital caso exista
                        var preTransactionAction = new PreTransactionAction();
                        var args = new PersistencyHelper.FedoraIngestPreTransactionArguments();
                        preTransactionAction.args = args;

                        preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
                        {
                            bool   ingestSuccess = true;
                            string msg           = null;

                            var odsToIngest = FedoraHelper.DeleteObjDigital(nRow);
                            odsToIngest.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg));

                            preTransactionArgs.cancelAction = !ingestSuccess;
                            preTransactionArgs.message      = msg;
                        };

                        PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, argsPca, Nivel.DeleteNivelXInDataBase, argsPsa, preTransactionAction);
                        if (argsPca.deleteSuccessful)
                        {
                            if (successfulSave == PersistencyHelper.SaveResult.successful)
                            {
                                List <string> IDNiveis = new List <string>();
                                IDNiveis.Add(nRow.ID.ToString());
                                GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                                GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                            }
                            this.nivelNavigator1.RemoveSelectedLVItem();
                        }
                        else
                        {
                            // se o nível a eliminar se tratar de uma série ou documento solto mas que
                            // por motivos de conflito de concorrência não foi possível executar,
                            // o refrescamento dos botões é feito tendo como o contexto o próprio
                            // nível que se pretendeu eliminar para desta forma o estado dos mesmos
                            // estar correcta (caso contrário o estado dos botões referir-se-ia a
                            // não haver qualquer item selecionado
                            MessageBox.Show(argsPca.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            UpdateToolBarButtons(this.nivelNavigator1.SelectedItems[0]);
                        }
                        PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase"), PersistencyHelper.determinaNuvem("ObjetoDigital") }));

                        ((frmMain)TopLevelControl).LeaveWaitMode();
                    }
                }
                else
                {
                    Debug.Assert(false, "Should never happen. There must be a relation with an upper Nivel.");
                }
            }
            else
            {
                // Entre todos os outros tipos de nível proceder normalmente
                if ((nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.D ||
                     nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.SD) &&
                    NiveisHelper.NivelFoiMovimentado(nRow.ID))
                {
                    if (MessageBox.Show(
                            "Por favor tenha em atenção que este nível documental já foi " + System.Environment.NewLine +
                            "requisitado/devolvido. Ao remover nível documental serão perdidos " + System.Environment.NewLine +
                            "todos os seus registos referentes a requisições e devoluções.", "Eliminação de nível documental", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
                    {
                        return;
                    }
                }

                ((frmMain)TopLevelControl).EnterWaitMode();

                CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                PersistencyHelper.canDeleteRHRowPreConcArguments argsPca = new PersistencyHelper.canDeleteRHRowPreConcArguments();
                argsPca.nRowID       = nRow.ID;
                argsPca.nUpperRowID  = nUpperRow.ID;
                argsPca.rhRowID      = 0;
                argsPca.rhRowIDUpper = 0;
                PersistencyHelper.DeleteIDXPreSaveArguments argsPsa = new PersistencyHelper.DeleteIDXPreSaveArguments();
                argsPsa.ID = nRow.ID;

                // actualizar objecto digital caso exista
                var preTransactionAction = new PreTransactionAction();
                var args = new PersistencyHelper.FedoraIngestPreTransactionArguments();
                preTransactionAction.args = args;

                preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
                {
                    bool   ingestSuccess = true;
                    string msg           = null;

                    var odsToIngest = FedoraHelper.DeleteObjDigital(nRow);
                    odsToIngest.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg));

                    preTransactionArgs.cancelAction = !ingestSuccess;
                    preTransactionArgs.message      = msg;
                };

                PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, argsPca, Nivel.DeleteNivelXInDataBase, argsPsa, preTransactionAction);
                PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase") }));
                if (argsPca.deleteSuccessful)
                {
                    if (successfulSave == PersistencyHelper.SaveResult.successful)
                    {
                        List <string> IDNiveis = new List <string>();
                        IDNiveis.Add(argsPsa.ID.ToString());
                        GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                        if (nRow.RowState == DataRowState.Detached)
                        {
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(argsPsa.ID);
                        }
                        else
                        {
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                        }

                        this.nivelNavigator1.RemoveSelectedLVItem();
                    }
                }
                else
                {
                    MessageBox.Show(argsPca.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                ((frmMain)TopLevelControl).LeaveWaitMode();
            }

            UpdateToolBarButtons();
        }
Esempio n. 15
0
        private void AcceptItem(ListViewItem item)
        {
            GISADataset.NivelRow nRow = (GISADataset.NivelRow)(((ListViewItem)item).Tag);

            LoadNivelDocumental(nRow.ID);

            // validar a associação: só se pode associar documentos e subdocumentos
            if (!(nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.D ||
                  nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.SD))
            {
                MessageBox.Show("Só é permitido associar documentos e subdocumentos.", "Requisição/Devolução de documentos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            GISADataset.DocumentosMovimentadosRow[] docMovRows = (GISADataset.DocumentosMovimentadosRow[])
                                                                     (GisaDataSetHelper.GetInstance().DocumentosMovimentados.Select(string.Format("IDMovimento={0} AND IDNivel={1}", CurrentMovimento.ID, nRow.ID)));

            // aceitar o drop apenas se se tratar de um Nivel ainda não associado
            if (docMovRows.Length == 0)
            {
                MovimentoRule.DocumentoMovimentado dm = new MovimentoRule.DocumentoMovimentado();

                GISADataset.DocumentosMovimentadosRow[] docMovDelRows = (GISADataset.DocumentosMovimentadosRow[])
                                                                            (GisaDataSetHelper.GetInstance().DocumentosMovimentados.Select(string.Format("IDMovimento={0} AND IDNivel={1}", CurrentMovimento.ID, nRow.ID), "", DataViewRowState.Deleted));

                string nCod = GetCodigoCompleto(item);

                if (docMovDelRows.Length > 0)
                {
                    if (docMovDelRows[0].NivelRow.GetFRDBaseRows().Length > 0 &&
                        docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows().Length > 0)
                    {
                        dm.AnoFim = GisaDataSetHelper.GetDBNullableText(docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimAno");
                        dm.MesFim = GisaDataSetHelper.GetDBNullableText(docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimMes");
                        dm.DiaFim = GisaDataSetHelper.GetDBNullableText(docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimDia");

                        dm.AnoInicio = GisaDataSetHelper.GetDBNullableText(docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "InicioAno");
                        dm.MesInicio = GisaDataSetHelper.GetDBNullableText(docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "InicioMes");
                        dm.DiaInicio = GisaDataSetHelper.GetDBNullableText(docMovDelRows[0].NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimDia");
                    }

                    dm.CodigoCompleto = nCod;
                    dm.NivelDescricao = docMovDelRows[0].NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.Designacao;
                    dm.IDNivel        = docMovDelRows[0].NivelRow.ID;
                    dm.Designacao     = docMovDelRows[0].NivelRow.GetNivelDesignadoRows()[0].Designacao;

                    docMovDelRows[0].RejectChanges();
                }
                else
                {
                    GISADataset.DocumentosMovimentadosRow newDocMovRow =
                        GisaDataSetHelper.GetInstance().DocumentosMovimentados.NewDocumentosMovimentadosRow();

                    newDocMovRow.NivelRow     = nRow;
                    newDocMovRow.MovimentoRow = CurrentMovimento;
                    newDocMovRow.Versao       = new byte[] { };

                    GisaDataSetHelper.GetInstance().DocumentosMovimentados.AddDocumentosMovimentadosRow(newDocMovRow);

                    if (newDocMovRow.NivelRow.GetFRDBaseRows().Length > 0 &&
                        newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows().Length > 0)
                    {
                        dm.AnoFim = GisaDataSetHelper.GetDBNullableText(newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimAno");
                        dm.MesFim = GisaDataSetHelper.GetDBNullableText(newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimMes");
                        dm.DiaFim = GisaDataSetHelper.GetDBNullableText(newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimDia");

                        dm.AnoInicio = GisaDataSetHelper.GetDBNullableText(newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "InicioAno");
                        dm.MesInicio = GisaDataSetHelper.GetDBNullableText(newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "InicioMes");
                        dm.DiaInicio = GisaDataSetHelper.GetDBNullableText(newDocMovRow.NivelRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0], "FimDia");
                    }

                    dm.CodigoCompleto = nCod;
                    dm.NivelDescricao = newDocMovRow.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.Designacao;
                    dm.IDNivel        = newDocMovRow.NivelRow.ID;
                    dm.Designacao     = newDocMovRow.NivelRow.GetNivelDesignadoRows()[0].Designacao;
                }

                ListViewItem newItem = this.DmToItem(dm);
                this.lstVwNiveisAssoc.Items.Insert(0, newItem);
                newItem.EnsureVisible();
            }
        }
Esempio n. 16
0
 public override void UpdateToolBarButtons(ListViewItem item)
 {
     if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural)
     {
         //vista estrutural
         GISADataset.NivelRow nRow = null;
         GISADataset.TipoNivelRelacionadoRow tnrRow = null;
         if (this.nivelNavigator1.EPFilterMode) // modo filtro
         {
             if (item != null && item.ListView != null && !(((GISADataset.NivelRow)item.Tag).RowState == DataRowState.Detached))
             {
                 //contexto da listview
                 nRow = (GISADataset.NivelRow)item.Tag;
             }
             if (nRow != null && !(nRow.RowState == DataRowState.Detached))
             {
                 tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().FirstOrDefault());
             }
         }
         this.ToolBarButtonToggleEstruturaSeries.Enabled = this.nivelNavigator1.isTogglable(nRow, tnrRow) && PermissoesHelper.AllowExpand;
     }
     else
     {
         this.ToolBarButtonToggleEstruturaSeries.Enabled = true;
     }
     SetButtonFiltroState();
 }
Esempio n. 17
0
        // Trata a criação de novos níveis e respectivas relações. Caso se trate
        // de um nível orgânico (estrutural e que esteja associado a uma EP) o
        // nível correspondente deverá já existir e não será por isso criado,
        // será criada apenas a relação.
        private bool handleNewNivel(Form frm, GISADataset.NivelRow parentNivelRow, GISADataset.TipoNivelRelacionadoRow tnrRow)
        {
            frm.Text = "Criar " + tnrRow.Designacao;

            bool successfulSave = true;

            switch (frm.ShowDialog())
            {
            case DialogResult.OK:

                Trace.WriteLine("A criar nível...");

                long           click = DateTime.Now.Ticks;
                string         designacaoUFAssociada = string.Empty;
                PostSaveAction postSaveAction        = null;
                var            nRow   = GisaDataSetHelper.GetInstance().Nivel.AddNivelRow(tnrRow.TipoNivelRow, ((FormAddNivel)frm).txtCodigo.Text.Trim(), "NVL", new byte[] { }, 0);
                var            ndRow  = GisaDataSetHelper.GetInstance().NivelDesignado.AddNivelDesignadoRow(nRow, ((FormAddNivel)frm).txtDesignacao.Text.Trim(), new byte[] { }, 0);
                var            frdRow = GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(nRow, (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoFRDBase.FRDOIRecolha))[0]), "", "", new byte[] { }, 0);
                var            rhRow  = GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(nRow, parentNivelRow, tnrRow, null, null, null, null, null, null, null, new byte[] { }, 0);

                //valores por omissão
                var globalConfig = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single();
                if (globalConfig.ApplyDefaultValues)
                {
                    var sfrdcaRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso
                                    .AddSFRDCondicaoDeAcessoRow(frdRow, "", globalConfig.IsCondicaoDeAcessoNull() ? "" : globalConfig.CondicaoDeAcesso,
                                                                globalConfig.IsCondicaoDeReproducaoNull() ? "" : globalConfig.CondicaoDeReproducao, "", new byte[] {}, 0);

                    foreach (GISADataset.ConfigLinguaRow r in globalConfig.GetConfigLinguaRows())
                    {
                        GisaDataSetHelper.GetInstance().SFRDLingua.AddSFRDLinguaRow(sfrdcaRow, r.Iso639Row, new byte[] { }, 0);
                    }

                    foreach (GISADataset.ConfigAlfabetoRow r in globalConfig.GetConfigAlfabetoRows())
                    {
                        GisaDataSetHelper.GetInstance().SFRDAlfabeto.AddSFRDAlfabetoRow(sfrdcaRow, r.Iso15924Row, new byte[] { }, 0);
                    }
                }

                var selectedTipologia = ((FormNivelDocumentalFedora)frm).Tipologia;
                if (selectedTipologia != null)
                {
                    GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(frdRow, selectedTipologia.ControloAutRow, -1, new byte[] { }, 0);
                }

                // Só adicionar permissões ao grupo TODOS dos níveis lógicos e a níveis documentais imediatamente
                // abaixo de níveis orgânicos (Documentos soltos e séries); caso se se trate de um nível estrutural
                // controlado, as permissões já foram atribuidas aquando da criação do controlo de autoridade
                if (nRow.IDTipoNivel == TipoNivel.DOCUMENTAL && parentNivelRow.IDTipoNivel == TipoNivel.ESTRUTURAL)
                {
                    var nUpperRow = rhRow == null ? default(GISADataset.NivelRow) : rhRow.NivelRowByNivelRelacaoHierarquicaUpper;
                    PermissoesHelper.AddNewNivelGrantPermissions(nRow, nUpperRow);
                }

                postSaveAction = new PostSaveAction();
                var args = new PersistencyHelper.GenericPostSaveArguments();
                postSaveAction.args             = args;
                postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                {
                    if (!postSaveArgs.cancelAction && nRow != null && nRow.RowState != DataRowState.Detached && nRow.RowState != DataRowState.Deleted)
                    {
                        // registar a criação do nivel documental
                        GISADataset.FRDBaseRow   frdDocRow  = null;
                        GISADataset.FRDBaseRow[] frdDocRows = nRow.GetFRDBaseRows();
                        if (frdDocRows.Length > 0)
                        {
                            frdDocRow = frdDocRows[0];
                        }
                        CurrentContext.RaiseRegisterModificationEvent(frdDocRow);

                        PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao,
                                                               GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast <GISADataset.FRDBaseDataDeDescricaoRow>().Where(frd => frd.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                    }
                };

                // se se tratar de um (sub)documento é necessário garantir que se trata de um código
                // único dentro da sua série (se constituir série) ou nivel estrutural superior
                PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments pcArgs = new PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments();
                PersistencyHelper.SetNewCodigosPreSaveArguments           psArgs       = new PersistencyHelper.SetNewCodigosPreSaveArguments();
                PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments pcArgsNivel  = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();

                pcArgs.argsNivel = pcArgsNivel;

                // dados que serão usados no delegate responsável pela criação do nível documental
                pcArgsNivel.nRowID              = nRow.ID;
                pcArgsNivel.ndRowID             = ndRow.ID;
                pcArgsNivel.rhRowID             = rhRow.ID;
                pcArgsNivel.rhRowIDUpper        = rhRow.IDUpper;
                pcArgsNivel.frdBaseID           = frdRow.ID;
                pcArgsNivel.testOnlyWithinNivel = true;

                // permitir ao delegate selecionar o delegate correspondente ao tipo de nível que se está a criar
                pcArgs.IDTipoNivelRelacionado = tnrRow.ID;

                psArgs.createNewNivelCodigo = false;
                psArgs.createNewUFCodigo    = false;
                psArgs.setNewCodigo         = rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SD;
                psArgs.argsNivelDocSimples  = NiveisHelper.AddNivelDocumentoSimplesWithDelegateArgs(nRow.GetNivelDesignadoRows().Single(), rhRow.IDUpper, rhRow.IDTipoNivelRelacionado);

                PersistencyHelper.save(DelegatesHelper.ValidateNivelAddAndAssocNewUF, pcArgs, DelegatesHelper.SetNewCodigos, psArgs, postSaveAction);
                if (!pcArgsNivel.successful)
                {
                    successfulSave = false;
                    MessageBox.Show(pcArgsNivel.message, "Criação de unidade de descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (parentNivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.ID == TipoNivelRelacionado.SR)
                {
                    GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                    try
                    {
                        DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadSFRDAvaliacaoData(GisaDataSetHelper.GetInstance(), parentNivelRow.ID, ho.Connection);
                    }
                    finally
                    {
                        ho.Dispose();
                    }
                }

                PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase") }));

                if (!successfulSave)
                {
                    return(successfulSave);
                }

                GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                GISA.Search.Updater.updateNivelDocumental(nRow.ID);

                this.nivelNavigator1.AddNivel(nRow);

                Debug.WriteLine("<<A criar nível...>> " + new TimeSpan(DateTime.Now.Ticks - click).ToString());
                break;

            case DialogResult.Cancel:
                successfulSave = false;
                break;
            }

            return(successfulSave);
        }
Esempio n. 18
0
		public static GISADataset.RelacaoHierarquicaRow[] GetSelf(GISADataset CurrentDataSet, GISADataset.NivelRow CurrentNivel)
		{
			//TODO: chamar método que faz os fill: fillSelf(CurrentDataSet, CurrentNivel.ID, conn, tran)

			return CurrentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica();
		}
Esempio n. 19
0
        private void AddDetalhe(GISADataset.NivelRow nRow, string nCod)
        {
            if (detalhes[nRow.ID] == null)
            {
                ArrayList aux = new ArrayList();
                GISADataset.SFRDDatasProducaoRow sfrddprow = null;
                string ia = null;
                string im = null;
                string id = null;
                string fa = null;
                string fm = null;
                string fd = null;

                if (nRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows().Length > 0)
                {
                    sfrddprow = (GISADataset.SFRDDatasProducaoRow)(nRow.GetFRDBaseRows()[0].GetSFRDDatasProducaoRows()[0]);

                    if (sfrddprow.IsInicioAnoNull())
                    {
                        ia = "";
                    }
                    else
                    {
                        ia = sfrddprow.InicioAno;
                    }

                    if (sfrddprow.IsInicioMesNull())
                    {
                        im = "";
                    }
                    else
                    {
                        im = sfrddprow.InicioMes;
                    }

                    if (sfrddprow.IsInicioDiaNull())
                    {
                        id = "";
                    }
                    else
                    {
                        id = sfrddprow.InicioDia;
                    }

                    if (sfrddprow.IsFimAnoNull())
                    {
                        fa = "";
                    }
                    else
                    {
                        fa = sfrddprow.FimAno;
                    }

                    if (sfrddprow.IsFimMesNull())
                    {
                        fm = "";
                    }
                    else
                    {
                        fm = sfrddprow.FimMes;
                    }

                    if (sfrddprow.IsFimDiaNull())
                    {
                        fd = "";
                    }
                    else
                    {
                        fd = sfrddprow.FimDia;
                    }
                }
                else
                {
                    ia = "";
                    im = "";
                    id = "";
                    fa = "";
                    fm = "";
                    fd = "";
                }

                GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    if (nRow.IDTipoNivel == 3)
                    {
                        aux.Add(nRow.GetNivelDesignadoRows()[0].Designacao);
                    }
                    else
                    {
                        DBAbstractDataLayer.DataAccessRules.NivelRule.Current.FillNivelControloAutRows(GisaDataSetHelper.GetInstance(), nRow.ID, ho.Connection);

                        if (nRow.GetNivelControloAutRows().Length > 0)
                        {
                            aux.Add(nRow.GetNivelControloAutRows()[0].ControloAutRow.GetControloAutDicionarioRows()[0].DicionarioRow.Termo);
                        }
                        else if (nRow.GetNivelDesignadoRows().Length > 0)
                        {
                            aux.Add(nRow.GetNivelDesignadoRows()[0].Designacao);
                        }
                    }

                    aux.Add(nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.ID);
                    aux.Add(ia);
                    aux.Add(im);
                    aux.Add(id);
                    aux.Add(fa);
                    aux.Add(fm);
                    aux.Add(fd);
                    aux.Add(nCod);
                    aux.Add("1"); // Se aparece aqui é porque temos permissao...

                    if (MovimentoRule.Current.estaRequisitado(nRow.ID, ho.Connection))
                    {
                        aux.Add(true);
                    }
                    else
                    {
                        aux.Add(false);
                    }
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
                finally
                {
                    ho.Dispose();
                }

                detalhes.Add(nRow.ID, aux);
            }
        }
Esempio n. 20
0
        void nivelNavigator1_BeforeListItemSelection(object sender, BeforeNewSelectionEventArgs e)
        {
            selectedDocument = e.ItemToBeSelected.Tag as GISADataset.NivelRow;

            btnOk.Enabled = ((selectedDocument != null) && SelectableType.Contains(selectedDocument.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado));
        }