Exemple #1
0
        private static void StateCommit(CorrespondenciaDocs correspondencia)
        {
            var dg = correspondencia.EntidadeInterna as DocumentoGisa;
            if (dg == null) return;

            correspondencia.EntidadeInterna.Estado = TipoEstado.SemAlteracoes;
            dg.CommitStateProperties();
            correspondencia.AllCorrespondenciasRAs.ForEach(c => { 
                if (c.TipoOpcao != TipoOpcao.Ignorar)
                    c.EntidadeInterna.Estado = TipoEstado.SemAlteracoes;
                if (c.EstadoRelacaoPorOpcao.ContainsKey(c.TipoOpcao))
                    c.EstadoRelacaoPorOpcao[c.TipoOpcao] = TipoEstado.SemAlteracoes; 
            });
        }
Exemple #2
0
        internal static void MapDocumentoRHToDataRows(CorrespondenciaDocs correspondenciaDoc, Dictionary<Entidade, DataRow> rows)
        {
            var dg = correspondenciaDoc.EntidadeInterna as DocumentoGisa;
            var nRowUpper = default(GISADataset.NivelRow);

            if (dg.Processo != null)
            {
                nRowUpper = rows[dg.Processo.EntidadeInterna] as GISADataset.NivelRow;

                var nRow = rows[dg] as GISADataset.NivelRow;
                var r = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().SingleOrDefault();
                if (r != null)
                    r.Delete();

                var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow();
                rhRow.ID = nRow.ID;
                rhRow.IDUpper = nRowUpper.ID;
                rhRow.IDTipoNivelRelacionado = TipoNivelRelacionado.SD;
                rhRow.Versao = new byte[] { };
                rhRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhRow);
            }

            if (dg.Serie.Valor != null)
            {
                var serie = dg.Serie.Valor;
                var nRowSerie = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().Single(r => r.ID == serie.Id);

                if (dg.Serie.EstadoRelacaoPorOpcao[dg.Serie.TipoOpcao] != TipoEstado.SemAlteracoes)
                {
                    // mapear relacão entre o processo e a série
                    var nRow = rows[correspondenciaDoc.EntidadeInterna] as GISADataset.NivelRow;

                    var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow();
                    rhRow.ID = nRowUpper == null ? nRow.ID : nRowUpper.ID;
                    rhRow.IDUpper = serie.Id;
                    rhRow.IDTipoNivelRelacionado = TipoNivelRelacionado.D;
                    rhRow.Versao = new byte[] { };
                    rhRow.isDeleted = 0;
                    GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhRow);
                }

                nRowUpper = nRowSerie;
            }
            
            // mapear produtor do documento simples 
            var correspCA = correspondenciaDoc.CorrespondenciasRAs.Where(c => ((RegistoAutoridadeInterno)c.EntidadeInterna).TipoNoticiaAut == TipoNoticiaAut.EntidadeProdutora).SingleOrDefault();

            if (correspCA != null && correspCA.EstadoRelacaoPorOpcao[correspCA.TipoOpcao] != TipoEstado.SemAlteracoes)
            {
                // determinar se o ID da RH é referente ao documento simples, composto, ou alguma (sub)série
                long nDocID = -1;
                long idSerie = 0;
                if (nRowUpper != null)
                {
                    idSerie = GetSerieID(nRowUpper.ID);
                    nDocID = idSerie < 0 ? nRowUpper.ID : idSerie;
                }
                else
                {
                    var nRow = rows[correspondenciaDoc.EntidadeInterna] as GISADataset.NivelRow;
                    idSerie = GetSerieID(nRow.ID);
                    nDocID = idSerie < 0 ? nRow.ID : idSerie;
                }

                var caRow = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Single(ca => ca.ID == correspCA.EntidadeInterna.Id);
                var nRowCA = caRow.GetNivelControloAutRows().Single().NivelRow;

                if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == nDocID && r.IDUpper == nRowCA.ID) != null)
                    return;

                var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow();
                rhRow.ID = nDocID;
                rhRow.IDUpper = nRowCA.ID;
                rhRow.IDTipoNivelRelacionado = idSerie < 0 ? TipoNivelRelacionado.D : TipoNivelRelacionado.SR;
                rhRow.Versao = new byte[] { };
                rhRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhRow);
            }
        }
Exemple #3
0
        internal static string SaveCorrespondencias(List<CorrespondenciaDocs> correspondencias, ref CorrespondenciaDocs lastCorrespondencia)
        {
            lastCorrespondencia = null;
            var reportIntegracao = new StringBuilder();
            Dictionary<Entidade, DataRow> rows = new Dictionary<Entidade, DataRow>();
            foreach (var correspondencia in correspondencias)
            {
                var reportCurrentCorrespondencia = string.Empty;
                MapEntidadeExternaToDataRows(correspondencia, rows);

                var dg = correspondencia.EntidadeInterna as DocumentoGisa;

                if (dg != null)
                {
                    MapDocumentoGisaToDataRows(correspondencia, rows);
                    MapCorrespondencias(correspondencia, rows);

                    //reportCurrentCorrespondencia = RelatorioIntegracao(correspondencia, rows);
                }

                if (!Save(correspondencia, rows))
                {
                    lastCorrespondencia = correspondencia;
                    break;
                }

                StateCommit(correspondencia);
                //if (reportCurrentCorrespondencia != null && reportCurrentCorrespondencia.Length > 0)
                //    reportIntegracao.AppendLine(reportCurrentCorrespondencia);
            }
            PersistencyHelper.cleanDeletedData();
            return reportIntegracao.ToString();
        }
Exemple #4
0
        //public static void AddProcessoOriginal(CorrespondenciaDocs correspondenciaDoc)
        //{
        //    var dg = correspondenciaDoc.EntidadeInterna as DocumentoGisa;
        //    if (correspondenciaDoc.EntidadeExterna.Tipo == TipoEntidadeExterna.DocumentoComposto) return;

        //    dg.Processo.RemoveValorOriginal();
        //    if (dg.Processo.TipoOpcao == TipoOpcao.Original && dg.Processo.Valor == null)
        //        dg.Processo.TipoOpcao = TipoOpcao.Sugerida;

        //    var nRow = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().SingleOrDefault(r => r.ID == correspondenciaDoc.EntidadeInterna.Id);
        //    if (nRow == null) return;

        //    var rhRowList = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Where(r => r.NivelRowByNivelRelacaoHierarquicaUpper.IDTipoNivel == TipoNivel.DOCUMENTAL).ToList();
        //    if (rhRowList.Count != 1) return;

        //    var proc = GetNewDocumentoCompostoGisa(rhRowList[0].NivelRowByNivelRelacaoHierarquicaUpper, new List<long>());
        //    proc.Estado = TipoEstado.SemAlteracoes;
        //    dg.Processo.AdicionaValorOriginal(proc);
        //}

        //public static void ReavaliaEstadoFromProcesso(CorrespondenciaDocs cDoc)
        //{
        //    ReavaliaEstadoRAs(cDoc);
        //    ReavaliaEstadoSerie(cDoc);
        //}

        public static void ReavaliaEstadoRAs(CorrespondenciaDocs cDoc)
        {
            cDoc.CorrespondenciasRAs.ForEach(cRA => { RemoveTipologiaOriginal(cRA); ReavaliaEstado(cDoc, cRA); });
            AddTipologiaOriginal(cDoc);
        }
