Exemplo n.º 1
0
		//metodo responsavel por eliminar toda a nuvem do CA actual em memoria
		public static PersistencyHelper.DeleteCAXPreConcArguments DeleteCAX(GISADataset.ControloAutRow caRow)
		{
			GISADataset.ControloAutDicionarioRow[] cadRows = caRow.GetControloAutDicionarioRows();
			GISADataset.DicionarioRow dRow = null;
			PersistencyHelper.DeleteCAXPreConcArguments args = new PersistencyHelper.DeleteCAXPreConcArguments();

			// eliminar registos de "Dicionario" e de "ControloAutDicionario"
            cadRows.ToList().ForEach(cadRow =>
            {
                dRow = cadRow.DicionarioRow;
                args.termos.Add(dRow);
                cadRow.Delete();
            });
			args.caRowID = caRow.ID;
			args.catCode = getCatCode(caRow.TipoNoticiaAutRow);

			// eliminar registos de IndexFRDCA
            caRow.GetIndexFRDCARows().ToList().ForEach(idx => idx.Delete());

			// Somente para notícias de autoridade relacionaveis
            caRow.GetControloAutRelRowsByControloAutControloAutRel().ToList().ForEach(carRow => carRow.Delete());
            caRow.GetControloAutRelRowsByControloAutControloAutRelAlias().ToList().ForEach(carRow => carRow.Delete());
            caRow.GetControloAutEntidadeProdutoraRows().ToList().ForEach(caepRow => caepRow.Delete());
            caRow.GetControloAutDatasExistenciaRows().ToList().ForEach(cadeRow => cadeRow.Delete());

			caRow.Delete();
			return args;
		}
Exemplo n.º 2
0
        internal bool ExistsFormaAutorizada()
        {
            GISADataset.DicionarioRow dRow = null;
            string selectedTermo           = string.Empty;

            if (ListTermos.ValidAuthorizedForm != null)
            {
                selectedTermo = ListTermos.ValidAuthorizedForm.Replace("'", "''");
            }

            // é necessário prever a possibilidade de haverem termos que são strings vazias (resultantes de conversões) no dataset
            if (selectedTermo.Length > 0 && GisaDataSetHelper.GetInstance().Dicionario.Select(string.Format("Termo = '{0}' ", selectedTermo)).Length > 0)
            {
                dRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select(string.Format("Termo = '{0}'", selectedTermo))[0]);
            }
            else if (selectedTermo.Length > 0)
            {
                dRow         = GisaDataSetHelper.GetInstance().Dicionario.NewDicionarioRow();
                dRow.Termo   = ListTermos.ValidAuthorizedForm;
                dRow.CatCode = "CA";
                dRow.Versao  = new byte[] {};
            }

            if (dRow == null)             // dRow é nothing se o valor selecionado já existir/for inválido
            {
                return(true);
            }

            // As rows detached serão as acabadas de criar e que, por essa mesma razão, não
            // foram ainda adicionadas ao dataset. Se usarmos um termo já existente é
            // necessário verificar que não existam outros CAs deste tipo de notícia de autoridade
            // que façam já uso deste termo como forma autorizada.
            bool alreadyExistsFormaAutorizada = false;

            if (dRow != null && dRow.RowState != DataRowState.Detached)
            {
                int           tcaf = (int)TipoControloAutForma.FormaAutorizada;
                IDbConnection conn = GisaDataSetHelper.GetConnection();
                try
                {
                    conn.Open();
                    Trace.WriteLine("<ExistsControloAutDicionario>");
                    //TODO: apagar?
                    //alreadyExistsFormaAutorizada = CBool(GisaDataSetHelper.GetDBLayer().CallScalarProcedure("sp_ExistsControloAutDicionario", param, types, values))
                    alreadyExistsFormaAutorizada = ControloAutRule.Current.ExistsControloAutDicionario(dRow.ID, tcaf, ((GISADataset.TipoNoticiaAutRow)cbNoticiaAut.SelectedValue).ID, conn);
                    Trace.WriteLine("</ExistsControloAutDicionario>");
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
                finally
                {
                    conn.Close();
                }
            }
            return(alreadyExistsFormaAutorizada);
        }
