Ejemplo n.º 1
0
		private string GetFRDBaseAsRTF(GISADataset.FRDBaseRow FRDBaseRow) {
			GisaDataSetHelper.ManageDatasetConstraints(false);

			StringBuilder Result = new StringBuilder();
            var cotas = new List<string>();
			GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
			try
			{
				string IDFRDbase = FRDBaseRow.ID.ToString();
				PesquisaRule.Current.LoadFRDBaseData(GisaDataSetHelper.GetInstance(), IDFRDbase, ho.Connection);

                if (FRDBaseRow.NivelRow.IDTipoNivel == TipoNivel.ESTRUTURAL)
                    DBAbstractDataLayer.DataAccessRules.ControloAutRule.Current.LoadControloAutFromNivel(GisaDataSetHelper.GetInstance(), FRDBaseRow.NivelRow.ID, ho.Connection);

                // Obter info sobre cota se for documento ou subdocumento
                var idTipoNivelRelacionado = FRDBaseRow.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First().IDTipoNivelRelacionado;
                if (idTipoNivelRelacionado == TipoNivelRelacionado.D || idTipoNivelRelacionado == TipoNivelRelacionado.SD)
                    cotas = PesquisaRule.Current.LoadDocumentoCotas(IDFRDbase, ho.Connection);

				// --Identificação--
				Result.Append("\\fs36\\b{}Identificação\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}");
				// Codigo de Referência
				Result.Append(GetConditionalText("\\i{}Código de referencia: \\i0{}", 
                    DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetCodigoOfNivel(FRDBaseRow.NivelRow.ID, ho.Connection)[0].ToString(), "\\par{}"));
			}
			catch (Exception ex)
			{
				Trace.WriteLine(ex);
			}
			finally
			{
				ho.Dispose();
                GisaDataSetHelper.ManageDatasetConstraints(true);
			}

			// Nivel de descrição (TipoNivel)
			Result.Append(GetConditionalText("\\i{}Nível de descrição: \\i0{}", TipoNivelRelacionado.GetTipoNivelRelacionadoDaPrimeiraRelacaoEncontrada(FRDBaseRow.NivelRow).Designacao, "\\par{}"));
			// Título
			//Result.Append("\\i{}Designação: \\i0{}" + Nivel.GetDesignacao(FRDBaseRow.NivelRow) + "\\par{}");
            Result.Append("\\i{}Título: \\i0{}" + Nivel.GetDesignacao(FRDBaseRow.NivelRow) + "\\par{}");
			// Datas
			if (FRDBaseRow.GetSFRDDatasProducaoRows().Length == 1)
			{
                string inicioTexto = string.Empty;
                if (!FRDBaseRow.GetSFRDDatasProducaoRows()[0].IsInicioTextoNull())
                    inicioTexto = FRDBaseRow.GetSFRDDatasProducaoRows()[0].InicioTexto + " ";

                Result.Append("\\i{}Data(s) de produção: \\i0{}" + inicioTexto + GUIHelper.GUIHelper.FormatDateInterval(FRDBaseRow.GetSFRDDatasProducaoRows()[0]) + "\\par{}");
			}

            // Agrupador
            if (FRDBaseRow.GetSFRDAgrupadorRows().Length == 1)
                Result.Append(GetConditionalText("\\i{}Agrupador: \\i0{}", FRDBaseRow.GetSFRDAgrupadorRows()[0].Agrupador, "\\par{}"));
            
            //Dimensão do documento
            var dimSup = GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.Cast<GISADataset.SFRDDimensaoSuporteRow>()
                .SingleOrDefault(r => r.IDFRDBase == FRDBaseRow.ID);
            if (dimSup != null)
                Result.Append(GetConditionalText("\\i{}Dimensão: \\i0{}", dimSup["Nota"] == DBNull.Value ? "" : dimSup.Nota, "\\par{}"));

            // Cota do documento na UF
            if (cotas.Count > 0)
            {
                Result.AppendLine("\\i{}Cota: \\i0{}\\par{}");
                var cotasStr = new StringBuilder();
                cotas.ForEach(c => {
                    if (cotasStr.Length > 0)
                        cotasStr.Append("\\b, \\b0");
                    cotasStr.Append(c);
                });
                Result.Append(cotasStr);
                Result.Append("\\par{}");
            }

			// --Contexto--
			StringBuilder Contexto = new StringBuilder();
            if (FRDBaseRow.GetSFRDContextoRows().Length == 1)
			{
                if (FRDBaseRow.NivelRow.IDTipoNivel != TipoNivel.ESTRUTURAL)
                    Contexto.Append(GetConditionalText("\\i{}História administrativa: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDContextoRows()[0]["HistoriaAdministrativa"]), "\\par{}"));
                else
                {
                    GISADataset.ControloAutRow caRow = FRDBaseRow.NivelRow.GetNivelControloAutRows()[0].ControloAutRow;
                    GISADataset.ControloAutDatasExistenciaRow cadeRow = null;

                    if (caRow.GetControloAutDatasExistenciaRows().Length > 0)
                    {
                        cadeRow = caRow.GetControloAutDatasExistenciaRows()[0];
                        Contexto.Append(GetConditionalText("\\i{}Datas de existência: \\i0{}\\par{}", GUIHelper.GUIHelper.FormatDateInterval(cadeRow), "\\par{}"));
                    }

                    Contexto.Append(GetConditionalText("\\i{}História: \\i0{}\\par{}", string.Format("{0}", caRow["DescHistoria"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Zona geográfica: \\i0{}\\par{}", string.Format("{0}", caRow["DescZonaGeografica"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Estatuto legal: \\i0{}\\par{}", string.Format("{0}", caRow["DescEstatutoLegal"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Funções, ocupações e atividades: \\i0{}\\par{}", string.Format("{0}", caRow["DescOcupacoesActividades"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Enquadramento legal: \\i0{}\\par{}", string.Format("{0}", caRow["DescEnquadramentoLegal"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Estrutura interna: \\i0{}\\par{}", string.Format("{0}", caRow["DescEstruturaInterna"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Contexto geral: \\i0{}\\par{}", string.Format("{0}", caRow["DescContextoGeral"]), "\\par{}"));
                    Contexto.Append(GetConditionalText("\\i{}Outras informações relevantes: \\i0{}\\par{}", string.Format("{0}", caRow["DescOutraInformacaoRelevante"]), "\\par{}"));
                }

                Contexto.Append(GetConditionalText("\\i{}História arquivística: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDContextoRows()[0]["HistoriaCustodial"]), "\\par{}"));
                Contexto.Append(GetConditionalText("\\i{}Fonte imediata de aquisicao: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDContextoRows()[0]["FonteImediataDeAquisicao"]), "\\par{}"));
                GISADataset.RelacaoHierarquicaRow[] rhrows = FRDBaseRow.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica();
                if (rhrows.Length > 0)
                {
                    Int64 idT = FRDBaseRow.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.ID;
                    if ((idT == TipoNivelRelacionado.SR) || (idT == TipoNivelRelacionado.SSR))
                    {
                        if (System.Convert.ToBoolean(FRDBaseRow.GetSFRDContextoRows()[0]["SerieAberta"]))
                            Contexto.Append(GetConditionalText("\\i{}Condição da Série: \\i0{}\\par{}", string.Format("{0}", "Aberta"), "\\par{}"));
                        else
                            Contexto.Append(GetConditionalText("\\i{}Condição da Série: \\i0{}\\par{}", string.Format("{0}", "Fechada"), "\\par{}"));
                    }
                }
			}

            if (FRDBaseRow.NivelRow.IDTipoNivel == TipoNivel.ESTRUTURAL)
            {
                Result.Append(Section("\\fs36\\b{}Contexto\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}", Contexto.ToString()));
            }
            else
            {
                GetAutores(FRDBaseRow.NivelRow);
                GetEntidadesProdutoras(FRDBaseRow.NivelRow);

                Result.Append(Section("\\fs36\\b{}Contexto\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}",
                    GetConditionalText("\\i{}Autores: \\i0{}", printCAs(Autores), Contexto.ToString()),
                    GetConditionalText("\\i{}Entidade produtora: \\i0{}", printCAs(EPs), Contexto.ToString())
                    ));
            }

            // --ConteudoEstrutura--

            Result.Append(Section("\\fs36\\b{}Conteúdo e estrutura\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}",
                GetConditionalText("\\i{}Tipologia informacional: \\i0{}\\par{}", GetTermosIndexados(FRDBaseRow, TipoNoticiaAut.TipologiaInformacional), "")));

            // -- Conteudo caso seja um processo de obras --
            ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
            bool processoObras = IsRelatedToProcessoObras(FRDBaseRow, ho.Connection);
            // Dados estruturados de processos de obras:

            try {
                if (processoObras) {
                    //Result.Append(GetConditionalText("", "\\i{}Conteúdo informacional: \\i0{}\\par{}", "\\li128\\par\\li0{}"));
                    Result.Append(GetConditionalText("", "\\i{}Conteúdo informacional: \\i0{}\\par{}", ""));
                    Result.Append(gen_content_PROCESSO_OBRAS(FRDBaseRow.IDNivel, ho.Connection));
                }
            }
            catch (Exception ex) {
                Trace.WriteLine(ex);
            }
            finally {
                ho.Dispose();
                GisaDataSetHelper.ManageDatasetConstraints(true);
            }

            string ConteudoEstrutura = "";

			if (FRDBaseRow.GetSFRDConteudoEEstruturaRows().Length == 1)
			{
                if (!processoObras)
                    ConteudoEstrutura += GetConditionalText("\\i{}Conteúdo informacional: \\i0{}\\par{}", string.Format(" {0}", FRDBaseRow.GetSFRDConteudoEEstruturaRows()[0]["ConteudoInformacional"]), "\\li128\\par\\li0{}");
                else
                    ConteudoEstrutura += GetConditionalText("\\i{}Observações: \\i0{}\\par{}", string.Format(" {0}", FRDBaseRow.GetSFRDConteudoEEstruturaRows()[0]["ConteudoInformacional"]), "\\li128\\par\\li0{}");

				ConteudoEstrutura += GetConditionalText("\\i{}Diploma: \\i0{}\\par{}", GetTermosIndexados(FRDBaseRow, TipoNoticiaAut.Diploma), "\\li128\\li0{}");
				ConteudoEstrutura += GetConditionalText("\\i{}Modelo: \\i0{}\\par{}", GetTermosIndexados(FRDBaseRow, TipoNoticiaAut.Modelo), "\\li128\\li0{}");

				//Avaliação
				if (FRDBaseRow.GetSFRDAvaliacaoRows().Length > 0)
				{
					string ava = null;
                    var sfrda = FRDBaseRow.GetSFRDAvaliacaoRows()[0];

                    ConteudoEstrutura += GetConditionalText("\\i{}Observações/Enquadramento legal: \\i0{}\\par{}", string.Format("{0}", sfrda["Observacoes"]), "\\li128\\par\\li0{}");

                    if (sfrda.IsPreservarNull() && sfrda.IsPrazoConservacaoNull())
						ava = "";
					else
					{
                        if (sfrda.Preservar)
							ava = "Preservar.";
						else
                            ava = "Eliminar após " + (sfrda.IsPrazoConservacaoNull() ? "0" : sfrda.PrazoConservacao.ToString()) + " ano(s).";
					}    

					if (ava.CompareTo("") != 0)
						ConteudoEstrutura += GetConditionalText("\\i{}Avaliação: \\i0{}\\par{}", ava, "\\li128\\li0{}\\par{}");

                    ConteudoEstrutura += "\\i{}Publicado: \\i0{}\\par{}" + Concorrencia.translateBoolean(FRDBaseRow.GetSFRDAvaliacaoRows()[0].Publicar) + "\\li128\\par\\li0{}";
                    ConteudoEstrutura += GetConditionalText("\\i{}Referência na tabela de avaliação: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDAvaliacaoRows()[0]["RefTabelaAvaliacao"]), "\\li128\\li0{}\\par{}");

                    if (!sfrda.IsIDAutoEliminacaoNull())
                        ConteudoEstrutura += "\\i{}Auto de eliminação: \\i0{}\\par{}" + sfrda.AutoEliminacaoRow.Designacao + "\\li128\\li0{}\\par{}";
				}

                ConteudoEstrutura += GetConditionalText("\\i{}Incorporações: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDConteudoEEstruturaRows()[0]["Incorporacao"]), "\\li128\\par\\li0{}");

                Result.Append(ConteudoEstrutura);
			}

			// --Condições de acesso e de utilização--
			if (FRDBaseRow.GetSFRDCondicaoDeAcessoRows().Length == 1)
			{
				// Linguas
				string langs = "";
                foreach (GISADataset.SFRDLinguaRow lang in FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0].GetSFRDLinguaRows())
					langs += lang.Iso639Row.LanguageNameEnglish + ", ";
			
                if (langs.Length > 2)
					langs = langs.Substring(0, langs.Length - 2);

				//Alfabetos
				string alfs = "";
                foreach (GISADataset.SFRDAlfabetoRow alf in FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0].GetSFRDAlfabetoRows())
					alfs += alf.Iso15924Row.ScriptNameEnglish + ", ";
				
                if (alfs.Length > 2)
					alfs = alfs.Substring(0, alfs.Length - 2);

				//Formas Suporte/Acondicionamento
				string fsas = "";
                foreach (GISADataset.SFRDFormaSuporteAcondRow fsa in FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0].GetSFRDFormaSuporteAcondRows())
					fsas += fsa.TipoFormaSuporteAcondRow.Designacao + ", ";
				
                if (fsas.Length > 2)
					fsas = fsas.Substring(0, fsas.Length - 2);

				//Materiais de Suporte
				string mats = "";
                foreach (GISADataset.SFRDMaterialDeSuporteRow mat in FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0].GetSFRDMaterialDeSuporteRows())
					mats += mat.TipoMaterialDeSuporteRow.Designacao + ", ";

				if (mats.Length > 2)
					mats = mats.Substring(0, mats.Length - 2);


				//Tecnicas de Registo
				string tecs = "";
                foreach (GISADataset.SFRDTecnicasDeRegistoRow tec in FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0].GetSFRDTecnicasDeRegistoRows())
					tecs += tec.TipoTecnicasDeRegistoRow.Designacao + ", ";

				if (tecs.Length > 2)
					tecs = tecs.Substring(0, tecs.Length - 2);

				//Estado de Conservação
				string cons = "";
                foreach (GISADataset.SFRDEstadoDeConservacaoRow con in FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0].GetSFRDEstadoDeConservacaoRows())
					cons += con.TipoEstadoDeConservacaoRow.Designacao + ", ";

				if (cons.Length > 2)
					cons = cons.Substring(0, cons.Length - 2);

				Result.Append(Section("\\fs36\\b{}Condições de acesso e de utilização\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}", GetConditionalText("\\i{}Condições de acesso: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0]["CondicaoDeAcesso"]), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Condições de reprodução: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0]["CondicaoDeReproducao"]), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Linguas: \\i0{}\\par{}", string.Format("{0}", langs), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Alfabetos: \\i0{}\\par{}", string.Format("{0}", alfs), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Formas de Suporte / Acondicionamento: \\i0{}\\par{}", string.Format("{0}", fsas), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Materiais de Suporte: \\i0{}\\par{}", string.Format("{0}", mats), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Técnicas de Registo: \\i0{}\\par{}", string.Format("{0}", tecs), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Estado de Conservação: \\i0{}\\par{}", string.Format("{0}", cons), "\\li128\\par\\li0{}"), GetConditionalText("\\i{}Instrumentos de pesquisa: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDCondicaoDeAcessoRows()[0]["AuxiliarDePesquisa"]), "\\li128\\par\\li0{}")));
            }

			// --Documentação associada--
			if (FRDBaseRow.GetSFRDDocumentacaoAssociadaRows().Length > 0)
				Result.Append(Section("\\fs36\\b{}Documentação associada\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}", GetConditionalText("\\i{}Existência e localização de originais: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDDocumentacaoAssociadaRows()[0]["ExistenciaDeOriginais"]), "\\li128\\par\\li0{}") + GetConditionalText("\\i{}Existência e localização de cópias: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDDocumentacaoAssociadaRows()[0]["ExistenciaDeCopias"]), "\\li128\\par\\li0{}") + GetConditionalText("\\i{}Unidades de Descrição: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDDocumentacaoAssociadaRows()[0]["UnidadesRelacionadas"]), "\\li128\\par\\li0{}") + GetConditionalText("\\i{}Notas de Publicação: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.GetSFRDDocumentacaoAssociadaRows()[0]["NotaDePublicacao"]), "\\li128\\par\\li0{}")));

            // --Notas--
			if (FRDBaseRow.GetSFRDNotaGeralRows().Length > 0)
				Result.Append(Section("\\fs36\\b{}Nota Geral\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}", GetConditionalText("", string.Format("{0}", FRDBaseRow.GetSFRDNotaGeralRows()[0]["NotaGeral"]), "\\li128\\par\\li0{}")));

			// --Controlo de Descrição--
			if (! (FRDBaseRow.IsRegrasOuConvencoesNull()))
			{
				string lastEdit = "";
				if (GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Select("IdFRDBase =" + FRDBaseRow.ID.ToString(), "DataEdicao DESC").Length > 0)
					lastEdit = ((GISADataset.FRDBaseDataDeDescricaoRow)(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Select("IdFRDBase =" + FRDBaseRow.ID.ToString(), "DataEdicao DESC")[0])).DataEdicao.ToString();

				Result.Append(Section("\\fs36\\b{}Controlo de Descrição\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}", 
                    GetConditionalText("\\i{}Regras e Convenções: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.RegrasOuConvencoes), "\\li128\\par\\li0{}") +
                    GetConditionalText("\\i{}Notas do arquivista: \\i0{}\\par{}", string.Format("{0}", FRDBaseRow.NotaDoArquivista), "\\li128\\par\\li0{}") + 
                    GetConditionalText("\\i{}Data da última edição: \\i0{}\\par{}", string.Format("{0}", lastEdit), "\\li128\\par\\li0{}")));
			}

			// --Indexação--
            Result.Append(Section("\\fs36\\b{}Indexação\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}",
                GetConditionalText("\\i{}Conteúdos: \\i0{}\\par{}", GetTermosIndexados_OutrasFormas(FRDBaseRow), "")));
            
            // Acrescentar informação nos detalhes dos resultados da pesquisa de UAs:
            // Informação de requisição, se estiver requisitada e não devolvida. Qual a requisição, a data e a entidade e as notas.
            ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
            try
            {
                //string ID = FRDBaseRow.ID.ToString();
                if (MovimentoRule.Current.estaRequisitado(FRDBaseRow.IDNivel, ho.Connection))
                {
                    MovimentoRule.RequisicaoInfo requisicao = MovimentoRule.Current.getRequisicaoInfo(FRDBaseRow.IDNivel, ho.Connection);

                    Result.Append("\\fs36\\b{}Requisição:\\b0{}\\fs24\\sb196\\sa48\\par{}\\sb0\\sa0{}");
                    // Codigo de movimento
                    Result.Append(GetConditionalText("\\i{}Movimento: \\i0{}", requisicao.idMovimento.ToString(), "\\par{}"));
                    Result.Append(GetConditionalText("\\i{}Data: \\i0{}", requisicao.data.ToString(), "\\par{}"));
                    Result.Append(GetConditionalText("\\i{}Entidade: \\i0{}", requisicao.entidade, "\\par{}"));
                    Result.Append(GetConditionalText("\\i{}Notas: \\i0{}", requisicao.notas, "\\par{}"));
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
            }
            finally
            {
                ho.Dispose();
            }

			return Result.ToString();
		}