Exemple #5
0
        internal static void MapDocumentoGisaToDataRows(CorrespondenciaDocs correspondenciaDoc, Dictionary<Entidade, DataRow> rows)
        {
            var dg = (DocumentoGisa)correspondenciaDoc.EntidadeInterna;
            GISADataset.NivelRow nRow = null;
            GISADataset.NivelDesignadoRow ndRow = null;
            GISADataset.FRDBaseRow frdRow = null;

            if (dg.Estado == TipoEstado.Novo)
            {
                nRow = GisaDataSetHelper.GetInstance().Nivel.NewNivelRow();
                nRow.CatCode = "NVL";
                nRow.Codigo = dg.Codigo;
                nRow.IDTipoNivel = TipoNivel.DOCUMENTAL;
                nRow.Versao = new byte[] { };
                nRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().Nivel.AddNivelRow(nRow);

                ndRow = GisaDataSetHelper.GetInstance().NivelDesignado.NewNivelDesignadoRow();
                ndRow.NivelRow = nRow;
                ndRow.Designacao = dg.TituloDoc.Valor;
                ndRow.Versao = new byte[] { };
                ndRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().NivelDesignado.AddNivelDesignadoRow(ndRow);

                frdRow = GisaDataSetHelper.GetInstance().FRDBase.NewFRDBaseRow();
                frdRow.NivelRow = nRow;
                frdRow.IDTipoFRDBase = (long)TipoFRDBase.FRDOIRecolha;
                frdRow.Versao = new byte[] { };
                frdRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(frdRow);
            }
            else {
                nRow = GisaDataSetHelper.GetInstance().Nivel.Rows.Cast<GISADataset.NivelRow>().Where(r => r.ID == dg.Id).Single();
                frdRow = nRow.GetFRDBaseRows()[0];
            }

            rows[correspondenciaDoc.EntidadeInterna] = nRow;

            var sfrdConteudoEEstruturaRow = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.Cast<GISADataset.SFRDConteudoEEstruturaRow>().Where(r => r.IDFRDBase == frdRow.ID).SingleOrDefault();
            if (sfrdConteudoEEstruturaRow == null)
            {
                sfrdConteudoEEstruturaRow = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.NewSFRDConteudoEEstruturaRow();
                sfrdConteudoEEstruturaRow.FRDBaseRow = frdRow;
                sfrdConteudoEEstruturaRow.Incorporacao = "";
                sfrdConteudoEEstruturaRow.ConteudoInformacional = "";   
                sfrdConteudoEEstruturaRow.Versao = new byte[] { };
                sfrdConteudoEEstruturaRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.AddSFRDConteudoEEstruturaRow(sfrdConteudoEEstruturaRow);
            }

            if (correspondenciaDoc.EntidadeExterna.Tipo == TipoEntidadeExterna.Documento)
            {
                var morada = correspondenciaDoc.CorrespondenciasRAs.Select(cRa => cRa.EntidadeInterna).Cast<RegistoAutoridadeInterno>().SingleOrDefault(rai => rai.TipoNoticiaAut == TipoNoticiaAut.ToponimicoGeografico);
                if (morada != null)
                    sfrdConteudoEEstruturaRow.ConteudoInformacional = AppendValor(sfrdConteudoEEstruturaRow.ConteudoInformacional, "Morada: " + morada.Titulo);

                sfrdConteudoEEstruturaRow.ConteudoInformacional = AppendValor(sfrdConteudoEEstruturaRow.ConteudoInformacional, dg.NumLocalRefPred);
                sfrdConteudoEEstruturaRow.ConteudoInformacional = AppendValor(sfrdConteudoEEstruturaRow.ConteudoInformacional, dg.CodPostalLoc);
            }

            if (dg.Notas.TipoOpcao != TipoOpcao.Ignorar && dg.Notas.Valor != null && dg.Notas.Valor.Length > 0)
                sfrdConteudoEEstruturaRow.ConteudoInformacional = AppendValor(sfrdConteudoEEstruturaRow.ConteudoInformacional, dg.Notas);

            var sfrdDatasProducaoRow = GisaDataSetHelper.GetInstance().SFRDDatasProducao.Cast<GISADataset.SFRDDatasProducaoRow>().Where(r => r.IDFRDBase == frdRow.ID).SingleOrDefault();
            if (sfrdDatasProducaoRow == null)
            {
                sfrdDatasProducaoRow = GisaDataSetHelper.GetInstance().SFRDDatasProducao.NewSFRDDatasProducaoRow();
                sfrdDatasProducaoRow.FRDBaseRow = frdRow;
                sfrdDatasProducaoRow.FimAno = "";
                sfrdDatasProducaoRow.FimMes = "";
                sfrdDatasProducaoRow.FimDia = "";
                sfrdDatasProducaoRow.InicioAno = "";
                sfrdDatasProducaoRow.InicioMes = "";
                sfrdDatasProducaoRow.InicioDia = "";
                sfrdDatasProducaoRow.InicioAtribuida = false;
                sfrdDatasProducaoRow.FimAtribuida = false;
                sfrdDatasProducaoRow.Versao = new byte[] { };
                sfrdDatasProducaoRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().SFRDDatasProducao.AddSFRDDatasProducaoRow(sfrdDatasProducaoRow);
            }

            if (dg.DataCriacao.TipoOpcao != TipoOpcao.Ignorar && dg.DataCriacao.Valor != null)
            {
                sfrdDatasProducaoRow.FimAno = dg.DataCriacao.Valor.AnoFim;
                sfrdDatasProducaoRow.FimMes = dg.DataCriacao.Valor.MesFim;
                sfrdDatasProducaoRow.FimDia = dg.DataCriacao.Valor.DiaFim;
                sfrdDatasProducaoRow.InicioAno = dg.DataCriacao.Valor.AnoInicio;
                sfrdDatasProducaoRow.InicioMes = dg.DataCriacao.Valor.MesInicio;
                sfrdDatasProducaoRow.InicioDia = dg.DataCriacao.Valor.DiaInicio;
            }

            var sfrdAgrupadorRow = GisaDataSetHelper.GetInstance().SFRDAgrupador.Cast<GISADataset.SFRDAgrupadorRow>().Where(r => r.IDFRDBase == frdRow.ID).SingleOrDefault();
            if (sfrdAgrupadorRow == null)
            {
                sfrdAgrupadorRow = GisaDataSetHelper.GetInstance().SFRDAgrupador.NewSFRDAgrupadorRow();
                sfrdAgrupadorRow.FRDBaseRow = frdRow;
                sfrdAgrupadorRow.Agrupador = "";
                sfrdAgrupadorRow.Versao = new byte[] { };
                sfrdAgrupadorRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().SFRDAgrupador.AddSFRDAgrupadorRow(sfrdAgrupadorRow);
            }

            if (dg.Agrupador.TipoOpcao != TipoOpcao.Ignorar && dg.Agrupador.Valor != null)
                sfrdAgrupadorRow.Agrupador = dg.Agrupador.Valor;

            if (dg.Estado != TipoEstado.Novo && !nRow.Codigo.Equals(dg.Codigo))
            {                
                var sfrdCodigoRow = GisaDataSetHelper.GetInstance().Codigo.Cast<GISADataset.CodigoRow>().Where(r => r.IDFRDBase == frdRow.ID && r.Codigo.Equals(dg.Codigo)).SingleOrDefault();
                if (sfrdCodigoRow == null)
                {
                    sfrdCodigoRow = GisaDataSetHelper.GetInstance().Codigo.NewCodigoRow();
                    sfrdCodigoRow.FRDBaseRow = frdRow;
                    sfrdCodigoRow.Codigo = dg.Codigo;
                    sfrdCodigoRow.Versao = new byte[] { };
                    sfrdCodigoRow.isDeleted = 0;
                    GisaDataSetHelper.GetInstance().Codigo.AddCodigoRow(sfrdCodigoRow);
                }
            }

            if (dg.NumeroEspecifico.TipoOpcao != TipoOpcao.Ignorar && dg.NumeroEspecifico.Valor != null && dg.NumeroEspecifico.Valor.Length > 0)
            {
                var sfrdCodigoRow = GisaDataSetHelper.GetInstance().Codigo.Cast<GISADataset.CodigoRow>().Where(r => r.IDFRDBase == frdRow.ID && r.Codigo.Equals(dg.NumeroEspecifico.Valor)).SingleOrDefault();
                if (sfrdCodigoRow == null)
                {
                    sfrdCodigoRow = GisaDataSetHelper.GetInstance().Codigo.NewCodigoRow();
                    sfrdCodigoRow.FRDBaseRow = frdRow;
                    sfrdCodigoRow.Codigo = dg.NumeroEspecifico.Valor;
                    sfrdCodigoRow.Versao = new byte[] { };
                    sfrdCodigoRow.isDeleted = 0;
                    GisaDataSetHelper.GetInstance().Codigo.AddCodigoRow(sfrdCodigoRow);
                }
            }

            var sfrdCondicaoDeAcessoRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.Cast<GISADataset.SFRDCondicaoDeAcessoRow>().Where(r => r.IDFRDBase == frdRow.ID).SingleOrDefault();
            if (sfrdCondicaoDeAcessoRow == null)
            {
                sfrdCondicaoDeAcessoRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.NewSFRDCondicaoDeAcessoRow();
                sfrdCondicaoDeAcessoRow.FRDBaseRow = frdRow;
                sfrdCondicaoDeAcessoRow.CondicaoDeAcesso = "";
                sfrdCondicaoDeAcessoRow.Versao = new byte[] { };
                sfrdCondicaoDeAcessoRow.isDeleted = 0;
                GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.AddSFRDCondicaoDeAcessoRow(sfrdCondicaoDeAcessoRow);
            }

            if (dg.Confidencialidade.TipoOpcao != TipoOpcao.Ignorar && dg.Confidencialidade.Valor != null && dg.Confidencialidade.Valor.Length > 0)
                sfrdCondicaoDeAcessoRow.CondicaoDeAcesso = AppendValor(sfrdCondicaoDeAcessoRow.CondicaoDeAcesso, dg.Confidencialidade);

            long imgOrder = 1;
            var imgRows = GisaDataSetHelper.GetInstance().SFRDImagem.Cast<GISADataset.SFRDImagemRow>().Where(r => r.IDFRDBase == frdRow.ID);
            if (imgRows.Count() > 0)
                imgOrder = imgRows.Max(r => r.GUIOrder) + 1;

            foreach(var o in dg.ObjDigitais)
            {
                GISADataset.SFRDImagemVolumeRow imgVolRow = null;
                string mount = "";
                string identifier = "";
                if (o.Tipo == (int)ResourceAccessType.DICAnexo)
                {
                    // TODO: em vez de se guardar o NUD do Anexo deve-se guardar o NUD do documento
                    mount = o.NUD;
                    // TODO: o nome do ficheiro que deve ser guardado deve ter o padrão "Conteudo_numero_numero_numero.extensao"
                    //       tem que se fazer split do ficheiro por '_' e substituir o primeiro token por "Conteudo" e voltar a juntar tudo com o '_'
                    identifier = o.NomeFicheiro;
                }
                else
                {
                    mount = "";
                    identifier = o.NUD;
                }

                if (identifier == null || identifier == "")
                {
                    //MessageBox.Show(String.Format("O conteúdo associado com a descrição \"{0}\" do anexo {1} não vai ser integrado porque não tem o nome do ficheiro definido.", o.TipoDescricao, o.NUD), "Integração", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    Trace.WriteLine(String.Format("INTEGRACAO: O conteúdo associado com a descrição \"{0}\" do anexo {1} não vai ser integrado porque não tem o nome do ficheiro definido.", o.TipoDescricao, o.NUD));
                    continue;
                }

                imgVolRow = GisaDataSetHelper.GetInstance().SFRDImagemVolume.Cast<GISADataset.SFRDImagemVolumeRow>().
                    FirstOrDefault(r => r.Mount == o.NUD);

                if (imgVolRow == null)
                    imgVolRow = GisaDataSetHelper.GetInstance().SFRDImagemVolume.AddSFRDImagemVolumeRow(mount, new byte[] { }, 0);

                var imgRow = GisaDataSetHelper.GetInstance().SFRDImagem.NewSFRDImagemRow();
                imgRow.FRDBaseRow = frdRow;
                imgRow.GUIOrder = imgOrder++;
                imgRow.Tipo = GUIHelper.TranslationHelper.FormatTipoAcessoEnumToTipoAcessoText((ResourceAccessType)o.Tipo);
                imgRow.Descricao = o.TipoDescricao;
                imgRow.SFRDImagemVolumeRow = imgVolRow;
                imgRow.Identificador = identifier;
                GisaDataSetHelper.GetInstance().SFRDImagem.AddSFRDImagemRow(imgRow);
            }
            
            foreach (var correspRA in correspondenciaDoc.CorrespondenciasRAs)
            {
                // onomásticos e geográficos são mapeados no conteudo estruturado
                if (!(correspondenciaDoc.EntidadeExterna.Tipo == TipoEntidadeExterna.DocumentoComposto && correspRA.EntidadeExterna.Tipo == TipoEntidadeExterna.Onomastico && correspRA.EntidadeExterna.Tipo == TipoEntidadeExterna.Geografico))
                    MapControloAutToDataRows(correspRA, frdRow, rows);
            }

            // NOTA: o mapeamento do conteudo estruturado deve ser sempre feito depois do mapeamento dos controlos de autoridade
            if (correspondenciaDoc.EntidadeExterna.Tipo == TipoEntidadeExterna.DocumentoComposto)
                MapConteudoEstruturado(correspondenciaDoc, rows);
            else if (dg.Processo != null)
            {
                var proc = dg.Processo.EntidadeInterna;
                var nProcRow = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().Single(r => r.ID == proc.Id);
                rows[proc] = nProcRow;
            }

            MapDocumentoRHToDataRows(correspondenciaDoc, rows);
        }
