private bool CreateDocumentoInterno(ref EntidadeInterna ei, long tnr) { bool cancel = false; FormAddNivel form = new FormAddNivel(); form.IDTipoNivelRelacionado = tnr; if (ei != null) { form.txtDesignacao.Text = ei != null ? ((DocumentoGisa)ei).Titulo : ""; if (tnr == TipoNivelRelacionado.SD) form.txtCodigo.Text = ei != null ? ((DocumentoGisa)ei).Codigo : ""; } switch (form.ShowDialog()) { case DialogResult.OK: var documento = new DocumentoGisa(); documento.Tipo = tnr == (long)TipoNivelRelacionado.SD ? TipoEntidadeInterna.DocumentoSimples : TipoEntidadeInterna.DocumentoComposto; if (tnr == (long)TipoNivelRelacionado.SD) documento.CopyProperties(this.correspDocumento); documento.Titulo = form.txtDesignacao.Text; documento.Codigo = form.txtCodigo.Text; ei = this.InternalEntitiesLst.AddInternalEntity(documento); break; case DialogResult.Cancel: cancel = true; break; } return cancel; }
private void CreateED() { // as ED usam o mesmo form que os níveis documentais FormAddNivel frm = new FormAddNivel(); GISADataset.TipoNivelRelacionadoRow tnrRow = null; tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(null); frm.IDTipoNivelRelacionado = tnrRow.ID; // necessário para validação do código parcial handleNewNivel(frm, null, tnrRow); UpdateToolBarButtons(); }
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 void EditNivelAction() { GISADataset.NivelRow nRow = null; if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural) { if (this.nivelNavigator1.EPFilterMode) nRow = this.nivelNavigator1.SelectedNivel; else nRow = ((GISATreeNode)this.nivelNavigator1.SelectedNode).NivelRow; } else nRow = this.nivelNavigator1.SelectedNivel; if (nRow.TipoNivelRow.ID == TipoNivel.ESTRUTURAL || nRow.TipoNivelRow.ID == TipoNivel.OUTRO) { var trace_msg = string.Format("Trying to edit UI of type {0}...", nRow.TipoNivelRow.ID.ToString()); Trace.WriteLine(trace_msg); Trace.WriteLine("The nivel row ID is: " + nRow.ID.ToString()); Debug.Assert(false, trace_msg); } // Criar o tipo de form correcto conforme o tipo de nível em edição FormAddNivel frm = null; if (nRow.TipoNivelRow.ID == TipoNivel.LOGICO) { // Nível é uma Entidade detentora ou um grupo de arquivos frm = new FormAddNivel(); frm.IDTipoNivelRelacionado = nRow.TipoNivelRow.ID; } else if (nRow.TipoNivelRow.ID == TipoNivel.ESTRUTURAL) { //// Nível estrutural //if (GisaDataSetHelper.UsingNiveisOrganicos()) // frm = new FormNivelEstrutural(); //else // frm = new FormAddNivel(); //frm.IDTipoNivelRelacionado = nRow.TipoNivelRow.ID; } else if (nRow.TipoNivelRow.ID == TipoNivel.DOCUMENTAL) { // Nível documental frm = new FormAddNivel(); frm.IDTipoNivelRelacionado = nRow.TipoNivelRow.ID; } else if (nRow.TipoNivelRow.ID == TipoNivel.OUTRO) { // Nível é uma unidade física } EditNivel(frm, nRow); }
private void ToolBarButtonCreateMenuItemClick(object sender, EventArgs e) { ((frmMain)TopLevelControl).EnterWaitMode(); GISADataset.TipoNivelRelacionadoRow tnrRow = ((TipoNivelMenuItem)sender).Row; FormAddNivel frm = null; GISADataset.NivelRow nivelRow = null; if (tnrRow.TipoNivelRow.ID == TipoNivel.LOGICO) { frm = new FormAddNivel(); nivelRow = ((GISATreeNode)this.nivelNavigator1.SelectedNode).NivelRow; } else if (tnrRow.TipoNivelRow.ID == TipoNivel.DOCUMENTAL) { // Nível documental frm = new FormNivelDocumental(); nivelRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select(string.Format("ID={0}", this.nivelNavigator1.ContextBreadCrumbsPathID.ToString()))[0]); ((FormNivelDocumental)frm).NivelRow = nivelRow; } else { // Nível estrutural if (GisaDataSetHelper.UsingNiveisOrganicos()) { frm = new FormNivelEstrutural(); ((FormNivelEstrutural)frm).caList.txtFiltroDesignacao.Clear(); ((FormNivelEstrutural)frm).caList.ReloadList(); } else frm = new FormNivelDocumental(); nivelRow = ((GISATreeNode)this.nivelNavigator1.SelectedNode).NivelRow; } long click = DateTime.Now.Ticks; frm.IDTipoNivelRelacionado = tnrRow.ID; // necessário para validação do código parcial bool successfulSave = handleNewNivel(frm, nivelRow, tnrRow); Debug.WriteLine("<<NewNivel>> " + new TimeSpan(DateTime.Now.Ticks - click).ToString()); ((frmMain)TopLevelControl).LeaveWaitMode(); // O UpdateToolBarButtons não é executado quando é adicionado um novo nível documental pois // esta operação já é feita durante a inserção do nó (caso essa inserção não aconteça por // motivos de conflito de concorrência o método pode ser executado de forma a impedir o // acesso de opções ao utilizador que poderiam levar a um crash da aplicação). Executar o // UpdateToolBarButtons neste ponto para a situação acima mencionada vai alterar // erradamente o estado dos botões if ((this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural && successfulSave) || (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Documental && !successfulSave)) { if (this.nivelNavigator1.SelectedItems.Count > 0) UpdateToolBarButtons(this.nivelNavigator1.SelectedItems[0]); else UpdateToolBarButtons(); } }