Exemplo n.º 3
0
 public bool NodeAlreadyExists(GISADataset.DicionarioRow dr)
 {
     foreach (TreeNode existingBranch in trVwTermoIndexacao.Nodes)
     {
         if (existingBranch.Tag is GISADataset.TipoControloAutFormaRow)
         {
             foreach (TreeNode existingNode in existingBranch.Nodes)
             {
                 if (dr.ID == ((GISADataset.ControloAutDicionarioRow)existingNode.Tag).IDDicionario)
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Exemplo n.º 4
0
		// Método que trata da atribuição de uma designação a um Diploma/Modelo durante uma criação ou edição
		private GISADataset.ControloAutDicionarioRow manageDesignacaoDiplomaModelo(GISADataset.ControloAutDicionarioRow cadRow, string termo, GISADataset.TipoNoticiaAutRow TipoNoticiaAutRow, GISADataset.ControloAutRow carow, GISADataset.TipoControloAutFormaRow tcafRowAutorizado)
		{

			// NOTA: é criada na mesma uma linha Dicionario; posteriormente no algoritmo que trata os
			//       conflitos de concorrência vai proceder à reutilização da linha existente na
			//       base de dados
			if (cadRow != null)
			{
				// se por algum motivo a transacção onde este método está inserido voltar a ser executada,
				// mfaPca.cadRow já não será nothing e por esse motivo deverá ser apagada a existente 
				// em memória seja qual for o seu rowstate
				GisaDataSetHelper.GetInstance().ControloAutDicionario.RemoveControloAutDicionarioRow(cadRow);
				GisaDataSetHelper.GetInstance().Dicionario.RemoveDicionarioRow(cadRow.DicionarioRow);
			}
			else if (GisaDataSetHelper.GetInstance().Dicionario.Select("Termo='" + termo.Replace("'", "''") + "' AND CatCode='" + getCatCode(carow.TipoNoticiaAutRow) + "'").Length > 0)
			{
				GISADataset.DicionarioRow dicionarioRow = (GISADataset.DicionarioRow)(GisaDataSetHelper.GetInstance().Dicionario.Select("Termo='" + termo.Replace("'", "''") + "' AND CatCode='" + getCatCode(carow.TipoNoticiaAutRow) + "'")[0]);
				GisaDataSetHelper.GetInstance().Dicionario.RemoveDicionarioRow(dicionarioRow);
			}
			GISADataset.DicionarioRow dRow = GisaDataSetHelper.GetInstance().Dicionario.AddDicionarioRow(termo, getCatCode(carow.TipoNoticiaAutRow), new byte[]{}, 0);
			return GisaDataSetHelper.GetInstance().ControloAutDicionario.AddControloAutDicionarioRow(carow, dRow, tcafRowAutorizado, new byte[]{}, 0);
		}
Exemplo n.º 5
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();
            }
        }
Exemplo n.º 6
0
		private void setNewTermo(PersistencyHelper.PreConcArguments args)
		{
			try
			{
				PersistencyHelper.ManageFormasAutorizadasPreConcArguments mfaPca = (PersistencyHelper.ManageFormasAutorizadasPreConcArguments)args;
				string termo = mfaPca.termo;
				GISADataset.ControloAutRow carow = (GISADataset.ControloAutRow)(GisaDataSetHelper.GetInstance().ControloAut.Select("ID=" + mfaPca.caRowID.ToString())[0]);
				GISADataset.TipoControloAutFormaRow tcafRowAutorizado = (GISADataset.TipoControloAutFormaRow)(GisaDataSetHelper.GetInstance().TipoControloAutForma.Select("ID=" + System.Enum.Format(typeof(TipoControloAutForma), TipoControloAutForma.FormaAutorizada, "D"))[0]);
				DataSet gisaBackup = mfaPca.gisaBackup;
				//Dim dataReader As IDataReader
				GISADataset.DicionarioRow dRowOrig = null;
				GISADataset.ControloAutDicionarioRow cadRowOrig = ControloAutHelper.getFormaAutorizada(carow);
				bool existsOrigCad = false;

				ArrayList termoUsed = DiplomaModeloRule.Current.GetDicionario(getCatCode(carow.TipoNoticiaAutRow), termo.Trim(), mfaPca.tran);

				// Distinguir entre criar e editar um Diploma/Modelo
				if (carow.ID < 0)
				{
					// Criar Diploma/Modelo:
					//  - verificar se o termo escolhido existe na base de dados e se nesse caso, verificar se
					//    está a ser utilizado noutro Diploma/Modelo
					if (((long)(termoUsed[0])) > 0 && (bool)(termoUsed[1]))
					{
						// A designação já existe na base de dados mas está marcada como apagada
						mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado);
					}
					else if (((long)(termoUsed[0])) > 0 && ! ((bool)(termoUsed[1])))
					{
						// A designação já existe na base de dados mas não está marcada como apagada; no entanto, 
						// é preciso saber se está a ser usada por outro Diploma/Modelo (tipicamente, nesta 
						// situação a designação está a ser utilizada por um Diploma/Modelo mas já aconteceu não 
						// estar a ser utilizada fruto de uma resolução de conflito de concorrência)
						if (DiplomaModeloRule.Current.ExistsControloAutDicionario((long)(termoUsed[0]), 1, carow.TipoNoticiaAutRow.ID, mfaPca.tran))
						{
							carow.RejectChanges();
							mfaPca.message = "A designação especificada já existe, deverá escolhê-la da lista caso a pretenda utilizar.";
						}
						else
						{
							mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado);
						}
					}
					else
					{
						// A designação não existe na base de dados
						mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado);
					}
				}
				else
				{
					// Editar Diploma/Modelo
					//  - verificar se entretanto outro utilizador já editou o Diploma/Modelo
					//  - verificar se o termo escolhido existe na base de dados e se nesse caso, verificar se
					//    está a ser utilizado noutro Diploma/Modelo
					existsOrigCad = DiplomaModeloRule.Current.ExistsControloAutDicionario(cadRowOrig.IDDicionario, cadRowOrig.IDTipoControloAutForma, carow.TipoNoticiaAutRow.ID, mfaPca.tran);

					dRowOrig = cadRowOrig.DicionarioRow;

					PersistencyHelper.BackupRow(ref gisaBackup, cadRowOrig);
					PersistencyHelper.BackupRow(ref gisaBackup, dRowOrig);

					cadRowOrig.Delete();
					// é permitido apagar o termo antigo uma vez que é único para diplomas/modelo
					dRowOrig.Delete();

					if (existsOrigCad)
					{
						// o Diploma/Modelo não foi editado por nenhum outro utilizador
						if (((long)(termoUsed[0])) > 0 && (bool)(termoUsed[1]))
						{
							// A designação já existe na base de dados mas está marcada como apagada
							mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado);
						}
						else if (((long)(termoUsed[0])) > 0 && ! ((bool)(termoUsed[1])))
						{
							// A designação já existe na base de dados mas não está marcada como apagada; no entanto, 
							// é preciso saber se está a ser usada por outro Diploma/Modelo (tipicamente, nesta 
							// situação a designação está a ser utilizada por um Diploma/Modelo mas já aconteceu não 
							// estar a ser utilizada fruto de uma resolução de conflito de concorrência)
							if (DiplomaModeloRule.Current.ExistsControloAutDicionario((long)(termoUsed[0]), 1, carow.TipoNoticiaAutRow.ID, mfaPca.tran))
							{
								dRowOrig.RejectChanges();
								cadRowOrig.RejectChanges();
								mfaPca.message = "A designação especificada já existe, deverá escolhê-la da lista caso a pretenda utilizar.";
							}
							else
							{
								mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado);
							}
						}
						else
						{
							// A designação não existe na base de dados
							mfaPca.cadRow = manageDesignacaoDiplomaModelo(mfaPca.cadRow, mfaPca.termo, carow.TipoNoticiaAutRow, carow, tcafRowAutorizado);
						}
					}
					else
					{
						// Outro utilizador já editou este Diploma/Modelo pelo que não é possível reeditá-lo
						dRowOrig.RejectChanges();
						cadRowOrig.RejectChanges();
						mfaPca.message = "Não foi possível executar a operação pretendida pois o controlo de autoridade foi alterado por outro utilizador.";
					}
				}
			}
			catch (Exception ex)
			{
				Trace.WriteLine(ex);
				throw;
			}
		}