Exemple #6
0
        internal static void MapCorrespondencias(CorrespondenciaDocs correspondenciaDoc, Dictionary<Entidade, DataRow> rows)
        {
            var data = System.Convert.ToDateTime(DateTime.Now.GetDateTimeFormats('G')[0]); // retirar os milisegundos ao tempo
            var relNivelRow = GisaDataSetHelper.GetInstance().Integ_RelacaoExternaNivel.NewInteg_RelacaoExternaNivelRow();
            relNivelRow.Data = correspondenciaDoc.EntidadeExterna.Timestamp;
            relNivelRow.DataIntegracao = data;
            relNivelRow.Integ_EntidadeExternaRow = (GISADataset.Integ_EntidadeExternaRow)rows[correspondenciaDoc.EntidadeExterna];
            relNivelRow.NivelRow = (GISADataset.NivelRow)rows[correspondenciaDoc.EntidadeInterna];
            relNivelRow.Versao = new byte[] { };
            relNivelRow.isDeleted = 0;

            var relsDoc = GisaDataSetHelper.GetInstance().Integ_RelacaoExternaNivel.Cast<GISADataset.Integ_RelacaoExternaNivelRow>().
                Where(r => r.IDNivel == ((GISADataset.NivelRow)rows[correspondenciaDoc.EntidadeInterna]).ID &&
                    r.IDEntidadeExterna == ((GISADataset.Integ_EntidadeExternaRow)rows[correspondenciaDoc.EntidadeExterna]).ID &&
                    r.Data == relNivelRow.Data).SingleOrDefault();

            if (relsDoc == null)
                GisaDataSetHelper.GetInstance().Integ_RelacaoExternaNivel.AddInteg_RelacaoExternaNivelRow(relNivelRow);

            foreach (var correspondenciaRA in correspondenciaDoc.CorrespondenciasRAs)
            {
                var relControloAutRow = GisaDataSetHelper.GetInstance().Integ_RelacaoExternaControloAut.NewInteg_RelacaoExternaControloAutRow();
                relControloAutRow.Data = correspondenciaRA.EntidadeExterna.Timestamp;
                relControloAutRow.DataIntegracao = data;
                relControloAutRow.Integ_EntidadeExternaRow = (GISADataset.Integ_EntidadeExternaRow)rows[correspondenciaRA.EntidadeExterna];
                relControloAutRow.ControloAutRow = (GISADataset.ControloAutRow)rows[correspondenciaRA.EntidadeInterna];
                relControloAutRow.Versao = new byte[] { };
                relControloAutRow.isDeleted = 0;
                
                var relsRA = GisaDataSetHelper.GetInstance().Integ_RelacaoExternaControloAut.Cast<GISADataset.Integ_RelacaoExternaControloAutRow>().
                    Where(r => r.IDControloAut == ((GISADataset.ControloAutRow)rows[correspondenciaRA.EntidadeInterna]).ID &&
                        r.IDEntidadeExterna == ((GISADataset.Integ_EntidadeExternaRow)rows[correspondenciaRA.EntidadeExterna]).ID &&
                        r.Data == relControloAutRow.Data).SingleOrDefault();

                if (relsRA == null)
                    GisaDataSetHelper.GetInstance().Integ_RelacaoExternaControloAut.AddInteg_RelacaoExternaControloAutRow(relControloAutRow);
            }
        }
