Exemplo n.º 1
0
 public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar)
 {
     PersistencyHelper.SaveResult successfulSave = base.Save(activateOpcaoCancelar);
     if (successfulSave == PersistencyHelper.SaveResult.successful)
     {
         GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
         try
         {
             List <string> IDNiveis = DBAbstractDataLayer.DataAccessRules.UFRule.Current.GetNiveisDocAssociados(CurrentFRDBase.NivelRow.ID, ho.Connection);
             GISA.Search.Updater.updateNivelDocumental(IDNiveis);
             GISA.Search.Updater.updateUnidadeFisica(CurrentFRDBase.NivelRow.ID);
         }
         catch (GISA.Search.UpdateServerException)
         {
         }
         catch (Exception ex)
         {
             Trace.WriteLine(ex.ToString());
             throw;
         }
         finally
         {
             ho.Dispose();
         }
     }
     return(successfulSave);
 }
Exemplo n.º 2
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();
        }
Exemplo n.º 3
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();
        }
Exemplo n.º 4
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;
		}
Exemplo n.º 5
0
        public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar)
        {
            var preTransactionAction = new PreTransactionAction();
            var args = new PersistencyHelper.FedoraIngestPreTransactionArguments();

            preTransactionAction.args = args;
            bool ingestSuccess = true;

            if (controlObjetoDigital1.disableSave)
            {
                return(PersistencyHelper.SaveResult.nothingToSave);
            }

            preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
            {
                string msg = null;

                if (odHelper.currentODComp != null)
                {
                    ingestSuccess = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(odHelper.currentODComp, out msg);
                }
                else
                {
                    odHelper.currentODSimples.ForEach(odSimples => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(odSimples, out msg));
                }

                if (ingestSuccess)
                {
                    odHelper.newObjects.Keys.ToList().ForEach(k => { k.pid = odHelper.newObjects[k].pid; });
                }

                preTransactionArgs.cancelAction = !ingestSuccess;
                preTransactionArgs.message      = msg;
            };

            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(preTransactionAction, activateOpcaoCancelar);

            if (successfulSave != PersistencyHelper.SaveResult.successful && !ingestSuccess)
            {
                MessageBox.Show("Ocorreu um erro na ingestão do objeto digital.", "Ingestão", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                odHelper.newObjects.Clear();
                odHelper.mContexto        = ObjetoDigitalFedoraHelper.Contexto.nenhum;
                odHelper.currentODComp    = null;
                odHelper.currentODSimples = null;
            }
            else if (successfulSave == PersistencyHelper.SaveResult.successful)
            {
                GISA.Search.Updater.updateNivelDocumental(odHelper.currentNivel.ID);
            }

            return(successfulSave);
        }
        public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar)
        {
            List <long> niveisIDs = new List <long>();

            foreach (GISADataset.TrusteeNivelPrivilegeRow tnpRow in GisaDataSetHelper.GetInstance().TrusteeNivelPrivilege.Select("", "", DataViewRowState.Added | DataViewRowState.ModifiedOriginal))
            {
                niveisIDs.Add(tnpRow.IDNivel);
            }

            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(activateOpcaoCancelar);

            return(successfulSave);
        }
Exemplo n.º 7
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();
        }
Exemplo n.º 8
0
		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;
			}
		}
Exemplo n.º 9
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;
		}
Exemplo n.º 10
0
        public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar)
		{
            PersistencyHelper.SaveResult successfulSave = base.Save(activateOpcaoCancelar);
            if (successfulSave == PersistencyHelper.SaveResult.successful)
			{
				GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    List<string> IDNiveis = ControloAutRule.Current.GetNiveisDocAssociados(CurrentControloAut.ID, ho.Connection);
                    GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                    switch (CurrentControloAut.IDTipoNoticiaAut)
                    {
                        case (long)TipoNoticiaAut.EntidadeProdutora:
                            GISA.Search.Updater.updateProdutor(CurrentControloAut.ID);
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(CurrentControloAut.GetNivelControloAutRows()[0].ID);
                            break;
                        case (long)TipoNoticiaAut.Onomastico:
                        case (long)TipoNoticiaAut.Ideografico:
                        case (long)TipoNoticiaAut.ToponimicoGeografico:
                            GISA.Search.Updater.updateAssunto(CurrentControloAut.ID);
                            break;
                        case (long)TipoNoticiaAut.TipologiaInformacional:
                            GISA.Search.Updater.updateTipologia(CurrentControloAut.ID);
                            break;
                    }
                }
                catch (GISA.Search.UpdateServerException)
                { }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.ToString());
                    throw;
                }
				finally
				{
					ho.Dispose();
				}
			}
            return successfulSave;
		}
