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);
			}
		}
		private GISADataset.SFRDUnidadeFisicaRow AssociaNivel(GISADataset.NivelRow nRow)
		{
			GISADataset.SFRDUnidadeFisicaRow frdufRow = null;
			frdufRow = GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.NewSFRDUnidadeFisicaRow();
			frdufRow.FRDBaseRow = nRow.GetFRDBaseRows()[0];
			frdufRow.NivelRow = CurrentNivel;
			GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.AddSFRDUnidadeFisicaRow(frdufRow);
			return frdufRow;
		}
Esempio n. 3
0
        private void GetAutores(GISADataset.NivelRow NivelRow)
        {
            Autores = new ArrayList();

            var ncaRows = NivelRow.GetFRDBaseRows().Single().GetSFRDAutorRows().SelectMany(aut => aut.ControloAutRow.GetNivelControloAutRows());
            Autores.AddRange(ncaRows.Select(nca => nca.NivelRow).ToArray());
        }
		private void acceptAssociation(GISADataset.NivelRow nRow, string codigoCompleto)
		{
			// validar a associação: só se pode associar um nível que pertença à mesma entidade detentadora da unidade física
            //ArrayList entidadesDetentoras = new ArrayList();
            //GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
            //try
            //{
            //    entidadesDetentoras = DBAbstractDataLayer.DataAccessRules.UFRule.Current.GetEntidadeDetentoraForNivel(nRow.ID, ho.Connection);
            //}
            //catch (Exception ex)
            //{
            //    Trace.WriteLine(ex);
            //    throw;
            //}
            //finally
            //{
            //    ho.Dispose();
            //}

            //if (! (entidadesDetentoras.Contains(CurrentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDUpper)))
            //{
            //    MessageBox.Show("Não é permitido associar uma unidade de descrição de uma " + System.Environment.NewLine + "entidade detentora diferente da unidade física seleccionada.", "Adicionar Unidades de Descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //    return;
            //}

			// aceitar o drop apenas se se tratar de um Nivel ainda não associado
			if (nRow.GetFRDBaseRows().Length > 0)
			{
				GISADataset.SFRDUnidadeFisicaRow[] frdufRows = (GISADataset.SFRDUnidadeFisicaRow[])(GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.Select(string.Format("IDFRDBase={0} AND IDNivel={1}", nRow.GetFRDBaseRows()[0].ID, CurrentNivel.ID), "", DataViewRowState.Deleted));
				if (frdufRows.Length > 0)
				{
					frdufRows[0].RejectChanges();
                    AddDetalhe(nRow, nCod);
                    ListViewItem item = PopulateAssociacao(frdufRows[0]);
                    lstVwNiveisAssoc.Items.Insert(0, item);
                    item.EnsureVisible();
				}
				else
				{
					if (GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.Select(string.Format("IDFRDBase={0} AND IDNivel={1}", nRow.GetFRDBaseRows()[0].ID, CurrentNivel.ID)).Length == 0)
					{
						GISADataset.SFRDUnidadeFisicaRow frdufRow = null;
						frdufRow = AssociaNivel(nRow);
						AddDetalhe(nRow, nCod);
						ordem.Insert(0, frdufRow.IDFRDBase);
						ListViewItem item = PopulateAssociacao(frdufRow);
						lstVwNiveisAssoc.Items.Insert(0, item);
						item.EnsureVisible();
					}
				}
			}
			else
			{
				var ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
				try
				{
					FRDRule.Current.LoadFRD(GisaDataSetHelper.GetInstance(), nRow.ID, ho.Connection);
				}
				catch (Exception ex)
				{
					Trace.WriteLine(ex);
					throw;
				}
				finally
				{
					ho.Dispose();
				}

				if (nRow.GetFRDBaseRows().Length > 0 && nRow.GetFRDBaseRows()[0].isDeleted == 1)
					MessageBox.Show("O nível selecionado foi apagado por outro utilizador " + System.Environment.NewLine + "motivo pelo qual não é possível terminar a associação", "Unidades de Descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
				else
				{
					if (nRow.GetFRDBaseRows().Length == 0)
					{
						// Criar uma nova FRD para o nível em questão.
						GISADataset.FRDBaseRow frdRow = GisaDataSetHelper.GetInstance().FRDBase.NewFRDBaseRow();
						frdRow.NivelRow = nRow;
						frdRow.TipoFRDBaseRow = (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select(string.Format("ID={0:d}", TipoFRDBase.FRDOIRecolha))[0]);
						frdRow.NotaDoArquivista = string.Empty;
						frdRow.RegrasOuConvencoes = string.Empty;
						GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(frdRow);
					}

					GISADataset.SFRDUnidadeFisicaRow frdufRow = null;
					frdufRow = AssociaNivel(nRow);
					AddDetalhe(nRow, codigoCompleto);
					ordem.Insert(0, frdufRow.IDFRDBase);
					ListViewItem item = PopulateAssociacao(frdufRow);
					lstVwNiveisAssoc.Items.Insert(0, item);
					item.EnsureVisible();
				}
			}
		}
Esempio n. 5
0
        public static string GetConteudoInformacional(GISADataset ds, GISADataset.NivelRow nivelUF)
        {
            var ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
            try
            {
                DBAbstractDataLayer.DataAccessRules.UFRule.Current.LoadUFConteudoEstruturaData(ds, nivelUF.GetFRDBaseRows()[0].ID, ho.Connection);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                throw;
            }
            finally
            {
                ho.Dispose();
            }

            var ce = nivelUF.GetFRDBaseRows()[0].GetSFRDConteudoEEstruturaRows().FirstOrDefault();
            return ce != null ? ce.ConteudoInformacional : "";
        }
Esempio n. 6
0
        private static DocumentoGisa GetNewDocumentoCompostoGisa(GISADataset.NivelRow nivelRow, List<long> IDNivelProdutores)
        {
            var di = new DocumentoGisa();
            di.Tipo = TipoEntidadeInterna.DocumentoComposto;
            di.Estado = TipoEstado.SemAlteracoes;
            di.Id = nivelRow.ID;
            di.Codigo = nivelRow.Codigo;
            di.Titulo = nivelRow.GetNivelDesignadoRows()[0].Designacao;

            var cadRowProdutores = IDNivelProdutores.SelectMany(i => GisaDataSetHelper.GetInstance().NivelControloAut.Cast<GISADataset.NivelControloAutRow>().Where(r => r.ID == i)).SelectMany(nca => nca.ControloAutRow.GetControloAutDicionarioRows());
            di.Produtores.AddRange(cadRowProdutores.Where(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).Select(cad => cad.DicionarioRow.Termo));

            var frdRow = nivelRow.GetFRDBaseRows().Single();
            var dpRow = frdRow.GetSFRDDatasProducaoRows().SingleOrDefault();
            if (dpRow != null && !(dpRow.InicioAno.Length == 0 || dpRow.InicioMes.Length == 0 || dpRow.InicioDia.Length == 0 || dpRow.FimAno.Length == 0 || dpRow.FimMes.Length == 0 || dpRow.FimDia.Length == 0))
                di.DataCriacao.AdicionaValorOriginal(new DataIncompleta(dpRow.InicioAno, dpRow.InicioMes, dpRow.InicioDia, dpRow.FimAno, dpRow.FimMes, dpRow.FimDia));

            return di;
        }
Esempio n. 7
0
        private static DocumentoGisa GetNewDocumentoGisa(GISADataset.NivelRow nivelRow, List<long> IDNivelProdutores)
        {
            var di = new DocumentoGisa();
            di.Tipo = TipoEntidadeInterna.DocumentoSimples;
            di.Estado = TipoEstado.SemAlteracoes;
            di.Id = nivelRow.ID;
            di.Codigo = nivelRow.Codigo;
            di.Titulo = nivelRow.GetNivelDesignadoRows()[0].Designacao;

            var frdRow = nivelRow.GetFRDBaseRows()[0];
            var codigoRow = GisaDataSetHelper.GetInstance().Codigo.Cast<GISADataset.CodigoRow>().Where( row => ((GISADataset.CodigoRow)row).Codigo.StartsWith("ne:", StringComparison.InvariantCultureIgnoreCase)).SingleOrDefault();
            if (codigoRow != null)
                di.NumeroEspecifico.AdicionaValorOriginal(codigoRow.Codigo);

            var dpRow = frdRow.GetSFRDDatasProducaoRows().SingleOrDefault();
            if (dpRow != null && !(dpRow.InicioAno.Length == 0 || dpRow.InicioMes.Length == 0 || dpRow.InicioDia.Length == 0 || dpRow.FimAno.Length == 0 || dpRow.FimMes.Length == 0 || dpRow.FimDia.Length == 0))
                di.DataCriacao.AdicionaValorOriginal(new DataIncompleta(dpRow.InicioAno, dpRow.InicioMes, dpRow.InicioDia, dpRow.FimAno, dpRow.FimMes, dpRow.FimDia));

            // preencher com Tipologia e termos de indexação
            var cadRows = GisaDataSetHelper.GetInstance().FRDBase.Cast<GISADataset.FRDBaseRow>().Where(r => r.IDNivel == nivelRow.ID).SelectMany(frd => frd.GetIndexFRDCARows()).SelectMany(r => r.ControloAutRow.GetControloAutDicionarioRows());
            var onomasticos = cadRows.Where(cad => cad.ControloAutRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.Onomastico && cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada);
            var ideograficos = cadRows.Where(cad => cad.ControloAutRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.Ideografico && cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada);
            var geograficos = cadRows.Where(cad => cad.ControloAutRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.ToponimicoGeografico && cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada);
            var tipologia = cadRows.Where(cad => cad.ControloAutRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.TipologiaInformacional && cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).ToList().SingleOrDefault();

            di.Onomasticos.AddRange(onomasticos.Select(cad => cad.DicionarioRow.Termo));
            di.Ideograficos.AddRange(ideograficos.Select(cad => cad.DicionarioRow.Termo));
            di.Toponimias.AddRange(geograficos.Select(cad => cad.DicionarioRow.Termo));

            if (tipologia != null)
                di.Tipologia = tipologia.DicionarioRow.Termo;

            var cadRowProdutores = IDNivelProdutores.SelectMany(i => GisaDataSetHelper.GetInstance().NivelControloAut.Cast<GISADataset.NivelControloAutRow>().Where(r => r.ID == i)).SelectMany(nca => nca.ControloAutRow.GetControloAutDicionarioRows());
            di.Produtores.AddRange(cadRowProdutores.Where(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).Select(cad => cad.DicionarioRow.Termo));

            return di;
        }
Esempio n. 8
0
		private void EditNivel(FormAddNivel frm, GISADataset.NivelRow NivelRow)
		{
            GISADataset.TipoNivelRelacionadoRow tnrRow;
            if (NivelRow.IDTipoNivel == TipoNivel.LOGICO && GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select("ID="+NivelRow.ID.ToString()).Length == 0)
                tnrRow = GisaDataSetHelper.GetInstance().TipoNivelRelacionado.Cast<GISADataset.TipoNivelRelacionadoRow>().Single(r => r.ID == TipoNivelRelacionado.ED);
            else
                tnrRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().First(r => r.ID == NivelRow.ID && r.RowState != DataRowState.Deleted).TipoNivelRelacionadoRow;

			string WindowTitle = string.Format("Editar {0}", tnrRow.Designacao);
			// Don't allow to edit a Nivel without a Controlo 
			// Autoridade using a form with Controlo Autoridade.
			// frm will only be of type FormNivelEstrutural if the
			// related administration option is set to "demand a ControloAutoridade"
			if (frm is FormNivelEstrutural && ! (NivelRow.CatCode.Trim().Equals("CA")))
			{
				MessageBox.Show("O nível selecionado não foi definido com " + "base numa entidade produtora." + System.Environment.NewLine + "Assim, para que este nível seja editável é necessário " + "que a aplicação esteja " + System.Environment.NewLine + "configurada para lidar com níveis não controlados.", WindowTitle, MessageBoxButtons.OK, MessageBoxIcon.Information);
				return;
			}
			else if (! (frm is FormNivelEstrutural) && ! (NivelRow.CatCode.Trim().Equals("NVL")))
			{
				MessageBox.Show("O nível selecionado foi definido com " + "base numa entidade produtora." + System.Environment.NewLine + "Assim, para que este nível seja editável é necessário " + "que a aplicação esteja " + System.Environment.NewLine + "configurada para lidar com níveis controlados.", WindowTitle, MessageBoxButtons.OK, MessageBoxIcon.Information);
				return;
			}

			frm.Text = WindowTitle;
			frm.txtCodigo.Text = NivelRow.Codigo;
			frm.txtDesignacao.Text = Nivel.GetDesignacao(NivelRow);
			// se se tratar de uma série ou subsérie o código será sempre automático
			if (tnrRow.ID == TipoNivelRelacionado.SR || tnrRow.ID == TipoNivelRelacionado.SSR)
				frm.txtCodigo.Enabled = false;

			frm.LoadData();

			if (NivelRow.TipoNivelRow.ID != TipoNivel.LOGICO)
			{
				// populate controls with data so that it can be edited

				if (frm is FormNivelEstrutural)
				{
                    FormNivelEstrutural tempWith1 = (FormNivelEstrutural)frm;
					if (NivelRow.CatCode.Trim().Equals("CA"))
					{
						tempWith1.caList.txtFiltroDesignacao.Text = tempWith1.txtDesignacao.Text;
                        tempWith1.caList.ReloadList();
						tempWith1.chkControloAut = true;
					}
					else if (NivelRow.CatCode.Trim().Equals("NVL"))
						tempWith1.chkControloAut = false;
				}
			}

			// show form and receive user feedback
			switch (frm.ShowDialog())
			{
				case DialogResult.OK:
				Trace.WriteLine("A editar nível...");
					GISADataset.NivelDesignadoRow ndRow = null;
					
					// Um Nivel documental deve ter obrigatoriamente um NivelDesignado.
                    Debug.Assert(NivelRow.GetNivelDesignadoRows().Length > 0);
					ndRow = NivelRow.GetNivelDesignadoRows()[0];
                    
                    NivelRow.Codigo = frm.txtCodigo.Text;
                    ndRow.Designacao = frm.txtDesignacao.Text;

                    // registar a edição do item selecionado
                    if (NivelRow.IDTipoNivel != TipoNivel.LOGICO)
                        CurrentContext.RaiseRegisterModificationEvent(NivelRow.GetFRDBaseRows()[0]);

					PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments pcArgs = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();
					pcArgs.nRowID = NivelRow.ID;
					pcArgs.ndRowID = ndRow.ID;
					// Se se tratar de uma entidade detentora não passar os Ids de uma relação
					// hierárquica para um nível superior pois não existe nenhum.
					if (NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length > 0)
					{
						pcArgs.rhRowID = NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].ID;
						pcArgs.rhRowIDUpper = NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDUpper;
					}
					pcArgs.testOnlyWithinNivel = true;

                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.ensureUniqueCodigo, pcArgs);
					if (! pcArgs.successful)
						MessageBox.Show(pcArgs.message, "Criação de unidade de descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    else if (successfulSave == PersistencyHelper.SaveResult.successful)
                    {
                        GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                        try
                        {
                            List<string> IDNiveis = new List<string>();
                            IDNiveis.Add(NivelRow.ID.ToString());
                            GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                        }
                        catch (Exception ex)
                        {
                            Trace.WriteLine(ex.ToString());
                            throw;
                        }
                        finally
                        {
                            ho.Dispose();
                        }
                    }

                    PersistencyHelper.cleanDeletedData(PersistencyHelper.determinaNuvem("RelacaoHierarquica"));

					// Actualizar a interface com os novos valores. Se editarmos a 
					// raiz (estrutural) da vista documental é necessário actualizar 
					// automaticamente também a vista estrutural.

					if (! (NivelRow.RowState == DataRowState.Detached))
					{
                        if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural)
							this.nivelNavigator1.UpdateSelectedNodeName(Nivel.GetDesignacao(NivelRow));
						else
                            this.nivelNavigator1.UpdateSelectedListItemName(Nivel.GetDesignacao(NivelRow));
					}

					// Forçar a gravação do documento
					CurrentContext.SetNivelEstrututalDocumental(null);
					CurrentContext.SetNivelEstrututalDocumental(NivelRow);
					break;
			}
		}
		private GISADataset.SFRDAvaliacaoRow getAvaliacao(GISADataset.NivelRow nRow)
		{
			GISADataset.FRDBaseRow[] frdRows = null;
			GISADataset.FRDBaseRow frdRow = null;
			GISADataset.SFRDAvaliacaoRow[] frdAvaliacaoRows = null;
			GISADataset.SFRDAvaliacaoRow frdAvaliacaoRow = null;

			frdRows = nRow.GetFRDBaseRows();
			if (frdRows.Length > 0)
			{
				frdRow = getFRDRecolha(frdRows);
				frdAvaliacaoRows = frdRow.GetSFRDAvaliacaoRows();
				if (frdAvaliacaoRows.Length > 0)
					frdAvaliacaoRow = frdAvaliacaoRows[0];
			}

			if (frdRow == null)
			{
				// Criar uma nova FRD para este documento.
				frdRow = GisaDataSetHelper.GetInstance().FRDBase.NewFRDBaseRow();
				frdRow.NivelRow = nRow;
				frdRow.TipoFRDBaseRow = (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select(string.Format("ID={0:d}", TipoFRDBase.FRDOIRecolha))[0]);
				frdRow.NotaDoArquivista = string.Empty;
				frdRow.RegrasOuConvencoes = string.Empty;
				GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(frdRow);
			}

			if (frdAvaliacaoRow == null)
			{
				// criar uma nova SFRDAvaliacao para este documento
				frdAvaliacaoRow = GisaDataSetHelper.GetInstance().SFRDAvaliacao.NewSFRDAvaliacaoRow();
				frdAvaliacaoRow.FRDBaseRow = frdRow;
                CurrentSFRDAvaliacao.IDPertinencia = 1;
                CurrentSFRDAvaliacao.IDDensidade = 1;
                CurrentSFRDAvaliacao.IDSubdensidade = 1;
				frdAvaliacaoRow.Publicar = false;
                frdAvaliacaoRow.AvaliacaoTabela = false;
				// se não estivermos a usar avaliação todos os documentos/UFs são 
				// automaticamente marcados para conservação
				if (! GisaDataSetHelper.UsingGestaoIntegrada())
					frdAvaliacaoRow.Preservar = true;

				GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(frdAvaliacaoRow);
			}

			return frdAvaliacaoRow;
		}