Exemple #7
0
        internal static bool Save(CorrespondenciaDocs correspondenciaDoc, Dictionary<Entidade, DataRow> rows)
        {
            var dg = (DocumentoGisa)correspondenciaDoc.EntidadeInterna;

            // listas de IDs tanto dos documentos como dos controlos de autoridade criados para serem usados na
            // actualização dos índices de pesquisa como também na atribuição de permissões (somente no caso
            // dos documentos)
            List<long> nIDs = new List<long>();
            List<string> produtoresID = new List<string>();
            List<string> assuntosID = new List<string>();
            List<string> tipologiasID = new List<string>();

            // documentos que vão ser-lhes actualizadas as permissões
            var nRows = new List<GISADataset.NivelRow>();
            nRows = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().Where(r => r.RowState == DataRowState.Added).ToList();

            // atribuição de permissões aos documentos novos
            nRows.ForEach(r => {
                var rhRow = r.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().FirstOrDefault();
                if (rhRow == null)
                    PermissoesHelper.AddNewNivelGrantPermissions(r);
                else
                    PermissoesHelper.AddNewNivelGrantPermissions(r, rhRow.NivelRowByNivelRelacaoHierarquicaUpper);
            });

            // manter uma lista de niveis e controlos de autoridade criados para que seja possível actualizar o 
            // índice de pesquisa
            var documentoRows = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().Where(r => r.RowState == DataRowState.Added && r.IDTipoNivel == (long)TipoNivel.DOCUMENTAL).ToList();
            var produtorRows = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Where(r => r.IDTipoNoticiaAut == (int)TipoNoticiaAut.EntidadeProdutora && r.RowState == DataRowState.Added).ToList();
            var assuntoRows = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Where(r => (r.IDTipoNoticiaAut == (int)TipoNoticiaAut.Onomastico || r.IDTipoNoticiaAut == (int)TipoNoticiaAut.Ideografico || r.IDTipoNoticiaAut == (int)TipoNoticiaAut.ToponimicoGeografico) && r.RowState == DataRowState.Added).ToList();
            var tipologiaRows = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Where(r => r.IDTipoNoticiaAut == (int)TipoNoticiaAut.TipologiaInformacional && r.RowState == DataRowState.Added).ToList();
            
            // guardar nas listas os IDs dos documentos e dos controlos de autoridade que foram atribuidos na
            // base de dados durante o save e criar registos de adição/modificação dos niveis e dos 
            // controlos de autoridade
            GISADataset.TrusteeUserRow tuOperator = SessionHelper.GetGisaPrincipal().TrusteeUserOperator;
            DateTime data = DateTime.Now;
            GISADataset.TrusteeUserRow tuAuthor = null;

            var docRow = rows[correspondenciaDoc.EntidadeInterna];
            var docToReg = default(GISADataset.NivelRow);
            if (Concorrencia.WasRecordModified(docRow) || Concorrencia.WasRecordModified(((GISADataset.NivelRow)docRow).GetFRDBaseRows().Single()))
                docToReg = docRow as GISADataset.NivelRow;

            if (SessionHelper.GetGisaPrincipal().TrusteeUserAuthor != null && !(SessionHelper.GetGisaPrincipal().TrusteeUserAuthor.RowState == DataRowState.Detached))
                tuAuthor = SessionHelper.GetGisaPrincipal().TrusteeUserAuthor;

            // VALIDAÇÕES


            //validar documento novo
            PersistencyHelper.ValidaIntegDocExtPreSaveArguments psArgs = new PersistencyHelper.ValidaIntegDocExtPreSaveArguments();
            PersistencyHelper.ValidaIntegDocExtPreConcArguments pcArgs = new PersistencyHelper.ValidaIntegDocExtPreConcArguments();
            
            var pcArgsLst = new List<PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments>();
            var psArgsNivelLst = new List<PersistencyHelper.SetNewCodigosPreSaveArguments>();
            foreach (var nRow in documentoRows)
            {
                var pcArgsNewNivel = new PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments();
                var psArgsNivel = new PersistencyHelper.SetNewCodigosPreSaveArguments();
                var pcArgsNivelUniqueCode = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();

                // dados que serão usados no delegate responsável pela criação do nível documental
                var rhRow = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single();
                pcArgsNivelUniqueCode.nRowID = nRow.ID;
                pcArgsNivelUniqueCode.ndRowID = nRow.GetNivelDesignadoRows().Single().ID;
                pcArgsNivelUniqueCode.rhRowID = nRow.ID;
                pcArgsNivelUniqueCode.rhRowIDUpper = rhRow.IDUpper;
                pcArgsNivelUniqueCode.frdBaseID = nRow.GetFRDBaseRows().Single().ID;
                pcArgsNivelUniqueCode.testOnlyWithinNivel = true;

                pcArgsNewNivel.IDTipoNivelRelacionado = rhRow.IDTipoNivelRelacionado;
                pcArgsNewNivel.argsNivel = pcArgsNivelUniqueCode;

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

                pcArgsLst.Add(pcArgsNewNivel);
                psArgsNivelLst.Add(psArgsNivel);
            }

            if (documentoRows.Count == 0 && dg != null)
            {
                var rhRowOld = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().SingleOrDefault(r => r.RowState == DataRowState.Deleted);
                var rhRowNew = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().SingleOrDefault(r => r.RowState == DataRowState.Added);
                if (rhRowOld != null && rhRowNew != null)
                {
                    var nRow = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().Single(r => r.ID == dg.Id);
                    var pcArgsNewNivel = new PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments();
                    var psArgsNivel = new PersistencyHelper.SetNewCodigosPreSaveArguments();
                    var pcArgsNivelUniqueCode = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();

                    pcArgsNewNivel.argsNivel = pcArgsNivelUniqueCode;

                    // dados que serão usados no delegate responsável pela criação do nível documental
                    pcArgsNivelUniqueCode.nRowID = nRow.ID;
                    pcArgsNivelUniqueCode.ndRowID = nRow.GetNivelDesignadoRows()[0].ID;
                    pcArgsNivelUniqueCode.rhRowID = nRow.ID;
                    pcArgsNivelUniqueCode.rhRowIDUpper = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDUpper;
                    pcArgsNivelUniqueCode.frdBaseID = nRow.GetFRDBaseRows()[0].ID;
                    pcArgsNivelUniqueCode.testOnlyWithinNivel = true;

                    pcArgsNewNivel.IDTipoNivelRelacionado = TipoNivelRelacionado.D;

                    psArgsNivel.createNewNivelCodigo = false;
                    psArgsNivel.createNewUFCodigo = false;

                    pcArgsLst.Add(pcArgsNewNivel);
                    psArgsNivelLst.Add(psArgsNivel);
                }
            }

            pcArgs.newDocsList = pcArgsLst;
            psArgs.newDocArgs = psArgsNivelLst;

            // validar controlo de autoridade novo
            List<PersistencyHelper.NewControloAutPreSaveArguments> newControloAutArgs = new List<PersistencyHelper.NewControloAutPreSaveArguments>();
            foreach (var caRow in GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Where(c => c.RowState == DataRowState.Added))
            {
                PersistencyHelper.NewControloAutPreSaveArguments args = new PersistencyHelper.NewControloAutPreSaveArguments();
                if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora))
                {
                    var nRow = caRow.GetNivelControloAutRows()[0].NivelRow;
                    args.nID = nRow.ID;
                    args.epCodigo = nRow.Codigo;
                }

                args.caID = caRow.ID;
                args.dID = caRow.GetControloAutDicionarioRows()[0].DicionarioRow.ID;
                args.dTermo = caRow.GetControloAutDicionarioRows()[0].DicionarioRow.Termo.Replace("'", "''");
                args.cadIDControloAut = caRow.GetControloAutDicionarioRows()[0].IDControloAut;
                args.cadIDDicionario = caRow.GetControloAutDicionarioRows()[0].IDDicionario;
                args.cadIDTipoControloAutForma = caRow.GetControloAutDicionarioRows()[0].IDTipoControloAutForma;

                newControloAutArgs.Add(args);
            }

            psArgs.newControloAutArgs = newControloAutArgs;

            // Atribuir permissões aos níveis criados
            PostSaveAction postSaveAction = new PostSaveAction();
            PersistencyHelper.UpdatePermissionsPostSaveArguments argsPostSave = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
            postSaveAction.args = argsPostSave;

            postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
            {
                
                if (!argsPostSave.cancelAction)
                {
                    if (docToReg != null)
                    {
                        var regNvl = GISA.Model.RecordRegisterHelper.CreateFRDBaseDataDeDescricaoRow(docToReg.GetFRDBaseRows()[0], tuOperator, tuAuthor, data);
                        GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.AddFRDBaseDataDeDescricaoRow(regNvl);
                        PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao, new DataRow[] { regNvl }, postSaveArgs.tran);
                    }

                    var regCa = produtorRows.Select(caRow => GISA.Model.RecordRegisterHelper.CreateControlAutDataDeDescricaoRow(caRow, tuOperator, tuAuthor, data)).ToList();
                    regCa.AddRange(assuntoRows.Select(caRow => GISA.Model.RecordRegisterHelper.CreateControlAutDataDeDescricaoRow(caRow, tuOperator, tuAuthor, data)));
                    regCa.AddRange(tipologiaRows.Select(caRow => GISA.Model.RecordRegisterHelper.CreateControlAutDataDeDescricaoRow(caRow, tuOperator, tuAuthor, data)));
                    regCa.ToList().ForEach(r => GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.AddControloAutDataDeDescricaoRow(r));
                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao, regCa.ToArray(), postSaveArgs.tran);
                }
            };

            PersistencyHelper.SaveResult saveResult =
                PersistencyHelper.save(ValidaIntegDocExt, pcArgs, ValidaIntegDocExt, psArgs, postSaveAction, true);

            if (saveResult == PersistencyHelper.SaveResult.unsuccessful)
            {
                var errorDetailsLst = pcArgsLst.Select(args => ((PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments)args.argsNivel).message)
                    .Where(msg => msg != null && msg.Length > 0).ToList();

                var errorDetails = new StringBuilder();
                errorDetailsLst.ForEach(str => errorDetails.AppendLine(str));


                // mostrar mensagem
                DialogResult dResult = MessageBox.Show(
                    errorDetails + System.Environment.NewLine +
                    "A gravação vai ser abortada.",
                    "Erro",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);

                return false;
            }
            else if (saveResult == PersistencyHelper.SaveResult.cancel)
            {
                GisaDataSetHelper.GetInstance().RejectChanges();
                return false;
            }
            else
            {
                var err = psArgs.newControloAutArgs.FirstOrDefault(e => !e.successTermo || (e.epCodigo != null && !e.successCodigo));
                if (err != null)
                {
                    var errStr = (err.epCodigo != null && !err.successCodigo) ?
                                    string.Format("O código {0} já está a ser utilizado por outra entidade produtora.", err.epCodigo) :
                                    string.Format("O termo {0} já está a ser utilizado por outro controlo de autoridade.", err.dTermo);

                    // mostrar mensagem
                    DialogResult dResult = MessageBox.Show(
                        errStr + System.Environment.NewLine +
                        "A gravação vai ser abortada.",
                        "Erro",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);

                    return false;
                }
            }

            // actualizar os IDs das entidades internas
            var entidadesInternas = rows.Keys.ToList().OfType<EntidadeInterna>().ToList();
            //var entidadesExternas = rows.Keys.ToList().OfType<EntidadeExterna>().ToList();
            entidadesInternas.ForEach(ent => ent.Id = (long)rows[ent]["ID"]);
            //entidadesExternas.ForEach(ent => ent.IDExterno = (long)rows[ent]["ID"]);

            // actualizar índices de pesquisa
            foreach (GISADataset.ControloAutRow caRow in produtorRows)
                produtoresID.Add(caRow.ID.ToString());

            foreach (GISADataset.ControloAutRow caRow in assuntoRows)
                assuntosID.Add(caRow.ID.ToString());

            foreach (GISADataset.ControloAutRow caRow in tipologiaRows)
                tipologiasID.Add(caRow.ID.ToString());

            var niveisDocumentais = nRows.Select(r => r.ID.ToString()).ToList();
            GISA.Search.Updater.updateNivelDocumental(niveisDocumentais);
            GISA.Search.Updater.updateNivelDocumentalComProdutores(niveisDocumentais);
            GISA.Search.Updater.updateProdutor(produtoresID);
            GISA.Search.Updater.updateAssunto(assuntosID);
            GISA.Search.Updater.updateTipologia(tipologiasID);

            return true;
        }
