public GISADataset.TrusteeUserRow CreateNewUser()
		{
			//adicionar um utilizador sem grupo nem permissões para utilização da aplicação
			//, com builtinuser = false, com isauhtority = true e com isactive = false
			GISADataset.TrusteeRow tRow = null;
			GISADataset.TrusteeUserRow tuRow = null;
			
			byte[] Versao = null;
			try
			{
				tRow = GisaDataSetHelper.GetInstance().Trustee.AddTrusteeRow("autor", "", "USR", false, false, true, true, Versao, 0);
				tuRow = GisaDataSetHelper.GetInstance().TrusteeUser.NewTrusteeUserRow();
				tuRow.TrusteeRow = tRow;
				tuRow.Password = "";
				tuRow.FullName = "Novo autor";
				tuRow.IsAuthority = true;
				tuRow["IDTrusteeUserDefaultAuthority"] = DBNull.Value;
				GisaDataSetHelper.GetInstance().TrusteeUser.AddTrusteeUserRow(tuRow);

                // TODO: apagar?
				//GisaDataSetHelper.GetTrusteeDataAdapter.Update(New DataRow() {tRow})
				//GisaDataSetHelper.GetTrusteeUserDataAdapter.Update(New DataRow() {tuRow})

				PersistencyHelper.save();
				PersistencyHelper.cleanDeletedData();
			}
			finally
			{
                // TODO: apagar?
				//ho.Dispose()
			}

			return tuRow;
		}
