Пример #1
0
        public static void HandleUF(PersistencyHelper.PreConcArguments args)
        {
            PersistencyHelper.AddEditUFPreConcArguments           aeufpca = null;
            PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments psa     = null;
            aeufpca = (PersistencyHelper.AddEditUFPreConcArguments)args;
            psa     = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)aeufpca.psa;
            psa.cancelSetNewCodigo = false;
            aeufpca.message        = string.Empty;

            GISADataset.RelacaoHierarquicaRow rhufRow = null;
            if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper)).Length > 0)
            {
                rhufRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper))[0]);
            }
            else if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper), "", DataViewRowState.Deleted).Length > 0)
            {
                rhufRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.rhufRowID, aeufpca.rhufRowIDUpper), "", DataViewRowState.Deleted)[0]);
            }

            GISADataset.NivelDesignadoRow ndufRow    = (GISADataset.NivelDesignadoRow)(GisaDataSetHelper.GetInstance().NivelDesignado.Select("ID=" + aeufpca.ndufRowID.ToString())[0]);
            GISADataset.NivelRow          nivelUFRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + aeufpca.nivelUFRowID.ToString())[0]);

            if (aeufpca.Operation == PersistencyHelper.AddEditUFPreConcArguments.Operations.Create || aeufpca.Operation == PersistencyHelper.AddEditUFPreConcArguments.Operations.CreateLike)
            {
                GISADataset.NivelUnidadeFisicaRow nufufRow = (GISADataset.NivelUnidadeFisicaRow)(GisaDataSetHelper.GetInstance().NivelUnidadeFisica.Select("ID=" + aeufpca.nufufRowID.ToString())[0]);
                // validar criação de UF
                if (DBAbstractDataLayer.DataAccessRules.UFRule.Current.isNivelRowDeleted(rhufRow.NivelRowByNivelRelacaoHierarquicaUpper.ID, aeufpca.tran))
                {
                    var tempgisaBackup = aeufpca.gisaBackup;
                    PersistencyHelper.BackupRow(ref tempgisaBackup, nufufRow);
                    aeufpca.gisaBackup = tempgisaBackup;
                    nufufRow.RejectChanges();

                    PersistencyHelper.BackupRow(ref tempgisaBackup, rhufRow);
                    aeufpca.gisaBackup = tempgisaBackup;
                    rhufRow.RejectChanges();

                    PersistencyHelper.BackupRow(ref tempgisaBackup, ndufRow);
                    aeufpca.gisaBackup = tempgisaBackup;
                    ndufRow.RejectChanges();

                    PersistencyHelper.BackupRow(ref tempgisaBackup, nivelUFRow);
                    aeufpca.gisaBackup = tempgisaBackup;
                    nivelUFRow.RejectChanges();

                    List <DataRow> lstRows = new List <DataRow>();
                    // recolher rows para fazer backup caso a operação seja "CREATE LIKE"
                    if (aeufpca.Operation == PersistencyHelper.AddEditUFPreConcArguments.Operations.CreateLike)
                    {
                        lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDDatasProducao.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString()));
                        lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDUFCota.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString()));
                        lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString()));
                        lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDUFDescricaoFisica.Select("IDFRDBase=" + aeufpca.frdufRowID.ToString()));

                        foreach (long uaAssociadaID in aeufpca.uaAssociadas)
                        {
                            lstRows.AddRange(GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.Select(string.Format("IDFRDBase={0} AND IDNivel={1}", uaAssociadaID, aeufpca.nivelUFRowID)));
                        }
                    }
                    lstRows.AddRange(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + aeufpca.frdufRowID.ToString()));

                    PersistencyHelper.BackupRows(ref tempgisaBackup, lstRows);
                    aeufpca.gisaBackup = tempgisaBackup;

                    aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.NewUF;
                    aeufpca.message        = "A entidade produtora que pretende associar à unidade física foi eliminada por outro utilizador. Esta operação não poderá, por isso, ser concluída.";
                    psa.cancelSetNewCodigo = true;
                    aeufpca.continueSave   = false;
                }
            }
            else
            {
                // validar edição de UF
                bool isUFDeleted = DBAbstractDataLayer.DataAccessRules.UFRule.Current.isNivelRowDeleted(nivelUFRow.ID, aeufpca.tran);
                // verificar se a UF a editar não foi apagada por outro utilizador
                if (isUFDeleted)
                {
                    System.Data.DataSet tempgisaBackup6 = aeufpca.gisaBackup;
                    PersistencyHelper.BackupRow(ref tempgisaBackup6, ndufRow);
                    aeufpca.gisaBackup = tempgisaBackup6;
                    ndufRow.RejectChanges();
                    System.Data.DataSet tempgisaBackup7 = aeufpca.gisaBackup;
                    PersistencyHelper.BackupRow(ref tempgisaBackup7, nivelUFRow);
                    aeufpca.gisaBackup = tempgisaBackup7;
                    nivelUFRow.RejectChanges();
                    aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.EditEDAndDesignacao;
                    aeufpca.message        = "A unidade física em edição foi eliminada por outro utilizador. " + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída.";
                    psa.cancelSetNewCodigo = true;
                    aeufpca.continueSave   = false;
                    return;
                }

                // Verificar se se pretende alterar a entidade detentora associada
                bool isRelacaoHierarquicaDeleted = false;
                if (rhufRow.RowState == DataRowState.Deleted)
                {
                    isRelacaoHierarquicaDeleted = DBAbstractDataLayer.DataAccessRules.UFRule.Current.isRelacaoHierarquicaDeleted(aeufpca.rhufRowID, aeufpca.rhufRowIDUpper, aeufpca.tran);
                }
                else
                {
                    // a operação pretendida é editar a designação da UF e por esse motivo não é necessário
                    // atribuir um novo código (a operação não é create e a entidade detentora não foi alterada)
                    psa.cancelSetNewCodigo = true;
                    aeufpca.continueSave   = false;
                }

                GISADataset.RelacaoHierarquicaRow[] newRhufRow = (GISADataset.RelacaoHierarquicaRow[])(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", aeufpca.newRhufRowID, aeufpca.newRhufRowIDUpper)));
                // Verificar se outro utilizador também alterou (concorrentemente) a entidade detentora associada
                if (isRelacaoHierarquicaDeleted)
                {
                    System.Data.DataSet tempgisaBackup8 = aeufpca.gisaBackup;
                    PersistencyHelper.BackupRow(ref tempgisaBackup8, newRhufRow[0]);
                    aeufpca.gisaBackup = tempgisaBackup8;
                    newRhufRow[0].RejectChanges();
                    System.Data.DataSet tempgisaBackup9 = aeufpca.gisaBackup;
                    PersistencyHelper.BackupRow(ref tempgisaBackup9, rhufRow);
                    aeufpca.gisaBackup = tempgisaBackup9;
                    rhufRow.RejectChanges();
                    System.Data.DataSet tempgisaBackup10 = aeufpca.gisaBackup;
                    PersistencyHelper.BackupRow(ref tempgisaBackup10, nivelUFRow);
                    aeufpca.gisaBackup = tempgisaBackup10;
                    nivelUFRow.RejectChanges();
                    aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.EditOriginalEd;
                    aeufpca.message        = "A entidade detentora da unidade física em edição foi alterada por outro utilizador." + Environment.NewLine + "Esta operação não poderá, por isso, ser concluída.";
                    psa.cancelSetNewCodigo = true;
                    aeufpca.continueSave   = false;
                }
                else if (newRhufRow.Length > 0) // se tivermos alterado a entidade detentora da uf
                {
                    // verificar se a ED a associar à UF não foi apagada por outro utilizador
                    if (DBAbstractDataLayer.DataAccessRules.UFRule.Current.isNivelRowDeleted(newRhufRow[0].NivelRowByNivelRelacaoHierarquicaUpper.ID, aeufpca.tran))
                    {
                        System.Data.DataSet tempgisaBackup11 = aeufpca.gisaBackup;
                        PersistencyHelper.BackupRow(ref tempgisaBackup11, newRhufRow[0]);
                        aeufpca.gisaBackup = tempgisaBackup11;
                        newRhufRow[0].RejectChanges();
                        System.Data.DataSet tempgisaBackup12 = aeufpca.gisaBackup;
                        PersistencyHelper.BackupRow(ref tempgisaBackup12, rhufRow);
                        aeufpca.gisaBackup = tempgisaBackup12;
                        rhufRow.RejectChanges();
                        System.Data.DataSet tempgisaBackup13 = aeufpca.gisaBackup;
                        PersistencyHelper.BackupRow(ref tempgisaBackup13, nivelUFRow);
                        aeufpca.gisaBackup = tempgisaBackup13;
                        nivelUFRow.RejectChanges();
                        if (!isUFDeleted)
                        {
                            // UF existe mas a ED que se pretende adicionar não
                            aeufpca.OperationError = PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.EditNewEd;
                            aeufpca.message        = "A entidade produtora que pretende associar à unidade física foi eliminada por outro utilizador. Esta operação não poderá, por isso, ser concluída.";
                        }
                        psa.cancelSetNewCodigo = true;
                        aeufpca.continueSave   = false;
                    }
                    //else if (!isUFDeleted)
                    //{
                    //    // Tanto a UF como a ED existem;
                    //    NivelRule.Current.DeleteSFRDUnidadeFisica(nivelUFRow.ID, aeufpca.tran);
                    //    foreach (GISADataset.SFRDUnidadeFisicaRow relacaoRow in nivelUFRow.GetSFRDUnidadeFisicaRows())
                    //    {

                    //        System.Data.DataSet tempgisaBackup14 = aeufpca.gisaBackup;
                    //        PersistencyHelper.BackupRow(ref tempgisaBackup14, relacaoRow);
                    //        aeufpca.gisaBackup = tempgisaBackup14;
                    //        relacaoRow.Delete();
                    //    }
                    //}
                }
            }
        }