Exemple #8
0
        internal static bool CanSelectSerie(CorrespondenciaDocs correspondenciaDocs, out string message, out long produtorID)
        {
            message = string.Empty;
            produtorID = -1;
            var dg = correspondenciaDocs.EntidadeInterna as DocumentoGisa;

            //if (correspondenciaDocs.EntidadeInterna.Estado != TipoEstado.Novo && dg.Processo.Valor == null)
            //{
            //    message = "Só é possível selecionar séries para documentos novos.";
            //    return false;
            //}
            
            //if (dg.Processo.Valor != null && dg.Processo.Valor.Estado != TipoEstado.Novo)
            //{
            //    message = "Só não é possível selecionar uma série para documentos de processos já criados.";
            //    return false;
            //}

            var produtor = correspondenciaDocs.CorrespondenciasRAs.SingleOrDefault(c => ((RegistoAutoridadeExterno)c.EntidadeExterna).Tipo == TipoEntidadeExterna.Produtor);
            if (produtor == null || produtor.TipoOpcao == TipoOpcao.Ignorar)
            {
                message = "Para poder escolher uma série é necessário haver uma entidade produtora selecionada.";
                return false;
            }
            
            var ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
            try
            {
                if (produtor.EntidadeInterna.Estado != TipoEstado.Novo && produtor.EntidadeInterna.Id > 0)
                {
                    produtorID = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Single(r => r.ID == produtor.EntidadeInterna.Id).GetNivelControloAutRows().Single().NivelRow.ID;
                    if (DBAbstractDataLayer.DataAccessRules.NivelRule.Current.HasSeries(produtorID, ho.Connection))
                        return true;
                }
                message = "O produtor selecionado não tem qualquer série associada.";
                return false;
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                throw;
            }
            finally
            {
                ho.Dispose();
            }
        }
Exemple #9
0
        internal static long HasProdutorSeries(CorrespondenciaDocs correspondenciaDocs)
        {
            long produtorID = -1;
            var produtor = correspondenciaDocs.CorrespondenciasRAs.Single(c => ((RegistoAutoridadeExterno)c.EntidadeExterna).Tipo == TipoEntidadeExterna.Produtor);

            if (produtor.EntidadeInterna.Estado != TipoEstado.Novo && produtor.EntidadeInterna.Id > 0)
                produtorID = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().Single(r => r.ID == produtor.EntidadeInterna.Id).GetNivelControloAutRows().Single().NivelRow.ID;
            return produtorID;
        }
