Esempio n. 1
0
        private void BuscarInfo(DateTime fechaInicio, DateTime fechaTermino)
        {
            eficienciTotal    = new EficienciaPorDiaDto();
            detalleEficiencia = new List <DetalleEficienciaDto>();

            switch (opcion)
            {
            case "Cosecha":
                eficienciTotal = MovimientoCosechaBusiness.GetEfficiencyPerDay(fechaInicio, fechaTermino);
                break;

            case "Secado Inicio":
                eficienciTotal = MovimientoSecadoBusiness.GetEfficiencyPerDay(fechaInicio, fechaTermino, 1);
                break;

            case "Secado Termino":
                eficienciTotal = MovimientoSecadoBusiness.GetEfficiencyPerDay(fechaInicio, fechaTermino, 2);
                break;

            case "Desgrane":
                eficienciTotal = MovimientoDesgraneBusiness.GetEfficiencyPerDay(fechaInicio, fechaTermino);
                break;

            case "Packing":
                eficienciTotal = MovimientoPackingBusiness.GetEfficiencyPerDay(fechaInicio, fechaTermino);
                break;

            case "Shipping":
                break;

            default:
                break;
            }

            detalleEficiencia      = eficienciTotal.Detalle;
            dataEuid.DataSource    = detalleEficiencia;
            dataResumen.DataSource = eficienciTotal.Resumen;
        }
        public static EficienciaPorDiaDto GetEfficiencyPerDay(DateTime fechaInicio, DateTime fechaTermino, int tipo)
        {
            #region Declaración
            EficienciaPorDiaDto         eficienciaTotal = new EficienciaPorDiaDto();
            List <DetalleEficienciaDto> lista           = new List <DetalleEficienciaDto>();
            DetalleEficienciaDto        eficiencia      = new DetalleEficienciaDto();
            DetalleEficienciaDto        separador       = new DetalleEficienciaDto();

            List <DetalleEficienciaDto> data         = new List <DetalleEficienciaDto>();
            ResumenEficienciaDto        resumen      = new ResumenEficienciaDto();
            List <ResumenEficienciaDto> listaResumen = new List <ResumenEficienciaDto>();

            bool     primerUsuario = true;
            bool     primeraFila   = true;
            int      sTotalE       = 0;
            int      sTotalI       = 0;
            int      totalE        = 0;
            int      totalI        = 0;
            TimeSpan horaI         = new TimeSpan();
            TimeSpan horaF         = new TimeSpan();
            TimeSpan totalHora     = new TimeSpan();
            TimeSpan paramEuidHora = new TimeSpan(1, 0, 0);
            string   usuario       = "";
            DateTime dateT         = new DateTime();

            repository  = unitOfWork.Repository <MovimientoSecado>();
            repositoryI = unitOfWork.Repository <InfoFieldBook>();
            repositoryU = unitOfWork.Repository <Usuario>();
            #endregion

            if (tipo == 1)
            {
                data = (from mc in repository.Table
                        from us in repositoryU.Table
                        from inf in repositoryI.Table
                        where mc.fechaInicio >= fechaInicio && mc.fechaInicio <= fechaTermino &&
                        mc.usuario == us.nombre_usuario && mc.euid == inf.euid
                        orderby mc.fechaInicio, us.nombre_usuario
                        group mc by new
                {
                    inf.euid,
                    inf.crop,
                    inf.client,
                    inf.gmoEvent,
                    inf.opExpName,
                    inf.location,
                    inf.projecLead,
                    inf.sag,
                    mc.usuario,
                    mc.fechaInicio,
                    us.nombre,
                    us.apellido
                } into gcs
                        select new DetalleEficienciaDto
                {
                    Client = gcs.Key.client,
                    Crop = gcs.Key.crop,
                    Euid = gcs.Key.euid,
                    ExpName = gcs.Key.opExpName,
                    FechaPacking = gcs.Key.fechaInicio,
                    Fecha = (DateTime)DbFunctions.TruncateTime(gcs.Key.fechaInicio),
                    Time = (TimeSpan)DbFunctions.CreateTime(gcs.Key.fechaInicio.Hour, gcs.Key.fechaInicio.Minute, gcs.Key.fechaInicio.Second),
                    GmoEvent = gcs.Key.gmoEvent,
                    Location = gcs.Key.location,
                    ProjectLead = gcs.Key.projecLead,
                    Sag = gcs.Key.sag,
                    Usuario = gcs.Key.usuario,
                    NombreCompleto = gcs.Key.nombre + " " + gcs.Key.apellido
                }).ToList();
            }
            else if (tipo == 2)
            {
                data = (from mc in repository.Table
                        from us in repositoryU.Table
                        from inf in repositoryI.Table
                        where mc.fechaTermino >= fechaInicio && mc.fechaTermino <= fechaTermino &&
                        mc.usuario == us.nombre_usuario && mc.euid == inf.euid
                        orderby mc.fechaInicio, us.nombre_usuario
                        group mc by new
                {
                    inf.euid,
                    inf.crop,
                    inf.client,
                    inf.gmoEvent,
                    inf.opExpName,
                    inf.location,
                    inf.projecLead,
                    inf.sag,
                    mc.usuario,
                    mc.fechaTermino,
                    us.nombre,
                    us.apellido
                } into gcs
                        select new DetalleEficienciaDto
                {
                    Client = gcs.Key.client,
                    Crop = gcs.Key.crop,
                    Euid = gcs.Key.euid,
                    ExpName = gcs.Key.opExpName,
                    FechaPacking = (DateTime)gcs.Key.fechaTermino,
                    Fecha = (DateTime)DbFunctions.TruncateTime(gcs.Key.fechaTermino),
                    Time = (TimeSpan)DbFunctions.CreateTime(((DateTime)gcs.Key.fechaTermino).Hour, ((DateTime)gcs.Key.fechaTermino).Minute, ((DateTime)gcs.Key.fechaTermino).Second),
                    GmoEvent = gcs.Key.gmoEvent,
                    Location = gcs.Key.location,
                    ProjectLead = gcs.Key.projecLead,
                    Sag = gcs.Key.sag,
                    Usuario = gcs.Key.usuario,
                    NombreCompleto = gcs.Key.nombre + " " + gcs.Key.apellido
                }).ToList();
            }

            if (data.Count > 0)
            {
                foreach (var item in data)
                {
                    if (dateT != item.Fecha)
                    {
                        eficiencia.Fecha        = item.Fecha;
                        eficiencia.FechaPacking = item.FechaPacking;
                        eficiencia.Usuario      = item.Usuario;
                        if (primeraFila)
                        {
                            horaI = item.Time;
                        }

                        if (!primerUsuario)
                        {
                            //Detalle
                            horaF             = lista[lista.Count - 1].Time;
                            separador         = new DetalleEficienciaDto();
                            separador.Usuario = "Sub Total";
                            separador.Euid    = sTotalE.ToString("N0", CultureInfo.CurrentCulture);
                            separador.IndEuid = sTotalI.ToString("N0", CultureInfo.CurrentCulture);
                            separador.Time    = horaF.Subtract(horaI);
                            totalHora         = totalHora.Add(separador.Time);
                            if (separador.Time.TotalMinutes > 0)
                            {
                                var euidHora = 3600 / ((separador.Time.TotalMinutes / sTotalE) * 60);
                                separador.EuidHora = euidHora.ToString("N0", CultureInfo.CurrentCulture);
                            }
                            sTotalE = 0;
                            sTotalI = 0;
                            horaI   = item.Time;

                            lista.Add(separador);

                            //Resumen
                            resumen               = new ResumenEficienciaDto();
                            resumen.Usuario       = item.Usuario;
                            resumen.Fecha         = dateT;
                            resumen.Hora          = separador.Time;
                            resumen.NumeroEuid    = separador.Euid;
                            resumen.NumeroIndEuid = separador.IndEuid;
                            resumen.EuidHora      = separador.EuidHora ?? "0";
                            listaResumen.Add(resumen);
                        }
                        primerUsuario = false;
                        dateT         = item.Fecha;
                    }

                    if (usuario != item.Usuario)
                    {
                        if (!primeraFila)
                        {
                            //Detalle
                            horaF             = lista[lista.Count - 1].Time;
                            separador         = new DetalleEficienciaDto();
                            separador.Usuario = "Sub Total";
                            separador.Euid    = sTotalE.ToString("N0", CultureInfo.CurrentCulture);
                            separador.IndEuid = sTotalI.ToString("N0", CultureInfo.CurrentCulture);
                            separador.Time    = horaF.Subtract(horaI);
                            totalHora         = totalHora.Add(separador.Time);
                            if (separador.Time.TotalMinutes > 0)
                            {
                                var euidHora = 3600 / ((separador.Time.TotalMinutes / sTotalE) * 60);
                                separador.EuidHora = euidHora.ToString("N0", CultureInfo.CurrentCulture);
                            }
                            sTotalE = 0;
                            sTotalI = 0;
                            horaI   = item.Time;

                            lista.Add(separador);

                            //Resumen
                            resumen               = new ResumenEficienciaDto();
                            resumen.Usuario       = usuario;
                            resumen.Fecha         = item.Fecha;
                            resumen.Hora          = separador.Time;
                            resumen.NumeroEuid    = separador.Euid;
                            resumen.NumeroIndEuid = separador.IndEuid;
                            resumen.EuidHora      = separador.EuidHora ?? "0";
                            listaResumen.Add(resumen);
                        }

                        eficiencia.Usuario = item.Usuario;
                        usuario            = item.Usuario;
                    }

                    eficiencia.Euid        = item.Euid;
                    eficiencia.IndEuid     = item.IndEuid;
                    eficiencia.Crop        = item.Crop;
                    eficiencia.Client      = item.Client;
                    eficiencia.ProjectLead = item.ProjectLead;
                    eficiencia.Location    = item.Location;
                    eficiencia.ExpName     = item.ExpName;
                    eficiencia.GmoEvent    = item.GmoEvent;
                    eficiencia.Sag         = item.Sag;
                    eficiencia.Time        = item.Time;

                    if (eficiencia.Euid != "")
                    {
                        sTotalE++;
                        totalE++;
                    }
                    if (eficiencia.IndEuid != "")
                    {
                        sTotalI++;
                        totalI++;
                    }

                    lista.Add(eficiencia);
                    eficiencia  = new DetalleEficienciaDto();
                    primeraFila = false;
                }

                //Detalle
                separador         = new DetalleEficienciaDto();
                horaF             = lista[lista.Count - 1].Time;
                separador.Usuario = "Sub Total";
                separador.Euid    = sTotalE.ToString("N0", CultureInfo.CurrentCulture);
                separador.IndEuid = sTotalI.ToString("N0", CultureInfo.CurrentCulture);
                separador.Time    = horaF.Subtract(horaI);
                if (separador.Time.TotalMinutes > 0)
                {
                    var euidHora = 3600 / ((separador.Time.TotalMinutes / sTotalE) * 60);
                    separador.EuidHora = euidHora.ToString("N0", CultureInfo.CurrentCulture);
                }
                totalHora = totalHora.Add(separador.Time);
                sTotalE   = 0;
                sTotalI   = 0;
                lista.Add(separador);

                //Resumen
                resumen               = new ResumenEficienciaDto();
                resumen.Usuario       = usuario;
                resumen.Fecha         = dateT;
                resumen.Hora          = separador.Time;
                resumen.NumeroEuid    = separador.Euid;
                resumen.NumeroIndEuid = separador.IndEuid;
                resumen.EuidHora      = separador.EuidHora ?? "0";
                listaResumen.Add(resumen);

                //Total

                separador         = new DetalleEficienciaDto();
                separador.Usuario = "Total";
                separador.Euid    = totalE.ToString("N0", CultureInfo.CurrentCulture);
                separador.IndEuid = totalI.ToString("N0", CultureInfo.CurrentCulture);
                separador.Time    = totalHora;
                if (separador.Time.TotalMinutes > 0)
                {
                    var euidHora = 3600 / ((separador.Time.TotalMinutes / totalE) * 60);
                    separador.EuidHora = euidHora.ToString("N0", CultureInfo.CurrentCulture);
                }
                lista.Add(separador);


                //Detalle y Resumen
                eficienciaTotal.Detalle = lista;
                eficienciaTotal.Resumen = listaResumen;
            }

            return(eficienciaTotal);
        }