Exemplo n.º 11
0
        public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar)
        {
            if (this.CurrentFRDBase == null)
            {
                return(PersistencyHelper.SaveResult.unsuccessful);
            }

            List <long>   IDs         = new List <long>();
            List <string> idsToUpdate = new List <string>();
            List <NivelRule.PublicacaoDocumentos> DocsID = new List <NivelRule.PublicacaoDocumentos> ();

            GISADataset.RelacaoHierarquicaRow rhRow          = null;
            PersistencyHelper.SaveResult      successfulSave = PersistencyHelper.SaveResult.unsuccessful;

            if ((CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length > 0))
            {
                rhRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0];

                PersistencyHelper.PublishSubDocumentosPreSaveArguments   psArgs1 = new PersistencyHelper.PublishSubDocumentosPreSaveArguments();
                PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments psArgs2 = new PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments();

                // publicação de subdocumentos baseado na publicação dos documentos respectivos
                if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.D)
                {
                    //contexto é um documento
                    if (CurrentFRDBase.GetSFRDAvaliacaoRows().Length > 0)
                    {
                        GISADataset.SFRDAvaliacaoRow relRow = CurrentFRDBase.GetSFRDAvaliacaoRows()[0];

                        if ((relRow.RowState == DataRowState.Added && relRow.Publicar) || relRow.RowState == DataRowState.Modified)
                        {
                            DocsID.Add(new DBAbstractDataLayer.DataAccessRules.NivelRule.PublicacaoDocumentos(CurrentFRDBase.NivelRow.ID, CurrentFRDBase.GetSFRDAvaliacaoRows()[0].Publicar));
                            IDs.Add(CurrentFRDBase.NivelRow.ID);
                            PermissoesHelper.ChangeDocPermissionPublicados(CurrentFRDBase.NivelRow.ID, (CurrentFRDBase.GetSFRDAvaliacaoRows())[0].Publicar);
                        }
                    }
                }
                else if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SR || rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR)
                {
                    //o contexto é uma série ou subsérie e é alterado o estado de publicação de vários documentos simultaneamente
                    foreach (GISADataset.SFRDAvaliacaoRow sfrdAv in GisaDataSetHelper.GetInstance().SFRDAvaliacao.Select("", "", DataViewRowState.Added | DataViewRowState.ModifiedCurrent))
                    {
                        if (sfrdAv.FRDBaseRow.ID != CurrentFRDBase.ID)
                        {
                            DocsID.Add(new DBAbstractDataLayer.DataAccessRules.NivelRule.PublicacaoDocumentos(sfrdAv.FRDBaseRow.NivelRow.ID, sfrdAv.Publicar));
                            IDs.Add(sfrdAv.FRDBaseRow.NivelRow.ID);
                            PermissoesHelper.ChangeDocPermissionPublicados(sfrdAv.FRDBaseRow.NivelRow.ID, sfrdAv.Publicar);
                        }
                        else
                        {
                            IDs.Add(sfrdAv.FRDBaseRow.IDNivel);
                        }
                    }

                    if (!(CurrentFRDBase.GetSFRDAvaliacaoRows().Length == 0 || CurrentFRDBase.GetSFRDAvaliacaoRows()[0].IsIDModeloAvaliacaoNull() || (!(CurrentFRDBase.GetSFRDAvaliacaoRows()[0].RowState == DataRowState.Added) && !(CurrentFRDBase.GetSFRDAvaliacaoRows()[0]["IDModeloAvaliacao", DataRowVersion.Original] == DBNull.Value) && ((long)(CurrentFRDBase.GetSFRDAvaliacaoRows()[0]["IDModeloAvaliacao", DataRowVersion.Original])) == (long)(CurrentFRDBase.GetSFRDAvaliacaoRows()[0]["IDModeloAvaliacao", DataRowVersion.Current]))))
                    {
                        psArgs2.frdID             = CurrentFRDBase.ID;
                        psArgs2.modeloAvaliacaoID = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].IDModeloAvaliacao;
                        psArgs2.avaliacaoTabela   = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].AvaliacaoTabela;
                        if (CurrentFRDBase.GetSFRDAvaliacaoRows()[0].IsPrazoConservacaoNull())
                        {
                            psArgs2.prazoConservacao = 0;
                        }
                        else
                        {
                            psArgs2.prazoConservacao = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].PrazoConservacao;
                        }

                        psArgs2.preservar = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].Preservar;
                    }
                }
                else
                {
                    foreach (GISADataset.SFRDAvaliacaoRow sfrdAv in GisaDataSetHelper.GetInstance().SFRDAvaliacao.Select("", "", DataViewRowState.Added | DataViewRowState.ModifiedCurrent))
                    {
                        PermissoesHelper.ChangeDocPermissionPublicados(sfrdAv.FRDBaseRow.NivelRow.ID, sfrdAv.Publicar);
                        IDs.Add(sfrdAv.FRDBaseRow.IDNivel);
                    }
                }

                // actualização do objecto digital caso exista ou o módulo esteja activo
                rhRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First();
                var objDigital = default(ObjDigital);
                if (rhRow.IDTipoNivelRelacionado >= (long)TipoNivelRelacionado.D && SessionHelper.AppConfiguration.GetCurrentAppconfiguration().IsFedoraEnable())
                {
                    GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                    try
                    {
                        GisaDataSetHelper.ManageDatasetConstraints(false);
                        if (!PanelAmbitoConteudo1.IsLoaded)
                        {
                            PanelAmbitoConteudo1.LoadData(CurrentFRDBase, ho.Connection);
                        }
                        if (!PanelIndexacao1.IsLoaded)
                        {
                            PanelIndexacao1.LoadData(CurrentFRDBase, ho.Connection);
                        }
                        GisaDataSetHelper.ManageDatasetConstraints(true);
                    }
                    catch (System.Data.ConstraintException Ex)
                    {
                        Trace.WriteLine(Ex);
                        GisaDataSetHelper.FixDataSet(GisaDataSetHelper.GetInstance(), ho.Connection);
                    }
                    catch (Exception e)
                    {
                        Trace.WriteLine(e);
                        throw;
                    }
                    finally
                    {
                        ho.Dispose();
                    }

                    // verificar alterações na tipologia e indexação
                    var tipologia = string.Empty;
                    var hasNewTip = Nivel.HasTipologiaChanged(CurrentFRDBase, out tipologia);
                    var assuntos  = Nivel.HasIndexacaoChanged(CurrentFRDBase);

                    if (hasNewTip || assuntos != null)
                    {
                        objDigital = FedoraHelper.UpdateTipAssuntos(CurrentFRDBase.NivelRow, hasNewTip ? tipologia : null, assuntos);
                    }
                }

                // actualizar objecto digital caso exista
                var preTransactionAction = new PreTransactionAction();
                var fedArgs = new PersistencyHelper.FedoraIngestPreTransactionArguments();
                preTransactionAction.args = fedArgs;

                preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
                {
                    var    odComp        = this.PanelObjetoDigitalFedora1.GetObjDigitalComp();
                    var    odSimples     = this.PanelObjetoDigitalFedora1.GetObjDigitalSimples();
                    bool   ingestSuccess = true;
                    string msg           = null;

                    if (odComp != null)
                    {
                        ingestSuccess = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(odComp, out msg);
                    }
                    else if (odSimples != null && odSimples.Count > 0)
                    {
                        odSimples.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg));
                    }

                    if (ingestSuccess)
                    {
                        this.PanelObjetoDigitalFedora1.odHelper.newObjects.Keys.ToList().ForEach(k => { k.pid = this.PanelObjetoDigitalFedora1.odHelper.newObjects[k].pid; });
                    }

                    preTransactionArgs.cancelAction = !ingestSuccess;
                    preTransactionArgs.message      = msg;
                };

                psArgs1.DocsID = DocsID;

                PostSaveAction postSaveAction = new PostSaveAction();
                PersistencyHelper.UpdatePermissionsPostSaveArguments argsPSAction = new PersistencyHelper.UpdatePermissionsPostSaveArguments();
                argsPSAction.NiveisIDs = IDs;
                argsPSAction.TrusteeID = PermissoesHelper.GrpAcessoPublicados.ID;
                postSaveAction.args    = argsPSAction;

                postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs)
                {
                    if (!postSaveArgs.cancelAction && argsPSAction.NiveisIDs.Count > 0)
                    {
                        if (psArgs1 != null)
                        {
                            idsToUpdate = psArgs1.idsToUpdate;
                        }
                    }
                };

                PersistencyHelper.AvaliacaoPublicacaoPreSaveArguments args = new PersistencyHelper.AvaliacaoPublicacaoPreSaveArguments();
                args.psArgs1 = psArgs1;
                args.psArgs2 = psArgs2;

                successfulSave = PersistencyHelper.save(AvaliacaoPublicacao, args, postSaveAction, preTransactionAction, activateOpcaoCancelar);
            }
            else
            {
                successfulSave = PersistencyHelper.save();
            }

            if (successfulSave == PersistencyHelper.SaveResult.successful)
            {
                GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                try
                {
                    if (CurrentFRDBase.NivelRow.IDTipoNivel == TipoNivel.DOCUMENTAL)
                    {
                        if (idsToUpdate == null)
                        {
                            idsToUpdate = new List <string>();
                        }
                        idsToUpdate.Add(CurrentFRDBase.NivelRow.ID.ToString());
                        GISA.Search.Updater.updateNivelDocumental(idsToUpdate);
                    }
                    ((frmMain)TopLevelControl).SetServerStatus();
                }
                catch (GISA.Search.UpdateServerException)
                {
                    ((frmMain)TopLevelControl).SetServerStatus();
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.ToString());
                    throw;
                }
                finally
                {
                    ho.Dispose();
                }
            }

            return(successfulSave);
        }