Exemple #10
0
        private static void ReavaliaEstado(CorrespondenciaDocs cDoc, CorrespondenciaRAs cRa)
        {
            foreach (TipoOpcao op in Enum.GetValues(typeof(TipoOpcao)))
            {
                if (cRa.TipoOpcao == TipoOpcao.Ignorar) continue;

                var ei = cRa.GetEntidadeInterna(op);
                if (ei == null) continue;

                var tnp = ((RegistoAutoridadeInterno)cRa.EntidadeInterna).TipoNoticiaAut;
                // se a entidade interna for uma EP e esta estiver relaccionada com um documento simples, o estado "novo" do documento não implica uma nova relação com o produtor
                // uma vez que o seu processo já pode ter essa associação
                if (tnp != TipoNoticiaAut.EntidadeProdutora && tnp != TipoNoticiaAut.TipologiaInformacional && (cDoc.EntidadeInterna.Estado == TipoEstado.Novo || ei.Estado == TipoEstado.Novo))
                {
                    cRa.EstadoRelacaoPorOpcao[op] = TipoEstado.Novo;
                    continue;
                }

                var dg = cDoc.EntidadeInterna as DocumentoGisa;
                var tipoEntidade = TipoEntidade.GetTipoEntidadeInterna(cRa.EntidadeExterna.Tipo);

                switch (tipoEntidade)
                {
                    case TipoEntidadeInterna.EntidadeProdutora:
                        if (dg.Processo == null && dg.Estado == TipoEstado.Novo)
                        {
                            cRa.EstadoRelacaoPorOpcao[op] = TipoEstado.Novo;
                            continue;
                        }

                        //if (dg.Processo.Valor != null)
                        //    dg = dg.Processo.Valor;

                        if (ei.Estado == TipoEstado.Novo)
                            cRa.EstadoRelacaoPorOpcao[op] = TipoEstado.Novo;
                        else
                        {
                            var nRowCA = GisaDataSetHelper.GetInstance().NivelControloAut.Cast<GISADataset.NivelControloAutRow>().Single(r => r.IDControloAut == ei.Id).NivelRow;
                            cRa.EstadoRelacaoPorOpcao[op] = IsProdutor(dg.Id, nRowCA.ID) ? TipoEstado.SemAlteracoes : TipoEstado.Novo;
                        }
                        break;
                    case TipoEntidadeInterna.Tipologia:
                        if (cDoc.EntidadeInterna.Estado == TipoEstado.Novo)
                            cRa.EstadoRelacaoPorOpcao[op] = TipoEstado.Novo;
                        else
                        {
                            var caRow = GisaDataSetHelper.GetInstance().FRDBase.Cast<GISADataset.FRDBaseRow>().Single(frd => frd.IDNivel == dg.Id).GetIndexFRDCARows().Select(r => r.ControloAutRow).SingleOrDefault(r => r.IDTipoNoticiaAut == (long)TipoNoticiaAut.TipologiaInformacional);
                            if (caRow == null)
                                cRa.EstadoRelacaoPorOpcao[op] = TipoEstado.Novo;
                            else
                                cRa.EstadoRelacaoPorOpcao[op] = caRow.ID == ei.Id ? TipoEstado.SemAlteracoes : TipoEstado.Editar;
                        }
                        break;
                    default:
                        var indexFRDCARow = GisaDataSetHelper.GetInstance().FRDBase.Cast<GISADataset.FRDBaseRow>().Single(frd => frd.IDNivel == dg.Id).GetIndexFRDCARows().SingleOrDefault(r => r.IDControloAut == ei.Id);
                        cRa.EstadoRelacaoPorOpcao[op] = indexFRDCARow != null ? TipoEstado.SemAlteracoes : TipoEstado.Novo;
                        break;
                }
            }
        }
Exemple #11
0
        internal static bool CanSelectProcesso(CorrespondenciaDocs correspondenciaDocs, out string message)
        {
            message = string.Empty;

            if (correspondenciaDocs.EntidadeInterna.Estado != TipoEstado.Novo)
            {
                message = "Só é possível selecionar processos para documentos novos.";
                return false;
            }

            return true;
        }
Exemple #12
0
 private static void IgnoreAllOptions(CorrespondenciaDocs cDoc)
 {
     cDoc.CorrespondenciasRAs.ForEach(cRA => cRA.TipoOpcao = TipoOpcao.Ignorar);
 }
Exemple #13
0
        public static void ReavaliaEstado(CorrespondenciaDocs cDoc)
        {
            if (cDoc.TipoOpcao == TipoOpcao.Ignorar)
            {
            //    IgnoreAllOptions(cDoc);
                return;
            }

            ReavaliaEstadoRAs(cDoc);

            var dg = cDoc.EntidadeInterna as DocumentoGisa;

            // reavaliar data de produção            
            if (dg.Estado == TipoEstado.SemAlteracoes)
            {
                var nRow = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().Single(r => r.ID == dg.Id);
                var dpRow = nRow.GetFRDBaseRows().Single().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))
                    dg.DataCriacao.AdicionaValorOriginal(new DataIncompleta(dpRow.InicioAno, dpRow.InicioMes, dpRow.InicioDia, dpRow.FimAno, dpRow.FimMes, dpRow.FimDia));

                if (dg.DataCriacao.GetValor(TipoOpcao.Original) != null && dg.DataCriacao.GetValor(TipoOpcao.Original).Equals(dg.DataCriacao.GetValor(TipoOpcao.Sugerida)))
                    dg.DataCriacao.EstadoRelacaoPorOpcao[TipoOpcao.Sugerida] = TipoEstado.SemAlteracoes;
                else
                    dg.DataCriacao.EstadoRelacaoPorOpcao[TipoOpcao.Sugerida] = dg.DataCriacao.Escolhas.ContainsKey(TipoOpcao.Original) ? TipoEstado.Editar : TipoEstado.Novo;
                if (dg.DataCriacao.EstadoRelacaoPorOpcao.ContainsKey(TipoOpcao.Trocada))
                {
                    if (dg.DataCriacao.GetValor(TipoOpcao.Original).Equals(dg.DataCriacao.GetValor(TipoOpcao.Trocada)))
                        dg.DataCriacao.EstadoRelacaoPorOpcao[TipoOpcao.Trocada] = TipoEstado.SemAlteracoes;
                    else
                        dg.DataCriacao.EstadoRelacaoPorOpcao[TipoOpcao.Trocada] = dg.DataCriacao.Escolhas.ContainsKey(TipoOpcao.Original) ? TipoEstado.Editar : TipoEstado.Novo;
                }
            }
            else
            {
                dg.DataCriacao.RemoveValorOriginal();
                dg.DataCriacao.EstadoRelacaoPorOpcao[TipoOpcao.Sugerida] = TipoEstado.Novo;
                if (dg.DataCriacao.EstadoRelacaoPorOpcao.ContainsKey(TipoOpcao.Trocada))
                    dg.DataCriacao.EstadoRelacaoPorOpcao[TipoOpcao.Trocada] = TipoEstado.Novo;
            }

            //AddProcessoOriginal(cDoc);

            // reavaliar processo
            //if (dg.Processo.Valor != null)
            //{
            //    dg.Processo.EstadoRelacaoPorOpcao[dg.Processo.TipoOpcao] = TipoEstado.Novo;
            //    if (dg.Estado != TipoEstado.Novo && dg.Processo.Valor.Estado != TipoEstado.Novo)
            //    {
            //        var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().SingleOrDefault(r => r.ID == dg.Id && r.IDUpper == dg.Processo.Valor.Id);
            //        dg.Processo.EstadoRelacaoPorOpcao[dg.Processo.TipoOpcao] = rhRow != null ? TipoEstado.SemAlteracoes : TipoEstado.Editar;
            //    }
            //    else if (dg.Estado != TipoEstado.Novo && dg.Processo.Valor.Estado == TipoEstado.Novo)
            //        dg.Processo.EstadoRelacaoPorOpcao[dg.Processo.TipoOpcao] = TipoEstado.Editar;
            //    else if (dg.Processo.Valor.Estado != TipoEstado.Novo)
            //    {
            //        dg.Serie.RemoveValor();
            //        dg.Serie.TipoOpcao = TipoOpcao.Ignorar;
            //    }
            //}

            // reavaliar serie
            ReavaliaEstadoSerie(cDoc);
        }
Exemple #14
0
 public static void ReavaliaEstadoSerie(CorrespondenciaDocs cDoc)
 {
     var dg = cDoc.EntidadeInterna as DocumentoGisa;
     if (dg.Serie.Valor != null)
     {
         //if (dg.Estado == TipoEstado.Novo || (dg.Estado != TipoEstado.Novo && dg.Processo != null && dg.Processo.Valor.Estado == TipoEstado.Novo))
         //{
         //    dg.Serie.EstadoRelacaoPorOpcao[dg.Serie.TipoOpcao] = TipoEstado.Novo;
         //    if (dg.Estado != TipoEstado.Novo)
         //    {
         //        var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().SingleOrDefault(r => r.ID == dg.Id && r.IDUpper == dg.Serie.Valor.Id);
         //        dg.Serie.EstadoRelacaoPorOpcao[dg.Serie.TipoOpcao] = rhRow != null ? TipoEstado.SemAlteracoes : TipoEstado.Novo;
         //    }
         //}
         //else
         //{
         //    dg.Serie.RemoveValor();
         //    dg.Serie.TipoOpcao = TipoOpcao.Ignorar;
         //}
     }
 }
