public override void Deactivate()
		{
			CurrentFRDBase = null;
			CurrentSFRDAvaliacao = null;
            GUIHelper.GUIHelper.clearField(lvwDocumentos);
            updateResultsTimer.Stop();
            RemoveHandlers();
			DestinoFinalAgregado = -2;
			PublicacaoAgregada = -2;
			AutoEliminacaoAgregado = Convert.ToInt64(AgregacaoAEResult.SemSeleccao);
			grpDocumentos.Text = "Documentos";
            GUIHelper.GUIHelper.clearField(lvwUnidadesFisicas);
			grpUnidadesFisicas.Text = "Unidades físicas";
			cbDestinoFinal.DataSource = null;
            GUIHelper.GUIHelper.clearField(cbDestinoFinal);
            GUIHelper.GUIHelper.clearField(chkPublicar);
			btnAnterior_Click(this, new System.EventArgs());
            GUIHelper.GUIHelper.clearField(lvwSeleccaoUnidadesFisicas);
			ControlAutoEliminacao1.cbAutoEliminacao.DataSource = null;
            GUIHelper.GUIHelper.clearField(ControlAutoEliminacao1.cbAutoEliminacao);
            
            if (DocumentosAssociados != null) 
                DocumentosAssociados.Clear();

            if (UnidadesFisicasAssociadas != null) 
                UnidadesFisicasAssociadas.Clear();

            if (lvItemsDocumentos != null) 
                lvItemsDocumentos.Clear();

            if (UfsDocsAssoc != null) 
                UfsDocsAssoc.Clear();

            if (UfsSeriesAssoc != null) 
                UfsSeriesAssoc.Clear();

            if (AvaliacaoDocs != null) 
                AvaliacaoDocs.Clear();
		}