Exemple #2
0
		protected override void EditTrustee()
		{
			if (lstVwTrustees.SelectedItems.Count == 0)
				return;

            ((frmMain)TopLevelControl).EnterWaitMode();
			ListViewItem item = null;
			GISADataset.TrusteeRow truRow = null;
			item = lstVwTrustees.SelectedItems[0];
			truRow = (GISADataset.TrusteeRow)item.Tag;
		
			GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
			try
			{
				if (TrusteeRule.Current.hasRegistos(((GISADataset.TrusteeRow)(lstVwTrustees.SelectedItems[0].Tag)).ID, ho.Connection))
					MessageBox.Show("Tenha em conta que alterações no nome de utilizador terá reflexos no registos no sistema.", "Utilizador", MessageBoxButtons.OK, MessageBoxIcon.Information);
			}
			catch (Exception ex)
			{
				Trace.WriteLine(ex);
				throw;
			}
			finally
			{
				ho.Dispose();
			}

			FormCreateTrustee form = new FormCreateTrustee();
			form.Text = "Editar utilizador";
			form.txtTrusteeName.Text = truRow.Name;
			switch (form.ShowDialog())
			{
				case DialogResult.OK:
		
					PersistencyHelper.EditTrusteePreConcArguments ctpca = new PersistencyHelper.EditTrusteePreConcArguments();
					ctpca.truRow = truRow;
					ctpca.username = form.txtTrusteeName.Text;

					Trace.WriteLine("A editar utilizador...");

					PersistencyHelper.save(EditTrusteeIfUsernameDoesntExist, ctpca);
					PersistencyHelper.cleanDeletedData();

					if (! ctpca.successful)
					{
						MessageBox.Show("Este nome já existe atribuído a um utilizador ou grupo, " + Environment.NewLine + "por favor escolha outro nome.", form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
						UpdateTrustees(null);
					}
					else
					{
						UpdateTrustees(truRow);
						UpdateContext();
					}
					UpdateToolBarButtons();
					break;
				case DialogResult.Cancel:
				    break;
			}
            ((frmMain)TopLevelControl).LeaveWaitMode();
		}
        private void btnAutoEliminacaoManager_Click(object sender, System.EventArgs e)
        {
            FormAutoEliminacaoEditor formAutoEditor = new FormAutoEliminacaoEditor();
            IDbConnection            conn           = GisaDataSetHelper.GetConnection();

            try
            {
                conn.Open();
                RelatorioRule.Current.LoadAutosEliminacao(GisaDataSetHelper.GetInstance(), conn);
            }
            finally
            {
                conn.Close();
            }

            formAutoEditor.LoadData(GisaDataSetHelper.GetInstance().AutoEliminacao.Select(string.Empty, "Designacao"), "Designacao");
            formAutoEditor.ShowDialog();

            PersistencyHelper.save();
            PersistencyHelper.cleanDeletedData();

            long selectedAutoEliminacaoID = 0;

            if (cbAutoEliminacao.SelectedValue == null)
            {
                selectedAutoEliminacaoID = long.MinValue;
            }
            else
            {
                selectedAutoEliminacaoID = (long)cbAutoEliminacao.SelectedValue;
            }

            rebindToData();
            cbAutoEliminacao.SelectedValue = selectedAutoEliminacaoID;
        }
Exemple #4
0
        private void btnAdd_Click(object sender, System.EventArgs e)
        {
            FormUserGroups form = new FormUserGroups();

            byte[] Versao = null;
            if (form.ShowDialog() == DialogResult.OK)
            {
                this.Cursor = Cursors.WaitCursor;
                GISADataset.TrusteeRow tRow    = null;
                List <long>            tRowIDs = new List <long>();
                foreach (ListViewItem item in form.lstVwTrustees.SelectedItems)
                {
                    tRow = (GISADataset.TrusteeRow)item.Tag;
                    // verificar se o utilizador foi anteriormente adicionado ao grupo
                    if (GisaDataSetHelper.GetInstance().UserGroups.Select(string.Format("IDUser={0} AND IDGroup={1}", (CurrentTrusteeRow.GetTrusteeUserRows()[0]).ID.ToString(), (tRow.GetTrusteeGroupRows()[0]).ID.ToString())).Length == 0)
                    {
                        tRowIDs.Add(tRow.ID);
                        GisaDataSetHelper.GetInstance().UserGroups.AddUserGroupsRow(CurrentTrusteeRow.GetTrusteeUserRows()[0], tRow.GetTrusteeGroupRows()[0], Versao, 0);
                    }
                }

                PersistencyHelper.save();
                PersistencyHelper.cleanDeletedData();
                EnumerateMembership(CurrentTrusteeRow);
                this.Cursor = Cursors.Default;
            }
        }
        private void ClickTbEditar()
        {
            FormMovimento frm = new FormMovimento();

            frm.Text = "Editar " + this.NomeMovimento;

            //obter row seleccionada e colocar a informação no form
            GISADataset.MovimentoRow reqRow = (GISADataset.MovimentoRow)movList.SelectedItems[0].Tag;
            frm.Entidade         = reqRow.MovimentoEntidadeRow;
            frm.Data             = reqRow.Data;
            frm.CurrentMovimento = reqRow;
            frm.LoadData();

            if (frm.ShowDialog() == DialogResult.OK)
            {
                // ler os valores do form e gravá-los
                reqRow.MovimentoEntidadeRow = frm.Entidade;
                reqRow.Data = frm.Data;

                PersistencyHelper.save();
                PersistencyHelper.cleanDeletedData();

                movList.ReloadList(reqRow);
            }
        }
Exemple #6
0
        private void DeleteItem()
        {
            ListViewItem item = this.lstVwNiveisAssoc.SelectedItems[0];

            GISADataset.DocumentosMovimentadosRow dmRow = (GISADataset.DocumentosMovimentadosRow)item.Tag;

            var args = new PersistencyHelper.ValidateMovimentoDeleteItemPreConcArguments();

            args.IDMovimento = dmRow.IDMovimento;
            args.IDNivel     = dmRow.IDNivel;
            args.CatCode     = dmRow.MovimentoRow.CatCode.Equals("REQ") ? "DEV" : "REQ";

            dmRow.Delete();

            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(ValidateMovimentoDelete, args);
            PersistencyHelper.cleanDeletedData();

            if (!args.continueSave)
            {
                var message = dmRow.MovimentoRow.CatCode.Equals("REQ")
                    ? "Não é permitido eliminar a associação de documentos a requisições com devolução posterior"
                    : "Não é permitido eliminar a associação de documentos a devoluções com requisições posteriores mas sem devolução";
                MessageBox.Show(message, "Eliminar a associação de documento com a requisição/devolução", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            this.lstVwNiveisAssoc.Items.Remove(item);
            UpdateListButtonsState();
        }
        private void ClickBtnApagar()
        {
            if (MessageBox.Show("Tem a certeza que pretende eliminar o depósito?", "Eliminar depósito", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            Trace.WriteLine("A apagar depósito...");

            var depItem = depList.SelectedItems[0];
            var depRow  = depItem.Tag as GISADataset.DepositoRow;

            if (CurrentContext.Deposito.RowState == DataRowState.Detached)
            {
                depList.ClearItemSelection(depItem);
            }
            else
            {
                var args = new PersistencyHelper.DeleteDepositoPreConcArguments();
                args.IDDeposito = depRow.ID;

                depRow.Delete();

                PersistencyHelper.save(DeleteDeposito, args);
                PersistencyHelper.cleanDeletedData();
            }

            depItem.Remove();
            UpdateToolBarButtons();
            UpdateContext();
        }
Exemple #8
0
		public static void CascadeDeleteFRD(GISADataset.FRDBaseRow FRDRow)
		{
			PersistencyHelper.DeleteIDXPreSaveArguments args = new PersistencyHelper.DeleteIDXPreSaveArguments();
			args.ID = FRDRow.ID;
			DeleteInDataSet(FRDRow);
			PersistencyHelper.save(new PersistencyHelper.preSaveDelegate(DeleteFRDBaseXInDataBase), args);
			PersistencyHelper.cleanDeletedData();
		}
Exemple #9
0
        private void ExecuteFilter()
        {
            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save();
            PersistencyHelper.cleanDeletedData();
            if (successfulSave == PersistencyHelper.SaveResult.unsuccessful)
            {
                return;
            }
            else if (successfulSave == PersistencyHelper.SaveResult.successful)
            {
                GISA.Search.Updater.updateUnidadeFisica(CurrentNivel.GetFRDBaseRows()[0].NivelRow.ID);
            }

            if ((FilterTipoNivelRelacionado == -1) && (TextFilterDesignacao == string.Empty))
            {
                filtered = false;
                filter.Clear();
                GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    ordem    = FRDRule.Current.LoadUFUnidadesDescricaoData(GisaDataSetHelper.GetInstance(), CurrentNivel.ID, ho.Connection);
                    detalhes = FRDRule.Current.LoadUFUnidadesDescricaoDetalhe(GisaDataSetHelper.GetInstance(), CurrentNivel.ID, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.ID, ho.Connection);
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
                finally
                {
                    ho.Dispose();
                }
            }
            else
            {
                filtered = true;
                filter.Clear();
                GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    ordem    = FRDRule.Current.LoadUFUnidadesDescricaoData(GisaDataSetHelper.GetInstance(), CurrentNivel.ID, ho.Connection);
                    detalhes = FRDRule.Current.LoadUFUnidadesDescricaoDetalhe(GisaDataSetHelper.GetInstance(), CurrentNivel.ID, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.ID, ho.Connection);
                    filter   = FRDRule.Current.FilterUFUnidadesDescricao(TextFilterDesignacao, FilterTipoNivelRelacionado, CurrentNivel.ID, ho.Connection);
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
                finally
                {
                    ho.Dispose();
                }
            }

            RepopulateNiveisAssociados();
        }
Exemple #10
0
        public static PersistencyHelper.SaveResult CascadeDeleteNivel(GISADataset.NivelRow NivelRow)
		{
			//DeleteNivelInDataBase(NivelRow)
			PersistencyHelper.DeleteIDXPreSaveArguments args = new PersistencyHelper.DeleteIDXPreSaveArguments();
			args.ID = NivelRow.ID;
			DeleteInDataSet(NivelRow); // é 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
            PersistencyHelper.SaveResult saveSuccess = PersistencyHelper.save(new PersistencyHelper.preSaveDelegate(DeleteNivelXInDataBase), args);
			PersistencyHelper.cleanDeletedData();
            return saveSuccess;
		}
		private void btnSair_Click(object sender, System.EventArgs e)
		{
            // TODO: que fazer com o código?
			//GisaDataSetHelper.GetTrusteeDataAdapter().Update(GisaDataSetHelper.GetInstance().Trustee.Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent))
			//GisaDataSetHelper.GetTrusteeUserDataAdapter().Update(GisaDataSetHelper.GetInstance().TrusteeUser.Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent))
			//GisaDataSetHelper.GetUserGroupsDataAdapter().Update(GisaDataSetHelper.GetInstance().UserGroups.Select("", "", DataViewRowState.Added))
			PersistencyHelper.save();
			PersistencyHelper.cleanDeletedData();
			this.Close();
		}
		protected override void EditTrustee()
		{
			if (lstVwTrustees.SelectedItems.Count == 0)
				return;

			GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
			try
			{
				if (TrusteeRule.Current.hasUsers(((GISADataset.TrusteeRow)(lstVwTrustees.SelectedItems[0].Tag)).ID, ho.Connection))
					MessageBox.Show("Tenha em conta que o Grupo de Utilizadores a editar já tem Utilizadores associados.", "Utilizador", MessageBoxButtons.OK, MessageBoxIcon.Warning);
			}
			catch (Exception ex)
			{
				Trace.WriteLine(ex);
				throw;
			}
			finally
			{
				ho.Dispose();
			}

			ListViewItem item = null;
			GISADataset.TrusteeRow truRow = null;
			item = lstVwTrustees.SelectedItems[0];
			truRow = (GISADataset.TrusteeRow)item.Tag;
            
			FormCreateTrustee form = new FormCreateTrustee();
			form.Text = "Editar grupo de utilizadores";
			form.txtTrusteeName.Text = truRow.Name;
			switch (form.ShowDialog())
			{
				case DialogResult.OK:

					PersistencyHelper.EditTrusteePreConcArguments etpca = new PersistencyHelper.EditTrusteePreConcArguments();
					etpca.truRow = truRow;
					etpca.username = form.txtTrusteeName.Text;

					Trace.WriteLine("A editar o grupo de utilizador...");

					PersistencyHelper.save(editTrusteeIfUsernameDoesntExist, etpca);
					PersistencyHelper.cleanDeletedData();

					if (! etpca.successful)
					{
						MessageBox.Show("Este nome já existe atribuído a um utilizador ou grupo, " + Environment.NewLine + "por favor escolha outro nome.", form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
						UpdateTrustees(null);
					}
					else
						UpdateTrustees(truRow);

					break;
				case DialogResult.Cancel:
				break;
			}
		}
		protected override void AddTrustee()
		{
			GISADataset.TrusteeRow truRow = null;
			GISADataset.TrusteeGroupRow grpRow = null;

			FormCreateTrustee form = new FormCreateTrustee();
			form.Text = "Novo grupo de utilizadores";
			switch (form.ShowDialog())
			{
				case DialogResult.OK:
					truRow = GisaDataSetHelper.GetInstance().Trustee.NewTrusteeRow();
					truRow.Name = form.txtTrusteeName.Text;
					truRow.Description = string.Empty;
					truRow.CatCode = "GRP";
					truRow.BuiltInTrustee = false;
					truRow.IsActive = true;
					truRow.Versao = new byte[]{};
					truRow.isDeleted = 0;
					grpRow = GisaDataSetHelper.GetInstance().TrusteeGroup.NewTrusteeGroupRow();
					grpRow.Versao = new byte[]{};
					grpRow.isDeleted = 0;
					grpRow.TrusteeRow = truRow;

					GisaDataSetHelper.GetInstance().Trustee.AddTrusteeRow(truRow);
					GisaDataSetHelper.GetInstance().TrusteeGroup.AddTrusteeGroupRow(grpRow);

					PersistencyHelper.CreateTrusteePreConcArguments ctpca = new PersistencyHelper.CreateTrusteePreConcArguments();
					ctpca.truRowID = truRow.ID;
					ctpca.grpRowID = grpRow.ID;

					Trace.WriteLine("A criar o grupo de utilizador...");

                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(addTrusteeIfUsernameDoesntExist, ctpca);
					PersistencyHelper.cleanDeletedData();

					if (! ctpca.successful)
					{
						MessageBox.Show("Este nome já existe atribuído a um utilizador ou grupo, " + Environment.NewLine + "por favor escolha outro nome.", form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
						UpdateTrustees(null);
					}
					else
						UpdateTrustees(truRow);

					break;
				case DialogResult.Cancel:
				break;
			}
		}
Exemple #14
0
        private void ExecuteFilter()
        {
            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save();
            PersistencyHelper.cleanDeletedData();
            if (successfulSave == PersistencyHelper.SaveResult.unsuccessful)
            {
                return;
            }

            if (TextFilterDesignacao == string.Empty)
            {
                filter.Clear();
                GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    documentos = MovimentoRule.Current.GetDocumentos(CurrentMovimento.ID, GisaDataSetHelper.GetInstance(), ho.Connection);
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
                finally
                {
                    ho.Dispose();
                }
            }
            else
            {
                filter.Clear();
                GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    documentos = MovimentoRule.Current.GetDocumentos(CurrentMovimento.ID, TextFilterDesignacao, GisaDataSetHelper.GetInstance(), ho.Connection);
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
                finally
                {
                    ho.Dispose();
                }
            }

            RepopulateDocumentosAssociados();
        }
        private void PersistDepositoChanges(FormHandleDeposito formHandleDeposito, bool editMode)
        {
            switch (formHandleDeposito.ShowDialog())
            {
            case DialogResult.OK:
                ((frmMain)TopLevelControl).EnterWaitMode();
                var depRow = default(GISADataset.DepositoRow);
                if (!editMode)
                {
                    depRow                = GisaDataSetHelper.GetInstance().Deposito.NewDepositoRow();
                    depRow.Designacao     = formHandleDeposito.Designacao;
                    depRow.MetrosLineares = System.Convert.ToDecimal(formHandleDeposito.Metragem);
                    depRow.Versao         = new byte[] { };
                    depRow.isDeleted      = 0;
                    GisaDataSetHelper.GetInstance().Deposito.AddDepositoRow(depRow);

                    Trace.WriteLine("A criar depósito...");
                }
                else
                {
                    depRow                = CurrentContext.Deposito;
                    depRow.Designacao     = formHandleDeposito.Designacao;
                    depRow.MetrosLineares = System.Convert.ToDecimal(formHandleDeposito.Metragem);

                    Trace.WriteLine("A editar depósito...");
                }

                var saveResult = PersistencyHelper.save();
                PersistencyHelper.cleanDeletedData();

                if (saveResult == PersistencyHelper.SaveResult.successful)
                {
                    depList.AddItem(depRow);
                }
                else
                {
                    // ToDo: já existe um depósito com essa designação
                }

                ((frmMain)TopLevelControl).LeaveWaitMode();
                break;

            case DialogResult.Cancel:
                break;
            }
        }
        private void ClickTbEliminar()
        {
            // obter a row selecciona e apresentar uma messagebox a perguntar se o utilizador quer realmente apagar a requisição
            if (MessageBox.Show("Tem a certeza que deseja eliminar a " + this.NomeMovimento + " selecionada?", "Eliminação de " + this.NomeMovimento, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
            {
                return;
            }

            // Dúvida: deve ser permitido apagar requisições com documentos associados?

            ListViewItem movItem = null;

            GISADataset.MovimentoRow movRow = null;
            movItem = movList.SelectedItems[0];
            movRow  = (GISADataset.MovimentoRow)movItem.Tag;

            if (movRow.RowState == DataRowState.Detached)
            {
                movList.ClearItemSelection(movItem);
            }
            else
            {
                var args = new PersistencyHelper.DeleteMovimentoPreConcArguments();
                args.CatCode     = movRow.CatCode.Equals("REQ") ? "DEV" : "REQ";
                args.IDMovimento = movRow.ID;

                movRow.Delete();

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

                if (!args.continueSave)
                {
                    var message = movRow.CatCode.Equals("REQ")
                        ? "Não é permitido eliminar requisições de documentos devolvidos posteriormente"
                        : "Não é permitido eliminar devoluções com requisições posteriores (sem devolução) dos mesmos documentos";
                    MessageBox.Show(message, "Eliminar " + this.NomeMovimento, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }

            movItem.Remove();
            UpdateToolBarButtons();
            UpdateContext();
        }
Exemple #17
0
		private void btnOk_Click(object sender, System.EventArgs e)
		{
			GISADataset.TrusteeUserRow lastTrusteeUserRowParent = SessionHelper.GetGisaPrincipal().TrusteeUserAuthor;
            if (ControloAutores1.SelectedAutor != null && ((GISADataset.TrusteeRow)ControloAutores1.SelectedAutor).GetTrusteeUserRows().Length > 0)
			{
				SessionHelper.GetGisaPrincipal().TrusteeUserAuthor = ((GISADataset.TrusteeRow)ControloAutores1.SelectedAutor).GetTrusteeUserRows()[0];
				SessionHelper.GetGisaPrincipal().TrusteeUserOperator.TrusteeUserRowParent = SessionHelper.GetGisaPrincipal().TrusteeUserAuthor;
			}
			else
			{
				SessionHelper.GetGisaPrincipal().TrusteeUserAuthor = null; //DirectCast(ControloAutores1.cbAutor.Items(0), GISADataset.TrusteeRow)
				SessionHelper.GetGisaPrincipal().TrusteeUserOperator["IDTrusteeUserDefaultAuthority"] = DBNull.Value;
			}

            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save();
			PersistencyHelper.cleanDeletedData();
			SessionHelper.GetGisaPrincipal().TrusteeUserAuthor = SessionHelper.GetGisaPrincipal().TrusteeUserOperator.TrusteeUserRowParent;
		}
Exemple #18
0
        private void DeleteItems()
        {
            this.Cursor = Cursors.WaitCursor;

            if (((DataRow)(lvMembers.SelectedItems[0].Tag)).RowState == DataRowState.Detached)
            {
                ListViewItem item = lvMembers.SelectedItems[0];
                lvMembers.SelectedItems.Clear();
                lvMembers.Items.Remove(item);
            }
            else
            {
                GUIHelper.GUIHelper.deleteSelectedLstVwItems(lvMembers);
                PersistencyHelper.save();
                PersistencyHelper.cleanDeletedData();
            }
            MultiPanel.Recontextualize();

            this.Cursor = Cursors.Default;
        }
        private void SaveLastTimeStamp()
        {
            var ts = GisaDataSetHelper.GetInstance().Integ_Config.Cast <GISADataset.Integ_ConfigRow>().SingleOrDefault();

            if (ts == null)
            {
                var newRow = GisaDataSetHelper.GetInstance().Integ_Config.NewInteg_ConfigRow();
                newRow.ID            = 1;
                newRow.LastTimeStamp = lastTimeStamp;
                newRow.Versao        = new byte[] { };
                newRow.isDeleted     = 0;
                GisaDataSetHelper.GetInstance().Integ_Config.AddInteg_ConfigRow(newRow);
            }
            else
            {
                ts.LastTimeStamp = lastTimeStamp;
            }

            PersistencyHelper.save();
            PersistencyHelper.cleanDeletedData();
        }
Exemple #20
0
        private void cbTipoUser_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            if ((TipoUser)Enum.Parse(typeof(TipoUser), cbTipoUser.SelectedIndex.ToString()) == TipoUser.AcessoTudo && mTipoUser != TipoUser.AcessoTudo)
            {
                mTipoUser = TipoUser.AcessoTudo;
                GISADataset.UserGroupsRow[] ugAcessoPublicados =
                    (GISADataset.UserGroupsRow[])GisaDataSetHelper.GetInstance().UserGroups.Select(string.Format("IDUser={0} AND IDGroup={1}", CurrentTrusteeRow.ID, PermissoesHelper.GrpAcessoPublicados.ID));

                Debug.Assert(ugAcessoPublicados.Length > 0);
                ugAcessoPublicados[0].Delete();

                GISADataset.UserGroupsRow ugAcessoCompleto = GisaDataSetHelper.GetInstance().UserGroups.NewUserGroupsRow();
                ugAcessoCompleto.IDUser  = CurrentTrusteeRow.ID;
                ugAcessoCompleto.IDGroup = PermissoesHelper.GrpAcessoCompleto.ID;
                GisaDataSetHelper.GetInstance().UserGroups.AddUserGroupsRow(ugAcessoCompleto);
            }
            else if ((TipoUser)Enum.Parse(typeof(TipoUser), cbTipoUser.SelectedIndex.ToString()) == TipoUser.AcessoInfoPub && mTipoUser != TipoUser.AcessoInfoPub)
            {
                mTipoUser = TipoUser.AcessoInfoPub;
                GISADataset.UserGroupsRow[] ugAcessoCompleto =
                    (GISADataset.UserGroupsRow[])GisaDataSetHelper.GetInstance().UserGroups.Select(string.Format("IDUser={0} AND IDGroup={1}", CurrentTrusteeRow.ID, PermissoesHelper.GrpAcessoCompleto.ID));

                Debug.Assert(ugAcessoCompleto.Length > 0);
                ugAcessoCompleto[0].Delete();

                GISADataset.UserGroupsRow ugAcessoPublicados = GisaDataSetHelper.GetInstance().UserGroups.NewUserGroupsRow();
                ugAcessoPublicados.IDUser  = CurrentTrusteeRow.ID;
                ugAcessoPublicados.IDGroup = PermissoesHelper.GrpAcessoPublicados.ID;
                GisaDataSetHelper.GetInstance().UserGroups.AddUserGroupsRow(ugAcessoPublicados);
            }

            GUIHelper.GUIHelper.deleteSelectedLstVwItems(lvMembers);
            PersistencyHelper.save();
            PersistencyHelper.cleanDeletedData();

            GUIHelper.GUIHelper.clearField(lvMembers);
            base.EnumerateMembership(CurrentTrusteeRow);
            this.Cursor = Cursors.Default;
        }
        private void ClickTbCriar()
        {
            FormMovimento frm = new FormMovimento();

            frm.LoadData();
            frm.CurrentMovimento = null;
            frm.Text             = "Criar nova " + this.NomeMovimento;
            if (frm.ShowDialog() == DialogResult.OK)
            {
                // ler os valores do form e gravá-los
                GISADataset.MovimentoRow newReqRow = GisaDataSetHelper.GetInstance().Movimento.NewMovimentoRow();
                newReqRow.CatCode = this.CatCode;
                newReqRow.MovimentoEntidadeRow = frm.Entidade;
                newReqRow.Data   = frm.Data;
                newReqRow.Versao = new byte[] { };
                GisaDataSetHelper.GetInstance().Movimento.AddMovimentoRow(newReqRow);

                PersistencyHelper.save();
                PersistencyHelper.cleanDeletedData();

                movList.ReloadList(newReqRow);
            }
        }
Exemple #22
0
        private void DeleteRelacao(ListView lstVw)
        {
            var  IDNivel                = new List <string>();
            var  IDControloAut          = new List <string>();
            var  frdRow                 = default(GISADataset.FRDBaseRow);
            long IDTipoNivelRelacionado = -1;

            foreach (ListViewItem item in lstVw.SelectedItems)
            {
                if (item.Tag.GetType() == typeof(GISADataset.ControloAutRelRow))
                {
                    var carRow = (GISADataset.ControloAutRelRow)item.Tag;
                    IDControloAut.Add(carRow.IDControloAut.ToString());
                    IDControloAut.Add(carRow.IDControloAutAlias.ToString());
                }
                else
                {
                    var rhRow = (GISADataset.RelacaoHierarquicaRow)item.Tag;
                    IDControloAut.Add(rhRow.NivelRowByNivelRelacaoHierarquica.GetNivelControloAutRows()[0].IDControloAut.ToString());
                    IDControloAut.Add(rhRow.NivelRowByNivelRelacaoHierarquicaUpper.GetNivelControloAutRows()[0].IDControloAut.ToString());
                    IDNivel.Add(rhRow.ID.ToString());
                    frdRow = rhRow.NivelRowByNivelRelacaoHierarquica.GetFRDBaseRows().Single();
                    IDTipoNivelRelacionado = rhRow.IDTipoNivelRelacionado;
                }
            }

            GUIHelper.GUIHelper.deleteSelectedLstVwItems(lstVw);

            var postSaveAction = new PostSaveAction();

            PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
            postSaveAction.args = args;

            postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
            {
                if (!postSaveArgs.cancelAction)
                {
                    // registar eliminação
                    ((frmMain)TopLevelControl).CurrentContext.RaiseRegisterModificationEvent(CurrentControloAut);
                    var caRegRow = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast <GISADataset.ControloAutDataDeDescricaoRow>().Single(r => r.RowState == DataRowState.Added);

                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao,
                                                           GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast <GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);

                    if (frdRow != null)
                    {
                        var nvlRegRow = RecordRegisterHelper
                                        .CreateFRDBaseDataDeDescricaoRow(frdRow,
                                                                         caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricao,
                                                                         caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricaoAuthority,
                                                                         caRegRow.DataAutoria);
                        nvlRegRow.DataEdicao             = caRegRow.DataEdicao;
                        nvlRegRow.IDTipoNivelRelacionado = IDTipoNivelRelacionado;

                        GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.AddFRDBaseDataDeDescricaoRow(nvlRegRow);

                        PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao,
                                                               GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast <GISADataset.FRDBaseDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                    }
                }
            };
            var successfulSave = PersistencyHelper.save(postSaveAction);

            PersistencyHelper.cleanDeletedData();

            if (successfulSave == PersistencyHelper.SaveResult.successful)
            {
                GISA.Search.Updater.updateProdutor(IDControloAut);
                GISA.Search.Updater.updateNivelDocumentalComProdutores(IDNivel);
            }
        }
Exemple #23
0
        public override void ModelToView()
        {
            IsPopulated = false;
            lstVwRelacoes.Items.Clear();

            // Apresentar relações não hierarquicas
            string carId = CurrentControloAut.ID.ToString();

            QueryFilter = "IDControloAut=" + carId + " OR IDControloAutAlias=" + carId;
            foreach (GISADataset.ControloAutRelRow caRel in GisaDataSetHelper.GetInstance().ControloAutRel.Select(QueryFilter, "InicioAno, InicioMes, InicioDia, FimAno, FimMes, FimDia"))
            {
                if (caRel.TipoControloAutRelRow.ID != Convert.ToInt64(TipoControloAutRel.Instituicao))                 //System.Enum.Format(GetType(TipoControloAutRel), TipoControloAutRel.Instituicao, "D") Then
                {
                    GISADataset.ControloAutRow OtherControloAut = null;
                    if (caRel.ControloAutRowByControloAutControloAutRelAlias.ID != CurrentControloAut.ID)
                    {
                        OtherControloAut = caRel.ControloAutRowByControloAutControloAutRelAlias;
                    }
                    else
                    {
                        OtherControloAut = caRel.ControloAutRowByControloAutControloAutRel;
                    }
                    foreach (GISADataset.ControloAutDicionarioRow cad in OtherControloAut.GetControloAutDicionarioRows())
                    {
                        if (cad.IDTipoControloAutForma == Convert.ToInt64(TipoControloAutForma.FormaAutorizada))
                        {
                            ListViewItem tempWith1 = lstVwRelacoes.Items.Add(cad.DicionarioRow.Termo);
                            tempWith1.Tag = caRel;
                            if (cad.ControloAutRow.IsChaveColectividadeNull())
                            {
                                tempWith1.SubItems.Add(string.Empty);
                            }
                            else
                            {
                                tempWith1.SubItems.Add(cad.ControloAutRow.ChaveColectividade);
                            }
                            string rezDesTipoRel = null;
                            if (caRel.ControloAutRowByControloAutControloAutRelAlias.ID != CurrentControloAut.ID)
                            {
                                rezDesTipoRel = caRel.TipoControloAutRelRow.DesignacaoInversa;
                            }
                            else
                            {
                                rezDesTipoRel = caRel.TipoControloAutRelRow.Designacao;
                            }
                            tempWith1.SubItems.Add(rezDesTipoRel);
                            tempWith1.SubItems.Add(GUIHelper.GUIHelper.FormatStartDate(caRel));
                            tempWith1.SubItems.Add(GUIHelper.GUIHelper.FormatEndDate(caRel));
                            tempWith1.SubItems.Add(GUIHelper.GUIHelper.ClipText(caRel.Descricao));
                        }
                    }
                }
            }

            // Apresentar relações hierarquicas
            GISADataset.NivelRow nRow = null;
            GISADataset.NivelControloAutRow[] ncaRows = null;
            GISADataset.NivelControloAutRow   ncaRow  = null;
            ncaRows = CurrentControloAut.GetNivelControloAutRows();
            if (ncaRows.Length == 0)
            {
                MasterPanelControloAut.CreateAssociatedNivel(CurrentControloAut, ref nRow, ref ncaRow);
                try
                {
                    PersistencyHelper.save();
                    PersistencyHelper.cleanDeletedData();
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex);
                    throw;
                }
            }
            else
            {
                ncaRow = ncaRows[0];
                nRow   = ncaRow.NivelRow;
            }

            foreach (GISADataset.RelacaoHierarquicaRow rhRow in GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} OR IDUpper={0}", nRow.ID), "InicioAno, InicioMes, InicioDia, FimAno, FimMes, FimDia"))
            {
                // Só adicionar relações hierárquicas existentes entre níveis estruturais. Este teste não seria suficiente no caso de existirem níveis estruturais orgânicos relacionados com níveis estruturais temático-funcionais, mas tal não poderá acontecer em qualquer situação.
                if (rhRow.NivelRowByNivelRelacaoHierarquica.TipoNivelRow.ID == TipoNivel.ESTRUTURAL && rhRow.NivelRowByNivelRelacaoHierarquicaUpper.TipoNivelRow.ID == TipoNivel.ESTRUTURAL)
                {
                    GISADataset.ControloAutRow caRow = null;
                    caRow = rhRow.NivelRowByNivelRelacaoHierarquica.GetNivelControloAutRows()[0].ControloAutRow;
                    // Se estivermos a ver o extremo errado da relação hierarquica trocamos para o outro extremo
                    if (CurrentControloAut == caRow)
                    {
                        caRow = rhRow.NivelRowByNivelRelacaoHierarquicaUpper.GetNivelControloAutRows()[0].ControloAutRow;
                    }

                    GISADataset.ControloAutDicionarioRow cadRow = null;
                    cadRow = ControloAutHelper.getFormaAutorizada(caRow);

                    ListViewItem newItem = lstVwRelacoes.Items.Add(cadRow.DicionarioRow.Termo);
                    newItem.Tag = rhRow;
                    AddRelacaoHierarquicaToList(newItem);
                }
            }

            RefreshButtonState();
            PopulateDescricaoText();
            IsPopulated = true;
        }
        private void btnMaterialManager_Click(object sender, System.EventArgs e)
        {
            if (CurrentUFFRDBase.RowState == DataRowState.Detached)
            {
                MessageBox.Show("A unidade física selecionada foi apagada por outro utilizador motivo pelo qual " + System.Environment.NewLine + "não é possível editar os Tipos de Material.", "Unidade física apagada", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            IDbConnection conn = GisaDataSetHelper.GetConnection();

            try
            {
                conn.Open();
                UFRule.Current.LoadTipoAcondicionamento(GisaDataSetHelper.GetInstance(), conn);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                throw;
            }
            finally
            {
                conn.Close();
            }
            FormMateriaisEditor formMatEditor = new FormMateriaisEditor();

            formMatEditor.LoadData(GisaDataSetHelper.GetInstance().TipoAcondicionamento.Select("NOT Designacao = '<Desconhecido>'"), "Designacao");
            formMatEditor.ShowDialog();

            GISA.Model.PersistencyHelper.ManageDescFisicasPreConcArguments args = new GISA.Model.PersistencyHelper.ManageDescFisicasPreConcArguments();
            args.frdID = CurrentUFFRDBase.ID;
            ArrayList rowList = new ArrayList();

            foreach (DataRow row in GisaDataSetHelper.GetInstance().Tables["TipoAcondicionamento"].Select("", "", DataViewRowState.Deleted))
            {
                rowList.Add(row["ID", DataRowVersion.Original]);
            }

            args.quant = rowList;

            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(TipoAcondicionamentoIsBeingUsedByOthers, args);
            PersistencyHelper.cleanDeletedData();

            if (args.aResult == PersistencyHelper.ManageDescFisicasPreConcArguments.ActionResult.quantidadeUsedByOthers)
            {
                MessageBox.Show("Um ou mais tipos de acondicionamento não puderam ser" + Environment.NewLine + "removidos por estarem atualmente em uso.", "Remoção de Elementos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            if (successfulSave == PersistencyHelper.SaveResult.successful)
            {
                GISA.Search.Updater.updateUnidadeFisica(CurrentUFFRDBase.NivelRow.ID);
            }

            GISADataset.TipoAcondicionamentoRow selectedTipoAcondicionamento = (GISADataset.TipoAcondicionamentoRow)cbTipo.SelectedItem;
            cbTipo.Items.Clear();
            cbTipo.DisplayMember = "Designacao";
            cbTipo.Items.AddRange(GisaDataSetHelper.GetInstance().TipoAcondicionamento.Select("", "Designacao"));

            if (selectedTipoAcondicionamento != null)
            {
                cbTipo.SelectedItem = selectedTipoAcondicionamento;
            }
            else
            {
                cbTipo.SelectedItem = (GISADataset.TipoAcondicionamentoRow)(GisaDataSetHelper.GetInstance().TipoAcondicionamento.Select(string.Format("ID={0:d}", TipoAcondicionamento.Pasta))[0]);
            }
        }
Exemple #25
0
        public void Recontextualize(SaveArgs s)
        {
            //quando se está a fechar a aplicação, o timer da pxlistview pode disparar depois de os contextos estarem limpos (e consequentemente lançar uma excepção; só ocorre quando o timer dispara quando a execução está dentro do método que trata o fecho da aplicação)
            if (((frmMain)TopLevelControl) == null || ((frmMain)TopLevelControl).ActiveControl is MasterPanelAdminGlobal || ((frmMain)TopLevelControl).ActiveControl is MasterPanelEstatisticas)
            {
                return;
            }

            ((frmMain)TopLevelControl).EnterWaitMode();
            try
            {
                if (isInnerContextValid())
                {
                    ViewToModel();
                    if (s != null)
                    {
                        if (s.psAction != null)
                        {
                            s.save = Save(s.psAction, true);
                        }
                        else
                        {
                            s.save = Save(true);
                        }
                    }
                    else
                    {
                        Save();
                    }
                }

                if (s != null && s.save == PersistencyHelper.SaveResult.unsuccessful)
                {
                    ((frmMain)TopLevelControl).LeaveWaitMode();
                    return;
                }

                Deactivate();

                //Remove-se de memória todas as linhas marcadas com isDeleted=true na BD
                //esta chamada não se encontra imediatamente a seguir ao save pois existem
                //situações que o método recontextualize é chamado propositadamente
                PersistencyHelper.cleanDeletedData();

                if (!(isOuterContextValid()))
                {
                    PanelMensagem panel = GetNoContextMessage();
                    if (panel != null)
                    {
                        this.Visible = true;
                        ActivateMessagePanel(panel);
                    }
                }
                else
                {
                    PanelMensagem panel = null;
                    if (isOuterContextDeleted())
                    {
                        panel = GetDeletedContextMessage();
                        ActivateMessagePanel(panel);
                        this.Visible = true;
                    }
                    else if (!(hasReadPermission()))
                    {
                        panel = GetNoReadPermissionMessage();
                        ActivateMessagePanel(panel);
                        this.Visible = true;
                    }
                    else if (!(isConnected()))
                    {
                        panel = GetNoConnectionMessage();
                        if (panel != null)
                        {
                            this.Visible = true;
                            ActivateMessagePanel(panel);
                        }
                    }
                    else
                    {
                        DeactivateMessagePanel(GetNoContextMessage());

                        try
                        {
                            RefreshPanelSelection();
                            long start = DateTime.Now.Ticks;
                            LoadData();
                            Trace.WriteLine("LoadData: " + new TimeSpan(DateTime.Now.Ticks - start).ToString());
                            start = DateTime.Now.Ticks;
                            ModelToView();
                            Trace.WriteLine("ModelToView: " + new TimeSpan(DateTime.Now.Ticks - start).ToString());
                        }
                        catch (Exception ex)
                        {
                            Trace.WriteLine(ex);
                            throw;
                        }

                        this.Visible = true;
                    }
                }
            }
            finally
            {
                ((frmMain)TopLevelControl).LeaveWaitMode();
            }
        }
Exemple #26
0
		protected override void AcceptContents(object Value)
		{
			GISADataset.ControloAutRow ControloAutRow = (GISADataset.ControloAutRow)Value;

			if (FRDBase != null)
			{
				// Carregar nivel do CA largado

				IDbConnection conn = GisaDataSetHelper.GetConnection();
				try
				{
					conn.Open();
					DBAbstractDataLayer.DataAccessRules.NivelRule.Current.LoadNivelByControloAut(ControloAutRow.ID, GisaDataSetHelper.GetInstance(), conn);
				}
				finally
				{
					conn.Close();
				}

				if (IsValidRelacaoHierarquica(ControloAutRow))
				{
					// Apresentar form que permita escolher a data da relação
					FormRelacaoHierarquica frmRh = new FormRelacaoHierarquica();
					// Pode-se obter a primeira relação encontrada para efeitos de determinação 
					// do tipo de nível uma vez que o tipo de nível dos níveis documentais nunca se alterará
					frmRh.relacaoNvl.TipoNivelRelacionadoRow = TipoNivelRelacionado.GetPrimeiraRelacaoEncontrada(this.FRDBase.NivelRow).TipoNivelRelacionadoRow;
					frmRh.relacaoNvl.ContextNivelRow = ControloAutRow.GetNivelControloAutRows()[0].NivelRow;
					if (frmRh.ShowDialog() == DialogResult.Cancel)
					{
						return;
					}

					if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", this.FRDBase.NivelRow.ID, ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID), "", DataViewRowState.Deleted).Length > 0)
					{

						GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", this.FRDBase.NivelRow.ID, ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID), "", DataViewRowState.Deleted)[0].AcceptChanges();
					}

					GISADataset.RelacaoHierarquicaRow rhRow = null;
					rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow();
					TempRelacaoHierarquica = rhRow;

					rhRow.ID = this.FRDBase.NivelRow.ID;
					rhRow.IDUpper = ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID;
					rhRow.IDTipoNivelRelacionado = TipoNivelRelacionado.GetTipoNivelRelacionadoDaPrimeiraRelacaoEncontrada(this.FRDBase.NivelRow).ID;
					rhRow.Descricao = frmRh.relacaoNvl.txtDescricao.Text;
					rhRow.InicioAno = frmRh.relacaoNvl.dtRelacaoInicio.ValueYear;
					rhRow.InicioMes = frmRh.relacaoNvl.dtRelacaoInicio.ValueMonth;
					rhRow.InicioDia = frmRh.relacaoNvl.dtRelacaoInicio.ValueDay;
					rhRow.FimAno = frmRh.relacaoNvl.dtRelacaoFim.ValueYear;
					rhRow.FimMes = frmRh.relacaoNvl.dtRelacaoFim.ValueMonth;
					rhRow.FimDia = frmRh.relacaoNvl.dtRelacaoFim.ValueDay;
					GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhRow);

                    // no caso de se tratar de uma entidade produtora é necessário validar o código de referência do nivel documental do contexto
                    if (ControloAutRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.EntidadeProdutora)
                    {
                        var argsPC = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();
                        argsPC.rhRowID = rhRow.ID;
                        argsPC.rhRowIDUpper = rhRow.IDUpper;

                        var postSaveAction = new PostSaveAction();
                        PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
                        postSaveAction.args = args;

                        postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                        {
                            if (argsPC.successful)
                            {
                                if (this.parent == null)
                                    Debug.Assert(false, "CONTEXTO PARENT DEVE ESTAR DEFINIDO.");

                                if (this.parent.GetType() == typeof(MasterPanelSeries))
                                {
                                    ((MasterPanelSeries)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.FRDBase);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao,
                                        GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast<GISADataset.FRDBaseDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                                }
                            }
                        };

                        var result = PersistencyHelper.save(DelegatesHelper.verificaCodigosRepetidos, argsPC, postSaveAction, true);

                        if (result == PersistencyHelper.SaveResult.successful)
                        {
                            PersistencyHelper.cleanDeletedData();
                            GisaDataSetHelper.VisitControloAutDicionario(ControloAutRow, DisplayFormaAutorizada);
                            GISA.Search.Updater.updateNivelDocumental(this.FRDBase.NivelRow.ID);
                        }
                        else
                        {
                            if (argsPC.message.Length > 0)
                                MessageBox.Show(argsPC.message, "Adição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }

					
				}
				else
				{
					MessageBox.Show("Não é possível a existência de items repetidos.", "Adição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
				}
			}
			else if (this.ControloAut != null)
			{
				Debug.Assert(false, "ORGANIC RELATIONS BETWEEN CAS NOT IMPLEMENTED. SHOULDN'T BE NEEDED");
			}
		}
        // Trata a criação de novos níveis e respectivas relações. Caso se trate
        // de um nível orgânico (estrutural e que esteja associado a uma EP) o
        // nível correspondente deverá já existir e não será por isso criado,
        // será criada apenas a relação.
        private bool handleNewNivel(Form frm, GISADataset.NivelRow parentNivelRow, GISADataset.TipoNivelRelacionadoRow tnrRow)
        {
            frm.Text = "Criar " + tnrRow.Designacao;

            bool successfulSave = true;

            switch (frm.ShowDialog())
            {
            case DialogResult.OK:

                Trace.WriteLine("A criar nível...");

                long           click = DateTime.Now.Ticks;
                string         designacaoUFAssociada = string.Empty;
                PostSaveAction postSaveAction        = null;
                var            nRow   = GisaDataSetHelper.GetInstance().Nivel.AddNivelRow(tnrRow.TipoNivelRow, ((FormAddNivel)frm).txtCodigo.Text.Trim(), "NVL", new byte[] { }, 0);
                var            ndRow  = GisaDataSetHelper.GetInstance().NivelDesignado.AddNivelDesignadoRow(nRow, ((FormAddNivel)frm).txtDesignacao.Text.Trim(), new byte[] { }, 0);
                var            frdRow = GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(nRow, (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoFRDBase.FRDOIRecolha))[0]), "", "", new byte[] { }, 0);
                var            rhRow  = GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(nRow, parentNivelRow, tnrRow, null, null, null, null, null, null, null, new byte[] { }, 0);

                //valores por omissão
                var globalConfig = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single();
                if (globalConfig.ApplyDefaultValues)
                {
                    var sfrdcaRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso
                                    .AddSFRDCondicaoDeAcessoRow(frdRow, "", globalConfig.IsCondicaoDeAcessoNull() ? "" : globalConfig.CondicaoDeAcesso,
                                                                globalConfig.IsCondicaoDeReproducaoNull() ? "" : globalConfig.CondicaoDeReproducao, "", new byte[] {}, 0);

                    foreach (GISADataset.ConfigLinguaRow r in globalConfig.GetConfigLinguaRows())
                    {
                        GisaDataSetHelper.GetInstance().SFRDLingua.AddSFRDLinguaRow(sfrdcaRow, r.Iso639Row, new byte[] { }, 0);
                    }

                    foreach (GISADataset.ConfigAlfabetoRow r in globalConfig.GetConfigAlfabetoRows())
                    {
                        GisaDataSetHelper.GetInstance().SFRDAlfabeto.AddSFRDAlfabetoRow(sfrdcaRow, r.Iso15924Row, new byte[] { }, 0);
                    }
                }

                var selectedTipologia = ((FormNivelDocumentalFedora)frm).Tipologia;
                if (selectedTipologia != null)
                {
                    GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(frdRow, selectedTipologia.ControloAutRow, -1, new byte[] { }, 0);
                }

                // Só adicionar permissões ao grupo TODOS dos níveis lógicos e a níveis documentais imediatamente
                // abaixo de níveis orgânicos (Documentos soltos e séries); caso se se trate de um nível estrutural
                // controlado, as permissões já foram atribuidas aquando da criação do controlo de autoridade
                if (nRow.IDTipoNivel == TipoNivel.DOCUMENTAL && parentNivelRow.IDTipoNivel == TipoNivel.ESTRUTURAL)
                {
                    var nUpperRow = rhRow == null ? default(GISADataset.NivelRow) : rhRow.NivelRowByNivelRelacaoHierarquicaUpper;
                    PermissoesHelper.AddNewNivelGrantPermissions(nRow, nUpperRow);
                }

                postSaveAction = new PostSaveAction();
                var args = new PersistencyHelper.GenericPostSaveArguments();
                postSaveAction.args             = args;
                postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                {
                    if (!postSaveArgs.cancelAction && nRow != null && nRow.RowState != DataRowState.Detached && nRow.RowState != DataRowState.Deleted)
                    {
                        // registar a criação do nivel documental
                        GISADataset.FRDBaseRow   frdDocRow  = null;
                        GISADataset.FRDBaseRow[] frdDocRows = nRow.GetFRDBaseRows();
                        if (frdDocRows.Length > 0)
                        {
                            frdDocRow = frdDocRows[0];
                        }
                        CurrentContext.RaiseRegisterModificationEvent(frdDocRow);

                        PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao,
                                                               GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast <GISADataset.FRDBaseDataDeDescricaoRow>().Where(frd => frd.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                    }
                };

                // se se tratar de um (sub)documento é necessário garantir que se trata de um código
                // único dentro da sua série (se constituir série) ou nivel estrutural superior
                PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments pcArgs = new PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments();
                PersistencyHelper.SetNewCodigosPreSaveArguments           psArgs       = new PersistencyHelper.SetNewCodigosPreSaveArguments();
                PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments pcArgsNivel  = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();

                pcArgs.argsNivel = pcArgsNivel;

                // dados que serão usados no delegate responsável pela criação do nível documental
                pcArgsNivel.nRowID              = nRow.ID;
                pcArgsNivel.ndRowID             = ndRow.ID;
                pcArgsNivel.rhRowID             = rhRow.ID;
                pcArgsNivel.rhRowIDUpper        = rhRow.IDUpper;
                pcArgsNivel.frdBaseID           = frdRow.ID;
                pcArgsNivel.testOnlyWithinNivel = true;

                // permitir ao delegate selecionar o delegate correspondente ao tipo de nível que se está a criar
                pcArgs.IDTipoNivelRelacionado = tnrRow.ID;

                psArgs.createNewNivelCodigo = false;
                psArgs.createNewUFCodigo    = false;
                psArgs.setNewCodigo         = rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SD;
                psArgs.argsNivelDocSimples  = NiveisHelper.AddNivelDocumentoSimplesWithDelegateArgs(nRow.GetNivelDesignadoRows().Single(), rhRow.IDUpper, rhRow.IDTipoNivelRelacionado);

                PersistencyHelper.save(DelegatesHelper.ValidateNivelAddAndAssocNewUF, pcArgs, DelegatesHelper.SetNewCodigos, psArgs, postSaveAction);
                if (!pcArgsNivel.successful)
                {
                    successfulSave = false;
                    MessageBox.Show(pcArgsNivel.message, "Criação de unidade de descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (parentNivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].TipoNivelRelacionadoRow.ID == TipoNivelRelacionado.SR)
                {
                    GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                    try
                    {
                        DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadSFRDAvaliacaoData(GisaDataSetHelper.GetInstance(), parentNivelRow.ID, ho.Connection);
                    }
                    finally
                    {
                        ho.Dispose();
                    }
                }

                PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase") }));

                if (!successfulSave)
                {
                    return(successfulSave);
                }

                GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                GISA.Search.Updater.updateNivelDocumental(nRow.ID);

                this.nivelNavigator1.AddNivel(nRow);

                Debug.WriteLine("<<A criar nível...>> " + new TimeSpan(DateTime.Now.Ticks - click).ToString());
                break;

            case DialogResult.Cancel:
                successfulSave = false;
                break;
            }

            return(successfulSave);
        }
		private bool validateData()
		{
			GISADataset.ControloAutDicionarioRow cadRow = ControloAutDicionarioAutorizado;
			GISADataset.TipoControloAutRelRow tcarRow = null;
			tcarRow = (GISADataset.TipoControloAutRelRow)relacaoCA.cbTipoControloAutRel.SelectedItem;

			PersistencyHelper.VerifyRelExistencePreConcArguments pcArgs = new PersistencyHelper.VerifyRelExistencePreConcArguments();

			IDbConnection conn = GisaDataSetHelper.GetConnection();
			try
			{
				conn.Open();
				DBAbstractDataLayer.DataAccessRules.NivelRule.Current.LoadNivelByControloAut(cadRow.IDControloAut, GisaDataSetHelper.GetInstance(), conn);
            }
			catch (Exception ex)
			{
				Trace.WriteLine(ex);
				throw ex;
			}
			finally
			{
				conn.Close();
			}

			string errorTitle = "Erro ao estabelecer relação";

			if (! mInEditMode)
			{

				// Garantir que uma EP não é relacionada com ela própria. 
				if (cadRow.ControloAutRow.ID == ContextControloAut.ID)
				{
					MessageBox.Show("Não é permitido relacionar uma notícia de autoridade consigo própria.", errorTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning);
					return false;
				}

				// validar que a relação que pretendemos criar ainda não existe
				if (GisaDataSetHelper.GetInstance().ControloAutRel.Select(string.Format("((IDControloAut={0} AND IDControloAutAlias={1}) OR (IDControloAut={1} AND IDControloAutAlias={0})) AND IDTipoRel = {2:d}", cadRow.ControloAutRow.ID, ContextControloAut.ID, tcarRow.ID)).Length > 0 || (tcarRow.ID == Convert.ToInt64(TipoControloAutRel.Hierarquica) && GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1} OR ID={1} AND IDUpper={0}", cadRow.ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID, ContextControloAut.GetNivelControloAutRows()[0].NivelRow.ID)).Length > 0))
				{

					MessageBox.Show("Não é permitida mais que uma relação do mesmo tipo " + Environment.NewLine + "entre as mesmas duas entidades produtoras.", errorTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning);
					return false;
				}

				//Agir de forma diferente conforme seja uma relação hierarquica ou seja uma relação de outro qualquer tipo
				if (tcarRow.ID == Convert.ToInt64(TipoControloAutRel.Hierarquica))
				{
					// Carregar informação do Nível do CA com que se pretende estabelecer esta relação
					GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
					try
					{
						DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadRetrieveSelectionData(GisaDataSetHelper.GetInstance(), cadRow.IDControloAut, ho.Connection);
                        DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadFRD(GisaDataSetHelper.GetInstance(), ContextControloAut.GetNivelControloAutRows()[0].NivelRow.ID, ho.Connection);
					}
					finally
					{
						ho.Dispose();
					}

					long tnrID = 0;
					tnrID = ((TipoNivelRelacionado.PossibleSubNivel)relacaoCA.cbTipoNivel.SelectedItem).SubIDTipoNivelRelacionado;
					GISADataset.RelacaoHierarquicaRow rhRow = null;
					rhRow = GisaDataSetHelper.GetInstance().RelacaoHierarquica.NewRelacaoHierarquicaRow();
					rhRow.IDUpper = cadRow.ControloAutRow.GetNivelControloAutRows()[0].NivelRow.ID;
					rhRow.ID = ContextControloAut.GetNivelControloAutRows()[0].NivelRow.ID;
					rhRow.IDTipoNivelRelacionado = tnrID;
					// Guardar datas
					rhRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear);
					rhRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth);
					rhRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay);
					rhRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear);
					rhRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth);
					rhRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay);

					rhRow.Descricao = relacaoCA.txtDescricao.Text;
                    //rhRow.isDeleted = 0;
					GisaDataSetHelper.GetInstance().RelacaoHierarquica.AddRelacaoHierarquicaRow(rhRow);

					pcArgs.ID = rhRow.ID;
					pcArgs.IDUpper = rhRow.IDUpper;
					pcArgs.IDTipoRel = rhRow.IDTipoNivelRelacionado;
					pcArgs.isCARRow = false;

                    // actualizar permissões implícitas
                    var postSaveAction = new PostSaveAction();
                    PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
                    postSaveAction.args = args;

                    postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                    {
                        if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)
                        {
                            if (this.parent.GetType() == typeof(MasterPanelControloAut))
                            {
                                ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut);

                                var caRegRow = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Single(r => r.RowState == DataRowState.Added);

                                PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao,
                                    new GISADataset.ControloAutDataDeDescricaoRow[] { caRegRow }, postSaveArgs.tran);

                                var frdRow = rhRow.NivelRowByNivelRelacaoHierarquica.GetFRDBaseRows().SingleOrDefault();

                                if (frdRow == null)
                                {
                                    var tipoFRD = (GISADataset.TipoFRDBaseRow)(GisaDataSetHelper.GetInstance().TipoFRDBase.Select("ID=" + DomainValuesHelper.stringifyEnumValue(TipoFRDBase.FRDOIRecolha))[0]);
                                    frdRow = GisaDataSetHelper.GetInstance().FRDBase.AddFRDBaseRow(rhRow.NivelRowByNivelRelacaoHierarquica, tipoFRD, "", "", new byte[] { }, 0);
                                    var dp = GisaDataSetHelper.GetInstance().SFRDDatasProducao.AddSFRDDatasProducaoRow(frdRow, "", "", "", "", false, "", "", "", "", false, new byte[] { }, 0);
                                    var ce = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.AddSFRDConteudoEEstruturaRow(frdRow, "", "", new byte[] { }, 0);
                                    var c = GisaDataSetHelper.GetInstance().SFRDContexto.AddSFRDContextoRow(frdRow, "", "", "", false, new byte[] { }, 0);
                                    var da = GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada.AddSFRDDocumentacaoAssociadaRow(frdRow, "", "", "", "", new byte[] { }, 0);
                                    var ds = GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.AddSFRDDimensaoSuporteRow(frdRow, "", new byte[] { }, 0);
                                    var ng = GisaDataSetHelper.GetInstance().SFRDNotaGeral.AddSFRDNotaGeralRow(frdRow, "", new byte[] { }, 0);
                                    var CurrentSFRDAvaliacao = GisaDataSetHelper.GetInstance().SFRDAvaliacao.NewSFRDAvaliacaoRow();
                                    CurrentSFRDAvaliacao.FRDBaseRow = frdRow;
                                    CurrentSFRDAvaliacao.IDPertinencia = 1;
                                    CurrentSFRDAvaliacao.IDDensidade = 1;
                                    CurrentSFRDAvaliacao.IDSubdensidade = 1;
                                    CurrentSFRDAvaliacao.Publicar = false;
                                    CurrentSFRDAvaliacao.Observacoes = "";
                                    CurrentSFRDAvaliacao.AvaliacaoTabela = false;
                                    GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(CurrentSFRDAvaliacao);
                                    var condA = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.AddSFRDCondicaoDeAcessoRow(frdRow, "", "", "", "", new byte[] { }, 0);

                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBase, new DataRow[] { frdRow }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDDatasProducao, new DataRow[] { dp }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura, new DataRow[] { ce }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDContexto, new DataRow[] { c }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada, new DataRow[] { da }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte, new DataRow[] { ds }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDNotaGeral, new DataRow[] { ng }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDAvaliacao, new DataRow[] { CurrentSFRDAvaliacao }, postSaveArgs.tran);
                                    PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso, new DataRow[] { condA }, postSaveArgs.tran);
                                }

                                var nvlRegRow = RecordRegisterHelper
                                        .CreateFRDBaseDataDeDescricaoRow(frdRow,
                                            caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricao,
                                            caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricaoAuthority,
                                            caRegRow.DataAutoria);
                                nvlRegRow.DataEdicao = caRegRow.DataEdicao;
                                nvlRegRow.IDTipoNivelRelacionado = rhRow.IDTipoNivelRelacionado;

                                GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.AddFRDBaseDataDeDescricaoRow(nvlRegRow);

                                PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao,
                                    GisaDataSetHelper.GetInstance().FRDBaseDataDeDescricao.Cast<GISADataset.FRDBaseDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                            }
                        }
                    };

                    PersistencyHelper.save(ValidateCreateRel, pcArgs, postSaveAction);
					PersistencyHelper.cleanDeletedData();

					if (ContextControloAut.RowState == DataRowState.Detached)
					{
						MessageBox.Show("Não é possível estabelecer a relação uma vez que a notícia de autoridade " + System.Environment.NewLine + "selecionada no painel superior foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
						return false;
					}
					else
					{
						if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.RelationAlreadyExists)
						{
							MessageBox.Show("Não é permitida mais que uma relação do mesmo tipo entre as mesmas duas entidades produtoras.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning);

							return false;
						}
						else if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CyclicRelation)
						{
							MessageBox.Show("Prestes a criar um conjunto de relações cíclicas.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning);

							return false;
						}
                        else if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.CADeleted)
                        {
                            MessageBox.Show("Não é possível estabelecer a relação uma vez que uma das notícias de autoridade " + System.Environment.NewLine + "foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                            return false;
                        }
                        else
                        {
                            GISA.Search.Updater.updateProdutor(new List<string>() { 
                                cadRow.ControloAutRow.ID.ToString(), ContextControloAut.ID.ToString()});
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(cadRow.ControloAutRow.GetNivelControloAutRows()[0].ID);
                        }
					}
				}
				else
				{
					GISADataset.ControloAutRelRow carRow = null;
					carRow = GisaDataSetHelper.GetInstance().ControloAutRel.NewControloAutRelRow();
					carRow.IDControloAut = cadRow.ControloAutRow.ID;
					carRow.IDControloAutAlias = ContextControloAut.ID;
					carRow.IDTipoRel = tcarRow.ID;
					// Guardar datas
					carRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear);
					carRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth);
					carRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay);
					carRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear);
					carRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth);
					carRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay);

					carRow.Descricao = relacaoCA.txtDescricao.Text;
					GisaDataSetHelper.GetInstance().ControloAutRel.AddControloAutRelRow(carRow);

					pcArgs.ID = carRow.IDControloAut;
					pcArgs.IDUpper = carRow.IDControloAutAlias;
					pcArgs.IDTipoRel = carRow.IDTipoRel;
					pcArgs.isCARRow = true;

                    var postSaveAction = new PostSaveAction();
                    PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
                    postSaveAction.args = args;

                    postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                    {
                        if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)
                        {
                            if (this.parent.GetType() == typeof(MasterPanelControloAut))
                            {
                                ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut);

                                PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao,
                                        GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                            }
                        }
                    };

					PersistencyHelper.save(ValidateCreateRel, pcArgs, postSaveAction);
					PersistencyHelper.cleanDeletedData();

					if (ContextControloAut.RowState == DataRowState.Detached)
					{
						MessageBox.Show("Não é possível estabelecer a relação uma vez que a notícia de autoridade " + System.Environment.NewLine + "selecionada no painel superior foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
						return false;
					}
					else
					{
                        if (pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.RelationAlreadyExists)
                        {
                            MessageBox.Show("Não é permitida mais que uma relação do mesmo tipo entre as mesmas duas entidades produtoras.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            return false;
                        }
                        else
                        {
                            GISA.Search.Updater.updateProdutor(new List<string>() { 
                                carRow.IDControloAut.ToString(), carRow.IDControloAutAlias.ToString() });
                        }
					}
				}
			}
			else // edição
			{
				//Agir de forma diferente conforme seja uma relação hierarquica ou seja uma relação de outro qualquer tipo
				if (tcarRow.ID == Convert.ToInt64(TipoControloAutRel.Hierarquica))
				{
					long tnrID = 0;
					tnrID = ((TipoNivelRelacionado.PossibleSubNivel)relacaoCA.cbTipoNivel.SelectedItem).SubIDTipoNivelRelacionado;
					GISADataset.RelacaoHierarquicaRow rhRow = null;
					rhRow = (GISADataset.RelacaoHierarquicaRow)ContextRel;
					// Guardar tipo de nivel
					rhRow.IDTipoNivelRelacionado = tnrID;
					// Guardar datas
					rhRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear);
					rhRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth);
					rhRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay);
					rhRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear);
					rhRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth);
					rhRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay);
					// Guardar descrição
					rhRow.Descricao = relacaoCA.txtDescricao.Text;

                    var postSaveAction = new PostSaveAction();
                    PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
                    postSaveAction.args = args;

                    postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                    {
                        if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)
                        {
                            if (this.parent.GetType() == typeof(MasterPanelControloAut))
                            {
                                ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut);

                                PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao,
                                        GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                            }
                        }
                    };

                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(postSaveAction);
				    PersistencyHelper.cleanDeletedData();

                    if (successfulSave == PersistencyHelper.SaveResult.successful)
                        UpdateCA(rhRow);
				}
				else
				{
					GISADataset.ControloAutRelRow carRow = null;
					carRow = (GISADataset.ControloAutRelRow)ContextRel;

					// Actualização de uma relação previamente existente
					carRow["IDTipoRel"] = ((GISADataset.TipoControloAutRelRow)relacaoCA.cbTipoControloAutRel.SelectedItem).ID;
					// guardar datas
					carRow.InicioAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoInicio.ValueYear);
					carRow.InicioMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoInicio.ValueMonth);
					carRow.InicioDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoInicio.ValueDay);
					carRow.FimAno = GISA.Utils.GUIHelper.ReadYear(relacaoCA.dtRelacaoFim.ValueYear);
					carRow.FimMes = GISA.Utils.GUIHelper.ReadMonth(relacaoCA.dtRelacaoFim.ValueMonth);
					carRow.FimDia = GISA.Utils.GUIHelper.ReadDay(relacaoCA.dtRelacaoFim.ValueDay);

					carRow.Descricao = relacaoCA.txtDescricao.Text;

                    var postSaveAction = new PostSaveAction();
                    PersistencyHelper.UpdatePermissionsPostSaveArguments args = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
                    postSaveAction.args = args;

                    postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                    {
                        if (!postSaveArgs.cancelAction && ContextControloAut.RowState != DataRowState.Detached && pcArgs.CreateEditResult == PersistencyHelper.VerifyRelExistencePreConcArguments.CreateEditRelationErrors.NoError)
                        {
                            if (this.parent.GetType() == typeof(MasterPanelControloAut))
                            {
                                ((MasterPanelControloAut)this.parent).CurrentContext.RaiseRegisterModificationEvent(this.ContextControloAut);

                                PersistencyHelperRule.Current.saveRows(GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao,
                                        GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Where(r => r.RowState == DataRowState.Added).ToArray(), postSaveArgs.tran);
                            }
                        }
                    };

                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(postSaveAction);
				    PersistencyHelper.cleanDeletedData();

                    if (successfulSave == PersistencyHelper.SaveResult.successful)
                        UpdateCA(carRow);
				}

			}

			//TODO: PARA ALGUMAS DAS SEGUINTES VALIDACOES SERÁ NECESSÁRIO TRAZER PARA DENTRO DESTE FORM UMA GRANDE PARTE DA LOGICA EXISTENTE FORA DELE, NOMEADAMENTE A NOÇÃO DE SE ESTE FORM ESTÁ A SER UTILIZADO NA CRIAÇÃO OU NA EDIÇÃO DE UMA DADA RELAÇÃO
			//ToDo: validar que as datas da relação não vão para alem das datas de existencia de ambos os níveis (superior e inferior)
			//ToDo: validar que o tipo de nivel escolhido está de acordo com os tipos de nivel subordinados
			return true;
		}
