public static void SetCodigo(PersistencyHelper.PreSaveArguments args) { PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments psa = null; psa = (PersistencyHelper.IsCodigoUFBeingUsedPreSaveArguments)args; GISADataset.NivelUnidadeFisicaCodigoRow codRow = null; // a atribuição de um código de referência ocorre quando se cria uma // UF nova ou se está a mudar a ED de uma UF e é atribuído só se não houver // qualquer conflito de concorrência if (!psa.cancelSetNewCodigo) { GISADataset.NivelRow nivelUFRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select("ID=" + psa.nivelUFRowID.ToString())[0]); codRow = UnidadesFisicasHelper.GetNewCodigoRow(nivelUFRow, System.DateTime.Now.Year); decimal newCounterValue = DBAbstractDataLayer.DataAccessRules.UFRule.Current.IsCodigoUFBeingUsed(codRow.ID, codRow.Ano, psa.tran); if (newCounterValue != 0M) { nivelUFRow.Codigo = "UF" + codRow.Ano.ToString() + "-" + newCounterValue.ToString(); } else { nivelUFRow.Codigo = "UF" + codRow.Ano.ToString() + "-" + codRow.Contador.ToString(); } //quer tenha sido adicionada uma entrada na tabela NivelUnidadeFisicaCodigo quer so tenha sido actualizado //o contador de uma das linhas, essa operação foi executada directamente na base de dados pelo que para //manter a coerência é necessário confirmar a mesma operação do lado do dataset codRow.AcceptChanges(); DBAbstractDataLayer.DataAccessRules.UFRule.Current.ReloadNivelUFCodigo(GisaDataSetHelper.GetInstance(), codRow.ID, codRow.Ano, psa.tran); } }
// returns the updated NivelUnidadeFisicaCodigoRow considering a new Codigo public static GISADataset.NivelUnidadeFisicaCodigoRow GetNewCodigoRow(GISADataset.NivelRow nivelRow, int ano) { GISADataset.NivelRow ParentEDRow = nivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper; DataRow[] DataRows = GisaDataSetHelper.GetInstance().NivelUnidadeFisicaCodigo.Select("ID=" + ParentEDRow.ID.ToString() + " AND Ano=" + System.DateTime.Now.Year.ToString()); GISADataset.NivelUnidadeFisicaCodigoRow codigoRow = null; if (DataRows.Length == 0) { codigoRow = GisaDataSetHelper.GetInstance().NivelUnidadeFisicaCodigo.AddNivelUnidadeFisicaCodigoRow(ParentEDRow, System.DateTime.Now.Year, 1M, new byte[] { }, 0); } else { codigoRow = (GISADataset.NivelUnidadeFisicaCodigoRow)(DataRows[0]); codigoRow.Contador = codigoRow.Contador + 1; } return(codigoRow); }