Exemple #15
0
        private static string RelatorioIntegracao(CorrespondenciaDocs correspondencia, Dictionary<Entidade, DataRow> rows)
        {
            StringBuilder report = new StringBuilder();
            report.AppendLine(correspondencia.EntidadeExterna.IDExterno);
            report.AppendLine("Correspondências entre entidades DocInPorto e entidades Gisa:");

            report.AppendLine(AppendCorrespondencia(correspondencia, rows));

            //if (correspondencia.correspondenciaDocsCompostos != null)
            //    report.AppendLine(AppendCorrespondencia(correspondencia.correspondenciaDocsCompostos, rows));

            correspondencia.CorrespondenciasRAs.ForEach(c => report.AppendLine(AppendCorrespondencia(c, rows)));

            var nRow = rows[correspondencia.EntidadeInterna] as GISADataset.NivelRow;
            var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().Where(rh => rh.RowState == DataRowState.Added && rh.ID == nRow.ID).ToList();
            if (rhRow.Count > 0)
            {
                report.AppendLine("Relações hierárquicas superior:");
                report.AppendLine(AppendRelacaoHierarquica(rhRow[0]));
            }
            
            var indexFRDCARows = nRow.GetFRDBaseRows()[0].GetIndexFRDCARows().Where(r => r.RowState == DataRowState.Added).ToList();
            if (indexFRDCARows.Count > 0)
            {
                report.AppendLine("Associações novas entre documentos e controlos de autoridade:");
                indexFRDCARows.ForEach(r => report.AppendLine(AppendAssociacao(r)));
            }

            report.AppendLine(System.Environment.NewLine);

            return report.ToString();
        }
Exemple #16
0
 // sempre que há uma alteração na selecção do produtor, a série escolhida é retirada das opções disponíveis
 internal static void SelectIgnorarSerie(CorrespondenciaDocs correspondenciaDocs)
 {
     var dg = correspondenciaDocs.EntidadeInterna as DocumentoGisa;
     dg.Serie.RemoveValor();
     dg.Serie.TipoOpcao = TipoOpcao.Ignorar;
 }
Exemple #17
0
 private static string AppendCorrespondencia(CorrespondenciaDocs correspondencia, Dictionary<Entidade, DataRow> rows)
 {
     return string.Format("* {0}{2} -> {1}{3}",
         correspondencia.EntidadeExterna.IDExterno,
         correspondencia.EntidadeInterna.Titulo,
         Novo(rows[correspondencia.EntidadeExterna]),
         Novo(rows[correspondencia.EntidadeInterna]));
 }
Exemple #18
0
 internal static void RevertCorrespondencia(CorrespondenciaDocs correspondencia)
 {
     correspondencia.Edited = false;
     correspondencia.TipoOpcao = TipoOpcao.Sugerida;
     correspondencia.AllCorrespondenciasRAs.ForEach(cRa => cRa.TipoOpcao = TipoOpcao.Sugerida);
     var dg = correspondencia.EntidadeInterna as DocumentoGisa;
     dg.RevertProperties();
 }
Exemple #19
0
        internal static void MapEntidadeExternaToDataRows(CorrespondenciaDocs correspondenciaDoc, Dictionary<Entidade, DataRow> rows)
        {
            // mapear documento externo
            var docExt = (DocumentoExterno)correspondenciaDoc.EntidadeExterna;
            rows[correspondenciaDoc.EntidadeExterna] = MapEntidadeExternaToDataRows(docExt, (int)docExt.Sistema, (int)docExt.Tipo);

            // mapear registos de autoridade externos desse documento
            foreach (var correspondenciaRA in correspondenciaDoc.CorrespondenciasRAs)
            {
                var entidadeExterna = (RegistoAutoridadeExterno)correspondenciaRA.EntidadeExterna;
                rows[correspondenciaRA.EntidadeExterna] = MapEntidadeExternaToDataRows(correspondenciaRA.EntidadeExterna, (int)entidadeExterna.Sistema, (int)entidadeExterna.Tipo);
            }
        }
