public override void LoadData() { try { ((frmMain)TopLevelControl).EnterWaitMode(); GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { GisaDataSetHelper.ManageDatasetConstraints(false); if (!isLoaded) { if (CurrentContext.NivelEstrututalDocumental == null) { CurrentFRDBase = null; return; } FRDRule.Current.ReloadPubNivelActualData(GisaDataSetHelper.GetInstance(), CurrentContext.NivelEstrututalDocumental.ID, ho.Connection); string QueryFilter = "IDNivel=" + CurrentContext.NivelEstrututalDocumental.ID.ToString() + " AND IDTipoFRDBase=" + System.Enum.Format(typeof(TipoFRDBase), TipoFRDBase.FRDOIRecolha, "D"); try { // Tentar obter o FRD pretendido, caso não exista cria-se um vazio CurrentFRDBase = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select(QueryFilter)[0]); } catch (IndexOutOfRangeException) { CurrentFRDBase = GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(CurrentContext.NivelEstrututalDocumental, (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoFRDBase.FRDOIRecolha))[0]), "", "", new byte[] {}, 0); } if (CurrentFRDBase == null || CurrentFRDBase.RowState == DataRowState.Detached || CurrentContext.NivelEstrututalDocumental.RowState == DataRowState.Detached) { return; } if (CurrentContext.NivelEstrututalDocumental.CatCode.Trim().Equals("CA")) { FRDRule.Current.LoadFRDOIRecolhaData(GisaDataSetHelper.GetInstance(), CurrentContext.NivelEstrututalDocumental.ID, System.Enum.Format(typeof(TipoFRDBase), TipoFRDBase.FRDOIRecolha, "D"), ho.Connection); } isLoaded = true; } GISAPanel selectedPanel = (GISAPanel)this.DropDownTreeView1.SelectedNode.Tag; if (!selectedPanel.IsLoaded) { long startTicks = 0; startTicks = DateTime.Now.Ticks; selectedPanel.LoadData(CurrentFRDBase, ho.Connection); Debug.WriteLine("Time dispend loading " + selectedPanel.ToString() + ": " + new TimeSpan(DateTime.Now.Ticks - startTicks).ToString()); } GisaDataSetHelper.ManageDatasetConstraints(true); } catch (System.Data.ConstraintException Ex) { Trace.WriteLine(Ex); GisaDataSetHelper.FixDataSet(GisaDataSetHelper.GetInstance(), ho.Connection); } catch (Exception e) { Trace.WriteLine(e); throw; } finally { ho.Dispose(); } } finally { ((frmMain)TopLevelControl).LeaveWaitMode(); } }
private bool validateData() { GISADataset.ControloAutDicionarioRow cadRow = ControloAutDicionarioAutorizado; GISADataset.TipoControloAutRelRow tcarRow = null; tcarRow = (GISADataset.TipoControloAutRelRow)relacaoCA.cbTipoControloAutRel.SelectedItem; PersistencyHelper.VerifyRelExistencePreConcArguments pcArgs = new PersistencyHelper.VerifyRelExistencePreConcArguments(); IDbConnection conn = GisaDataSetHelper.GetConnection(); try { conn.Open(); DBAbstractDataLayer.DataAccessRules.NivelRule.Current.LoadNivelByControloAut(cadRow.IDControloAut, GisaDataSetHelper.GetInstance(), conn); } catch (Exception ex) { Trace.WriteLine(ex); throw ex; } finally { conn.Close(); } string errorTitle = "Erro ao estabelecer relação"; if (! mInEditMode) { // Garantir que uma EP não é relacionada com ela própria. if (cadRow.ControloAutRow.ID == ContextControloAut.ID) { MessageBox.Show("Não é permitido relacionar uma notícia de autoridade consigo própria.", errorTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } // validar que a relação que pretendemos criar ainda não existe if (GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("((IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})) AND IDTipoRel = {2:d}", cadRow.ControloAutRow.ID, ContextControloAut.ID, tcarRow.ID)).Length > 0 || (tcarRow.ID == Convert.ToInt64(TipoControloAutRel.Hierarquica) && GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1} OR ID={1} AND IDUpper={0}", cadRow.ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID, ContextControloAut.GetNivelControloAutRows()[0].NivelRow.ID)).Length > 0)) { MessageBox.Show("Não é permitida mais que uma relação do mesmo tipo " + Environment.NewLine + "entre as mesmas duas entidades produtoras.", errorTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } //Agir de forma diferente conforme seja uma relação hierarquica ou seja uma relação de outro qualquer tipo if (tcarRow.ID == Convert.ToInt64(TipoControloAutRel.Hierarquica)) { // Carregar informação do Nível do CA com que se pretende estabelecer esta relação GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadRetrieveSelectionData(GisaDataSetHelper.GetInstance(), cadRow.IDControloAut, ho.Connection); DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadFRD(GisaDataSetHelper.GetInstance(), ContextControloAut.GetNivelControloAutRows()[0].NivelRow.ID, ho.Connection); } finally { ho.Dispose(); } long tnrID = 0; tnrID = ((TipoNivelRelacionado.PossibleSubNivel)relacaoCA.cbTipoNivel.SelectedItem).SubIDTipoNivelRelacionado; GISADataset.RelacaoHierarquicaRow rhRow = null; rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow(); rhRow.IDUpper = cadRow.ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID; rhRow.ID = ContextControloAut.GetNivelControloAutRows()[0].NivelRow.ID; rhRow.IDTipoNivelRelacionado = tnrID; // Guardar datas rhRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear); rhRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth); rhRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay); rhRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear); rhRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth); rhRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay); rhRow.Descricao = relacaoCA.txtDescricao.Text; //rhRow.isDeleted = 0; GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhRow); pcArgs.ID = rhRow.ID; pcArgs.IDUpper = rhRow.IDUpper; pcArgs.IDTipoRel = rhRow.IDTipoNivelRelacionado; pcArgs.isCARRow = false; // actualizar permissões implícitas var postSaveAction = new PostSaveAction(); PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments(); postSaveAction.args = args; postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs) { if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError) { if (this.parent.GetType() == typeof(MasterPanelControloAut)) { ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut); var caRegRow = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Single(r => r.RowState == DataRowState.Added); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao, new GISADataset.ControloAutDataDeDescricaoRow[] { caRegRow }, postSaveArgs.tran); var frdRow = rhRow.NivelRowByNivelRelacaoHierarquica.GetFRDBaseRows().SingleOrDefault(); if (frdRow == null) { var tipoFRD = (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoFRDBase.FRDOIRecolha))[0]); frdRow = GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(rhRow.NivelRowByNivelRelacaoHierarquica, tipoFRD, "", "", new byte[] { }, 0); var dp = GisaDataSetHelper.GetInstance().SFRDDatasProducao.AddSFRDDatasProducaoRow(frdRow, "", "", "", "", false, "", "", "", "", false, new byte[] { }, 0); var ce = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.AddSFRDConteudoEEstruturaRow(frdRow, "", "", new byte[] { }, 0); var c = GisaDataSetHelper.GetInstance().SFRDContexto.AddSFRDContextoRow(frdRow, "", "", "", false, new byte[] { }, 0); var da = GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada.AddSFRDDocumentacaoAssociadaRow(frdRow, "", "", "", "", new byte[] { }, 0); var ds = GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.AddSFRDDimensaoSuporteRow(frdRow, "", new byte[] { }, 0); var ng = GisaDataSetHelper.GetInstance().SFRDNotaGeral.AddSFRDNotaGeralRow(frdRow, "", new byte[] { }, 0); var CurrentSFRDAvaliacao = GisaDataSetHelper.GetInstance().SFRDAvaliacao.NewSFRDAvaliacaoRow(); CurrentSFRDAvaliacao.FRDBaseRow = frdRow; CurrentSFRDAvaliacao.IDPertinencia = 1; CurrentSFRDAvaliacao.IDDensidade = 1; CurrentSFRDAvaliacao.IDSubdensidade = 1; CurrentSFRDAvaliacao.Publicar = false; CurrentSFRDAvaliacao.Observacoes = ""; CurrentSFRDAvaliacao.AvaliacaoTabela = false; GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(CurrentSFRDAvaliacao); var condA = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.AddSFRDCondicaoDeAcessoRow(frdRow, "", "", "", "", new byte[] { }, 0); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBase, new DataRow[] { frdRow }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDDatasProducao, new DataRow[] { dp }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura, new DataRow[] { ce }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDContexto, new DataRow[] { c }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada, new DataRow[] { da }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte, new DataRow[] { ds }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDNotaGeral, new DataRow[] { ng }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDAvaliacao, new DataRow[] { CurrentSFRDAvaliacao }, postSaveArgs.tran); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso, new DataRow[] { condA }, postSaveArgs.tran); } var nvlRegRow = RecordRegisterHelper .CreateFRDBaseDataDeDescricaoRow(frdRow, caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricao, caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricaoAuthority, caRegRow.DataAutoria); nvlRegRow.DataEdicao = caRegRow.DataEdicao; nvlRegRow.IDTipoNivelRelacionado = rhRow.IDTipoNivelRelacionado; GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.AddFRDBaseDataDeDescricaoRow(nvlRegRow); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao, GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast<GISADataset.FRDBaseDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran); } } }; PersistencyHelper.save(ValidateCreateRel, pcArgs, postSaveAction); PersistencyHelper.cleanDeletedData(); if (ContextControloAut.RowState == DataRowState.Detached) { MessageBox.Show("Não é possível estabelecer a relação uma vez que a notícia de autoridade " + System.Environment.NewLine + "selecionada no painel superior foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } else { if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.RelationAlreadyExists) { MessageBox.Show("Não é permitida mais que uma relação do mesmo tipo entre as mesmas duas entidades produtoras.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } else if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CyclicRelation) { MessageBox.Show("Prestes a criar um conjunto de relações cíclicas.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } else if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CADeleted) { MessageBox.Show("Não é possível estabelecer a relação uma vez que uma das notícias de autoridade " + System.Environment.NewLine + "foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } else { GISA.Search.Updater.updateProdutor(new List<string>() { cadRow.ControloAutRow.ID.ToString(), ContextControloAut.ID.ToString()}); GISA.Search.Updater.updateNivelDocumentalComProdutores(cadRow.ControloAutRow.GetNivelControloAutRows()[0].ID); } } } else { GISADataset.ControloAutRelRow carRow = null; carRow = GisaDataSetHelper.GetInstance().ControloAutRel.NewControloAutRelRow(); carRow.IDControloAut = cadRow.ControloAutRow.ID; carRow.IDControloAutAlias = ContextControloAut.ID; carRow.IDTipoRel = tcarRow.ID; // Guardar datas carRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear); carRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth); carRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay); carRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear); carRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth); carRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay); carRow.Descricao = relacaoCA.txtDescricao.Text; GisaDataSetHelper.GetInstance().ControloAutRel.AddControloAutRelRow(carRow); pcArgs.ID = carRow.IDControloAut; pcArgs.IDUpper = carRow.IDControloAutAlias; pcArgs.IDTipoRel = carRow.IDTipoRel; pcArgs.isCARRow = true; var postSaveAction = new PostSaveAction(); PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments(); postSaveAction.args = args; postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs) { if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError) { if (this.parent.GetType() == typeof(MasterPanelControloAut)) { ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao, GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran); } } }; PersistencyHelper.save(ValidateCreateRel, pcArgs, postSaveAction); PersistencyHelper.cleanDeletedData(); if (ContextControloAut.RowState == DataRowState.Detached) { MessageBox.Show("Não é possível estabelecer a relação uma vez que a notícia de autoridade " + System.Environment.NewLine + "selecionada no painel superior foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } else { if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.RelationAlreadyExists) { MessageBox.Show("Não é permitida mais que uma relação do mesmo tipo entre as mesmas duas entidades produtoras.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } else { GISA.Search.Updater.updateProdutor(new List<string>() { carRow.IDControloAut.ToString(), carRow.IDControloAutAlias.ToString() }); } } } } else // edição { //Agir de forma diferente conforme seja uma relação hierarquica ou seja uma relação de outro qualquer tipo if (tcarRow.ID == Convert.ToInt64(TipoControloAutRel.Hierarquica)) { long tnrID = 0; tnrID = ((TipoNivelRelacionado.PossibleSubNivel)relacaoCA.cbTipoNivel.SelectedItem).SubIDTipoNivelRelacionado; GISADataset.RelacaoHierarquicaRow rhRow = null; rhRow = (GISADataset.RelacaoHierarquicaRow)ContextRel; // Guardar tipo de nivel rhRow.IDTipoNivelRelacionado = tnrID; // Guardar datas rhRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear); rhRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth); rhRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay); rhRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear); rhRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth); rhRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay); // Guardar descrição rhRow.Descricao = relacaoCA.txtDescricao.Text; var postSaveAction = new PostSaveAction(); PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments(); postSaveAction.args = args; postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs) { if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError) { if (this.parent.GetType() == typeof(MasterPanelControloAut)) { ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao, GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran); } } }; PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(postSaveAction); PersistencyHelper.cleanDeletedData(); if (successfulSave == PersistencyHelper.SaveResult.successful) UpdateCA(rhRow); } else { GISADataset.ControloAutRelRow carRow = null; carRow = (GISADataset.ControloAutRelRow)ContextRel; // Actualização de uma relação previamente existente carRow["IDTipoRel"] = ((GISADataset.TipoControloAutRelRow)relacaoCA.cbTipoControloAutRel.SelectedItem).ID; // guardar datas carRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear); carRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth); carRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay); carRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear); carRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth); carRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay); carRow.Descricao = relacaoCA.txtDescricao.Text; var postSaveAction = new PostSaveAction(); PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments(); postSaveAction.args = args; postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs) { if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError) { if (this.parent.GetType() == typeof(MasterPanelControloAut)) { ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao, GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran); } } }; PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(postSaveAction); PersistencyHelper.cleanDeletedData(); if (successfulSave == PersistencyHelper.SaveResult.successful) UpdateCA(carRow); } } //TODO: PARA ALGUMAS DAS SEGUINTES VALIDACOES SERÁ NECESSÁRIO TRAZER PARA DENTRO DESTE FORM UMA GRANDE PARTE DA LOGICA EXISTENTE FORA DELE, NOMEADAMENTE A NOÇÃO DE SE ESTE FORM ESTÁ A SER UTILIZADO NA CRIAÇÃO OU NA EDIÇÃO DE UMA DADA RELAÇÃO //ToDo: validar que as datas da relação não vão para alem das datas de existencia de ambos os níveis (superior e inferior) //ToDo: validar que o tipo de nivel escolhido está de acordo com os tipos de nivel subordinados return true; }
// Trata a criação de novos níveis e respectivas relações. Caso se trate // de um nível orgânico (estrutural e que esteja associado a uma EP) o // nível correspondente deverá já existir e não será por isso criado, // será criada apenas a relação. private bool handleNewNivel(Form frm, GISADataset.NivelRow parentNivelRow, GISADataset.TipoNivelRelacionadoRow tnrRow) { frm.Text = "Criar " + tnrRow.Designacao; bool successfulSave = true; switch (frm.ShowDialog()) { case DialogResult.OK: Trace.WriteLine("A criar nível..."); long click = DateTime.Now.Ticks; string designacaoUFAssociada = string.Empty; PostSaveAction postSaveAction = null; var nRow = GisaDataSetHelper.GetInstance().Nivel.AddNivelRow(tnrRow.TipoNivelRow, ((FormAddNivel)frm).txtCodigo.Text.Trim(), "NVL", new byte[] { }, 0); var ndRow = GisaDataSetHelper.GetInstance().NivelDesignado.AddNivelDesignadoRow(nRow, ((FormAddNivel)frm).txtDesignacao.Text.Trim(), new byte[] { }, 0); var frdRow = GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(nRow, (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoFRDBase.FRDOIRecolha))[0]), "", "", new byte[] { }, 0); var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(nRow, parentNivelRow, tnrRow, null, null, null, null, null, null, null, new byte[] { }, 0); //valores por omissão var globalConfig = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single(); if (globalConfig.ApplyDefaultValues) { var sfrdcaRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso .AddSFRDCondicaoDeAcessoRow(frdRow, "", globalConfig.IsCondicaoDeAcessoNull() ? "" : globalConfig.CondicaoDeAcesso, globalConfig.IsCondicaoDeReproducaoNull() ? "" : globalConfig.CondicaoDeReproducao, "", new byte[] {}, 0); foreach (GISADataset.ConfigLinguaRow r in globalConfig.GetConfigLinguaRows()) { GisaDataSetHelper.GetInstance().SFRDLingua.AddSFRDLinguaRow(sfrdcaRow, r.Iso639Row, new byte[] { }, 0); } foreach (GISADataset.ConfigAlfabetoRow r in globalConfig.GetConfigAlfabetoRows()) { GisaDataSetHelper.GetInstance().SFRDAlfabeto.AddSFRDAlfabetoRow(sfrdcaRow, r.Iso15924Row, new byte[] { }, 0); } } var selectedTipologia = ((FormNivelDocumentalFedora)frm).Tipologia; if (selectedTipologia != null) { GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(frdRow, selectedTipologia.ControloAutRow, -1, new byte[] { }, 0); } // Só adicionar permissões ao grupo TODOS dos níveis lógicos e a níveis documentais imediatamente // abaixo de níveis orgânicos (Documentos soltos e séries); caso se se trate de um nível estrutural // controlado, as permissões já foram atribuidas aquando da criação do controlo de autoridade if (nRow.IDTipoNivel == TipoNivel.DOCUMENTAL && parentNivelRow.IDTipoNivel == TipoNivel.ESTRUTURAL) { var nUpperRow = rhRow == null ? default(GISADataset.NivelRow) : rhRow.NivelRowByNivelRelacaoHierarquicaUpper; PermissoesHelper.AddNewNivelGrantPermissions(nRow, nUpperRow); } postSaveAction = new PostSaveAction(); var args = new PersistencyHelper.GenericPostSaveArguments(); postSaveAction.args = args; postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs) { if (!postSaveArgs.cancelAction && nRow != null && nRow.RowState != DataRowState.Detached && nRow.RowState != DataRowState.Deleted) { // registar a criação do nivel documental GISADataset.FRDBaseRow frdDocRow = null; GISADataset.FRDBaseRow[] frdDocRows = nRow.GetFRDBaseRows(); if (frdDocRows.Length > 0) { frdDocRow = frdDocRows[0]; } CurrentContext.RaiseRegisterModificationEvent(frdDocRow); PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao, GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast <GISADataset.FRDBaseDataDeDescricaoRow>().Where(frd => frd.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran); } }; // se se tratar de um (sub)documento é necessário garantir que se trata de um código // único dentro da sua série (se constituir série) ou nivel estrutural superior PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments pcArgs = new PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments(); PersistencyHelper.SetNewCodigosPreSaveArguments psArgs = new PersistencyHelper.SetNewCodigosPreSaveArguments(); PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments pcArgsNivel = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments(); pcArgs.argsNivel = pcArgsNivel; // dados que serão usados no delegate responsável pela criação do nível documental pcArgsNivel.nRowID = nRow.ID; pcArgsNivel.ndRowID = ndRow.ID; pcArgsNivel.rhRowID = rhRow.ID; pcArgsNivel.rhRowIDUpper = rhRow.IDUpper; pcArgsNivel.frdBaseID = frdRow.ID; pcArgsNivel.testOnlyWithinNivel = true; // permitir ao delegate selecionar o delegate correspondente ao tipo de nível que se está a criar pcArgs.IDTipoNivelRelacionado = tnrRow.ID; psArgs.createNewNivelCodigo = false; psArgs.createNewUFCodigo = false; psArgs.setNewCodigo = rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SD; psArgs.argsNivelDocSimples = NiveisHelper.AddNivelDocumentoSimplesWithDelegateArgs(nRow.GetNivelDesignadoRows().Single(), rhRow.IDUpper, rhRow.IDTipoNivelRelacionado); PersistencyHelper.save(DelegatesHelper.ValidateNivelAddAndAssocNewUF, pcArgs, DelegatesHelper.SetNewCodigos, psArgs, postSaveAction); if (!pcArgsNivel.successful) { successfulSave = false; MessageBox.Show(pcArgsNivel.message, "Criação de unidade de descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (parentNivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.ID == TipoNivelRelacionado.SR) { GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadSFRDAvaliacaoData(GisaDataSetHelper.GetInstance(), parentNivelRow.ID, ho.Connection); } finally { ho.Dispose(); } } PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase") })); if (!successfulSave) { return(successfulSave); } GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID); GISA.Search.Updater.updateNivelDocumental(nRow.ID); this.nivelNavigator1.AddNivel(nRow); Debug.WriteLine("<<A criar nível...>> " + new TimeSpan(DateTime.Now.Ticks - click).ToString()); break; case DialogResult.Cancel: successfulSave = false; break; } return(successfulSave); }