Exemplo n.º 12
0
 public SaveArgs(PersistencyHelper.SaveResult save) { this.mSave = save; }
Exemplo n.º 13
0
 public SaveArgs(PersistencyHelper.SaveResult save)
 {
     this.mSave = save;
 }
Exemplo n.º 14
0
		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;
		}
Exemplo n.º 15
0
        private void EditNivel()
        {
            var nRow   = this.nivelNavigator1.SelectedNivel;
            var frdRow = nRow.GetFRDBaseRows().Single();
            var rhRow  = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First();
            var tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow);

            var frm = new FormNivelDocumentalFedora();

            frm.IDTipoNivelRelacionado = tnrRow.ID;

            string WindowTitle = string.Format("Editar {0}", tnrRow.Designacao);


            frm.Text               = WindowTitle;
            frm.txtCodigo.Text     = nRow.Codigo;
            frm.txtDesignacao.Text = Nivel.GetDesignacao(nRow);
            frm.FRDBaseRow         = nRow.GetFRDBaseRows().Single();
            frm.LoadData();

            var idxFRDCARow = frdRow.GetIndexFRDCARows().SingleOrDefault(r => r["Selector"] != DBNull.Value && r.Selector == -1);

            // show form and receive user feedback
            if (frm.ShowDialog() == DialogResult.OK)
            {
                Trace.WriteLine("A editar nível...");
                GISADataset.NivelDesignadoRow ndRow = null;
                nRow.Codigo = frm.txtCodigo.Text;


                // Um Nivel documental deve ter obrigatoriamente um NivelDesignado.
                Debug.Assert(nRow.GetNivelDesignadoRows().Length > 0);
                ndRow            = nRow.GetNivelDesignadoRows()[0];
                ndRow.Designacao = frm.txtDesignacao.Text;

                var tipologiaSelected = ((FormNivelDocumentalFedora)frm).Tipologia;

                if (tipologiaSelected == null && idxFRDCARow != null)
                {
                    idxFRDCARow.Delete();
                }
                else if (tipologiaSelected != null && idxFRDCARow == null)
                {
                    idxFRDCARow = GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(frdRow, ((FormNivelDocumentalFedora)frm).Tipologia.ControloAutRow, -1, new byte[] { }, 0);
                }
                else if (tipologiaSelected != null && idxFRDCARow != null && idxFRDCARow.IDControloAut != tipologiaSelected.IDControloAut)
                {
                    idxFRDCARow.Delete();
                    idxFRDCARow = GisaDataSetHelper.GetInstance().IndexFRDCA.AddIndexFRDCARow(frdRow, ((FormNivelDocumentalFedora)frm).Tipologia.ControloAutRow, -1, new byte[] { }, 0);
                }

                string termoToCompare = frm.Tipologia == null ? null : ((FormNivelDocumentalFedora)frm).Tipologia.DicionarioRow.Termo;
                if (objetoDigital != null && objetoDigital.tipologia != termoToCompare)
                {
                    objetoDigital.tipologia = tipologiaSelected != null ? tipologiaSelected.DicionarioRow.Termo : "";
                    objetoDigital.state     = State.modified;
                }

                // registar a edição do item selecionado
                CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments pcArgs = new PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments();
                pcArgs.nRowID  = nRow.ID;
                pcArgs.ndRowID = ndRow.ID;
                // Se se tratar de uma entidade detentora não passar os Ids de uma relação
                // hierárquica para um nível superior pois não existe nenhum.
                if (nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length > 0)
                {
                    pcArgs.rhRowID      = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].ID;
                    pcArgs.rhRowIDUpper = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDUpper;
                }
                pcArgs.testOnlyWithinNivel = true;

                // actualizar objecto digital caso exista
                var preTransactionAction = new PreTransactionAction();
                var args = new PersistencyHelper.FedoraIngestPreTransactionArguments();
                preTransactionAction.args = args;

                preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
                {
                    string msg = null;
                    if (objetoDigital != null)
                    {
                        preTransactionArgs.cancelAction = !SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(objetoDigital, out msg);
                    }
                    preTransactionArgs.message = msg;
                };

                PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.ensureUniqueCodigo, pcArgs, preTransactionAction);
                if (!pcArgs.successful)
                {
                    MessageBox.Show(pcArgs.message, "Edição da unidade de descrição", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (successfulSave == PersistencyHelper.SaveResult.successful)
                {
                    GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                    try
                    {
                        List <string> IDNiveis = new List <string>();
                        IDNiveis.Add(nRow.ID.ToString());
                        GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine(ex.ToString());
                        throw;
                    }
                    finally
                    {
                        ho.Dispose();
                    }
                }

                PersistencyHelper.cleanDeletedData();

                // Actualizar a interface com os novos valores. Se editarmos a
                // raiz (estrutural) da vista documental é necessário actualizar
                // automaticamente também a vista estrutural.

                if (!(nRow.RowState == DataRowState.Detached))
                {
                    if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural)
                    {
                        this.nivelNavigator1.UpdateSelectedNodeName(Nivel.GetDesignacao(nRow));
                    }
                    else
                    {
                        this.nivelNavigator1.UpdateSelectedListItemName(Nivel.GetDesignacao(nRow));
                    }
                }

                // Forçar a gravação do documento
                CurrentContext.SetNivelEstrututalDocumental(null);
                CurrentContext.SetNivelEstrututalDocumental(nRow);
            }
        }