Exemple #20
0
        private static void MapConteudoEstruturado(CorrespondenciaDocs correspondenciaDoc, Dictionary<Entidade, DataRow> rows)
        {
            var docExt = correspondenciaDoc.EntidadeExterna as DocumentoComposto;
            var dg = correspondenciaDoc.EntidadeInterna as DocumentoGisa;
            if (dg.Processo != null) return;

            var nRow = rows[dg] as GISADataset.NivelRow;
            var frdRow = nRow.GetFRDBaseRows().Single();
            var caTipologia = frdRow.GetIndexFRDCARows().Where(i => i["Selector"] != DBNull.Value && i.Selector == -1)
                .Select(r => r.ControloAutRow)
                .SingleOrDefault(ca => ca.IDTipoNoticiaAut == (long)TipoNoticiaAut.TipologiaInformacional);
            
            if (caTipologia != null && caTipologia.TipoTipologiasRow != null && caTipologia.TipoTipologiasRow.BuiltInName.Equals("PROCESSO_DE_OBRAS"))
            {
                var licenca = frdRow.GetLicencaObraRows().SingleOrDefault();
                if (licenca == null)
                {
                    licenca = GisaDataSetHelper.GetInstance().LicencaObra.NewLicencaObraRow();
                    licenca.FRDBaseRow = frdRow;
                    licenca.TipoObra = string.Empty;
                    licenca.PropriedadeHorizontal = false;
                    licenca.PHTexto = string.Empty;
                    licenca.Versao = new byte[] { };
                    licenca.isDeleted = 0;
                    GisaDataSetHelper.GetInstance().LicencaObra.AddLicencaObraRow(licenca);
                }

                correspondenciaDoc.CorrespondenciasRAs.Where(cRA => ((RegistoAutoridadeInterno)cRA.EntidadeInterna).TipoNoticiaAut == TipoNoticiaAut.ToponimicoGeografico).ToList().ForEach(cRA =>
                {
                    var caRow = CreateControloAut(cRA, rows);
                    var locObr = licenca.GetLicencaObraLocalizacaoObraActualRows().SingleOrDefault(r => r.IDControloAut == caRow.ID);
                    if (locObr == null)
                    {
                        locObr = GisaDataSetHelper.GetInstance().LicencaObraLocalizacaoObraActual.NewLicencaObraLocalizacaoObraActualRow();
                        locObr.LicencaObraRow = licenca;
                        locObr.ControloAutRow = caRow;
                        locObr.IDFRDBase = frdRow.ID;
                        locObr.NumPolicia = docExt.LocalizacoesObraDesignacaoActual.SingleOrDefault(l => l.LocalizacaoObraDesignacaoActual.Equals((Model.EntidadesExternas.Geografico)cRA.EntidadeExterna)).NroPolicia;
                        locObr.Versao = new byte[] { };
                        locObr.isDeleted = 0;
                        GisaDataSetHelper.GetInstance().LicencaObraLocalizacaoObraActual.AddLicencaObraLocalizacaoObraActualRow(locObr);
                    }
                });

                correspondenciaDoc.CorrespondenciasRAs.Where(cRA => ((RegistoAutoridadeInterno)cRA.EntidadeInterna).TipoNoticiaAut == TipoNoticiaAut.Onomastico).ToList().ForEach(cRA =>
                {
                    var caRow = CreateControloAut(cRA, rows);
                    var tecObr = licenca.GetLicencaObraTecnicoObraRows().SingleOrDefault(r => r.IDControloAut == caRow.ID);
                    if (tecObr == null)
                    {
                        tecObr = GisaDataSetHelper.GetInstance().LicencaObraTecnicoObra.NewLicencaObraTecnicoObraRow();
                        tecObr.LicencaObraRow = licenca;
                        tecObr.ControloAutRow = caRow;
                        tecObr.IDFRDBase = frdRow.ID;
                        tecObr.Versao = new byte[] { };
                        tecObr.isDeleted = 0;
                        GisaDataSetHelper.GetInstance().LicencaObraTecnicoObra.AddLicencaObraTecnicoObraRow(tecObr);
                    }
                });
                
                dg.Requerentes.Where(r => r.TipoOpcao != TipoOpcao.Ignorar).ToList().ForEach(requerente =>
                {
                    var req = licenca.GetLicencaObraRequerentesRows().SingleOrDefault(r => r.Nome == requerente.Valor && r.Tipo.ToUpper().Trim().Equals("INICIAL"));
                    if (req == null)
                    {
                        req = GisaDataSetHelper.GetInstance().LicencaObraRequerentes.NewLicencaObraRequerentesRow();
                        req.IDFRDBase = licenca.IDFRDBase;
                        req.Nome = requerente.Valor;
                        req.Tipo = "INICIAL";
                        req.isDeleted = 0;
                        req.Versao = new byte[] { };
                        GisaDataSetHelper.GetInstance().LicencaObraRequerentes.AddLicencaObraRequerentesRow(req);
                    }
                });

                dg.Averbamentos.Where(r => r.TipoOpcao != TipoOpcao.Ignorar).ToList().ForEach(averbamento =>
                {
                    var av = licenca.GetLicencaObraRequerentesRows().SingleOrDefault(r => r.Nome == averbamento.Valor && r.Tipo.ToUpper().Trim().Equals("AVRB"));
                    if (av == null)
                    {
                        av = GisaDataSetHelper.GetInstance().LicencaObraRequerentes.NewLicencaObraRequerentesRow();
                        av.IDFRDBase = licenca.IDFRDBase;
                        av.Nome = averbamento.Valor;
                        av.Tipo = "AVRB";
                        av.isDeleted = 0;
                        av.Versao = new byte[] { };
                        GisaDataSetHelper.GetInstance().LicencaObraRequerentes.AddLicencaObraRequerentesRow(av);
                    }
                });
            }
            else
            {
                var conteudo = frdRow.GetSFRDConteudoEEstruturaRows().SingleOrDefault();
                if (conteudo == null)
                {
                    conteudo = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.NewSFRDConteudoEEstruturaRow();
                    conteudo.FRDBaseRow = frdRow;
                    conteudo.ConteudoInformacional = "";
                    conteudo.Incorporacao = "";
                    conteudo.isDeleted = 0;
                    conteudo.Versao = new byte[] { };
                    GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.AddSFRDConteudoEEstruturaRow(conteudo);
                }

                var s = new StringBuilder();
                var requerentes = dg.Requerentes.Where(r => r.TipoOpcao != TipoOpcao.Ignorar).ToList();
                if (requerentes.Count > 0)
                {
                    s.AppendLine();

                    s.Append("Requerentes (inicial): ");
                    requerentes.ForEach(requerente => s.AppendFormat("{0}, ", requerente.Valor));
                    s.Remove(s.Length - 2, 2);

                    s.AppendLine();
                }

                var averbamentos = dg.Averbamentos.Where(r => r.TipoOpcao != TipoOpcao.Ignorar).ToList();
                if (averbamentos.Count > 0)
                {
                    s.AppendLine();

                    s.Append("Requerentes (averbamento): ");
                    averbamentos.ForEach(averbamento => s.AppendFormat("{0}, ", averbamento.Valor));
                    s.Remove(s.Length - 2, 2);

                    s.AppendLine();
                }

                var locais = correspondenciaDoc.CorrespondenciasRAs.Where(cRA => ((RegistoAutoridadeInterno)cRA.EntidadeInterna).TipoNoticiaAut == TipoNoticiaAut.ToponimicoGeografico).ToList();
                if (locais.Count > 0)
                {
                    s.AppendLine();

                    s.Append("Locais: ");
                    locais.ForEach(cRA => { 
                        var caRow = CreateControloAut(cRA, rows); 
                        var index = frdRow.GetIndexFRDCARows().SingleOrDefault(r => r.IDControloAut == caRow.ID);
                        if (index == null)
                        {
                            index = GisaDataSetHelper.GetInstance().IndexFRDCA.NewIndexFRDCARow();
                            index.ControloAutRow = caRow;
                            index.FRDBaseRow = frdRow;
                            index.Versao = new byte[] { };
                            index.isDeleted = 0;
                            GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(index);
                        }
                        s.AppendFormat("{0}, ", cRA.EntidadeInterna.Titulo); });
                    s.Remove(s.Length - 2, 2);

                    s.AppendLine();
                }

                var tecnicos = correspondenciaDoc.CorrespondenciasRAs.Where(cRA => ((RegistoAutoridadeInterno)cRA.EntidadeInterna).TipoNoticiaAut == TipoNoticiaAut.Onomastico).ToList();
                if (tecnicos.Count > 0)
                {
                    s.AppendLine();

                    s.Append("Técnicos de obra: ");
                    tecnicos.ForEach(cRA => {
                        var caRow = CreateControloAut(cRA, rows);
                        var index = frdRow.GetIndexFRDCARows().SingleOrDefault(r => r.IDControloAut == caRow.ID);
                        if (index == null)
                        {
                            index = GisaDataSetHelper.GetInstance().IndexFRDCA.NewIndexFRDCARow();
                            index.ControloAutRow = caRow;
                            index.FRDBaseRow = frdRow;
                            index.Versao = new byte[] { };
                            index.isDeleted = 0;
                            GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(index);
                        }
                        s.AppendFormat("{0}, ", cRA.EntidadeInterna.Titulo); });
                    s.Remove(s.Length - 2, 2);
                }

                if (s.Length > 0)
                    conteudo.ConteudoInformacional += s.ToString();
            }
        }
 private void ShowDocument(CorrespondenciaDocs c)
 {
     switch (c.EntidadeExterna.Tipo)
     {
         case TipoEntidadeExterna.Documento:
             this.controlDocumentoExterno1.Documento = (DocumentoSimples)c.EntidadeExterna;
             this.controlDocumentoExterno1.BringToFront();
             this.controlDocumentoExterno1.Visible = true;
             this.controlDocumentoGisa1.CorrespondenciaDocumento = c;
             this.controlDocumentoGisa1.BringToFront();
             this.controlDocumentoGisa1.Visible = true;
             this.controlDocumentoGisa1.AddRefreshEvents();
             this.gbDocInPorto.Text = "Documento DocInPorto";
             break;
         case TipoEntidadeExterna.DocumentoAnexo:
             this.controlDocumentoExternoAnexo1.Documento = (DocumentoAnexo)c.EntidadeExterna;
             this.controlDocumentoExternoAnexo1.BringToFront();
             this.controlDocumentoExternoAnexo1.Visible = true;
             this.controlDocumentoGisaAnexo1.CorrespondenciaDocumento = c;
             this.controlDocumentoGisaAnexo1.BringToFront();
             this.controlDocumentoGisaAnexo1.Visible = true;
             this.controlDocumentoGisaAnexo1.AddRefreshEvents();
             this.gbDocInPorto.Text = "Anexo DocInPorto";
             break;
         case TipoEntidadeExterna.DocumentoComposto:
             this.controlDocumentoExternoProcesso1.Documento = (DocumentoComposto)c.EntidadeExterna;
             this.controlDocumentoExternoProcesso1.BringToFront();
             this.controlDocumentoExternoProcesso1.Visible = true;
             this.controlDocumentoGisaProcesso1.CorrespondenciaDocumento = c;
             this.controlDocumentoGisaProcesso1.BringToFront();
             this.controlDocumentoGisaProcesso1.Visible = true;
             this.controlDocumentoGisaProcesso1.AddRefreshEvents();
             this.gbDocInPorto.Text = "Processo DocInPorto";
             break;
     }
 }
Exemple #22
0
        public static void AddTipologiaOriginal(CorrespondenciaDocs correspondenciaDoc)
        {
            var nRow = GisaDataSetHelper.GetInstance().Nivel.Cast<GISADataset.NivelRow>().SingleOrDefault(r => r.ID == correspondenciaDoc.EntidadeInterna.Id);
            if (nRow == null) return;

            var caRow = nRow.GetFRDBaseRows()[0].GetIndexFRDCARows().Select(i => i.ControloAutRow).SingleOrDefault(ca => ca.IDTipoNoticiaAut == (long)TipoNoticiaAut.TipologiaInformacional);
            if (caRow == null) return;

            var rai = CreateRegistoAutoridadeInterno(caRow);
            rai.Estado = TipoEstado.SemAlteracoes;
                        
            // os anexos não têm tipologia
            var correspTip = correspondenciaDoc.CorrespondenciasRAs.SingleOrDefault(cRa => cRa.EntidadeExterna.Tipo == TipoEntidadeExterna.TipologiaInformacional);
            if (correspTip != null)
                correspTip.AddEntidadeInternaOriginal(rai);            
        }