public static void HandleUF(PersistencyHelper.PreConcArguments args) { PersistencyHelper.AddEditUFPreConcArguments aeufpca = null; PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments psa = null; aeufpca = (PersistencyHelper.AddEditUFPreConcArguments)args; psa = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)aeufpca.psa; psa.cancelSetNewCodigo = false; aeufpca.message = string.Empty; GISADataset.RelacaoHierarquicaRow rhufRow = null; if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper)).Length > 0) { rhufRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper))[0]); } else if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper), "", DataViewRowState.Deleted).Length > 0) { rhufRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper), "", DataViewRowState.Deleted)[0]); } GISADataset.NivelDesignadoRow ndufRow = (GISADataset.NivelDesignadoRow)(GisaDataSetHelper.GetInstance().NivelDesignado.Select("ID=" + aeufpca.ndufRowID.ToString())[0]); GISADataset.NivelRow nivelUFRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + aeufpca.nivelUFRowID.ToString())[0]); if (aeufpca.Operation == PersistencyHelper.AddEditUFPreConcArguments.Operations.Create || aeufpca.Operation == PersistencyHelper.AddEditUFPreConcArguments.Operations.CreateLike) { GISADataset.NivelUnidadeFisicaRow nufufRow = (GISADataset.NivelUnidadeFisicaRow)(GisaDataSetHelper.GetInstance().NivelUnidadeFisica.Select("ID=" + aeufpca.nufufRowID.ToString())[0]); // validar criação de UF if (DBAbstractDataLayer.DataAccessRules.UFRule.Current.isNivelRowDeleted(rhufRow.NivelRowByNivelRelacaoHierarquicaUpper.ID, aeufpca.tran)) { var tempgisaBackup = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup, nufufRow); aeufpca.gisaBackup = tempgisaBackup; nufufRow.RejectChanges(); PersistencyHelper.BackupRow(ref tempgisaBackup, rhufRow); aeufpca.gisaBackup = tempgisaBackup; rhufRow.RejectChanges(); PersistencyHelper.BackupRow(ref tempgisaBackup, ndufRow); aeufpca.gisaBackup = tempgisaBackup; ndufRow.RejectChanges(); PersistencyHelper.BackupRow(ref tempgisaBackup, nivelUFRow); aeufpca.gisaBackup = tempgisaBackup; nivelUFRow.RejectChanges(); List <DataRow> lstRows = new List <DataRow>(); // recolher rows para fazer backup caso a operação seja "CREATE LIKE" if (aeufpca.Operation == PersistencyHelper.AddEditUFPreConcArguments.Operations.CreateLike) { lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDDatasProducao.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString())); lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDUFCota.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString())); lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString())); lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDUFDescricaoFisica.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString())); foreach (long uaAssociadaID in aeufpca.uaAssociadas) { lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.Select(string.Format("IDFRDBase={0} AND IDNivel={1}", uaAssociadaID, aeufpca.nivelUFRowID))); } } lstRows.AddRange(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + aeufpca.frdufRowID.ToString())); PersistencyHelper.BackupRows(ref tempgisaBackup, lstRows); aeufpca.gisaBackup = tempgisaBackup; aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.NewUF; aeufpca.message = "A entidade produtora que pretende associar à unidade física foi eliminada por outro utilizador. Esta operação não poderá, por isso, ser concluída."; psa.cancelSetNewCodigo = true; aeufpca.continueSave = false; } } else { // validar edição de UF bool isUFDeleted = DBAbstractDataLayer.DataAccessRules.UFRule.Current.isNivelRowDeleted(nivelUFRow.ID, aeufpca.tran); // verificar se a UF a editar não foi apagada por outro utilizador if (isUFDeleted) { System.Data.DataSet tempgisaBackup6 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup6, ndufRow); aeufpca.gisaBackup = tempgisaBackup6; ndufRow.RejectChanges(); System.Data.DataSet tempgisaBackup7 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup7, nivelUFRow); aeufpca.gisaBackup = tempgisaBackup7; nivelUFRow.RejectChanges(); aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.EditEDAndDesignacao; aeufpca.message = "A unidade física em edição foi eliminada por outro utilizador. " + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída."; psa.cancelSetNewCodigo = true; aeufpca.continueSave = false; return; } // Verificar se se pretende alterar a entidade detentora associada bool isRelacaoHierarquicaDeleted = false; if (rhufRow.RowState == DataRowState.Deleted) { isRelacaoHierarquicaDeleted = DBAbstractDataLayer.DataAccessRules.UFRule.Current.isRelacaoHierarquicaDeleted(aeufpca.rhufRowID, aeufpca.rhufRowIDUpper, aeufpca.tran); } else { // a operação pretendida é editar a designação da UF e por esse motivo não é necessário // atribuir um novo código (a operação não é create e a entidade detentora não foi alterada) psa.cancelSetNewCodigo = true; aeufpca.continueSave = false; } GISADataset.RelacaoHierarquicaRow[] newRhufRow = (GISADataset.RelacaoHierarquicaRow[])(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.newRhufRowID, aeufpca.newRhufRowIDUpper))); // Verificar se outro utilizador também alterou (concorrentemente) a entidade detentora associada if (isRelacaoHierarquicaDeleted) { System.Data.DataSet tempgisaBackup8 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup8, newRhufRow[0]); aeufpca.gisaBackup = tempgisaBackup8; newRhufRow[0].RejectChanges(); System.Data.DataSet tempgisaBackup9 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup9, rhufRow); aeufpca.gisaBackup = tempgisaBackup9; rhufRow.RejectChanges(); System.Data.DataSet tempgisaBackup10 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup10, nivelUFRow); aeufpca.gisaBackup = tempgisaBackup10; nivelUFRow.RejectChanges(); aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.EditOriginalEd; aeufpca.message = "A entidade detentora da unidade física em edição foi alterada por outro utilizador." + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída."; psa.cancelSetNewCodigo = true; aeufpca.continueSave = false; } else if (newRhufRow.Length > 0) // se tivermos alterado a entidade detentora da uf { // verificar se a ED a associar à UF não foi apagada por outro utilizador if (DBAbstractDataLayer.DataAccessRules.UFRule.Current.isNivelRowDeleted(newRhufRow[0].NivelRowByNivelRelacaoHierarquicaUpper.ID, aeufpca.tran)) { System.Data.DataSet tempgisaBackup11 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup11, newRhufRow[0]); aeufpca.gisaBackup = tempgisaBackup11; newRhufRow[0].RejectChanges(); System.Data.DataSet tempgisaBackup12 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup12, rhufRow); aeufpca.gisaBackup = tempgisaBackup12; rhufRow.RejectChanges(); System.Data.DataSet tempgisaBackup13 = aeufpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup13, nivelUFRow); aeufpca.gisaBackup = tempgisaBackup13; nivelUFRow.RejectChanges(); if (!isUFDeleted) { // UF existe mas a ED que se pretende adicionar não aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.EditNewEd; aeufpca.message = "A entidade produtora que pretende associar à unidade física foi eliminada por outro utilizador. Esta operação não poderá, por isso, ser concluída."; } psa.cancelSetNewCodigo = true; aeufpca.continueSave = false; } //else if (!isUFDeleted) //{ // // Tanto a UF como a ED existem; // NivelRule.Current.DeleteSFRDUnidadeFisica(nivelUFRow.ID, aeufpca.tran); // foreach (GISADataset.SFRDUnidadeFisicaRow relacaoRow in nivelUFRow.GetSFRDUnidadeFisicaRows()) // { // System.Data.DataSet tempgisaBackup14 = aeufpca.gisaBackup; // PersistencyHelper.BackupRow(ref tempgisaBackup14, relacaoRow); // aeufpca.gisaBackup = tempgisaBackup14; // relacaoRow.Delete(); // } //} } } }
public static void ValidateNivelAddAndAssocNewUF(PersistencyHelper.PreConcArguments args) { PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments pcArgs = null; pcArgs = (PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments)args; bool addSuccessful = false; pcArgs.argsNivel.tran = pcArgs.tran; pcArgs.argsNivel.gisaBackup = pcArgs.gisaBackup; var frdID = long.MinValue; if (pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.SR || pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR) { var argsNivel = pcArgs.argsNivel as PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments; EnsureNivelUpperExists(pcArgs.argsNivel); pcArgs.message = argsNivel.message; addSuccessful = ((PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments)pcArgs.argsNivel).RHNivelUpperExists; frdID = argsNivel.frdBaseID; } else if (pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.D || pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.SD) { var argsNivel = pcArgs.argsNivel as PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments; ensureUniqueCodigo(pcArgs.argsNivel); pcArgs.message = argsNivel.message; addSuccessful = ((PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments)pcArgs.argsNivel).successful; frdID = argsNivel.frdBaseID; } if (addSuccessful) { GISADataset.FRDBaseRow frdNivelDocRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + frdID.ToString())[0]); var sfrdDatasProducaoRow = GisaDataSetHelper.GetInstance().SFRDDatasProducao.Cast <GISADataset.SFRDDatasProducaoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdDatasProducaoRow == null) { GisaDataSetHelper.GetInstance().SFRDDatasProducao.AddSFRDDatasProducaoRow(frdNivelDocRow, "", "", "", "", false, "", "", "", "", false, new byte[] { }, 0); } var sfrdConteudoEEstruturaRow = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.Cast <GISADataset.SFRDConteudoEEstruturaRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdConteudoEEstruturaRow == null) { GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.AddSFRDConteudoEEstruturaRow(frdNivelDocRow, "", "", new byte[] { }, 0); } var sfrdContextoRow = GisaDataSetHelper.GetInstance().SFRDContexto.Cast <GISADataset.SFRDContextoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdContextoRow == null) { GisaDataSetHelper.GetInstance().SFRDContexto.AddSFRDContextoRow(frdNivelDocRow, "", "", "", false, new byte[] { }, 0); } var sfrdDocumentacaoAssociadaRow = GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada.Cast <GISADataset.SFRDDocumentacaoAssociadaRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdDocumentacaoAssociadaRow == null) { GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada.AddSFRDDocumentacaoAssociadaRow(frdNivelDocRow, "", "", "", "", new byte[] { }, 0); } var sfrdDimensaoSuporteRow = GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.Cast <GISADataset.SFRDDimensaoSuporteRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdDimensaoSuporteRow == null) { GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.AddSFRDDimensaoSuporteRow(frdNivelDocRow, "", new byte[] { }, 0); } var sfrdNotaGeralRow = GisaDataSetHelper.GetInstance().SFRDNotaGeral.Cast <GISADataset.SFRDNotaGeralRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdNotaGeralRow == null) { GisaDataSetHelper.GetInstance().SFRDNotaGeral.AddSFRDNotaGeralRow(frdNivelDocRow, "", new byte[] { }, 0); } var sfrdAgrupadorRow = GisaDataSetHelper.GetInstance().SFRDAgrupador.Cast <GISADataset.SFRDAgrupadorRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdAgrupadorRow == null) { GisaDataSetHelper.GetInstance().SFRDAgrupador.AddSFRDAgrupadorRow(frdNivelDocRow, "", new byte[] { }, 0); } var sfrdAvaliacaoRow = GisaDataSetHelper.GetInstance().SFRDAvaliacao.Cast <GISADataset.SFRDAvaliacaoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdAvaliacaoRow == null) { var CurrentSFRDAvaliacao = GisaDataSetHelper.GetInstance().SFRDAvaliacao.NewSFRDAvaliacaoRow(); CurrentSFRDAvaliacao.FRDBaseRow = frdNivelDocRow; CurrentSFRDAvaliacao.IDPertinencia = 1; CurrentSFRDAvaliacao.IDDensidade = 1; CurrentSFRDAvaliacao.IDSubdensidade = 1; CurrentSFRDAvaliacao.Publicar = false; CurrentSFRDAvaliacao.Observacoes = ""; CurrentSFRDAvaliacao.AvaliacaoTabela = false; GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(CurrentSFRDAvaliacao); } var sfrdCondicaoDeAcessoRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.Cast <GISADataset.SFRDCondicaoDeAcessoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault(); if (sfrdCondicaoDeAcessoRow == null) { GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.AddSFRDCondicaoDeAcessoRow(frdNivelDocRow, "", "", "", "", new byte[] { }, 0); } } if (addSuccessful && pcArgs.addNewUF) { GISADataset.FRDBaseRow frdNivelDocRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + pcArgs.IDFRDBaseNivelDoc.ToString())[0]); GISADataset.NivelRow nivelEDRow = NiveisHelper.GetNivelED(pcArgs.produtor); GISADataset.NivelRow nivelUFRow = UnidadesFisicasHelper.CreateUF(nivelEDRow, pcArgs.designacaoUFAssociada); PersistencyHelper.AddEditUFPreConcArguments argsPCNewUF = (PersistencyHelper.AddEditUFPreConcArguments)pcArgs.argsUF; PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments argsPSNewUF = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)argsPCNewUF.psa; argsPCNewUF.nivelUFRowID = nivelUFRow.ID; argsPCNewUF.ndufRowID = nivelUFRow.ID; argsPCNewUF.rhufRowID = nivelUFRow.ID; argsPCNewUF.rhufRowIDUpper = nivelEDRow.ID; argsPCNewUF.nufufRowID = nivelUFRow.ID; argsPCNewUF.tran = pcArgs.tran; argsPSNewUF.nivelUFRowID = nivelUFRow.ID; HandleUF(argsPCNewUF); pcArgs.message = argsPCNewUF.message; if (argsPCNewUF.OperationError == PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.NoError) { GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.AddSFRDUnidadeFisicaRow(frdNivelDocRow, nivelUFRow, null, new byte[] { }, 0); } } else if (!addSuccessful && pcArgs.addNewUF) { // caso onde o nível não foi criado e pretendia-se criar unidade física; neste caso cancela-se a atribuição do código // à unidade física PersistencyHelper.AddEditUFPreConcArguments argsPCNewUF = (PersistencyHelper.AddEditUFPreConcArguments)pcArgs.argsUF; PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments argsPSNewUF = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)argsPCNewUF.psa; argsPSNewUF.cancelSetNewCodigo = true; } pcArgs.continueSave = addSuccessful; }