Exemple #29
0
		protected override void AddTrustee()
		{
            GISADataset.TrusteeRow truRow = null;
			GISADataset.TrusteeUserRow usrRow = null;

			FormCreateTrustee form = new FormCreateTrustee();
			form.Text = "Novo utilizador";
			switch (form.ShowDialog())
			{
				case DialogResult.OK:
                    ((frmMain)TopLevelControl).EnterWaitMode();
					truRow = GisaDataSetHelper.GetInstance().Trustee.NewTrusteeRow();
					truRow.Name = form.txtTrusteeName.Text;
					truRow.Description = string.Empty;
					truRow.CatCode = "USR";
					truRow.BuiltInTrustee = false;
					truRow.IsActive = true;
					truRow.Versao = new byte[]{};
					truRow.isDeleted = 0;
					usrRow = GisaDataSetHelper.GetInstance().TrusteeUser.NewTrusteeUserRow();
					usrRow.Password = "";
					usrRow.FullName = "";
					usrRow.IsAuthority = false;
					usrRow["IDTrusteeUserDefaultAuthority"] = DBNull.Value;
					usrRow.Versao = new byte[]{};
					usrRow.isDeleted = 0;
					usrRow.TrusteeRow = truRow;

                    // selecionar o grupo "TODOS"
                    GISADataset.TrusteeGroupRow tgRow = (GISADataset.TrusteeGroupRow)(((GISADataset.TrusteeRow)(GisaDataSetHelper.GetInstance().Trustee.Select("Name='ACESSO_COMPLETO'")[0])).GetTrusteeGroupRows()[0]);

                    // incluir o novo utilizador no grupo "TODOS" por omissão
					GisaDataSetHelper.GetInstance().Trustee.AddTrusteeRow(truRow);
					GisaDataSetHelper.GetInstance().TrusteeUser.AddTrusteeUserRow(usrRow);
					GisaDataSetHelper.GetInstance().UserGroups.AddUserGroupsRow(usrRow, tgRow, new byte[]{}, 0);

					PersistencyHelper.CreateTrusteePreConcArguments ctpca = new PersistencyHelper.CreateTrusteePreConcArguments();
					ctpca.truRowID = truRow.ID;
					ctpca.usrRowID = usrRow.ID;

					Trace.WriteLine("A criar utilizador...");

                    PersistencyHelper.save(AddTrusteeIfUsernameDoesntExist, ctpca);
					PersistencyHelper.cleanDeletedData();

					if (! ctpca.successful)
					{
						MessageBox.Show("Este nome já existe atribuído a um utilizador ou grupo, " + Environment.NewLine + "por favor escolha outro nome.", form.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
						UpdateTrustees(null);
					}
					else
					{
                        // actualizar interface
						UpdateTrustees(truRow);
					}

                    ((frmMain)TopLevelControl).LeaveWaitMode();
                    break;
				case DialogResult.Cancel:
				break;
			}
		}
Exemple #30
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (CurrentControloAut.RowState == DataRowState.Detached)
            {
                MessageBox.Show("A notícia de autoridade selecionada como contexto foi " + System.Environment.NewLine + "apagada por outro utilizador e por esse motivo não pode ser editada.", "Edição de Notícia de Autoridade", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            FormPickControloAut frmPick = new FormPickControloAut(CurrentControloAut);

            frmPick.Text = "Notícia de autoridade - Pesquisar entidades produtoras";
            frmPick.caList.AllowedNoticiaAut(TipoNoticiaAut.EntidadeProdutora);
            frmPick.caList.ReloadList();

            if (frmPick.caList.Items.Count > 0)
            {
                frmPick.caList.SelectItem(frmPick.caList.Items[0]);
            }

            GISADataset.ControloAutRow        caRow   = null;
            GISADataset.ControloAutRelRow     carRow  = null;
            GISADataset.TipoControloAutRelRow tcarRow = null;
            switch (frmPick.ShowDialog())
            {
            case DialogResult.OK:
                foreach (ListViewItem li in frmPick.caList.SelectedItems)
                {
                    caRow = ((GISADataset.ControloAutDicionarioRow)li.Tag).ControloAutRow;

                    // Proteger contra relações repetidas
                    string query = string.Format("({0} OR {1}) AND IDTipoRel = {2}", GetRelConstraint(caRow, CurrentControloAut), GetRelConstraint(CurrentControloAut, caRow), System.Enum.Format(typeof(TipoControloAutRel), TipoControloAutRel.Instituicao, "D"));

                    if ((GisaDataSetHelper.GetInstance().ControloAutRel.Select(query)).Length == 0)
                    {
                        tcarRow = (GISADataset.TipoControloAutRelRow)(GisaDataSetHelper.GetInstance().TipoControloAutRel.Select("ID=" + System.Enum.Format(typeof(TipoControloAutRel), TipoControloAutRel.Instituicao, "D"))[0]);
                        carRow  = GisaDataSetHelper.GetInstance().ControloAutRel.NewControloAutRelRow();
                        carRow.ControloAutRowByControloAutControloAutRel      = CurrentControloAut;
                        carRow.ControloAutRowByControloAutControloAutRelAlias = caRow;
                        carRow.TipoControloAutRelRow = tcarRow;
                        carRow["Descricao"]          = DBNull.Value;
                        carRow["InicioAno"]          = DBNull.Value;
                        carRow["InicioMes"]          = DBNull.Value;
                        carRow["InicioDia"]          = DBNull.Value;
                        carRow["FimAno"]             = DBNull.Value;
                        carRow["FimMes"]             = DBNull.Value;
                        carRow["FimDia"]             = DBNull.Value;

                        GisaDataSetHelper.GetInstance().ControloAutRel.AddControloAutRelRow(carRow);

                        PersistencyHelper.VerifyRelExistencePreConcArguments pcArgs = new PersistencyHelper.VerifyRelExistencePreConcArguments();
                        pcArgs.ID        = caRow.ID;
                        pcArgs.IDUpper   = CurrentControloAut.ID;
                        pcArgs.IDTipoRel = Convert.ToInt64(TipoControloAutRel.Instituicao);

                        PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(GetRelPanelCAControl, pcArgs);
                        PersistencyHelper.cleanDeletedData();

                        if (carRow.RowState == DataRowState.Detached)
                        {
                            MessageBox.Show("Não foi possível estabelecer a relação uma vez que a notícia de autoridade " + System.Environment.NewLine + "que pretende associar foi apagada por outro utilizador.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                        else
                        {
                            AddIdentidadeInstituicao(carRow);

                            // registar inserção
                            ((frmMain)TopLevelControl).CurrentContext.RaiseRegisterModificationEvent(CurrentControloAut);

                            if (successfulSave == PersistencyHelper.SaveResult.successful)
                            {
                                UpdateCA(CurrentControloAut);
                                UpdateCA(caRow);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("A relação que pretende adicionar já existe.", "Erro ao estabelecer relação", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                break;

            case DialogResult.Cancel:
                break;
            }
        }