Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }