Beispiel #1
0
		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;
		}
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
		// 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;
            }
		}
Beispiel #8
0
		private static void DeleteFRDBaseXInDataBase(PersistencyHelper.PreSaveArguments args)
		{
			NivelRule.Current.DeleteFRDBaseInDataBase(((PersistencyHelper.DeleteIDXPreSaveArguments)args).ID, args.tran);
		}
Beispiel #9
0
		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);
            }
        }
Beispiel #12
0
 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();

        }
Beispiel #14
0
		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);
			}
		}
Beispiel #15
0
        // 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
            }
        }
Beispiel #16
0
		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();
			}
		}
Beispiel #17
0
        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();
                    //    }
                    //}
                }
            }
        }
Beispiel #18
0
        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);
            }
        }
Beispiel #19
0
        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();
            }
        }
Beispiel #20
0
        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;
        }
Beispiel #21
0
        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);
        }
Beispiel #22
0
        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.";
            }
        }
Beispiel #23
0
		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);
			}
		}
Beispiel #24
0
 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;
     }
 }
Beispiel #25
0
        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;
                }
            }
        }
Beispiel #26
0
        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;
            }
        }
Beispiel #27
0
		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);
            }
		}		
Beispiel #28
0
        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;
			}
		}
Beispiel #30
0
		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);
		}