Exemplo n.º 7
0
		private void ToolBarButtonClickEvent(object sender, ToolBarButtonClickEventArgs e)
		{
			// obter o tipo de noticia em causa
			GISADataset.TipoNoticiaAutRow tnaRow = null;
			//tnaRow = DirectCast(GisaDataSetHelper.GetInstance().TipoNoticiaAut.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoNoticiaAut.Diploma))(0), GISADataset.TipoNoticiaAutRow)
			tnaRow = (GISADataset.TipoNoticiaAutRow)caList.cbNoticiaAut.SelectedItem;
			if (tnaRow.ID == -1 && caList.cbNoticiaAut.Items.Count == 2)
			{
				tnaRow = (GISADataset.TipoNoticiaAutRow)(caList.cbNoticiaAut.Items[1]);
			}

			Trace.Assert(tnaRow != null);
			Trace.Assert(! (tnaRow.ID == -1));

			if (e.Button == ToolBarButtonNew)
			{
				FormCreateDiplomaModelo form = new FormCreateDiplomaModelo();
				if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Diploma))
				{
					form.Text = "Criar diploma";
				}
				else if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Modelo))
				{
					form.Text = "Criar modelo";
				}
				switch (form.ShowDialog())
				{
					case System.Windows.Forms.DialogResult.OK:

						//adicionar o novo controlo de autoridade ao modelo de dados e à interface
						GISADataset.ControloAutRow caRow = null;
						caRow = GisaDataSetHelper.GetInstance().ControloAut.NewControloAutRow();
						caRow.Autorizado = false;
						caRow.Completo = false;
						caRow.IDTipoNoticiaAut = tnaRow.ID;
						caRow.NotaExplicativa = "";
						caRow["IDIso639p2"] = DBNull.Value;
						caRow["IDIso15924"] = DBNull.Value;
						caRow.ChaveColectividade = "";
						caRow.ChaveRegisto = "";
						caRow.RegrasConvencoes = "";
						caRow.Observacoes = "";
						caRow.DescContextoGeral = "";
						caRow.DescEnquadramentoLegal = "";
						caRow.DescEstatutoLegal = "";
						caRow.DescEstruturaInterna = "";
						caRow.DescOcupacoesActividades = "";
						caRow.DescHistoria = "";
						caRow.DescOutraInformacaoRelevante = "";
						caRow.DescZonaGeografica = "";

						try
						{
							GisaDataSetHelper.GetInstance().ControloAut.AddControloAutRow(caRow);
							PersistencyHelper.ManageFormasAutorizadasPreConcArguments args = new PersistencyHelper.ManageFormasAutorizadasPreConcArguments();
							args.termo = form.Designacao.Trim().Replace("'", "''");
							args.caRowID = caRow.ID;

							PersistencyHelper.save(setNewTermo, args);
							PersistencyHelper.cleanDeletedData();

							caList.cbNoticiaAut.SelectedItem = tnaRow;
							caList.ReloadList();

							if (args.message.Length > 0)
							{
								MessageBox.Show(args.message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
							}

							if (args.cadRow != null)
                                caList.SelectItem(args.cadRow);
						}
						catch (Exception ex)
						{
							Trace.WriteLine(ex);
							throw;
						}

						break;
					case System.Windows.Forms.DialogResult.Cancel:

					break;
					default:

					break;
				}
			}
			else if (e.Button == ToolBarButtonEdit)
			{
				GISADataset.ControloAutDicionarioRow cad = null;
				GISADataset.DicionarioRow d = null;
				cad = (GISADataset.ControloAutDicionarioRow)(caList.SelectedItems[0].Tag);
				Debug.Assert(cad.IDTipoControloAutForma == Convert.ToInt64(TipoControloAutForma.FormaAutorizada));
				d = cad.DicionarioRow;

				FormCreateDiplomaModelo form = new FormCreateDiplomaModelo();
				if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Diploma))
				{
					form.Text = "Editar diploma";
				}
				else if (tnaRow.ID == Convert.ToInt64(TipoNoticiaAut.Modelo))
				{
					form.Text = "Editar modelo";
				}
				form.Designacao = d.Termo;
				switch (form.ShowDialog())
				{
					case System.Windows.Forms.DialogResult.OK:
						try
						{
							PersistencyHelper.ManageFormasAutorizadasPreConcArguments args = new PersistencyHelper.ManageFormasAutorizadasPreConcArguments();
							args.termo = form.Designacao.Trim().Replace("'", "''");
							args.caRowID = cad.ControloAutRow.ID;

							PersistencyHelper.save(setNewTermo, args);
							PersistencyHelper.cleanDeletedData();

							caList.ReloadList();

							if (args.message.Length > 0)
								MessageBox.Show(args.message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);

							if (args.cadRow != null)
                                caList.SelectItem(args.cadRow);
						}
						catch (Exception ex)
						{
							Trace.WriteLine(ex);
							throw;
						}
						break;
					case System.Windows.Forms.DialogResult.Cancel:

					break;
					default:

					break;
				}
			}
			else if (e.Button == ToolBarButtonDelete)
				DeleteControloAut(caList, "Eliminar diplomas/modelos", "Os items serão removidos apesar das associações existentes. Pretende continuar?", "Deseja apagar os elementos selecionados?");
			else if (e.Button == ToolBarButtonFilter)
                caList.FilterVisible = ToolBarButtonFilter.Pushed;
			else
				Debug.Assert(false, "Unexpected button clicked in ToolBar.");
		}