private void PublishSubDocumentos(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.PublishSubDocumentosPreSaveArguments psdPsa = null; psdPsa = (PersistencyHelper.PublishSubDocumentosPreSaveArguments)args; if (psdPsa.DocsID.Count > 0) { psdPsa.idsToUpdate = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.ExecutePublishSubDocumentos(psdPsa.DocsID, PermissoesHelper.GrpAcessoPublicados.ID, psdPsa.tran); } }
// método responsável por garantir que quando se edita um controlo de autoridade todas as suas informações originais // ainda existem na base de dados e é garantido que a forma autorizada é única entre os controlos de autoridade e // o código atribuído é único entre os niveis estruturais private void editCA(PersistencyHelper.PreConcArguments args) { PersistencyHelper.EditControloAutPreConcArguments ntcaPca = null; ntcaPca = (PersistencyHelper.EditControloAutPreConcArguments)args; if (ntcaPca.caRowID < 0) { // só se pretende editar o código do nivel estrutural GISADataset.NivelRow nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + ntcaPca.nRowID.ToString())[0]); var ddd = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().ToList().Where(r => r.RowState == DataRowState.Added && r.IDControloAut == nRow.GetNivelControloAutRows()[0].IDControloAut); //verificar se o nivel existe (e consequentemente a sua entidade produtora) if (! (DBAbstractDataLayer.DataAccessRules.NivelRule.Current.existsNivel(ntcaPca.nRowID.ToString(), ntcaPca.tran))) { System.Data.DataSet tempgisaBackup1 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup1, nRow); ntcaPca.gisaBackup = tempgisaBackup1; nRow.RejectChanges(); System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.CADeleted; ntcaPca.message = "A notícia de autoridade em edição foi eliminada por outro utilizador. " + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída."; return; } // verificar se outro nivel estrutural tem o código a atribuir if (! (DBAbstractDataLayer.DataAccessRules.NivelRule.Current.isUniqueCodigo(nRow.Codigo, nRow.ID, ntcaPca.tran))) { System.Data.DataSet tempgisaBackup2 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup2, nRow); ntcaPca.gisaBackup = tempgisaBackup2; nRow.RejectChanges(); System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.AlreadyUsedCodigo; ntcaPca.message = "Este código não pode ser atribuído uma vez que já é usado " + Environment.NewLine + "noutro nível estrutural."; return; } } else if (ntcaPca.newDRowID == 0) { // só se pretende editar o tipo de notícia de autoridade do conteúdo GISADataset.ControloAutRow caRow = (GISADataset.ControloAutRow)(GisaDataSetHelper.GetInstance().ControloAut.Select("ID=" + ntcaPca.caRowID.ToString())[0]); var ddd = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().ToList().Where(r => r.IDControloAut == caRow.ID && r.RowState == DataRowState.Added); if (ControloAutRule.Current.isCADeleted(caRow.ID.ToString(), ntcaPca.tran)) { System.Data.DataSet tempgisaBackup3 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup3, caRow); ntcaPca.gisaBackup = tempgisaBackup3; caRow.RejectChanges(); System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.CADeleted; ntcaPca.message = "A notícia de autoridade em edição foi eliminada por outro utilizador. " + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída."; return; } } else { // edição que envolve a mudança da forma autorizada e do código do nivel estrutural GISADataset.DicionarioRow origDRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select("ID=" + ntcaPca.origDRowID.ToString())[0]); GISADataset.DicionarioRow newDRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select("ID=" + ntcaPca.newDRowID.ToString())[0]); // origCadRow terá sempre o seu rowstate definido como deleted GISADataset.ControloAutDicionarioRow origCadRow = (GISADataset.ControloAutDicionarioRow)(GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut = {0} AND IDDicionario = {1} AND IDTipoControloAutForma = {2}", ntcaPca.origCadRowIDControloAut, ntcaPca.origCadRowIDDicionario, ntcaPca.origCadRowIDTipoControloAutForma), "", DataViewRowState.Deleted)[0]); GISADataset.ControloAutDicionarioRow newCadRow = (GISADataset.ControloAutDicionarioRow)(GisaDataSetHelper.GetInstance().ControloAutDicionario.Select(string.Format("IDControloAut = {0} AND IDDicionario = {1} AND IDTipoControloAutForma = {2}", ntcaPca.newCadRowIDControloAut, ntcaPca.newCadRowIDDicionario, ntcaPca.newCadRowIDTipoControloAutForma))[0]); GISADataset.ControloAutRow caRow = (GISADataset.ControloAutRow)(GisaDataSetHelper.GetInstance().ControloAut.Select("ID=" + ntcaPca.caRowID.ToString())[0]); var ddd = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().ToList().Where(r => r.RowState == DataRowState.Added && r.IDControloAut == caRow.ID); GISADataset.NivelRow nRow = null; if (caRow.IDTipoNoticiaAut == Convert.ToInt64(TipoNoticiaAut.EntidadeProdutora)) nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + ntcaPca.nRowID.ToString())[0]); //verificar se o CA existe na BD if (ControloAutRule.Current.isCADeleted(caRow.ID.ToString(), ntcaPca.tran)) { System.Data.DataSet tempgisaBackup4 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup4, newCadRow); ntcaPca.gisaBackup = tempgisaBackup4; newCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup5 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup5, origCadRow); ntcaPca.gisaBackup = tempgisaBackup5; origCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup6 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup6, newDRow); ntcaPca.gisaBackup = tempgisaBackup6; newDRow.RejectChanges(); if (nRow != null) { System.Data.DataSet tempgisaBackup7 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup7, nRow); ntcaPca.gisaBackup = tempgisaBackup7; nRow.RejectChanges(); // so necessário nas EPs } System.Data.DataSet tempgisaBackup8 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup8, caRow); ntcaPca.gisaBackup = tempgisaBackup8; caRow.RejectChanges(); System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.CADeleted; ntcaPca.message = "A notícia de autoridade em edição foi eliminada por outro utilizador. " + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída."; return; } // verificar se outro utilizador editou o controlo de autoridade (se o ControloAutDicionario original não existir // na base de dados é sinal que outro utilizador mudou a forma autorizada deste controlo de autoridade) bool isOrigCadDeleted = ControloAutRule.Current.isCADDeleted(Convert.ToInt64(origCadRow["IDControloAut", DataRowVersion.Original]), Convert.ToInt64(origCadRow["IDDicionario", DataRowVersion.Original]), Convert.ToInt64(TipoControloAutForma.FormaAutorizada), ntcaPca.tran); // no caso de outro utilizador ter editado a forma autorizada do controlo de autoridade esta operação é abortada if (isOrigCadDeleted) { System.Data.DataSet tempgisaBackup9 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup9, newCadRow); ntcaPca.gisaBackup = tempgisaBackup9; newCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup10 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup10, origCadRow); ntcaPca.gisaBackup = tempgisaBackup10; origCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup11 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup11, newDRow); ntcaPca.gisaBackup = tempgisaBackup11; newDRow.RejectChanges(); if (nRow != null) { System.Data.DataSet tempgisaBackup12 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup12, nRow); ntcaPca.gisaBackup = tempgisaBackup12; nRow.RejectChanges(); // so necessário nas EPs } System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.OrigCadDeleted; ntcaPca.message = "Não foi possível alterar a forma autorizada desta notícia de autoridade " + Environment.NewLine + "uma vez que foi já alterada por outro utilizador."; return; } //verificar se o termo novo está a ser utilizado por outro CA if (DBAbstractDataLayer.DataAccessRules.DiplomaModeloRule.Current.isTermoUsedByOthers(caRow.ID, newDRow.CatCode, newDRow.Termo.Trim(), false, caRow.TipoNoticiaAutRow.ID, ntcaPca.tran)) { System.Data.DataSet tempgisaBackup13 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup13, newCadRow); ntcaPca.gisaBackup = tempgisaBackup13; newCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup14 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup14, origCadRow); ntcaPca.gisaBackup = tempgisaBackup14; origCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup15 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup15, newDRow); ntcaPca.gisaBackup = tempgisaBackup15; newDRow.RejectChanges(); if (nRow != null) { System.Data.DataSet tempgisaBackup16 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup16, nRow); ntcaPca.gisaBackup = tempgisaBackup16; nRow.RejectChanges(); // so necessário nas EPs } System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.AlreadyUsedTermo; ntcaPca.message = "Este termo não pode ser escolhido uma vez que é já usado " + Environment.NewLine + "como forma autorizada de outra notícia de autoridade."; return; } // verificar se o código atribuído já o foi a outro nível estrutural if (nRow != null && ! (DBAbstractDataLayer.DataAccessRules.NivelRule.Current.isUniqueCodigo(nRow.Codigo, nRow.ID, ntcaPca.tran))) { System.Data.DataSet tempgisaBackup17 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup17, newCadRow); ntcaPca.gisaBackup = tempgisaBackup17; newCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup18 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup18, origCadRow); ntcaPca.gisaBackup = tempgisaBackup18; origCadRow.RejectChanges(); System.Data.DataSet tempgisaBackup19 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup19, newDRow); ntcaPca.gisaBackup = tempgisaBackup19; newDRow.RejectChanges(); System.Data.DataSet tempgisaBackup20 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup20, nRow); ntcaPca.gisaBackup = tempgisaBackup20; nRow.RejectChanges(); System.Data.DataSet tempgisaBackup = ntcaPca.gisaBackup; ddd.ToList().ForEach(r => { PersistencyHelper.BackupRow(ref tempgisaBackup, r); ntcaPca.gisaBackup = tempgisaBackup; r.RejectChanges(); }); ntcaPca.editCAError = PersistencyHelper.EditControloAutPreConcArguments.EditCAErrors.AlreadyUsedCodigo; ntcaPca.message = "Este código não pode ser atribuído uma vez que já é usado " + Environment.NewLine + "noutro nível estrutural."; return; } // verificar se o termo antigo pode ser apagado (só pode ser apagado se não estiver a ser usado) if (! (DBAbstractDataLayer.DataAccessRules.DiplomaModeloRule.Current.isTermoUsedByOthers(caRow.ID, newDRow.CatCode, origDRow.Termo.Trim().Replace("'", "''"), true, ntcaPca.tran))) { System.Data.DataSet tempgisaBackup21 = ntcaPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup21, origDRow); ntcaPca.gisaBackup = tempgisaBackup21; origDRow.Delete(); } } }
private void AddTrusteeIfUsernameDoesntExist(PersistencyHelper.PreConcArguments args) { PersistencyHelper.CreateTrusteePreConcArguments cetpca = null; cetpca = (PersistencyHelper.CreateTrusteePreConcArguments)args; GISADataset.TrusteeRow truRow = (GISADataset.TrusteeRow)(GisaDataSetHelper.GetInstance().Trustee.Select("ID=" + cetpca.truRowID.ToString())[0]); GISADataset.TrusteeUserRow usrRow = (GISADataset.TrusteeUserRow)(GisaDataSetHelper.GetInstance().TrusteeUser.Select("ID=" + cetpca.usrRowID.ToString())[0]); if (! (DBAbstractDataLayer.DataAccessRules.TrusteeRule.Current.isValidNewTrustee(truRow.Name, cetpca.tran))) { System.Data.DataSet tempgisaBackup1 = cetpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup1, usrRow); cetpca.gisaBackup = tempgisaBackup1; System.Data.DataSet tempgisaBackup2 = cetpca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup2, truRow); cetpca.gisaBackup = tempgisaBackup2; usrRow.RejectChanges(); truRow.RejectChanges(); cetpca.successful = false; } else cetpca.successful = true; }
private void CutPasteObjetoDigital(PersistencyHelper.ManageDocsPermissionsPreConcArguments manageDocsPermissionsPreConcArguments, PersistencyHelper.SetNivelOrderPreConcArguments setNivelOrderPreConcArguments, long IDTipoNivelRelacionado, GISADataset.ObjetoDigitalRow odCompSourceRow, ObjDigComposto odCompSource, GISADataset.ObjetoDigitalRow odCompTargetRow, ObjDigComposto odCompTarget, ref List<ObjDigital> odsToIngest) { // cut/paste dos objetos digitais simples associados aos documentos simples cortados if (IDTipoNivelRelacionado == TipoNivelRelacionado.SD) { var odSimples = FedoraHelper.CutPasteODSimples(manageDocsPermissionsPreConcArguments.nRow, odCompSourceRow, odCompSource, odCompTargetRow, odCompTarget); if (odSimples != null) odsToIngest.Add(odSimples); } // roolback sobre a atribuição das permissões if (manageDocsPermissionsPreConcArguments.changePermissions) ManageDocsPermissions(manageDocsPermissionsPreConcArguments); // atribuir número de ordem aos documentos simples cortados if (IDTipoNivelRelacionado == TipoNivelRelacionado.SD && setNivelOrderPreConcArguments != null) { DelegatesHelper.SetOrdemDocSimples(setNivelOrderPreConcArguments.nRowID, setNivelOrderPreConcArguments.nRowIDUpper, setNivelOrderPreConcArguments.tran); // actualizar ordem do objeto digital caso exista FedoraHelper.UpdateODRowGUIOrder(setNivelOrderPreConcArguments.nRowID); } }
public static void ValidaIntegDocExt(PersistencyHelper.PreConcArguments args) { GisaDataSetHelper.GetInstance().EnforceConstraints = false; foreach (var pcArg in ((PersistencyHelper.ValidaIntegDocExtPreConcArguments)args).newDocsList) { pcArg.tran = args.tran; pcArg.gisaBackup = args.gisaBackup; pcArg.continueSave = args.continueSave; DelegatesHelper.ValidateNivelAddAndAssocNewUF(pcArg); if (!pcArg.continueSave) { GisaDataSetHelper.GetInstance().RejectChanges(); args.continueSave = false; break; } } GisaDataSetHelper.GetInstance().EnforceConstraints = true; }
public static void SetCodigo(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments psa = null; psa = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)args; GISADataset.NivelUnidadeFisicaCodigoRow codRow = null; // a atribuição de um código de referência ocorre quando se cria uma // UF nova ou se está a mudar a ED de uma UF e é atribuído só se não houver // qualquer conflito de concorrência if (!psa.cancelSetNewCodigo) { GISADataset.NivelRow nivelUFRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + psa.nivelUFRowID.ToString())[0]); codRow = UnidadesFisicasHelper.GetNewCodigoRow(nivelUFRow, System.DateTime.Now.Year); decimal newCounterValue = DBAbstractDataLayer.DataAccessRules.UFRule.Current.IsCodigoUFBeingUsed(codRow.ID, codRow.Ano, psa.tran); if (newCounterValue != 0M) nivelUFRow.Codigo = "UF" + codRow.Ano.ToString() + "-" + newCounterValue.ToString(); else nivelUFRow.Codigo = "UF" + codRow.Ano.ToString() + "-" + codRow.Contador.ToString(); //quer tenha sido adicionada uma entrada na tabela NivelUnidadeFisicaCodigo quer so tenha sido actualizado //o contador de uma das linhas, essa operação foi executada directamente na base de dados pelo que para //manter a coerência é necessário confirmar a mesma operação do lado do dataset codRow.AcceptChanges(); DBAbstractDataLayer.DataAccessRules.UFRule.Current.ReloadNivelUFCodigo(GisaDataSetHelper.GetInstance(), codRow.ID, codRow.Ano, psa.tran); } }
// Utilizado no contexto dos pastes private void verifyIfCanPaste(PersistencyHelper.PreConcArguments args) { var lstRHPca = args as PersistencyHelper.LstPasteRhXPreConcArguments; var odCompSourceRow = default(GISADataset.ObjetoDigitalRow); var odCompTargetRow = default(GISADataset.ObjetoDigitalRow); var odCompSource = default(ObjDigComposto); var odCompTarget = default(ObjDigComposto); var odsToIngest = new List<ObjDigital>(); var cutPasteODs = lstRHPca.IDTipoNivelRelacionado == TipoNivelRelacionado.SD && SessionHelper.AppConfiguration.GetCurrentAppconfiguration().IsFedoraEnable() && lstRHPca.pasteRhXPreConcArguments.Count > 0; var sourceUpperRow = default(GISADataset.NivelRow); var targetRow = default(GISADataset.NivelRow); if (lstRHPca.pasteRhXPreConcArguments.Count > 0) { sourceUpperRow = lstRHPca.pasteRhXPreConcArguments.First().manageDocsPermissionsArgs.oldParentRow; targetRow = lstRHPca.pasteRhXPreConcArguments.First().manageDocsPermissionsArgs.newParentRow; } if (cutPasteODs) { // obter ODs Compostos dos doc/procs de origem e destino (no caso de não haver as variaveis ficam a null odCompSource = FedoraHelper.GetAssociatedODComposto(sourceUpperRow, out odCompSourceRow); odCompTarget = FedoraHelper.GetAssociatedODComposto(targetRow, out odCompTargetRow); } foreach (var arg in lstRHPca.pasteRhXPreConcArguments) { arg.tran = lstRHPca.tran; arg.gisaBackup = lstRHPca.gisaBackup; arg.continueSave = lstRHPca.continueSave; var uniqueCodigoPca = arg.ensureUniqueCodigoArgs; var updatePermissionsPostSaveArgs = arg.updatePermissionsPostSaveArgs; var manageDocsPermissionsArgs = arg.manageDocsPermissionsArgs; var pcArgsNivelDocSimples = arg.setNivelOrderPreConcArguments; GISADataset.RelacaoHierarquicaRow rhRowOld = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", arg.rhRowOldID, arg.rhRowOldIDUpper))[0]); bool existsRH = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.existsRelacaoHierarquica(arg.rhRowOldIDUpper.ToString(), arg.rhRowOldID.ToString(), args.tran); bool existsN = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.existsNivel(arg.nivel.ID.ToString(), args.tran); // se este delegate voltar a ser executado por conflito de concorrencia ou deadlock o estado da // rhPca.rhRowNew não será detached!! (em caso de conflito, o RowState da rhPca.rhRowNew deverá Added) if (!(arg.rhRowNew.RowState == DataRowState.Detached)) { Debug.Assert(!(arg.rhRowNew.RowState == DataRowState.Added)); GISADataset.RelacaoHierarquicaRow row = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow(); foreach (DataColumn col in GisaDataSetHelper.GetInstance().RelacaoHierarquica.Columns) row[col] = arg.rhRowNew[col]; GisaDataSetHelper.GetInstance().RelacaoHierarquica.Rows.Remove(arg.rhRowNew); GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(row); } // O "paste" só pode ser executado caso a relação antiga e o nível sobre o qual a operação é executada existam if (existsRH && existsN) { // Se passarmos um documento avaliado e que não constitua série // para dentro de uma série já existente temos de garantir que // a série alvo não está também ainda avaliada if (rhRowOld.NivelRowByNivelRelacaoHierarquicaUpper.TipoNivelRow.ID == TipoNivel.ESTRUTURAL && rhRowOld.NivelRowByNivelRelacaoHierarquica.TipoNivelRow.ID == TipoNivel.DOCUMENTAL && arg.rhRowNew.NivelRowByNivelRelacaoHierarquicaUpper.TipoNivelRow.ID == TipoNivel.DOCUMENTAL) { var sourceRow = rhRowOld.NivelRowByNivelRelacaoHierarquica; GISADataset.FRDBaseRow targetFrdRow = null; GISADataset.SFRDAvaliacaoRow targetAvaliacaoRow = null; GISADataset.FRDBaseRow sourceFrdRow = null; GISADataset.SFRDAvaliacaoRow[] sourceAvaliacaoRows = null; // carregar rows da avaliação do nivel sobre o qual vai ser executado o paste DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadNivelAvaliacaoData(GisaDataSetHelper.GetInstance(), arg.nivel.ID, args.tran); targetFrdRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select(string.Format("IDNivel={0} AND IDTipoFRDBase={1:d}", targetRow.ID, TipoFRDBase.FRDOIRecolha))[0]); if (targetFrdRow.GetSFRDAvaliacaoRows().Length > 0) targetAvaliacaoRow = (GISADataset.SFRDAvaliacaoRow)(targetFrdRow.GetSFRDAvaliacaoRows()[0]); sourceFrdRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select(string.Format("IDNivel={0} AND IDTipoFRDBase={1:d}", sourceRow.ID, TipoFRDBase.FRDOIRecolha))[0]); sourceAvaliacaoRows = sourceFrdRow.GetSFRDAvaliacaoRows(); if (sourceAvaliacaoRows.Length > 0 && !(sourceAvaliacaoRows[0].IsPreservarNull()) && (targetAvaliacaoRow == null || targetAvaliacaoRow.IsPreservarNull())) { arg.message = "Não é possível a inclusão de sub-níveis documentais já avaliados em " + System.Environment.NewLine + "níveis documentais ainda não avaliados. Para efectuar esta operação " + System.Environment.NewLine + "avalie o nível documental de destino ou remova a avaliação do nível " + System.Environment.NewLine + "documental de origem."; ToolBarButtonPaste.Enabled = false; arg.PasteError = PersistencyHelper.PasteRhXPreConcArguments.PasteErrors.Avaliacao; continue; } } // Garantir que o código é único no contexto do seu novo nó pai (nos documentos) // ou que é único na aplicação (estruturais temático-funcionais) if (uniqueCodigoPca != null) { if ((arg.rhRowNew.NivelRowByNivelRelacaoHierarquica.IDTipoNivel == TipoNivel.DOCUMENTAL && (arg.rhRowNew.IDTipoNivelRelacionado == TipoNivelRelacionado.D || arg.rhRowNew.IDTipoNivelRelacionado == TipoNivelRelacionado.SD)) || (arg.rhRowNew.NivelRowByNivelRelacaoHierarquica.IDTipoNivel == TipoNivel.ESTRUTURAL && arg.nivel.CatCode.Trim().Equals("NVL"))) { uniqueCodigoPca.tran = arg.tran; // em caso de ser necessário voltar a correr a transacção é preciso garantir que o valor // do RowState da rhPca.rhRowOld seja o original CutPasteUnidadeInformacao(arg, rhRowOld); DelegatesHelper.ensureUniqueCodigo(uniqueCodigoPca); if (!uniqueCodigoPca.successful) { GisaDataSetHelper.GetInstance().TrusteeNivelPrivilege.Cast<GISADataset.TrusteeNivelPrivilegeRow>() .Where(r => r.RowState != DataRowState.Unchanged) .ToList().ForEach(r => r.RejectChanges()); arg.rhRowNew.RejectChanges(); rhRowOld.RejectChanges(); GISADataset.RelacaoHierarquicaRow rhRow = (GISADataset.RelacaoHierarquicaRow)(arg.gisaBackup.Tables["RelacaoHierarquica"].Select(string.Format("ID={0} AND IDUpper={1}", rhRowOld.ID, rhRowOld.IDUpper))[0]); arg.gisaBackup.Tables["RelacaoHierarquica"].Rows.Remove(rhRow); arg.message = uniqueCodigoPca.message; arg.PasteError = PersistencyHelper.PasteRhXPreConcArguments.PasteErrors.NotUniqueCodigo; continue; } } else if ((rhRowOld.IDTipoNivelRelacionado == TipoNivelRelacionado.SR && arg.rhRowNew.IDTipoNivelRelacionado == TipoNivelRelacionado.SR) || (rhRowOld.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR && arg.rhRowNew.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR)) // em caso de ser necessário voltar a correr a transacção é preciso garantir que o valor // do RowState da rhPca.rhRowOld seja o original CutPasteUnidadeInformacao(arg, rhRowOld); } else // em caso de ser necessário voltar a correr a transacção é preciso garantir que o valor // do RowState da rhPca.rhRowOld seja o original CutPasteUnidadeInformacao(arg, rhRowOld); } else if (!existsRH) { arg.message = "O nível que anteriormente recortou foi colado por outro utilizador " + Environment.NewLine + "sobre outro nível. Se pretender ainda colá-lo noutro local precisará " + Environment.NewLine + "de o recortar novamente."; arg.PasteError = PersistencyHelper.PasteRhXPreConcArguments.PasteErrors.RHDeleted; continue; } else if (!existsN) { arg.message = "O nível selecionado foi apagado por outro utilizador. Por esse " + Environment.NewLine + "motivo a execução desta operação foi cancelada."; arg.PasteError = PersistencyHelper.PasteRhXPreConcArguments.PasteErrors.NDeleted; continue; } manageDocsPermissionsArgs.changePermissions = true; manageDocsPermissionsArgs.tran = lstRHPca.tran; if (cutPasteODs && lstRHPca.IDTipoNivelRelacionado == TipoNivelRelacionado.SD) { Debug.Assert(manageDocsPermissionsArgs != null); Debug.Assert(manageDocsPermissionsArgs.nRow != null); var odSimples = FedoraHelper.CutPasteODSimples(manageDocsPermissionsArgs.nRow, odCompSourceRow, odCompSource, odCompTargetRow, odCompTarget); if (odSimples != null) odsToIngest.Add(odSimples); else { arg.message = "O subdocumento selecionado tem um objeto digital associado que " + Environment.NewLine + "não está a permitir terminar esta operação. Não está a ser possível " + Environment.NewLine + "comunicar com o repositório."; arg.PasteError = PersistencyHelper.PasteRhXPreConcArguments.PasteErrors.ObjDigital; continue; } } // roolback sobre a atribuição das permissões if (manageDocsPermissionsArgs.changePermissions) ManageDocsPermissions(manageDocsPermissionsArgs); // atribuir número de ordem aos documentos simples cortados if (lstRHPca.IDTipoNivelRelacionado == TipoNivelRelacionado.SD && pcArgsNivelDocSimples != null) { pcArgsNivelDocSimples.tran = lstRHPca.tran; DelegatesHelper.SetOrdemDocSimples(pcArgsNivelDocSimples.nRowID, pcArgsNivelDocSimples.nRowIDUpper, pcArgsNivelDocSimples.tran); // actualizar ordem do objeto digital caso exista FedoraHelper.UpdateODRowGUIOrder(pcArgsNivelDocSimples.nRowID); } } if (cutPasteODs) { // eliminar o od composto caso não tenha simples ou só tenha 1 var odSimples = FedoraHelper.DeleteODCompostoIfNecessary(sourceUpperRow, odCompSourceRow, odCompSource, odCompTarget); if (odSimples != null) odsToIngest.Add(odSimples); if (odCompSource == null && odCompTarget != null) odsToIngest = new List<ObjDigital>() { odCompTarget }; else if (odCompSource != null && odCompTarget == null) odsToIngest.Add(odCompSource); else if (odCompSource != null && odCompTarget != null) odsToIngest = new List<ObjDigital>() { odCompSource, odCompTarget }; lstRHPca.ODsToIngest = odsToIngest; } }
private static void DeleteFRDBaseXInDataBase(PersistencyHelper.PreSaveArguments args) { NivelRule.Current.DeleteFRDBaseInDataBase(((PersistencyHelper.DeleteIDXPreSaveArguments)args).ID, args.tran); }
public static void DeleteNivelXInDataBase(PersistencyHelper.PreSaveArguments args) { DBAbstractDataLayer.DataAccessRules.NivelRule.Current.DeleteNivelInDataBase(((PersistencyHelper.DeleteIDXPreSaveArguments)args).ID, args.tran); }
public static void ValidateImport(PersistencyHelper.PreConcArguments args) { try { GisaDataSetHelper.GetInstance().EnforceConstraints = false; var vipca = (PersistencyHelper.ValidaImportPreConcArguments)args; foreach (var pcArg in vipca.newDocsList) { pcArg.tran = vipca.tran; pcArg.gisaBackup = vipca.gisaBackup; pcArg.continueSave = vipca.continueSave; DelegatesHelper.ValidateNivelAddAndAssocNewUF(pcArg); if (!pcArg.continueSave) { GisaDataSetHelper.GetInstance().RejectChanges(); vipca.continueSave = false; vipca.errorMessage = pcArg.message; return; } } foreach (var pcArg in vipca.newUfsList) { pcArg.tran = vipca.tran; pcArg.gisaBackup = vipca.gisaBackup; pcArg.continueSave = vipca.continueSave; DelegatesHelper.HandleUF(pcArg); if (!pcArg.continueSave) { GisaDataSetHelper.GetInstance().RejectChanges(); vipca.continueSave = false; vipca.errorMessage = pcArg.message; break; } } } finally { GisaDataSetHelper.GetInstance().EnforceConstraints = true; } }
public static void ValidateImport(PersistencyHelper.PreSaveArguments args) { var psArgs = args as PersistencyHelper.ValidaImportPreSaveArguments; foreach (var newDocArg in psArgs.newDocArgs) { newDocArg.tran = args.tran; DelegatesHelper.SetNewCodigos(newDocArg); } foreach (var newUfArg in psArgs.newUfArgs) { newUfArg.tran = args.tran; DelegatesHelper.SetCodigo(newUfArg); } }
public SaveArgs(PersistencyHelper.SaveResult save) { this.mSave = save; }
public static void ValidateMovimentoDelete(PersistencyHelper.PreConcArguments args) { var vmdiPsa = args as PersistencyHelper.ValidateMovimentoDeleteItemPreConcArguments; var dmRow = GisaDataSetHelper.GetInstance().DocumentosMovimentados.Cast<GISADataset.DocumentosMovimentadosRow>() .SingleOrDefault(r => r.RowState == DataRowState.Deleted && (long)r["IDNivel", DataRowVersion.Original] == vmdiPsa.IDNivel && (long)r["IDMovimento", DataRowVersion.Original] == vmdiPsa.IDMovimento); // este caso acontece quando a linha está detached (o documento foi adicionado, e antes de ser gravado, foi removido da requisição/devolução) if (dmRow == null) return; // não é permitido eliminar a associação de documentos a devoluções com requisições posteriores mas sem devolução // não é permitido eliminar a associação de documentos a requisições com devolução posterior vmdiPsa.continueSave = !DBAbstractDataLayer.DataAccessRules.MovimentoRule.Current.temMovimentosPosteriores(vmdiPsa.IDNivel, vmdiPsa.IDMovimento, vmdiPsa.CatCode, args.tran); if (vmdiPsa.continueSave) return; System.Data.DataSet tempgisaBackup2 = vmdiPsa.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup2, dmRow); vmdiPsa.gisaBackup = tempgisaBackup2; dmRow.RejectChanges(); }
private void AvaliaDocumentosTabela(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments adtPsa = null; adtPsa = (PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments)args; if (adtPsa.frdID > long.MinValue) { FRDRule.Current.ExecuteAvaliaDocumentosTabela(adtPsa.frdID, adtPsa.modeloAvaliacaoID, adtPsa.avaliacaoTabela, adtPsa.preservar, adtPsa.prazoConservacao, adtPsa.tran); } }
// utilizado no contexto das eliminações public static void verifyIfCanDeleteRH(PersistencyHelper.PreConcArguments args) { PersistencyHelper.canDeleteRHRowPreConcArguments cdrhPca = null; cdrhPca = (PersistencyHelper.canDeleteRHRowPreConcArguments)args; GISADataset.NivelRow nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + cdrhPca.nRowID.ToString())[0]); GISADataset.NivelRow nUpperRow = null; if (GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + cdrhPca.nUpperRowID.ToString()).Length > 0) { nUpperRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + cdrhPca.nUpperRowID.ToString())[0]); } GISADataset.RelacaoHierarquicaRow rhRow = null; if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", cdrhPca.rhRowID, cdrhPca.rhRowIDUpper)).Length > 0) { rhRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", cdrhPca.rhRowID, cdrhPca.rhRowIDUpper))[0]); } // Permitir apenas a eliminação de folhas e de níveis cuja // a funcionalidade eliminação não elimina o nível propriamente // dito mas sim a sua relação com o nível superior int parentCount = 0; int directChildCount = 0; bool moreThenOneParent = false; bool notExistsDirectChild = false; parentCount = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.getParentCount(cdrhPca.nRowID.ToString(), cdrhPca.tran); directChildCount = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.getDirectChildCount(cdrhPca.nRowID.ToString(), string.Empty, cdrhPca.tran); moreThenOneParent = parentCount > 1; notExistsDirectChild = directChildCount == 0; Trace.WriteLine("parentCount: " + parentCount.ToString()); Trace.WriteLine("directChildCount: " + directChildCount.ToString()); if (!(!(TipoNivel.isNivelOrganico(nRow) && TipoNivel.isNivelOrganico(nUpperRow)) && (TipoNivel.isNivelOrganico(nRow) || (TipoNivel.isNivelOrganico(nUpperRow) && moreThenOneParent) || (notExistsDirectChild)))) { string filter = string.Format("rh.IDTipoNivelRelacionado != {0:d}", TipoNivelRelacionado.UF); parentCount = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.getParentCount(cdrhPca.nRowID.ToString(), cdrhPca.tran); directChildCount = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.getDirectChildCount(cdrhPca.nRowID.ToString(), filter, cdrhPca.tran); moreThenOneParent = parentCount > 1; notExistsDirectChild = directChildCount == 0; Trace.WriteLine("parentCount: " + parentCount.ToString()); Trace.WriteLine("directChildCount: " + directChildCount.ToString()); cdrhPca.deleteSuccessful = false; cdrhPca.continueSave = false; if (!(!(TipoNivel.isNivelOrganico(nRow) && TipoNivel.isNivelOrganico(nUpperRow)) && (TipoNivel.isNivelOrganico(nRow) || (TipoNivel.isNivelOrganico(nUpperRow) && moreThenOneParent) || (notExistsDirectChild)))) cdrhPca.message = "Só é possível eliminar os níveis que não tenham outros níveis directamente associados"; else cdrhPca.message = "Existem unidades físicas associadas a este nível não podendo por isso ser eliminado."; } else { //ToDo: simplificar este IF: o facto de rhrow ser nothing indica o caso onde é necessario executar o // o método DeleteInDataSet if (rhRow != null) { System.Data.DataSet tempgisaBackup1 = cdrhPca.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup1, rhRow); cdrhPca.gisaBackup = tempgisaBackup1; rhRow.Delete(); } else Nivel.DeleteInDataSet(nRow, false, cdrhPca.gisaBackup); // é possível que esta linha não seja já precisa uma vez que o cleandeleteddata seguinte irá limpar do DS de trabalho as linhas que já não existam } }
private void GetRelPanelCAControl(PersistencyHelper.PreConcArguments args) { GISADataset.ControloAutRelRow newCARRow = null; GISADataset.ControloAutRelRow delCARRow = null; PersistencyHelper.VerifyRelExistencePreConcArguments vrePsa = null; vrePsa = (PersistencyHelper.VerifyRelExistencePreConcArguments)args; //Added if (GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("(IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})", vrePsa.ID, vrePsa.IDUpper)).Length > 0) newCARRow = (GISADataset.ControloAutRelRow)(GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("(IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})", vrePsa.ID, vrePsa.IDUpper))[0]); //Del if (GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("(IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})", vrePsa.ID, vrePsa.IDUpper), null, DataViewRowState.Deleted).Length > 0) delCARRow = (GISADataset.ControloAutRelRow)(GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("(IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})", vrePsa.ID, vrePsa.IDUpper), null, DataViewRowState.Deleted)[0]); //bd int result = ControloAutRule.Current.ExistsRel(vrePsa.ID, vrePsa.IDUpper, vrePsa.IDTipoRel, vrePsa.isCARRow, vrePsa.tran); switch (result) { case 0: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError; break; case 1: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.RelationAlreadyExists; break; case 2: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CyclicRelation; break; case 3: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CADeleted; break; } if (newCARRow != null && delCARRow == null && result == Convert.ToInt64(PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)) { //Comportamento normal: a relação é criada } else if (newCARRow != null && delCARRow != null && ! (result == Convert.ToInt64(PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError))) { delCARRow.AcceptChanges(); } else if (newCARRow != null && delCARRow == null && result == Convert.ToInt64(PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)) { newCARRow.AcceptChanges(); } else if (newCARRow != null && delCARRow != null && result == Convert.ToInt64(PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)) { delCARRow.AcceptChanges(); newCARRow.AcceptChanges(); } }
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 SetNewCodigos(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.SetNewCodigosPreSaveArguments sncPsa = null; sncPsa = (PersistencyHelper.SetNewCodigosPreSaveArguments)args; if (sncPsa.createNewNivelCodigo) { sncPsa.argsNivel.tran = sncPsa.tran; createNewCodigoSerie(sncPsa.argsNivel); } if (sncPsa.createNewUFCodigo) { sncPsa.argsUF.tran = sncPsa.tran; SetCodigo(sncPsa.argsUF); } if (sncPsa.argsNivelDocSimples != null) { sncPsa.argsNivelDocSimples.tran = sncPsa.tran; SetOrdemDocSimples(sncPsa.argsNivelDocSimples.nRowID, sncPsa.argsNivelDocSimples.nRowIDUpper, sncPsa.argsNivelDocSimples.tran); } }
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 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; }
private static void CutPasteUnidadeInformacao(PersistencyHelper.PasteRhXPreConcArguments rhPca, GISADataset.RelacaoHierarquicaRow rhRowOld) { var nRow = rhRowOld.NivelRowByNivelRelacaoHierarquica; var tempgisaBackup1 = rhPca.gisaBackup; nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().ToList().ForEach(rh => { // backup old rhRows PersistencyHelper.BackupRow(ref tempgisaBackup1, rh); // delete old rhRows rh.Delete(); }); rhPca.gisaBackup = tempgisaBackup1; // add new rhRow GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhPca.rhRowNew); }
public static void EnsureNivelUpperExists(PersistencyHelper.PreConcArguments args) { PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments pcArgs = null; pcArgs = (PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments)args; GISADataset.NivelRow nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + pcArgs.nRowID.ToString())[0]); long rhRowIDUpper = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDUpper; if (rhRowIDUpper < 0) pcArgs.RHNivelUpperExists = true; else // antes de obter o código verificar se adição de um novo nível ainda é possível (por razões de concorrência) pcArgs.RHNivelUpperExists = NivelRule.Current.isNivelDeleted(rhRowIDUpper, args.tran); if (!pcArgs.RHNivelUpperExists) { GISADataset.RelacaoHierarquicaRow rhRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", pcArgs.rhRowID, pcArgs.rhRowIDUpper))[0]); GISADataset.NivelDesignadoRow ndRow = (GISADataset.NivelDesignadoRow)(GisaDataSetHelper.GetInstance().NivelDesignado.Select("ID=" + pcArgs.ndRowID.ToString())[0]); GISADataset.FRDBaseRow frdBaseRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + pcArgs.frdBaseID.ToString())[0]); System.Data.DataSet tempgisaBackup1 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup1, rhRow); pcArgs.gisaBackup = tempgisaBackup1; rhRow.RejectChanges(); System.Data.DataSet tempgisaBackup2 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup2, ndRow); pcArgs.gisaBackup = tempgisaBackup2; ndRow.RejectChanges(); System.Data.DataSet tempgisaBackup3 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup3, nRow); pcArgs.gisaBackup = tempgisaBackup3; nRow.RejectChanges(); System.Data.DataSet tempgisaBackup4 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup4, frdBaseRow); pcArgs.gisaBackup = tempgisaBackup4; frdBaseRow.RejectChanges(); pcArgs.message = "Não foi possível criar a unidade informacional uma" + Environment.NewLine + "vez que a unidade superior foi apagada por outro utilizador."; } }
private void ManageDocsPermissions(PersistencyHelper.PreConcArguments args) { PersistencyHelper.ManageDocsPermissionsPreConcArguments mdpPsa = null; mdpPsa = (PersistencyHelper.ManageDocsPermissionsPreConcArguments)args; GISADataset.NivelRow nRow = mdpPsa.nRow; GISADataset.NivelRow newParentRow = mdpPsa.newParentRow; GISADataset.NivelRow oldParentRow = mdpPsa.oldParentRow; if (! mdpPsa.changePermissions) return; if ((newParentRow.IDTipoNivel == TipoNivel.ESTRUTURAL) && (oldParentRow.IDTipoNivel == TipoNivel.DOCUMENTAL)) { // o documento deixou de constituir série PermissoesHelper.AddNivelGrantPermissions(nRow, newParentRow, mdpPsa.tran); } else if ((oldParentRow.IDTipoNivel == TipoNivel.ESTRUTURAL) && (newParentRow.IDTipoNivel == TipoNivel.DOCUMENTAL)) { // o documento passou a constituir série PermissoesHelper.UndoAddNivelGrantPermissions(nRow); } }
public static void createNewCodigoSerie(PersistencyHelper.PreSaveArguments args) { try { GISADataset.NivelRow nRow = null; nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + ((PersistencyHelper.FetchLastCodigoSeriePreSaveArguments)args).nRowID.ToString())[0]); // antes de obter o código verificar se adição de um novo nível ainda é possível (por razões de concorrência) bool RHNivelUpperExists = ((PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments)(((PersistencyHelper.FetchLastCodigoSeriePreSaveArguments)args).pcArgs)).RHNivelUpperExists; if (RHNivelUpperExists) { NivelRule.Current.FillTipoNivelRelacionadoCodigo(GisaDataSetHelper.GetInstance(), args.tran); nRow.Codigo = NiveisHelper.getNextSeriesCodigo(true); // estamos dentro de um save e de uma transaccao por isso podemos fazer um update DBAbstractDataLayer.DataAccessRules.PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().TipoNivelRelacionadoCodigo, GisaDataSetHelper.GetInstance().TipoNivelRelacionadoCodigo.Select(), args.tran); } } catch (Exception ex) { Trace.WriteLine(ex); throw; } }
public static void ValidaIntegDocExt(PersistencyHelper.PreSaveArguments args) { var psArgs = args as PersistencyHelper.ValidaIntegDocExtPreSaveArguments; foreach (var newDocArg in psArgs.newDocArgs) { newDocArg.tran = args.tran; DelegatesHelper.SetNewCodigos(newDocArg); } foreach (PersistencyHelper.PreSaveArguments newCAArgs in psArgs.newControloAutArgs) { newCAArgs.tran = args.tran; DelegatesHelper.validateCANewTermo(newCAArgs); var a = newCAArgs as PersistencyHelper.NewControloAutPreSaveArguments; var caRow = GisaDataSetHelper.GetInstance().ControloAut.Cast<GISADataset.ControloAutRow>().SingleOrDefault(ca => ca.ID == a.caID); if (caRow == null || caRow.RowState == DataRowState.Detached || (caRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.EntidadeProdutora && !a.successCodigo) || !a.successTermo) { GisaDataSetHelper.GetInstance().RejectChanges(); break; } } }
public static void verificaCodigosRepetidos(PersistencyHelper.PreConcArguments args) { var pcArgs = (PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments) args; var rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Cast<GISADataset.RelacaoHierarquicaRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == pcArgs.rhRowID && r.IDUpper == pcArgs.rhRowIDUpper); if (rhRow != null) { var codigo = rhRow.NivelRowByNivelRelacaoHierarquica.Codigo; var ID = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetIDCodigoRepetido(codigo, rhRow.ID, pcArgs.tran, pcArgs.testOnlyWithinNivel, rhRow.NivelRowByNivelRelacaoHierarquicaUpper.ID); if (ID > long.MinValue) { // erro pcArgs.message = string.Format( "Não foi possível completar a operação uma vez que" + Environment.NewLine + "por debaixo da entidade produtora selecionada" + Environment.NewLine + "o código parcial '{0}' já é utilizado pela unidade " + Environment.NewLine + "informacional com o identificador {1}.", codigo, rhRow.ID); var tempgisaBackup3 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup3, rhRow); pcArgs.gisaBackup = tempgisaBackup3; rhRow.RejectChanges(); } else pcArgs.successful = true; } }
private void ValidateCreateRel(PersistencyHelper.PreConcArguments args) { PersistencyHelper.VerifyRelExistencePreConcArguments vrePsa = null; vrePsa = (PersistencyHelper.VerifyRelExistencePreConcArguments)args; DataRow[] newRelRow = null; if (vrePsa.isCARRow) { newRelRow = GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("((IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})) AND IDTipoRel = {2}", vrePsa.ID, vrePsa.IDUpper, vrePsa.IDTipoRel)); } else { newRelRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1} AND IDTipoNivelRelacionado = {2}", vrePsa.ID, vrePsa.IDUpper, vrePsa.IDTipoRel)); } int result = ControloAutRule.Current.ExistsRel(vrePsa.ID, vrePsa.IDUpper, vrePsa.IDTipoRel, vrePsa.isCARRow, vrePsa.tran); switch (result) { case 0: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError; break; case 1: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.RelationAlreadyExists; break; case 2: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CyclicRelation; break; case 3: vrePsa.CreateEditResult = PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CADeleted; break; } if (!(result == Convert.ToInt32(PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)) && newRelRow.Length > 0) { newRelRow[0].RejectChanges(); } else if (newRelRow.Length > 0) { var rhRow = newRelRow[0] as GISADataset.RelacaoHierarquicaRow; if (rhRow == null) return; PermissoesHelper.AddNivelGrantPermissions(rhRow.NivelRowByNivelRelacaoHierarquica, rhRow.NivelRowByNivelRelacaoHierarquicaUpper, vrePsa.tran); } }
public static void ensureUniqueCodigo(PersistencyHelper.PreConcArguments args) { PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments pcArgs = null; pcArgs = (PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments)args; GISADataset.NivelRow nRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + pcArgs.nRowID.ToString())[0]); GISADataset.NivelDesignadoRow ndRow = (GISADataset.NivelDesignadoRow)(GisaDataSetHelper.GetInstance().NivelDesignado.Select("ID=" + pcArgs.ndRowID.ToString())[0]); GISADataset.RelacaoHierarquicaRow rhRow = null; if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", pcArgs.rhRowID, pcArgs.rhRowIDUpper)).Length > 0) { rhRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", pcArgs.rhRowID, pcArgs.rhRowIDUpper))[0]); } // Se o nível em questão for uma entidade detentora if (rhRow == null && nRow.TipoNivelRow.ID == TipoNivel.LOGICO) { if (DBAbstractDataLayer.DataAccessRules.NivelRule.Current.isUniqueCodigo(nRow.Codigo, nRow.ID, pcArgs.tran, pcArgs.testOnlyWithinNivel)) { pcArgs.successful = true; } else { var cod = nRow.Codigo; System.Data.DataSet tempgisaBackup1 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup1, ndRow); pcArgs.gisaBackup = tempgisaBackup1; System.Data.DataSet tempgisaBackup2 = pcArgs.gisaBackup; PersistencyHelper.BackupRow(ref tempgisaBackup2, nRow); pcArgs.gisaBackup = tempgisaBackup2; ndRow.RejectChanges(); PermissoesHelper.UndoAddNivelGrantPermissions(nRow); nRow.RejectChanges(); pcArgs.message = string.Format( "Não é possível completar a operação porque não é permitido " + Environment.NewLine + "que duas unidades de informação tenham o mesmo código " + Environment.NewLine + "parcial ({0}) no mesmo nivel de descrição.", cod); } } else { // antes de obter o código verificar se adição de um novo nível ainda é possível (por razões // de concorrência é necessário garantir que tanto o nível acima mantém-se na base de dados // até o save estar terminado) bool upperRelationExists; if (rhRow.IDUpper < 0) upperRelationExists = true; else upperRelationExists = NivelRule.Current.isNivelDeleted(rhRow.IDUpper, args.tran); if (!upperRelationExists) { var frdRow = GisaDataSetHelper.GetInstance().FRDBase.Cast<GISADataset.FRDBaseRow>().Single(r => r.ID == pcArgs.frdBaseID); Nivel.DeleteInDataSet(frdRow, false, pcArgs.gisaBackup); Nivel.DeleteInDataSet(nRow, false, pcArgs.gisaBackup); pcArgs.message = "Não foi possível criar/editar a unidade informacional uma" + Environment.NewLine + "vez que a unidade superior foi apagada por outro utilizador."; } else { if (DBAbstractDataLayer.DataAccessRules.NivelRule.Current.isUniqueCodigo(nRow.Codigo, nRow.ID, pcArgs.tran, pcArgs.testOnlyWithinNivel, rhRow.NivelRowByNivelRelacaoHierarquicaUpper.ID)) pcArgs.successful = true; else { var cod = nRow.Codigo; if (nRow.RowState == DataRowState.Modified) { nRow.RejectChanges(); GisaDataSetHelper.GetInstance().IndexFRDCA.Cast<GISADataset.IndexFRDCARow>() .Where(r => r.RowState != DataRowState.Unchanged).ToList().ForEach(r => r.RejectChanges()); } else if (nRow.RowState == DataRowState.Added) { var frdRow = GisaDataSetHelper.GetInstance().FRDBase.Cast<GISADataset.FRDBaseRow>().Single(r => r.ID == pcArgs.frdBaseID); Nivel.DeleteInDataSet(frdRow, false, pcArgs.gisaBackup); Nivel.DeleteInDataSet(nRow, false, pcArgs.gisaBackup); } pcArgs.message = string.Format( "Não é possível completar a operação porque não é permitido " + Environment.NewLine + "que duas unidades de informação tenham o mesmo código " + Environment.NewLine + "parcial ({0}) no mesmo nivel de descrição.", cod); } } } }
private void EditTrusteeIfUsernameDoesntExist(PersistencyHelper.PreConcArguments args) { PersistencyHelper.EditTrusteePreConcArguments etpca = null; etpca = (PersistencyHelper.EditTrusteePreConcArguments)args; if (DBAbstractDataLayer.DataAccessRules.TrusteeRule.Current.isValidNewTrustee(etpca.username, etpca.tran)) { etpca.truRow.Name = etpca.username; etpca.successful = true; } }
private void AvaliacaoPublicacao(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.PublishSubDocumentosPreSaveArguments psdPsa = null; psdPsa = (PersistencyHelper.PublishSubDocumentosPreSaveArguments)(((PersistencyHelper.AvaliacaoPublicacaoPreSaveArguments)args).psArgs1); psdPsa.tran = args.tran; PublishSubDocumentos(psdPsa); PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments adtPsa = null; adtPsa = (PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments)(((PersistencyHelper.AvaliacaoPublicacaoPreSaveArguments)args).psArgs2); adtPsa.tran = args.tran; AvaliaDocumentosTabela(adtPsa); }