private bool HechoPerteneceAColumna(EntHecho hecho, EstructuraColumnaReporte columna, bool agruparPorUnidad) { if (!columna.Entidad.Equals(hecho.idEntidad)) { return(false); } switch (hecho.periodo.Tipo) { case Period.Duracion: if (!(columna.FechaInicio.Equals(hecho.periodo.FechaInicio) && columna.FechaFin.Equals(hecho.periodo.FechaFin) && ObtenerNombreColumnaMoneda(hecho, agruparPorUnidad) == columna.Moneda)) { return(false); } break; case Period.Instante: if (!(columna.FechaInstante.Equals(hecho.periodo.FechaInstante) && ObtenerNombreColumnaMoneda(hecho, agruparPorUnidad) == columna.Moneda)) { return(false); } break; } /*if (agruparPorUnidad) * { * if (String.IsNullOrEmpty(columna.Moneda)) * { * return false; * } * }*/ return(true); }
private EstructuraColumnaReporte CrearColumnaEncabezado(EntHecho hecho, bool agruparPorUnidad) { EstructuraColumnaReporte columnasEncabezado = new EstructuraColumnaReporte(); columnasEncabezado.FechaInicio = (hecho.periodo.FechaInicio != null ? hecho.periodo.FechaInicio.Value : DateTime.Now); columnasEncabezado.FechaFin = (hecho.periodo.FechaFin != null ? hecho.periodo.FechaFin.Value : DateTime.Now); columnasEncabezado.FechaInstante = (hecho.periodo.FechaInstante != null ? hecho.periodo.FechaInstante.Value : DateTime.Now); columnasEncabezado.Entidad = hecho.idEntidad; columnasEncabezado.EsquemaEntidad = hecho.idEntidad; columnasEncabezado.TipoDePeriodo = hecho.periodo.Tipo; var numeradores = new List <EntMedida>(); var denominadores = new List <EntMedida>(); if (hecho.unidades != null && agruparPorUnidad) { if (hecho.unidades.Medidas != null) { numeradores.AddRange(hecho.unidades.Medidas); } if (hecho.unidades.MedidasNumerador != null) { denominadores.AddRange(hecho.unidades.MedidasNumerador); } columnasEncabezado.Moneda = ""; int idx = 0; foreach (var numerador in numeradores) { if (idx > 0) { columnasEncabezado.Moneda += ", "; } columnasEncabezado.Moneda += numerador.Nombre; idx++; } if (denominadores.Count > 0) { columnasEncabezado.Moneda += " / "; } idx = 0; foreach (var denom in denominadores) { if (idx > 0) { columnasEncabezado.Moneda += ", "; } columnasEncabezado.Moneda += denom.Nombre; idx++; } } else { columnasEncabezado.Moneda = null; } return(columnasEncabezado); }
/// <summary> /// Busca el indice de la relación periodo del hecho con las columnas generadas /// </summary> /// <param name="columnas">Lista de columnas que tiene el reporte</param> /// <param name="hecho">Objeto EntHecho </param> /// <param name="agruparPorUnidad">Por default es "True", permite agrupar por Moneda, si es "False" agrupa por Entidad</param> /// <returns></returns> private int BuscarIndexColumna(List <EstructuraColumnaReporte> columnas, EntHecho hecho, bool agruparPorUnidad) { for (int idCol = 0; idCol < columnas.Count; idCol++) { var columna = columnas[idCol]; var unidadHecho = ObtenerNombreColumnaMoneda(hecho, agruparPorUnidad); if (columna.Entidad.Equals(hecho.idEntidad)) { bool coincide = false; switch (hecho.periodo.Tipo) { case Period.Duracion: if ((columna.FechaInicio.Equals(hecho.periodo.FechaInicio) && columna.FechaFin.Equals(hecho.periodo.FechaFin) && unidadHecho == columna.Moneda)) { coincide = true; } break; case Period.Instante: if (columna.FechaInstante.Equals(hecho.periodo.FechaInstante) && unidadHecho == columna.Moneda) { coincide = true; } break; } if (coincide) { if (agruparPorUnidad) { if (columna.Moneda == null) { if (unidadHecho == null) { return(idCol); } } else { //Si columna tiene unidad y hecho tiene unidad, verificar si son compatibles if (unidadHecho != null) { return(idCol); } } } else { return(idCol); } } } } return(-1); }
private string ObtenerNombreColumnaMoneda(EntHecho hecho, bool agruparPorUnidad) { string nombreMoneda = null; var numeradores = new List <EntMedida>(); var denominadores = new List <EntMedida>(); if (hecho.unidades != null && agruparPorUnidad) { if (hecho.unidades.Medidas != null) { numeradores.AddRange(hecho.unidades.Medidas); } if (hecho.unidades.MedidasNumerador != null) { denominadores.AddRange(hecho.unidades.MedidasNumerador); } nombreMoneda = ""; int idx = 0; foreach (var numerador in numeradores) { if (idx > 0) { nombreMoneda += ", "; } nombreMoneda += numerador.Nombre; idx++; } if (denominadores.Count > 0) { nombreMoneda += " / "; } idx = 0; foreach (var denom in denominadores) { if (idx > 0) { nombreMoneda += ", "; } nombreMoneda += denom.Nombre; idx++; } } return(nombreMoneda); }