public static List <EstructuraColumnaReporte> OrdenarFechaDeColumnas(List <EstructuraColumnaReporte> estructuraDeColumnas) { List <EstructuraColumnaReporte> listaEstructuraDeColumnas = new List <EstructuraColumnaReporte>(); List <DateTime> listaFechas = new List <DateTime>(); var ordenamientoFechas = from l in estructuraDeColumnas orderby l.FechaInstante descending, l.FechaInicio descending select l; foreach (var elementoOrdenado in ordenamientoFechas) { EstructuraColumnaReporte estructuraColumnaReporte = new EstructuraColumnaReporte(); estructuraColumnaReporte.Entidad = elementoOrdenado.Entidad; estructuraColumnaReporte.EsquemaEntidad = elementoOrdenado.EsquemaEntidad; estructuraColumnaReporte.FechaFin = elementoOrdenado.FechaFin; estructuraColumnaReporte.FechaInicio = elementoOrdenado.FechaInicio; estructuraColumnaReporte.FechaInstante = elementoOrdenado.FechaInstante; estructuraColumnaReporte.Moneda = elementoOrdenado.Moneda; estructuraColumnaReporte.MonedaId = elementoOrdenado.MonedaId; estructuraColumnaReporte.NombreColumna = elementoOrdenado.NombreColumna; estructuraColumnaReporte.TipoDePeriodo = elementoOrdenado.TipoDePeriodo; listaEstructuraDeColumnas.Add(estructuraColumnaReporte); } return(listaEstructuraDeColumnas); }
/// <summary> /// Crea un objeto de columna encabezado de reporte en base a los datos del hecho enviado como parámetro /// </summary> /// <param name="hecho">Hecho cuyos datos se usan como entrada para crear la columna</param> /// <param name="documentoInstanciaXbrlDto">Documento de instancia del hecho</param> /// <param name="agruparPorUnidad">Indica si la unidad se considera para agrupar o diferenciar columnas</param> /// <returns>La nueva estructura de columnas creada</returns> private EstructuraColumnaReporte CrearColumnaEncabezado(HechoDto hecho, DocumentoInstanciaXbrlDto documentoInstanciaXbrlDto, bool agruparPorUnidad) { var contexto = documentoInstanciaXbrlDto.ContextosPorId[hecho.IdContexto]; EstructuraColumnaReporte columnasEncabezado = new EstructuraColumnaReporte(); columnasEncabezado.FechaInicio = contexto.Periodo.FechaInicio; columnasEncabezado.FechaFin = contexto.Periodo.FechaFin; columnasEncabezado.FechaInstante = contexto.Periodo.FechaInstante; columnasEncabezado.Entidad = contexto.Entidad.Id; columnasEncabezado.EsquemaEntidad = contexto.Entidad.EsquemaId; columnasEncabezado.TipoDePeriodo = contexto.Periodo.Tipo; if (hecho.IdUnidad != null && documentoInstanciaXbrlDto.UnidadesPorId.ContainsKey(hecho.IdUnidad) && agruparPorUnidad) { var unidad = documentoInstanciaXbrlDto.UnidadesPorId[hecho.IdUnidad]; var numeradores = new List <MedidaDto>(); var denominadores = new List <MedidaDto>(); if (unidad.Medidas != null) { numeradores.AddRange(unidad.Medidas); } if (unidad.MedidasNumerador != null) { numeradores.AddRange(unidad.MedidasNumerador); } if (unidad.MedidasDenominador != null) { denominadores.AddRange(unidad.MedidasDenominador); } columnasEncabezado.MonedaId = hecho.IdUnidad; 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++; } } return(columnasEncabezado); }
/// <summary> /// Verifica si un hecho, por los criterios de entidad, fechas y moneda pertenece a una de las columnasde del reporte /// </summary> /// <param name="hecho">Hecho a comparar</param> /// <param name="columna">Columna que se está comparando actualmente</param> /// <param name="agruparPorUnidad">Indica si se desea considerar unidad para generar los grupos de columnas</param> /// <returns>True si el hecho pertenece a la columna, false en otro caso</returns> private bool HechoPerteneceAColumna(HechoDto hecho, DocumentoInstanciaXbrlDto documentoInstanciaXbrlDto, EstructuraColumnaReporte columna, bool agruparPorUnidad) { var contexto = documentoInstanciaXbrlDto.ContextosPorId[hecho.IdContexto]; var unidad = hecho.IdUnidad != null ? documentoInstanciaXbrlDto.UnidadesPorId[hecho.IdUnidad] : (UnidadDto)null; if (!columna.Entidad.Equals(contexto.Entidad.Id)) { return(false); } if (!(columna.FechaInicio.Equals(contexto.Periodo.FechaInicio) && columna.FechaFin.Equals(contexto.Periodo.FechaFin) && columna.FechaInstante.Equals(contexto.Periodo.FechaInstante))) { return(false); } if (agruparPorUnidad) { if (String.IsNullOrEmpty(columna.MonedaId)) { if (unidad != null) { return(false); } } else { if (unidad == null) { return(false); } //Si columna tiene unidad y hecho tiene unidad, verificar si son compatibles var unidadColumna = documentoInstanciaXbrlDto.UnidadesPorId[columna.MonedaId]; if (!unidad.EsEquivalente(unidadColumna)) { return(false); } } } return(true); }