public static void validateCANewTermo(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.NewControloAutPreSaveArguments ncaPsa = null; ncaPsa = (PersistencyHelper.NewControloAutPreSaveArguments)args; GISADataset.DicionarioRow dicionarioRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select(string.Format("ID={0} OR Termo='{1}'", ncaPsa.dID.ToString(), ncaPsa.dTermo))[0]); GISADataset.ControloAutRow caRow = (GISADataset.ControloAutRow)(GisaDataSetHelper.GetInstance().ControloAut.Select("ID=" + ncaPsa.caID.ToString())[0]); //É usado a coluna ID do dicionarioRow uma vez que, se a execução deste método corresponder a uma re-execução da transacção na qual está inserida, o valor do ID passado como argumento pode já ter sido alterado no algoritmo de detecção de conflitos de concorrência (neste caso concreto já existir na base de dados o termo na tabela Dicionario) GISADataset.ControloAutDicionarioRow cadRow = null; if (GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", caRow.ID, dicionarioRow.ID, ncaPsa.cadIDTipoControloAutForma)).Length > 0) { cadRow = (GISADataset.ControloAutDicionarioRow)(GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", caRow.ID, dicionarioRow.ID, ncaPsa.cadIDTipoControloAutForma))[0]); } else if (GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", ncaPsa.cadIDControloAut, ncaPsa.cadIDDicionario, ncaPsa.cadIDTipoControloAutForma)).Length > 0) { cadRow = (GISADataset.ControloAutDicionarioRow)(GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut={0} AND IDDicionario={1} AND IDTipoControloAutForma={2}", ncaPsa.cadIDControloAut, ncaPsa.cadIDDicionario, ncaPsa.cadIDTipoControloAutForma))[0]); } else { Debug.Assert(false, "Situação imprevista!!"); } GISADataset.NivelControloAutRow ncaRow = null; GISADataset.NivelRow nRow = null; if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora)) { ncaRow = (GISADataset.NivelControloAutRow)(GisaDataSetHelper.GetInstance().NivelControloAut.Select("ID=" + ncaPsa.nID.ToString())[0]); nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + ncaPsa.nID.ToString())[0]); } if (!(DBAbstractDataLayer.DataAccessRules.DiplomaModeloRule.Current.isTermoUsedByOthers(caRow.ID, dicionarioRow.CatCode, dicionarioRow.Termo.Trim().Replace("'", "''"), false, caRow.TipoNoticiaAutRow.ID, ncaPsa.tran))) { ncaPsa.successTermo = true; } if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora) && DBAbstractDataLayer.DataAccessRules.NivelRule.Current.isUniqueCodigo(nRow.Codigo, nRow.ID, ncaPsa.tran)) { ncaPsa.successCodigo = true; } if (!ncaPsa.successTermo || (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora) && !ncaPsa.successCodigo)) { cadRow.RejectChanges(); if (caRow.TipoNoticiaAutRow.ID == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora)) { ncaRow.RejectChanges(); nRow.GetTrusteeNivelPrivilegeRows().ToList().ForEach(r => r.RejectChanges()); nRow.GetFRDBaseRows().ToList().ForEach(r => r.RejectChanges()); nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquicaUpper().ToList().ForEach(r => r.RejectChanges()); nRow.RejectChanges(); caRow.GetControloAutEntidadeProdutoraRows().ToList().ForEach(r => r.RejectChanges()); caRow.GetControloAutDatasExistenciaRows().ToList().ForEach(r => r.RejectChanges()); } GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast <GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.IDControloAut == caRow.ID).ToList().ForEach(r => r.RejectChanges()); caRow.GetInteg_RelacaoExternaControloAutRows().ToList().ForEach(r => r.RejectChanges()); caRow.GetIndexFRDCARows().ToList().ForEach(r => r.RejectChanges()); caRow.RejectChanges(); dicionarioRow.RejectChanges(); } }
public override void ModelToView() { IsPopulated = false; lstVwRelacoes.Items.Clear(); // Apresentar relações não hierarquicas string carId = CurrentControloAut.ID.ToString(); QueryFilter = "IDControloAut=" + carId + " OR IDControloAutAlias=" + carId; foreach (GISADataset.ControloAutRelRow caRel in GisaDataSetHelper.GetInstance().ControloAutRel.Select(QueryFilter, "InicioAno, InicioMes, InicioDia, FimAno, FimMes, FimDia")) { if (caRel.TipoControloAutRelRow.ID != Convert.ToInt64(TipoControloAutRel.Instituicao)) //System.Enum.Format(GetType(TipoControloAutRel), TipoControloAutRel.Instituicao, "D") Then { GISADataset.ControloAutRow OtherControloAut = null; if (caRel.ControloAutRowByControloAutControloAutRelAlias.ID != CurrentControloAut.ID) { OtherControloAut = caRel.ControloAutRowByControloAutControloAutRelAlias; } else { OtherControloAut = caRel.ControloAutRowByControloAutControloAutRel; } foreach (GISADataset.ControloAutDicionarioRow cad in OtherControloAut.GetControloAutDicionarioRows()) { if (cad.IDTipoControloAutForma == Convert.ToInt64(TipoControloAutForma.FormaAutorizada)) { ListViewItem tempWith1 = lstVwRelacoes.Items.Add(cad.DicionarioRow.Termo); tempWith1.Tag = caRel; if (cad.ControloAutRow.IsChaveColectividadeNull()) { tempWith1.SubItems.Add(string.Empty); } else { tempWith1.SubItems.Add(cad.ControloAutRow.ChaveColectividade); } string rezDesTipoRel = null; if (caRel.ControloAutRowByControloAutControloAutRelAlias.ID != CurrentControloAut.ID) { rezDesTipoRel = caRel.TipoControloAutRelRow.DesignacaoInversa; } else { rezDesTipoRel = caRel.TipoControloAutRelRow.Designacao; } tempWith1.SubItems.Add(rezDesTipoRel); tempWith1.SubItems.Add(GUIHelper.GUIHelper.FormatStartDate(caRel)); tempWith1.SubItems.Add(GUIHelper.GUIHelper.FormatEndDate(caRel)); tempWith1.SubItems.Add(GUIHelper.GUIHelper.ClipText(caRel.Descricao)); } } } } // Apresentar relações hierarquicas GISADataset.NivelRow nRow = null; GISADataset.NivelControloAutRow[] ncaRows = null; GISADataset.NivelControloAutRow ncaRow = null; ncaRows = CurrentControloAut.GetNivelControloAutRows(); if (ncaRows.Length == 0) { MasterPanelControloAut.CreateAssociatedNivel(CurrentControloAut, ref nRow, ref ncaRow); try { PersistencyHelper.save(); PersistencyHelper.cleanDeletedData(); } catch (Exception ex) { Trace.WriteLine(ex); throw; } } else { ncaRow = ncaRows[0]; nRow = ncaRow.NivelRow; } foreach (GISADataset.RelacaoHierarquicaRow rhRow in GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} OR IDUpper={0}", nRow.ID), "InicioAno, InicioMes, InicioDia, FimAno, FimMes, FimDia")) { // Só adicionar relações hierárquicas existentes entre níveis estruturais. Este teste não seria suficiente no caso de existirem níveis estruturais orgânicos relacionados com níveis estruturais temático-funcionais, mas tal não poderá acontecer em qualquer situação. if (rhRow.NivelRowByNivelRelacaoHierarquica.TipoNivelRow.ID == TipoNivel.ESTRUTURAL && rhRow.NivelRowByNivelRelacaoHierarquicaUpper.TipoNivelRow.ID == TipoNivel.ESTRUTURAL) { GISADataset.ControloAutRow caRow = null; caRow = rhRow.NivelRowByNivelRelacaoHierarquica.GetNivelControloAutRows()[0].ControloAutRow; // Se estivermos a ver o extremo errado da relação hierarquica trocamos para o outro extremo if (CurrentControloAut == caRow) { caRow = rhRow.NivelRowByNivelRelacaoHierarquicaUpper.GetNivelControloAutRows()[0].ControloAutRow; } GISADataset.ControloAutDicionarioRow cadRow = null; cadRow = ControloAutHelper.getFormaAutorizada(caRow); ListViewItem newItem = lstVwRelacoes.Items.Add(cadRow.DicionarioRow.Termo); newItem.Tag = rhRow; AddRelacaoHierarquicaToList(newItem); } } RefreshButtonState(); PopulateDescricaoText(); IsPopulated = true; }