예제 #2
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);
        }
		public override void LoadData(DataRow CurrentDataRow, IDbConnection conn)
		{
			IsLoaded = false;
			isInactiveEstruturalPanel = false;
			CurrentFRDBase = (GISADataset.FRDBaseRow)CurrentDataRow;
			GISADataset.RelacaoHierarquicaRow rhRow = null;
			rhRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0];

            // não se carrega a row referente à avaliação do nível selecionado quando existe uma em memória e modificada; nos
            // casos restantes essa row é carregada ou criada uma nova
            GISADataset.SFRDAvaliacaoRow[] avaliacaoRows = null;
            avaliacaoRows = CurrentFRDBase.GetSFRDAvaliacaoRows();
            if (avaliacaoRows.Length != 0)
            {
                CurrentSFRDAvaliacao = CurrentFRDBase.GetSFRDAvaliacaoRows()[0];

                if (CurrentSFRDAvaliacao.RowState == DataRowState.Unchanged)
                    FRDRule.Current.LoadCurrentFRDAvaliacao(GisaDataSetHelper.GetInstance(), CurrentFRDBase.ID, conn);
            }
            else
            {
                FRDRule.Current.LoadCurrentFRDAvaliacao(GisaDataSetHelper.GetInstance(), CurrentFRDBase.ID, conn);

                avaliacaoRows = CurrentFRDBase.GetSFRDAvaliacaoRows();
                if (avaliacaoRows.Length != 0)
                    CurrentSFRDAvaliacao = CurrentFRDBase.GetSFRDAvaliacaoRows()[0];
                else
                {
                    // Criar um SFRDAvaliação caso não exista ainda
                    CurrentSFRDAvaliacao = GisaDataSetHelper.GetInstance().SFRDAvaliacao.NewSFRDAvaliacaoRow();
                    CurrentSFRDAvaliacao.FRDBaseRow = CurrentFRDBase;
                    CurrentSFRDAvaliacao.IDPertinencia = 1;
                    CurrentSFRDAvaliacao.IDDensidade = 1;
                    CurrentSFRDAvaliacao.IDSubdensidade = 1;
                    CurrentSFRDAvaliacao.AvaliacaoTabela = false;
                    CurrentSFRDAvaliacao.Publicar = false;
                    GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(CurrentSFRDAvaliacao);
                }
            }

            // uma vez que nenhuma informação é apresentada, o booleano IsLoaded continua a false (para o 
            // caso das séries dá jeito porque o estarem avaliadas ou não influencia o facto do painel estar 
            // enabled ou não)
			if ( rhRow.IDTipoNivelRelacionado != TipoNivelRelacionado.SR && 
                 rhRow.IDTipoNivelRelacionado != TipoNivelRelacionado.SSR && 
                 rhRow.IDTipoNivelRelacionado != TipoNivelRelacionado.D && 
                 rhRow.NivelRowByNivelRelacaoHierarquicaUpper.IDTipoNivel == TipoNivel.ESTRUTURAL )
			{
				grpConteudoPasso1.Enabled = false;
				grpConteudoPasso2.Enabled = false;
				btnProximo.Enabled = false;
				btnAnterior.Enabled = false;
				return;
			}
			else
			{
                grpConteudoPasso1.Enabled = true;
                grpConteudoPasso2.Enabled = true;
                btnProximo.Enabled = true;
                btnAnterior.Enabled = true;
                // no caso do nível documental selecionado ser uma (sub)série, este painel só pode estar activo caso esta
                // esteja avaliada
                if ( !((rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SR || 
                        rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR ) &&
                    !CurrentSFRDAvaliacao.IsPreservarNull()) )
                {
                    isInactiveEstruturalPanel = true;
                    GUIHelper.GUIHelper.makeReadOnly(this);
                    return;
                }
			}
            
            if (CurrentFRDBase.NivelRow.TipoNivelRow.ID == TipoNivel.DOCUMENTAL)
			{
                ControlAutoEliminacao1.ContentsEnabled = false;

                DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetUfsEDocsAssociados(CurrentFRDBase.NivelRow.ID, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.ID, conn);
                DocumentosAssociados = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetDocsAssoc();
                UnidadesFisicasAssociadas = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetUfsAssoc();
                UfsDocsAssoc = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetUfsDocsAssoc();
                UfsSeriesAssoc = DBAbstractDataLayer.DataAccessRules.NivelRule.Current.GetUfsSeriesAssoc();

                //fazer load de informação necessária cruzada com os resultados nas tabelas temporárias calculadas anteriormente
                long startTicks = DateTime.Now.Ticks;
                FRDRule.Current.LoadPanelAvaliacaoDocumentosUnidadesFisicasData(GisaDataSetHelper.GetInstance(), CurrentFRDBase.ID, CurrentFRDBase.NivelRow.ID, Convert.ToInt64(CurrentFRDBase.IDTipoFRDBase), Convert.ToInt64(TipoFRDBase.FRDUnidadeFisica), PermissoesHelper.GrpAcessoPublicados.ID, conn);
                Debug.WriteLine("<<LoadPanelAvaliacaoDocumentosUnidadesFisicasData>>: " + new TimeSpan(DateTime.Now.Ticks - startTicks).ToString());

                GUIHelper.GUIHelper.makeReadable(this);
			}
			else
			{
				isInactiveEstruturalPanel = true;
                GUIHelper.GUIHelper.makeReadOnly(this);
			}
			IsLoaded = true;
		}
		public override void ModelToView()
		{
			IsPopulated = false;
			GISADataset.SFRDAvaliacaoRow[] avaliacaoRows = null;
			avaliacaoRows = CurrentFRDBase.GetSFRDAvaliacaoRows();
			if (avaliacaoRows.Length != 0)
			{
				CurrentSFRDAvaliacao = CurrentFRDBase.GetSFRDAvaliacaoRows()[0];
			}
			else
			{
				// Criar um SFRDAvaliação caso não exista ainda
				CurrentSFRDAvaliacao = GisaDataSetHelper.GetInstance().SFRDAvaliacao. NewSFRDAvaliacaoRow();
				CurrentSFRDAvaliacao.FRDBaseRow = CurrentFRDBase;
				CurrentSFRDAvaliacao.IDPertinencia = 1;
				CurrentSFRDAvaliacao.IDDensidade = 1;
				CurrentSFRDAvaliacao.IDSubdensidade = 1;
				CurrentSFRDAvaliacao.Publicar = false;
                CurrentSFRDAvaliacao.AvaliacaoTabela = false;
				GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(CurrentSFRDAvaliacao);
			}

			cbNivel.DataSource = GisaDataSetHelper.GetInstance().TipoPertinencia;
			cbNivel.DisplayMember = "Designacao";
			try
			{
				cbNivel.ValueMember = "ID";
			}
			catch (Exception Ex)
			{
				MessageBox.Show(Ex.Message);
			}

			cbInforAnaliseTipo.DataSource = GisaDataSetHelper.GetInstance().TipoDensidade;
			cbInforAnaliseTipo.DisplayMember = "Designacao";
			cbInforAnaliseTipo.ValueMember = "ID";

            cbInforAnaliseSubTipo.DataSource = GisaDataSetHelper.GetInstance().TipoSubDensidade;
			cbInforAnaliseSubTipo.DisplayMember = "Designacao";
			cbInforAnaliseSubTipo.ValueMember = "ID";

			cbFrequenciaUso.DataSource = PonderacoesTable;
			cbFrequenciaUso.DisplayMember = "Designacao";
			cbFrequenciaUso.ValueMember = "ID";

			DataTable dt2 = new DataTable();
			dt2.Columns.Add("ID", typeof(int));
			dt2.Columns.Add("Designacao", typeof(string));
			dt2.Rows.Add(new object[] {-1, ""});
			dt2.Rows.Add(new object[] {1, "Conservação"});
			dt2.Rows.Add(new object[] {0, "Eliminação"});
			cbDestinoFinal.DisplayMember = "Designacao";
			cbDestinoFinal.ValueMember = "ID";
			cbDestinoFinal.DataSource = dt2;

            PopulateDiploma();
            if (CurrentSFRDAvaliacao.IsRefTabelaAvaliacaoNull())
                txtRef.Text = string.Empty;
            else
                txtRef.Text = CurrentSFRDAvaliacao.RefTabelaAvaliacao.ToString();

			GISADataset.RelacaoHierarquicaRow rhRow = null;
			rhRow = TipoNivelRelacionado.GetPrimeiraRelacaoEncontrada(CurrentFRDBase.NivelRow);

			// definir estados dos controlos mediante o tipo de avaliação selecionado
			if (! CurrentSFRDAvaliacao.AvaliacaoTabela)
			{
				cbModeloAvaliacao.SelectedValue = -1;
				chkModeloAvaliacao.Checked = false;
				EnableChangeAvaliacaoControls(true);

                //// se o contexto selecionado for um documento que constitua uma série, só é permitido avaliá-lo segundo
                //// um modelo de avaliação caso a sua série (ou sub-série) esteja igualmente avaliada dessa forma
                //if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.D && rhRow.NivelRowByNivelRelacaoHierarquicaUpper.IDTipoNivel == TipoNivel.DOCUMENTAL)
                //{
                //    GISADataset.SFRDAvaliacaoRow[] parentSFRDAvaliacaoRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper.GetFRDBaseRows()[0].GetSFRDAvaliacaoRows();

                //    if (parentSFRDAvaliacaoRow.Length > 0 && parentSFRDAvaliacaoRow[0].AvaliacaoTabela)
                //        chkModeloAvaliacao.Enabled = true;
                //    else
                //    {
                //        // se o caso descrito a cima não se verificar impede-se que o documento possa ser avaliado segundo um 
                //        // modelo de avaliação
                //        chkModeloAvaliacao.Enabled = false;
                //    }
                //}
			}
			else
			{
				chkModeloAvaliacao.Checked = true;
				EnableChangeAvaliacaoControls(false);
			}

			// popular modelos de avaliação
			ArrayList modelosAvaliacaoData = new ArrayList();
			if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.D && rhRow.NivelRowByNivelRelacaoHierarquicaUpper.IDTipoNivel == TipoNivel.DOCUMENTAL)
			{
                //// o contexto selecionado é um documento que constitui uma série

                //GISADataset.SFRDAvaliacaoRow[] parentSFRDAvaliacaoRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper.GetFRDBaseRows()[0].GetSFRDAvaliacaoRows();

                //if (parentSFRDAvaliacaoRow.Length == 0 || (! CurrentSFRDAvaliacao.AvaliacaoTabela && (! (parentSFRDAvaliacaoRow[0].AvaliacaoTabela) || (parentSFRDAvaliacaoRow[0].AvaliacaoTabela && parentSFRDAvaliacaoRow[0].IsIDModeloAvaliacaoNull()))))
                //{
                //    // nem o documento nem a sua série (ou sub-série) estão avaliados por tabelas de avaliação (ou a série ou sub-série 
                //    // estão por avaliar mas no modo de avaliação por tabelas); neste caso não é necessário adicionar 
                //    // qualquer elemento à cbModeloAvaliacao
                //}
                //else if (! CurrentSFRDAvaliacao.AvaliacaoTabela && parentSFRDAvaliacaoRow[0].AvaliacaoTabela && ! (parentSFRDAvaliacaoRow[0].IsIDModeloAvaliacaoNull()))
                //{
                //    // o documento não está avaliado segundo uma tabela de avaliação mas a sua série (ou sub-série) está

                //    modelosAvaliacaoData.Add(parentSFRDAvaliacaoRow[0].ModelosAvaliacaoRow);
                //    cbModeloAvaliacao.DataSource = modelosAvaliacaoData;
                //    cbModeloAvaliacao.DisplayMember = "Designacao";
                //    cbModeloAvaliacao.ValueMember = "ID";
                //}
                //else if (CurrentSFRDAvaliacao.AvaliacaoTabela && (! (parentSFRDAvaliacaoRow[0].AvaliacaoTabela) || (parentSFRDAvaliacaoRow[0].AvaliacaoTabela && parentSFRDAvaliacaoRow[0].IsIDModeloAvaliacaoNull())))
                //{
                //    if (CurrentSFRDAvaliacao.ModelosAvaliacaoRow == null)
                //    {
                //        var ma = (GISADataset.ModelosAvaliacaoRow)(GisaDataSetHelper.GetInstance().ModelosAvaliacao.NewRow());
                //        ma.ID = -1;
                //        ma.Designacao = "";
                //        modelosAvaliacaoData.Add(ma);
                //        CurrentSFRDAvaliacao.ModelosAvaliacaoRow = ma;
                //    }
                //    else
                //        modelosAvaliacaoData.Add(CurrentSFRDAvaliacao.ModelosAvaliacaoRow);

                //    originalModeloAvaliacao = CurrentSFRDAvaliacao.ModelosAvaliacaoRow.ID;
                //    cbModeloAvaliacao.SelectedValue = originalModeloAvaliacao;
                //    cbModeloAvaliacao.DataSource = modelosAvaliacaoData;
                //    cbModeloAvaliacao.DisplayMember = "Designacao";
                //    cbModeloAvaliacao.ValueMember = "ID";
                //}
                //else if (CurrentSFRDAvaliacao.AvaliacaoTabela && parentSFRDAvaliacaoRow[0].AvaliacaoTabela && ! (parentSFRDAvaliacaoRow[0].IsIDModeloAvaliacaoNull()))
                //{
                //    // documento avaliado segundo uma tabela de avaliação mais antiga que aquela utilizada na sua série (ou
                //    // sub-série)
                //    if (CurrentSFRDAvaliacao.ModelosAvaliacaoRow == null)
                //    {
                //        var ma = (GISADataset.ModelosAvaliacaoRow)(GisaDataSetHelper.GetInstance().ModelosAvaliacao.NewRow());
                //        ma.ID = -1;
                //        ma.Designacao = "";
                //        modelosAvaliacaoData.Add(ma);
                //        CurrentSFRDAvaliacao.ModelosAvaliacaoRow = ma;
                //    }
                //    else
                //        modelosAvaliacaoData.Add(CurrentSFRDAvaliacao.ModelosAvaliacaoRow);

                //    if ((CurrentSFRDAvaliacao.ModelosAvaliacaoRow == null) || (CurrentSFRDAvaliacao.ModelosAvaliacaoRow.ID != parentSFRDAvaliacaoRow[0].ModelosAvaliacaoRow.ID))
                //    {
                //        modelosAvaliacaoData.Add(parentSFRDAvaliacaoRow[0].ModelosAvaliacaoRow);
                //        originalModeloAvaliacao = parentSFRDAvaliacaoRow[0].ModelosAvaliacaoRow.ID;
                //    }
                //    cbModeloAvaliacao.Enabled = true;
                //    cbDestinoFinal.Enabled = false;
                //    cbModeloAvaliacao.SelectedValue = originalModeloAvaliacao;
                //    cbModeloAvaliacao.DataSource = modelosAvaliacaoData;
                //    cbModeloAvaliacao.DisplayMember = "Designacao";
                //    cbModeloAvaliacao.ValueMember = "ID";
                //}
                //else
                //    Debug.Assert(false, "Situação não prevista");
			}
			else if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SD)
			{
				// não é necessário adicionar qualquer elemento à combobox devido ao facto de os sub-documentos não 
				// serem alvo de avaliação individual
			}
			else
			{
				// nos casos restantes (séries, sub-séries e documentos soltos) é necessário adicionar todos os elementos
				// disponíveis
				GISADataset.ModelosAvaliacaoRow modAvRow = (GISADataset.ModelosAvaliacaoRow)(GisaDataSetHelper.GetInstance().ModelosAvaliacao.NewRow());
				modAvRow.ID = -1;
				modAvRow.Designacao = "";
				modelosAvaliacaoData.Add(modAvRow);

				long lstModelosID = GetMostRecentList();
				if (lstModelosID > 0)
				{
					//'Limpar a id -1
					//modelosAvaliacaoData.Clear()
					modelosAvaliacaoData.AddRange(GisaDataSetHelper.GetInstance().ModelosAvaliacao.Select("IDListaModelosAvaliacao=" + lstModelosID.ToString()));
				}
				cbModeloAvaliacao.DataSource = modelosAvaliacaoData;
				cbModeloAvaliacao.DisplayMember = "Designacao";
				cbModeloAvaliacao.ValueMember = "ID";

				if (CurrentSFRDAvaliacao.IsIDModeloAvaliacaoNull())
					originalModeloAvaliacao = -1;
				else
					originalModeloAvaliacao = CurrentSFRDAvaliacao.IDModeloAvaliacao;

				cbModeloAvaliacao.SelectedValue = originalModeloAvaliacao;
			}

			chkPublicar.Checked = CurrentSFRDAvaliacao.Publicar;

			if (! CurrentSFRDAvaliacao.IsObservacoesNull())
				txtObservacoes.Text = CurrentSFRDAvaliacao.Observacoes;
			else
				txtObservacoes.Text = string.Empty;

			UpdateLstVwInforRelacionadaButtonsState();
			UpdatePanel();

			AddHandlersAvaliacao();

			IsPopulated = true;
		}