public ActionResult Reporte(FechaInicioFin model)
        {
            DateTime fechaFin = model.Fin;

            fechaFin = fechaFin.AddDays(1);


            DateTime fechaInicio      = model.Inicio;
            var      primerDiaDelAnio = new DateTime(DateTime.Now.Year, 1, 1);


            var workCenters  = db.WorkCenters.ToList();
            var desperdicios = db.Desperdicios.Where(x => (x.Fecha >= fechaInicio && x.Fecha <= fechaFin)).ToList();
            var objetivos    = db.ObjetivosCRR.Select(x => x).Where(x => (x.FechaInicial >= primerDiaDelAnio)).ToList();
            var volumenes    = db.VolumenesDeProduccion.Where(x => (x.Fecha <= fechaFin && x.Fecha >= fechaInicio)).ToList();

            IList <CRRPorWorkCenter> listadelistas = new List <CRRPorWorkCenter>();

            foreach (var item in workCenters)
            {
                CRRPorWorkCenter crrPorWorkCenter = new CRRPorWorkCenter();
                crrPorWorkCenter.WorkCenter = item;
                var desperdicioTotal = desperdicios
                                       .Where(x => (x.IdWorkCenter == item.Id))
                                       .GroupBy(rd => rd.Code_FA, rd => rd.Cantidad, (code, cant) => new DesperdicioView
                {
                    Code_FA  = code,
                    Cantidad = cant.Sum()
                })
                                       .ToList();

                var VolumenesTotal = volumenes
                                     .Where(x => (x.IdWorkCenter == item.Id))
                                     .GroupBy(rd => rd.Code_FA, rd => rd.New_Qty, (code, cant) => new DesperdicioView
                {
                    Code_FA  = code,
                    Cantidad = Math.Round((desperdicios.Where(d => d.Code_FA == code && d.IdWorkCenter == item.Id).Select(d => d.Cantidad).Sum() / (cant.Sum() * 1000)), 2)
                })
                                     .ToList();

                crrPorWorkCenter.Desperdicio = new List <DesperdicioView>();
                crrPorWorkCenter.Desperdicio = VolumenesTotal;

                listadelistas.Add(crrPorWorkCenter);
            }

            return(PartialView(listadelistas));
        }
        public ActionResult ReporteAnual(FechaInicioFin model)
        {
            DateTime fechaFin = model.Fin;

            fechaFin = fechaFin.AddDays(1);

            DateTime fechaInicio      = model.Inicio;
            var      primerDiaDelAnio = new DateTime(DateTime.Now.Year, 1, 1);

            var businessUnits = db.BussinesUnits.ToList();
            var desperdicios  = db.Desperdicios.Where(x => (x.Fecha >= fechaInicio && x.Fecha <= fechaFin)).ToList();
            var objetivos     = db.ObjetivosCRR.Select(x => x).Where(x => (x.FechaInicial >= primerDiaDelAnio)).ToList();
            var volumenes     = db.VolumenesDeProduccion.Include(x => x.WorkCenter).Where(x => (x.Fecha <= fechaFin && x.Fecha >= fechaInicio)).ToList();
            var planes        = db.PlanDeProduccion.Where(x => (x.Inicio <= fechaInicio && x.Fin >= fechaFin)).ToList();

            IList <CRRPorBusinessUnit> listaBU = new List <CRRPorBusinessUnit>();

            foreach (var businessUnit in businessUnits)
            {
                CRRPorBusinessUnit crrPorBusinessUnit = new CRRPorBusinessUnit();
                crrPorBusinessUnit.BusinessUnit = businessUnit;

                var workCenters = db.WorkCenters.Where(w => (w.IdBussinesUnit == businessUnit.Id)).ToList();

                var VolumenesBU = volumenes
                                  .Where(x => (x.WorkCenter.IdBussinesUnit == businessUnit.Id))
                                  .GroupBy(rd => rd.Code_FA, rd => rd.New_Qty, (code, cant) => new ReporteTotalView
                {
                    Code_FA           = code,
                    CRR               = Math.Round((desperdicios.Where(d => d.Code_FA == code && d.WorkCenter.IdBussinesUnit == businessUnit.Id).Select(d => d.Cantidad).Sum() / (cant.Sum() * 1000)), 2),
                    PlanProduccion    = Math.Round((planes.Where(d => d.Code_FA == code && d.WorkCenterEfectivo.IdBussinesUnit == businessUnit.Id).Select(d => d.Cantidad).Sum()), 2),
                    VolumenProduccion = Math.Round(cant.Sum() * 1000, 2)
                })
                                  .ToList();

                IList <CRRPorWorkCenter> listadelistas = new List <CRRPorWorkCenter>();
                foreach (var item in workCenters)
                {
                    CRRPorWorkCenter crrPorWorkCenter = new CRRPorWorkCenter();
                    crrPorWorkCenter.WorkCenter = item;

                    var VolumenesTotal = volumenes
                                         .Where(x => (x.IdWorkCenter == item.Id))
                                         .GroupBy(rd => rd.Code_FA, rd => rd.New_Qty, (code, cant) => new ReporteTotalView
                    {
                        Code_FA           = code,
                        CRR               = Math.Round((desperdicios.Where(d => d.Code_FA == code && d.IdWorkCenter == item.Id).Select(d => d.Cantidad).Sum() / (cant.Sum() * 1000)), 2),
                        PlanProduccion    = Math.Round((planes.Where(d => d.Code_FA == code && d.IdWorkCenter == item.Id).Select(d => d.Cantidad).Sum()), 2),
                        VolumenProduccion = Math.Round(cant.Sum() * 1000, 2)
                    })
                                         .ToList();

                    crrPorWorkCenter.Valores = new List <ReporteTotalView>();
                    crrPorWorkCenter.Valores = VolumenesTotal;
                    listadelistas.Add(crrPorWorkCenter);
                }

                crrPorBusinessUnit.Valores            = new List <ReporteTotalView>();
                crrPorBusinessUnit.Valores            = VolumenesBU;
                crrPorBusinessUnit.ValoresWorkCenters = new List <CRRPorWorkCenter>();
                crrPorBusinessUnit.ValoresWorkCenters = listadelistas;
                listaBU.Add(crrPorBusinessUnit);
            }

            return(PartialView(listaBU));
        }