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; }
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(); } } }
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 : ""; }
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; }
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; }
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; }