Exemplo n.º 16
0
        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]);
            }
        }
Exemplo n.º 17
0
//INSTANT C# NOTE: C# does not support optional parameters. Overloaded method(s) are created above.
//ORIGINAL LINE: Public Shared Sub DeleteControloAut(ByVal caList As ControloAutList, ByVal Caption As String, ByVal Interrogacao As String, ByVal MessageBoxText As String, Optional ByVal caller As Control = null)
		public static void DeleteControloAut(ControloAutList caList, string Caption, string Interrogacao, string MessageBoxText, Control caller)
		{

			bool HasDocumentData = false;
            List<string> nivelIDsAssoc = new List<string>();
			string Detalhes = null;
			
            if (caller != null) ((frmMain)caller.TopLevelControl).EnterWaitMode();
            Detalhes = ControloAutHelper.GetControloAutUsage(caList.SelectedItems.Cast<ListViewItem>().Select(i => i.Tag as GISADataset.ControloAutDicionarioRow).ToList(), ref HasDocumentData, ref nivelIDsAssoc);
            if (caller != null) ((frmMain)caller.TopLevelControl).LeaveWaitMode();

			if (Detalhes.Length > 0)
			{
                FormDeletionReport form = new FormDeletionReport();
                form.Text = Caption;
                form.Interrogacao = Interrogacao;
                form.Detalhes = Detalhes;
				if (HasDocumentData)
				{
                    form.SetBtnOKVisible(false);
                    form.Interrogacao = "Este elemento não pode ser removido enquanto lhe existirem associados níveis documentais.";
				}

                if (form.ShowDialog() == DialogResult.Cancel) return;
			}
			else
			{
				switch (MessageBox.Show(MessageBoxText, Caption, MessageBoxButtons.OKCancel))
				{
					case System.Windows.Forms.DialogResult.OK:
					break;
					case System.Windows.Forms.DialogResult.Cancel:
						return;
					default:
						Debug.Assert(false, "Unexpected DialogResult.");
						break;
				}
			}

			Trace.WriteLine("A apagar notícia de autoridade...");

			ListViewItem selectedItem = null;
			if (caList.SelectedItems.Count > 0)
			{
				Debug.Assert(caList.SelectedItems.Count == 1, "Só deveria existir 1 item selecionado.");
				selectedItem = caList.SelectedItems[0];

				GISADataset.ControloAutDicionarioRow cadRow = null;
				GISADataset.ControloAutRow caRow = null;
				cadRow = (GISADataset.ControloAutDicionarioRow)selectedItem.Tag;
				caRow = cadRow.ControloAutRow;

				// Remover a selecção do item vai provocar uma mudança de contexto que 
				// por sua vez vai provocar uma gravação dos dados
				caList.ClearItemSelection(selectedItem);

                var ho = default(GisaDataSetHelper.HoldOpen);
                if (caller != null && caller.GetType() == typeof(MasterPanelControloAut))
                {
                    ((MasterPanelControloAut)caller).CurrentContext.RaiseRegisterModificationEvent(caRow);

                    if (caRow.IDTipoNoticiaAut == (long)TipoNoticiaAut.EntidadeProdutora)
                    {
                        var frdRow = default(GISADataset.FRDBaseRow);
                        long IDTipoNivelRelacionado = -1;
                        ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                        try
                        {
                            DBAbstractDataLayer.DataAccessRules.FRDRule.Current.LoadFRD(GisaDataSetHelper.GetInstance(), caRow.GetNivelControloAutRows().Single().ID, ho.Connection);
                            frdRow = caRow.GetNivelControloAutRows().Single().NivelRow.GetFRDBaseRows().SingleOrDefault();
                            DBAbstractDataLayer.DataAccessRules.NivelRule.Current.LoadNivelParents(caRow.GetNivelControloAutRows().Single().ID, GisaDataSetHelper.GetInstance(), ho.Connection);
                            if (frdRow != null)
                                IDTipoNivelRelacionado = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetNivelLastIDTipoNivelRelacionado(frdRow.ID, ho.Connection);
                        }
                        finally
                        {
                            ho.Dispose();
                        }

                        if (frdRow != null) // frd pode ainda não ter sido criado
                        {
                            var caRegRow = GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Single(r => r.RowState == DataRowState.Added);
                            var nvlRegRow = RecordRegisterHelper
                                            .CreateFRDBaseDataDeDescricaoRow(frdRow,
                                                caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricao,
                                                caRegRow.TrusteeUserRowByTrusteeUserControloAutDataDeDescricaoAuthority,
                                                caRegRow.DataAutoria,
                                                IDTipoNivelRelacionado);
                            nvlRegRow.DataEdicao = caRegRow.DataEdicao;

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

				selectedItem.Remove();

                ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection());
                List<long> lowerIDsList = new List<long>();
                try {
                    lowerIDsList = DiplomaModeloRule.Current.GetIDLowers(caRow.ID, ho.Connection);
                } 
                finally {
                    ho.Dispose();
                }

				// Como os dados acabaram de ser gravados pode ter-se chegado à conclusão que o contexto existente já não existia, daí este teste
				if (caRow.RowState != DataRowState.Detached)
				{
					try
					{
                        var oldTermo = caRow.GetControloAutDicionarioRows().Single(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).DicionarioRow.Termo;
                        var IDTipoNoticiaAut = caRow.IDTipoNoticiaAut;
						PersistencyHelper.DeleteIDXPreSaveArguments preSaveArgs = new PersistencyHelper.DeleteIDXPreSaveArguments();
						GISADataset.NivelControloAutRow[] ncaRows = null;
						GISADataset.NivelRow nRow = null;
						ncaRows = caRow.GetNivelControloAutRows();
						if (ncaRows.Length > 0)
						{
							nRow = ((GISADataset.NivelControloAutRow)(ncaRows[0])).NivelRow;
							preSaveArgs.ID = nRow.ID;
						}
						PersistencyHelper.DeleteCAXPreConcArguments preConcArgs = DeleteCAX(caRow);
                        PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(deleteCAXTermos, preConcArgs, Nivel.DeleteNivelXInDataBase, preSaveArgs);
						PersistencyHelper.cleanDeletedData();

                        if (successfulSave == PersistencyHelper.SaveResult.successful) {
                            if (SessionHelper.AppConfiguration.GetCurrentAppconfiguration().IsFedoraEnable())
                                SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.ActualizaObjDigitaisPorNivel(nivelIDsAssoc, oldTermo, null, IDTipoNoticiaAut);
                            Search.Updater.updateNivelDocumental(nivelIDsAssoc);
                            Search.Updater.updateNivelDocumentalComProdutores(lowerIDsList.Select(t => t.ToString()).ToList<string>());
                        }
					}
					catch (Exception ex)
					{
						Trace.WriteLine(ex);
						throw;
					}
				}
                else
                    GisaDataSetHelper.GetInstance().ControloAutDataDeDescricao.Cast<GISADataset.ControloAutDataDeDescricaoRow>().Single(r => r.RowState == DataRowState.Added && r.IDControloAut == caRow.ID).RejectChanges();
			}
		}
Exemplo n.º 18
0
        public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar)
        {
            PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(activateOpcaoCancelar);

            return(successfulSave);
        }
Exemplo n.º 19
0
        private void RemoveNivel()
        {
            GISADataset.NivelRow nUpperRow          = null;
            GISADataset.RelacaoHierarquicaRow rhRow = null;
            GISADataset.NivelRow nRow = null;


            nRow = this.nivelNavigator1.SelectedNivel;
            // Verificar se a relacção hierárquica ainda é a mesma apresentada na interface (se o
            // utilizador estiver a ver a lista que contem o nível a apagar e entretanto outro utilizador
            // o ter colocado noutro ponto da árvore, a relação hierárquica presente em memória deixa
            // de corresponder com aquela que é apresentada na interface quando esse nível é selecionado;
            // quando o nível é selecionado a informação no DataSet de trabalho é actualizado mas não
            // actualiza a interface)
            if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID, this.nivelNavigator1.ContextBreadCrumbsPathID)).Length > 0)
            {
                rhRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID, this.nivelNavigator1.ContextBreadCrumbsPathID))[0]);
            }
            else
            {
                MessageBox.Show("Esta operação não pode ser concluída pelo facto de a localização na estrutura " + System.Environment.NewLine + "do nível selecionado ter sido alterada por outro utilizador.", "Eliminar Nível", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            nUpperRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select(string.Format("ID={0}", this.nivelNavigator1.ContextBreadCrumbsPathID))[0]);

            var assocODs = FedoraHelper.GetAssociatedODsDetailsMsg(nRow.ID);

            if (assocODs.Length > 0)
            {
                FormDeletionReport form = new FormDeletionReport();
                form.Text         = "Eliminação de unidade de informação";
                form.Interrogacao = "A unidade de informação selecionada tem objeto(s) digital(ais) associado(s). " + System.Environment.NewLine +
                                    "Se eliminar esta unidade de informação, os objeto(s) digital(ais) " + System.Environment.NewLine + " também serão eliminado(s)." + System.Environment.NewLine +
                                    "Pretende continuar?";
                form.Detalhes = assocODs;

                if (form.ShowDialog() == DialogResult.Cancel)
                {
                    return;
                }
            }
            else if (MessageBox.Show("Tem a certeza que deseja eliminar o nível selecionado?", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
            {
                return;
            }

            if (!FedoraHelper.CanDeleteODsAssociated2UI(nRow, out objetoDigital))
            {
                return;
            }

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

            if (TipoNivel.isNivelDocumental(nRow) && TipoNivel.isNivelOrganico(nUpperRow))
            {
                // Verificar que existem várias relações hierárquicas deste
                // nível documental a entidades produtoras superiores. Nesse
                // caso deverá ser removida a relação, caso contrário, se não
                // existirem subníveis documentais, será eliminado o próprio
                // nível(documental)
                int numRHs = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length;
                if (numRHs > 1)
                {
                    if (MessageBox.Show(
                            "Por favor tenha em atenção que são vários os produtores deste " + System.Environment.NewLine +
                            "nível documental. O nível documental propriamente dito não " + System.Environment.NewLine +
                            "será eliminado, apenas a sua relação ao nível orgânico " + System.Environment.NewLine +
                            "superior o será.", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
                    {
                        return;
                    }

                    ((frmMain)TopLevelControl).EnterWaitMode();

                    CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                    PersistencyHelper.canDeleteRHRowPreConcArguments args = new PersistencyHelper.canDeleteRHRowPreConcArguments();
                    args.nRowID       = nRow.ID;
                    args.nUpperRowID  = nUpperRow.ID;
                    args.rhRowID      = rhRow.ID;
                    args.rhRowIDUpper = rhRow.IDUpper;
                    PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, args);
                    PersistencyHelper.cleanDeletedData(PersistencyHelper.determinaNuvem("RelacaoHierarquica"));
                    if (args.deleteSuccessful)
                    {
                        if (successfulSave == PersistencyHelper.SaveResult.successful)
                        {
                            List <string> IDNiveis = new List <string>();
                            IDNiveis.Add(args.nRowID.ToString());
                            GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                        }
                        this.nivelNavigator1.RemoveSelectedLVItem();
                    }
                    else
                    {
                        MessageBox.Show(args.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                    ((frmMain)TopLevelControl).LeaveWaitMode();
                }
                else if (numRHs == 1)
                {
                    // Verificar que não existem subníveis documentais
                    int numSubRHs = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("IDUpper={0}", nRow.ID)).Length;
                    if (numSubRHs > 0)
                    {
                        MessageBox.Show("Só é possível eliminar os níveis que não tenham outros directamente associados", "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        if (MessageBox.Show(
                                "Por favor tenha em atenção que este nível documental é produzido" + System.Environment.NewLine +
                                "por apenas uma entidade. Ao remover esta relação será perdida " + System.Environment.NewLine +
                                "não só a relação como o nível documental propriamente dito.", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
                        {
                            return;
                        }

                        ((frmMain)TopLevelControl).EnterWaitMode();

                        CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                        PersistencyHelper.canDeleteRHRowPreConcArguments argsPca = new PersistencyHelper.canDeleteRHRowPreConcArguments();
                        argsPca.nRowID       = nRow.ID;
                        argsPca.nUpperRowID  = nUpperRow.ID;
                        argsPca.rhRowID      = 0;
                        argsPca.rhRowIDUpper = 0;
                        PersistencyHelper.DeleteIDXPreSaveArguments argsPsa = new PersistencyHelper.DeleteIDXPreSaveArguments();
                        argsPsa.ID = nRow.ID;

                        // actualizar objecto digital caso exista
                        var preTransactionAction = new PreTransactionAction();
                        var args = new PersistencyHelper.FedoraIngestPreTransactionArguments();
                        preTransactionAction.args = args;

                        preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
                        {
                            bool   ingestSuccess = true;
                            string msg           = null;

                            var odsToIngest = FedoraHelper.DeleteObjDigital(nRow);
                            odsToIngest.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg));

                            preTransactionArgs.cancelAction = !ingestSuccess;
                            preTransactionArgs.message      = msg;
                        };

                        PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, argsPca, Nivel.DeleteNivelXInDataBase, argsPsa, preTransactionAction);
                        if (argsPca.deleteSuccessful)
                        {
                            if (successfulSave == PersistencyHelper.SaveResult.successful)
                            {
                                List <string> IDNiveis = new List <string>();
                                IDNiveis.Add(nRow.ID.ToString());
                                GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                                GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                            }
                            this.nivelNavigator1.RemoveSelectedLVItem();
                        }
                        else
                        {
                            // se o nível a eliminar se tratar de uma série ou documento solto mas que
                            // por motivos de conflito de concorrência não foi possível executar,
                            // o refrescamento dos botões é feito tendo como o contexto o próprio
                            // nível que se pretendeu eliminar para desta forma o estado dos mesmos
                            // estar correcta (caso contrário o estado dos botões referir-se-ia a
                            // não haver qualquer item selecionado
                            MessageBox.Show(argsPca.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            UpdateToolBarButtons(this.nivelNavigator1.SelectedItems[0]);
                        }
                        PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase"), PersistencyHelper.determinaNuvem("ObjetoDigital") }));

                        ((frmMain)TopLevelControl).LeaveWaitMode();
                    }
                }
                else
                {
                    Debug.Assert(false, "Should never happen. There must be a relation with an upper Nivel.");
                }
            }
            else
            {
                // Entre todos os outros tipos de nível proceder normalmente
                if ((nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.D ||
                     nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.SD) &&
                    NiveisHelper.NivelFoiMovimentado(nRow.ID))
                {
                    if (MessageBox.Show(
                            "Por favor tenha em atenção que este nível documental já foi " + System.Environment.NewLine +
                            "requisitado/devolvido. Ao remover nível documental serão perdidos " + System.Environment.NewLine +
                            "todos os seus registos referentes a requisições e devoluções.", "Eliminação de nível documental", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)
                    {
                        return;
                    }
                }

                ((frmMain)TopLevelControl).EnterWaitMode();

                CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]);

                PersistencyHelper.canDeleteRHRowPreConcArguments argsPca = new PersistencyHelper.canDeleteRHRowPreConcArguments();
                argsPca.nRowID       = nRow.ID;
                argsPca.nUpperRowID  = nUpperRow.ID;
                argsPca.rhRowID      = 0;
                argsPca.rhRowIDUpper = 0;
                PersistencyHelper.DeleteIDXPreSaveArguments argsPsa = new PersistencyHelper.DeleteIDXPreSaveArguments();
                argsPsa.ID = nRow.ID;

                // actualizar objecto digital caso exista
                var preTransactionAction = new PreTransactionAction();
                var args = new PersistencyHelper.FedoraIngestPreTransactionArguments();
                preTransactionAction.args = args;

                preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs)
                {
                    bool   ingestSuccess = true;
                    string msg           = null;

                    var odsToIngest = FedoraHelper.DeleteObjDigital(nRow);
                    odsToIngest.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg));

                    preTransactionArgs.cancelAction = !ingestSuccess;
                    preTransactionArgs.message      = msg;
                };

                PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, argsPca, Nivel.DeleteNivelXInDataBase, argsPsa, preTransactionAction);
                PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase") }));
                if (argsPca.deleteSuccessful)
                {
                    if (successfulSave == PersistencyHelper.SaveResult.successful)
                    {
                        List <string> IDNiveis = new List <string>();
                        IDNiveis.Add(argsPsa.ID.ToString());
                        GISA.Search.Updater.updateNivelDocumental(IDNiveis);
                        if (nRow.RowState == DataRowState.Detached)
                        {
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(argsPsa.ID);
                        }
                        else
                        {
                            GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID);
                        }

                        this.nivelNavigator1.RemoveSelectedLVItem();
                    }
                }
                else
                {
                    MessageBox.Show(argsPca.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                ((frmMain)TopLevelControl).LeaveWaitMode();
            }

            UpdateToolBarButtons();
        }
Exemplo n.º 20
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;
            }
        }