Пример #2
0
        public static void ValidateNivelAddAndAssocNewUF(PersistencyHelper.PreConcArguments args)
        {
            PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments pcArgs = null;
            pcArgs = (PersistencyHelper.ValidateNivelAddAndAssocNewUFPreConcArguments)args;

            bool addSuccessful = false;

            pcArgs.argsNivel.tran       = pcArgs.tran;
            pcArgs.argsNivel.gisaBackup = pcArgs.gisaBackup;

            var frdID = long.MinValue;

            if (pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.SR || pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR)
            {
                var argsNivel = pcArgs.argsNivel as PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments;
                EnsureNivelUpperExists(pcArgs.argsNivel);
                pcArgs.message = argsNivel.message;
                addSuccessful  = ((PersistencyHelper.VerifyIfRHNivelUpperExistsPreConcArguments)pcArgs.argsNivel).RHNivelUpperExists;
                frdID          = argsNivel.frdBaseID;
            }
            else if (pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.D || pcArgs.IDTipoNivelRelacionado == TipoNivelRelacionado.SD)
            {
                var argsNivel = pcArgs.argsNivel as PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments;
                ensureUniqueCodigo(pcArgs.argsNivel);
                pcArgs.message = argsNivel.message;
                addSuccessful  = ((PersistencyHelper.EnsureUniqueCodigoNivelPreConcArguments)pcArgs.argsNivel).successful;
                frdID          = argsNivel.frdBaseID;
            }

            if (addSuccessful)
            {
                GISADataset.FRDBaseRow frdNivelDocRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + frdID.ToString())[0]);
                var sfrdDatasProducaoRow = GisaDataSetHelper.GetInstance().SFRDDatasProducao.Cast <GISADataset.SFRDDatasProducaoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdDatasProducaoRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDDatasProducao.AddSFRDDatasProducaoRow(frdNivelDocRow, "", "", "", "", false, "", "", "", "", false, new byte[] { }, 0);
                }
                var sfrdConteudoEEstruturaRow = GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.Cast <GISADataset.SFRDConteudoEEstruturaRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdConteudoEEstruturaRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDConteudoEEstrutura.AddSFRDConteudoEEstruturaRow(frdNivelDocRow, "", "", new byte[] { }, 0);
                }
                var sfrdContextoRow = GisaDataSetHelper.GetInstance().SFRDContexto.Cast <GISADataset.SFRDContextoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdContextoRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDContexto.AddSFRDContextoRow(frdNivelDocRow, "", "", "", false, new byte[] { }, 0);
                }
                var sfrdDocumentacaoAssociadaRow = GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada.Cast <GISADataset.SFRDDocumentacaoAssociadaRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdDocumentacaoAssociadaRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDDocumentacaoAssociada.AddSFRDDocumentacaoAssociadaRow(frdNivelDocRow, "", "", "", "", new byte[] { }, 0);
                }
                var sfrdDimensaoSuporteRow = GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.Cast <GISADataset.SFRDDimensaoSuporteRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdDimensaoSuporteRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDDimensaoSuporte.AddSFRDDimensaoSuporteRow(frdNivelDocRow, "", new byte[] { }, 0);
                }
                var sfrdNotaGeralRow = GisaDataSetHelper.GetInstance().SFRDNotaGeral.Cast <GISADataset.SFRDNotaGeralRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdNotaGeralRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDNotaGeral.AddSFRDNotaGeralRow(frdNivelDocRow, "", new byte[] { }, 0);
                }
                var sfrdAgrupadorRow = GisaDataSetHelper.GetInstance().SFRDAgrupador.Cast <GISADataset.SFRDAgrupadorRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdAgrupadorRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDAgrupador.AddSFRDAgrupadorRow(frdNivelDocRow, "", new byte[] { }, 0);
                }
                var sfrdAvaliacaoRow = GisaDataSetHelper.GetInstance().SFRDAvaliacao.Cast <GISADataset.SFRDAvaliacaoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdAvaliacaoRow == null)
                {
                    var CurrentSFRDAvaliacao = GisaDataSetHelper.GetInstance().SFRDAvaliacao.NewSFRDAvaliacaoRow();
                    CurrentSFRDAvaliacao.FRDBaseRow      = frdNivelDocRow;
                    CurrentSFRDAvaliacao.IDPertinencia   = 1;
                    CurrentSFRDAvaliacao.IDDensidade     = 1;
                    CurrentSFRDAvaliacao.IDSubdensidade  = 1;
                    CurrentSFRDAvaliacao.Publicar        = false;
                    CurrentSFRDAvaliacao.Observacoes     = "";
                    CurrentSFRDAvaliacao.AvaliacaoTabela = false;
                    GisaDataSetHelper.GetInstance().SFRDAvaliacao.AddSFRDAvaliacaoRow(CurrentSFRDAvaliacao);
                }
                var sfrdCondicaoDeAcessoRow = GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.Cast <GISADataset.SFRDCondicaoDeAcessoRow>().Where(r => r.IDFRDBase == frdNivelDocRow.ID).SingleOrDefault();
                if (sfrdCondicaoDeAcessoRow == null)
                {
                    GisaDataSetHelper.GetInstance().SFRDCondicaoDeAcesso.AddSFRDCondicaoDeAcessoRow(frdNivelDocRow, "", "", "", "", new byte[] { }, 0);
                }
            }

            if (addSuccessful && pcArgs.addNewUF)
            {
                GISADataset.FRDBaseRow frdNivelDocRow = (GISADataset.FRDBaseRow)(GisaDataSetHelper.GetInstance().FRDBase.Select("ID=" + pcArgs.IDFRDBaseNivelDoc.ToString())[0]);
                GISADataset.NivelRow   nivelEDRow     = NiveisHelper.GetNivelED(pcArgs.produtor);
                GISADataset.NivelRow   nivelUFRow     = UnidadesFisicasHelper.CreateUF(nivelEDRow, pcArgs.designacaoUFAssociada);

                PersistencyHelper.AddEditUFPreConcArguments           argsPCNewUF = (PersistencyHelper.AddEditUFPreConcArguments)pcArgs.argsUF;
                PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments argsPSNewUF = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)argsPCNewUF.psa;

                argsPCNewUF.nivelUFRowID   = nivelUFRow.ID;
                argsPCNewUF.ndufRowID      = nivelUFRow.ID;
                argsPCNewUF.rhufRowID      = nivelUFRow.ID;
                argsPCNewUF.rhufRowIDUpper = nivelEDRow.ID;
                argsPCNewUF.nufufRowID     = nivelUFRow.ID;
                argsPCNewUF.tran           = pcArgs.tran;

                argsPSNewUF.nivelUFRowID = nivelUFRow.ID;

                HandleUF(argsPCNewUF);

                pcArgs.message = argsPCNewUF.message;

                if (argsPCNewUF.OperationError == PersistencyHelper.AddEditUFPreConcArguments.OperationErrors.NoError)
                {
                    GisaDataSetHelper.GetInstance().SFRDUnidadeFisica.AddSFRDUnidadeFisicaRow(frdNivelDocRow, nivelUFRow, null, new byte[] { }, 0);
                }
            }
            else if (!addSuccessful && pcArgs.addNewUF)
            {
                // caso onde o nível não foi criado e pretendia-se criar unidade física; neste caso cancela-se a atribuição do código
                // à unidade física
                PersistencyHelper.AddEditUFPreConcArguments           argsPCNewUF = (PersistencyHelper.AddEditUFPreConcArguments)pcArgs.argsUF;
                PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments argsPSNewUF = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)argsPCNewUF.psa;
                argsPSNewUF.cancelSetNewCodigo = true;
            }

            pcArgs.continueSave = addSuccessful;
        }