Esempio n. 1
0
        public static List <indicadoresReporte> obtenerDatosEquipos(string fechaInicio, string fechaFinal)
        {
            List <indicadoresReporte> retorno = new List <indicadoresReporte>();
            Context db = new Context();

            DateTime Inicio  = DateTime.Today.AddMonths(-1);
            DateTime Termino = DateTime.Today;

            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado  = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio  = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            List <equipos> Equipos = db.Equipos.ToList();

            foreach (equipos Equip in Equipos)
            {
                disponibilidad disponibilidad = new disponibilidad(Inicio, Termino, Equip);
                double         disp           = Math.Round(disponibilidad.tiempoDisponible, 2);

                tiempoMedioEntreFallas tMedioEntreFallas = new Models.tiempoMedioEntreFallas(Equip, Inicio, Termino);
                double tMedioFallas = Math.Round(tMedioEntreFallas.MTBF, 2);

                confiabilidad confiabilidad = new confiabilidad(Equip, Inicio, Termino, tMedioEntreFallas);
                double        conf          = Math.Round(confiabilidad.RazonDeFallas, 2);

                tiempoMedioParaReparar MTTR = new tiempoMedioParaReparar(Inicio, Termino, Equip);
                double mttr = Math.Round(MTTR.MTTR, 2);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacion =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, Inicio, Termino, MTTR.cantidadTotalDetenciones, confiabilidad.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOp = Math.Round(tMedioOperacion.MTBS, 2);

                utilizacion Utiliz = new utilizacion(Equip, Inicio, Termino, disponibilidad.tiempoTranscurrido, disponibilidad.tiemposDeBaja, tMedioEntreFallas.totalHorasOperacionales);
                double      utiliz = Math.Round(Utiliz.Utilizacion, 2);

                indicadoresReporte nuevo = new indicadoresReporte();
                nuevo.fechaInicio                      = fechaInicio;
                nuevo.fechaTermino                     = fechaFinal;
                nuevo.equipo                           = Equip.numeroAFI;
                nuevo.disponibilidad                   = disp * 100;
                nuevo.confiabilidad                    = conf * 100;
                nuevo.utilizacion                      = utiliz * 100;
                nuevo.tiempoMedioEntreFallas           = tMedioFallas;
                nuevo.tiempoMedioOperacionAntesDeFalla = tMedioOp;
                nuevo.tiempoMedioParaReparar           = mttr;

                retorno.Add(nuevo);
            }

            return(retorno);
        }
        // GET: indicadoresDeMantencion/Detalle/5
        public ActionResult Detalle(int id,string fechaInicio, string fechaFinal, string tipoAgrupacion) {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            DateTime Inicio = DateTime.Today.AddMonths(-1);
            DateTime Termino = DateTime.Today;
            string TipoAgrupacion = "semanal";
            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            if (tipoAgrupacion != null) 
            {
                TipoAgrupacion = tipoAgrupacion;
            }

            List<double> ListaDisponibilidad = new List<double>();
            List<double> ListaTMedioFallas = new List<double>();
            List<double> ListaConfiabilidad = new List<double>();
            List<double> ListaTiempoMedioReparar = new List<double>();
            List<double> ListaTiempoMedioOperacion = new List<double>();
            List<double> ListaUtilizacion = new List<double>();
            List<DateTime> ListaInicio = new List<DateTime>();
            List<DateTime> ListaTermino = new List<DateTime>();

            equipos Equip = equipos.ObtenerConTipo(id);
            
            //Se realiza el cálculo según la agrupación:

            DateTime inicioTemp = Inicio;
            DateTime terminoTemp = Inicio;

            if(TipoAgrupacion.Equals("semanal"))
            {
                terminoTemp=Inicio.AddDays(7);
            }
            else if (TipoAgrupacion.Equals("dosSemanas"))
            {
                terminoTemp = terminoTemp.AddDays(14);
            }
            else if (TipoAgrupacion.Equals("mensual")) 
            {
                terminoTemp = terminoTemp.AddMonths(1);
            }
            else if (TipoAgrupacion.Equals("bimensual"))
            {
                terminoTemp = terminoTemp.AddMonths(2);
            }
            else if (TipoAgrupacion.Equals("trimestral"))
            {
                terminoTemp = terminoTemp.AddMonths(3);
            }
            else if (TipoAgrupacion.Equals("semestral"))
            {
                terminoTemp = terminoTemp.AddMonths(6);
            }
            else if (TipoAgrupacion.Equals("anual"))
            {
                terminoTemp = terminoTemp.AddYears(1);
            }

            while (terminoTemp < Termino)
            {
                ListaInicio.Add(inicioTemp);
                ListaTermino.Add(terminoTemp);

                disponibilidad disponibilidad = new disponibilidad(inicioTemp, terminoTemp, Equip);
                double disp = Math.Round(disponibilidad.tiempoDisponible, 2);
                ListaDisponibilidad.Add(disp);

                tiempoMedioEntreFallas tMedioEntreFallas = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);
                double tMedioFallas = Math.Round(tMedioEntreFallas.MTBF, 2);
                ListaTMedioFallas.Add(tMedioFallas);

                confiabilidad confiabilidad = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallas);
                double conf = Math.Round(confiabilidad.RazonDeFallas, 2);
                ListaConfiabilidad.Add(conf);

                tiempoMedioParaReparar MTTR = new tiempoMedioParaReparar(inicioTemp, terminoTemp, Equip);
                double mttr = Math.Round(MTTR.MTTR, 2);
                ListaTiempoMedioReparar.Add(mttr);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacion =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, inicioTemp, terminoTemp, MTTR.cantidadTotalDetenciones, confiabilidad.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOp = Math.Round(tMedioOperacion.MTBS, 2);
                ListaTiempoMedioOperacion.Add(tMedioOp);

                utilizacion Utiliz = new utilizacion(Equip, inicioTemp, terminoTemp, disponibilidad.tiempoTranscurrido, disponibilidad.tiemposDeBaja, tMedioEntreFallas.totalHorasOperacionales);
                double utiliz = Math.Round(Utiliz.Utilizacion, 2);
                ListaUtilizacion.Add(utiliz);

                inicioTemp = terminoTemp.AddDays(1);
                if (TipoAgrupacion.Equals("semanal"))
                {
                    terminoTemp = terminoTemp.AddDays(7);
                }
                else if (TipoAgrupacion.Equals("dosSemanas"))
                {
                    terminoTemp = terminoTemp.AddDays(14);
                }
                else if (TipoAgrupacion.Equals("mensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(1);
                }
                else if (TipoAgrupacion.Equals("bimensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(2);
                }
                else if (TipoAgrupacion.Equals("trimestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(3);
                }
                else if (TipoAgrupacion.Equals("semestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(6);
                }
                else if (TipoAgrupacion.Equals("anual"))
                {
                    terminoTemp = terminoTemp.AddYears(1);
                }
            }

            if (inicioTemp < Termino) 
            {
                terminoTemp = Termino;

                ListaInicio.Add(inicioTemp);
                ListaTermino.Add(terminoTemp);

                disponibilidad disponibilidadUlt = new disponibilidad(inicioTemp, terminoTemp, Equip);
                double dispUlt = Math.Round(disponibilidadUlt.tiempoDisponible, 2);
                ListaDisponibilidad.Add(dispUlt);

                tiempoMedioEntreFallas tMedioEntreFallasUlt = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);
                double tMedioFallasUlt = Math.Round(tMedioEntreFallasUlt.MTBF, 2);
                ListaTMedioFallas.Add(tMedioFallasUlt);

                confiabilidad confiabilidadUlt = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallasUlt);
                double confUlt = Math.Round(confiabilidadUlt.RazonDeFallas, 2);
                ListaConfiabilidad.Add(confUlt);

                tiempoMedioParaReparar MTTRUlt = new tiempoMedioParaReparar(inicioTemp, terminoTemp, Equip);
                double mttrUlt = Math.Round(MTTRUlt.MTTR, 2);
                ListaTiempoMedioReparar.Add(mttrUlt);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacionUlt =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, inicioTemp, terminoTemp, MTTRUlt.cantidadTotalDetenciones, confiabilidadUlt.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOpUlt = Math.Round(tMedioOperacionUlt.MTBS, 2);
                ListaTiempoMedioOperacion.Add(tMedioOpUlt);

                utilizacion UtilizUlt = new utilizacion(Equip, inicioTemp, terminoTemp, disponibilidadUlt.tiempoTranscurrido, disponibilidadUlt.tiemposDeBaja, tMedioEntreFallasUlt.totalHorasOperacionales);
                double utilizUlt = Math.Round(UtilizUlt.Utilizacion, 2);
                ListaUtilizacion.Add(utilizUlt);
            }

            
            ViewBag.Inicio = Inicio;
            ViewBag.Termino = Termino;
            ViewBag.TipoAgrupacion = TipoAgrupacion;

            ViewBag.Disponibilidad = ListaDisponibilidad;
            ViewBag.TiempoMedioEntreFallas = ListaTMedioFallas;
            ViewBag.Confiabilidad = ListaConfiabilidad;
            ViewBag.TiempoMedioParaReparar = ListaTiempoMedioReparar;
            ViewBag.TiempoMedioOperacionAntesDeFalla = ListaTiempoMedioOperacion;
            ViewBag.Utilizacion = ListaUtilizacion;
            ViewBag.ListaInicio = ListaInicio;
            ViewBag.ListaTermino = ListaTermino;

            return View(Equip);
        }
        // GET: indicadoresDeMantencion/DetalleDisponibilidad/5
        public ActionResult DetalleConfiabilidad(int id, string fechaInicio, string fechaFinal, string tipoAgrupacion)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            DateTime Inicio = DateTime.Now.AddMonths(-1);
            DateTime Termino = DateTime.Now;
            string TipoAgrupacion = "semanal";
            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            if (tipoAgrupacion != null)
            {
                TipoAgrupacion = tipoAgrupacion;
            }

            List<double> ListaConfiabilidad = new List<double>();
            List<DateTime> ListaInicio = new List<DateTime>();
            List<DateTime> ListaTermino = new List<DateTime>();

            equipos Equip = equipos.ObtenerConTipo(id);

            DateTime inicioTemp = Inicio;
            DateTime terminoTemp = Inicio;

            if (TipoAgrupacion.Equals("semanal"))
            {
                terminoTemp = Inicio.AddDays(7);
            }
            else if (TipoAgrupacion.Equals("dosSemanas"))
            {
                terminoTemp = terminoTemp.AddDays(14);
            }
            else if (TipoAgrupacion.Equals("mensual"))
            {
                terminoTemp = terminoTemp.AddMonths(1);
            }
            else if (TipoAgrupacion.Equals("bimensual"))
            {
                terminoTemp = terminoTemp.AddMonths(2);
            }
            else if (TipoAgrupacion.Equals("trimestral"))
            {
                terminoTemp = terminoTemp.AddMonths(3);
            }
            else if (TipoAgrupacion.Equals("semestral"))
            {
                terminoTemp = terminoTemp.AddMonths(6);
            }
            else if (TipoAgrupacion.Equals("anual"))
            {
                terminoTemp = terminoTemp.AddYears(1);
            }

            while (terminoTemp < Termino)
            {
                ListaInicio.Add(inicioTemp);
                ListaTermino.Add(terminoTemp);

                tiempoMedioEntreFallas tMedioEntreFallasUlt = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);              

                confiabilidad confiabilidadUlt = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallasUlt);
                double confUlt = Math.Round(confiabilidadUlt.RazonDeFallas, 2);
                ListaConfiabilidad.Add(confUlt);


                inicioTemp = terminoTemp.AddDays(1);
                if (TipoAgrupacion.Equals("semanal"))
                {
                    terminoTemp = terminoTemp.AddDays(7);
                }
                else if (TipoAgrupacion.Equals("dosSemanas"))
                {
                    terminoTemp = terminoTemp.AddDays(14);
                }
                else if (TipoAgrupacion.Equals("mensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(1);
                }
                else if (TipoAgrupacion.Equals("bimensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(2);
                }
                else if (TipoAgrupacion.Equals("trimestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(3);
                }
                else if (TipoAgrupacion.Equals("semestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(6);
                }
                else if (TipoAgrupacion.Equals("anual"))
                {
                    terminoTemp = terminoTemp.AddYears(1);
                }
            }

            if (inicioTemp < Termino)
            {
                terminoTemp = Termino;

                ListaInicio.Add(inicioTemp);
                ListaTermino.Add(terminoTemp);

                tiempoMedioEntreFallas tMedioEntreFallasUlt = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);                

                confiabilidad confiabilidadUlt = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallasUlt);
                double confUlt = Math.Round(confiabilidadUlt.RazonDeFallas, 2);
                ListaConfiabilidad.Add(confUlt);


            }


            ViewBag.Inicio = Inicio;
            ViewBag.Termino = Termino;
            ViewBag.TipoAgrupacion = TipoAgrupacion;

            ViewBag.Confiabilidad = ListaConfiabilidad;
            ViewBag.ListaInicio = ListaInicio;
            ViewBag.ListaTermino = ListaTermino;

            return View(Equip);
        }
        public ActionResult Indicadores(string fechaInicio, string fechaFinal)
        {

            DateTime Inicio = DateTime.Today.AddMonths(-1);
            DateTime Termino = DateTime.Today;
            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            List<equipos> Equipos = db.Equipos.ToList();
            System.Collections.Hashtable Disponibilidad = new System.Collections.Hashtable();
            System.Collections.Hashtable Confiabilidad = new System.Collections.Hashtable();
            System.Collections.Hashtable TiempoMedioEntreFallas = new System.Collections.Hashtable();
            System.Collections.Hashtable TiempoMedioParaReparar = new System.Collections.Hashtable();
            System.Collections.Hashtable TiempoMedioOperacionAntesDeFalla = new System.Collections.Hashtable();
            System.Collections.Hashtable Utilizacion = new System.Collections.Hashtable();


            foreach (equipos Equip in Equipos)
            {

                disponibilidad disponibilidad = new disponibilidad(Inicio, Termino, Equip);
                double disp = Math.Round(disponibilidad.tiempoDisponible, 2);
                Disponibilidad.Add(Equip.ID, disp);


                tiempoMedioEntreFallas tMedioEntreFallas = new Models.tiempoMedioEntreFallas(Equip, Inicio, Termino);
                double tMedioFallas = Math.Round(tMedioEntreFallas.MTBF, 2);
                TiempoMedioEntreFallas.Add(Equip.ID, tMedioFallas);

                confiabilidad confiabilidad = new confiabilidad(Equip, Inicio, Termino, tMedioEntreFallas);
                double conf = Math.Round(confiabilidad.RazonDeFallas, 2);
                Confiabilidad.Add(Equip.ID, conf);

                tiempoMedioParaReparar MTTR = new tiempoMedioParaReparar(Inicio, Termino, Equip);
                double mttr = Math.Round(MTTR.MTTR, 2);
                TiempoMedioParaReparar.Add(Equip.ID, mttr);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacion =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, Inicio, Termino, MTTR.cantidadTotalDetenciones, confiabilidad.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOp = Math.Round(tMedioOperacion.MTBS, 2);
                TiempoMedioOperacionAntesDeFalla.Add(Equip.ID, tMedioOp);

                utilizacion Utiliz = new utilizacion(Equip, Inicio, Termino, disponibilidad.tiempoTranscurrido, disponibilidad.tiemposDeBaja, tMedioEntreFallas.totalHorasOperacionales);
                double utiliz = Math.Round(Utiliz.Utilizacion, 2);
                Utilizacion.Add(Equip.ID, utiliz);
            }
            ViewBag.Inicio = Inicio;
            ViewBag.Termino = Termino;
            ViewData["Disponibilidad"] = Disponibilidad;
            ViewData["Confiabilidad"] = Confiabilidad;
            ViewData["TiempoMedioEntreFallas"] = TiempoMedioEntreFallas;
            ViewData["tiempoMedioParaReparar"] = TiempoMedioParaReparar;
            ViewData["TiempoMedioOperacionAntesDeFalla"] = TiempoMedioOperacionAntesDeFalla;
            ViewData["Utilizacion"] = Utilizacion;

            return View(Equipos);
        }
Esempio n. 5
0
        public static List <indicadoresReporte> obtenerDatosEquipo(int id, string fechaInicio, string fechaFinal, string tipoAgrupacion)
        {
            List <indicadoresReporte> retorno = new List <indicadoresReporte>();

            DateTime Inicio            = DateTime.Today.AddMonths(-1);
            DateTime Termino           = DateTime.Today;
            string   TipoAgrupacion    = "semanal";
            string   agrupacionEscrita = TipoAgrupacion;

            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado  = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio  = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            if (tipoAgrupacion != null)
            {
                TipoAgrupacion = tipoAgrupacion;
            }

            equipos Equip = equipos.ObtenerConTipo(id);

            //Se realiza el cálculo según la agrupación:

            DateTime inicioTemp  = Inicio;
            DateTime terminoTemp = Inicio;

            if (TipoAgrupacion.Equals("semanal"))
            {
                agrupacionEscrita = "Semanal";
                terminoTemp       = Inicio.AddDays(7);
            }
            else if (TipoAgrupacion.Equals("dosSemanas"))
            {
                agrupacionEscrita = "Dos Semanas";
                terminoTemp       = terminoTemp.AddDays(14);
            }
            else if (TipoAgrupacion.Equals("mensual"))
            {
                agrupacionEscrita = "Mensual";
                terminoTemp       = terminoTemp.AddMonths(1);
            }
            else if (TipoAgrupacion.Equals("bimensual"))
            {
                agrupacionEscrita = "Bimensual";
                terminoTemp       = terminoTemp.AddMonths(2);
            }
            else if (TipoAgrupacion.Equals("trimestral"))
            {
                agrupacionEscrita = "Trimensual";
                terminoTemp       = terminoTemp.AddMonths(3);
            }
            else if (TipoAgrupacion.Equals("semestral"))
            {
                agrupacionEscrita = "Semestral";
                terminoTemp       = terminoTemp.AddMonths(6);
            }
            else if (TipoAgrupacion.Equals("anual"))
            {
                agrupacionEscrita = "Anual";
                terminoTemp       = terminoTemp.AddYears(1);
            }

            while (terminoTemp < Termino)
            {
                disponibilidad disponibilidad = new disponibilidad(inicioTemp, terminoTemp, Equip);
                double         disp           = Math.Round(disponibilidad.tiempoDisponible, 2);

                tiempoMedioEntreFallas tMedioEntreFallas = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);
                double tMedioFallas = Math.Round(tMedioEntreFallas.MTBF, 2);

                confiabilidad confiabilidad = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallas);
                double        conf          = Math.Round(confiabilidad.RazonDeFallas, 2);

                tiempoMedioParaReparar MTTR = new tiempoMedioParaReparar(inicioTemp, terminoTemp, Equip);
                double mttr = Math.Round(MTTR.MTTR, 2);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacion =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, inicioTemp, terminoTemp, MTTR.cantidadTotalDetenciones, confiabilidad.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOp = Math.Round(tMedioOperacion.MTBS, 2);

                utilizacion Utiliz = new utilizacion(Equip, inicioTemp, terminoTemp, disponibilidad.tiempoTranscurrido, disponibilidad.tiemposDeBaja, tMedioEntreFallas.totalHorasOperacionales);
                double      utiliz = Math.Round(Utiliz.Utilizacion, 2);

                indicadoresReporte nuevo = new indicadoresReporte();

                nuevo.fechaInicio                      = Formateador.fechaCompletaToString(inicioTemp);
                nuevo.fechaTermino                     = Formateador.fechaCompletaToString(terminoTemp);
                nuevo.equipo                           = Equip.numeroAFI;
                nuevo.disponibilidad                   = disp * 100;
                nuevo.confiabilidad                    = conf * 100;
                nuevo.utilizacion                      = utiliz * 100;
                nuevo.tiempoMedioEntreFallas           = tMedioFallas;
                nuevo.tiempoMedioOperacionAntesDeFalla = tMedioOp;
                nuevo.tiempoMedioParaReparar           = mttr;
                nuevo.periodo                          = agrupacionEscrita;

                retorno.Add(nuevo);

                inicioTemp = terminoTemp.AddDays(1);
                if (TipoAgrupacion.Equals("semanal"))
                {
                    terminoTemp = terminoTemp.AddDays(7);
                }
                else if (TipoAgrupacion.Equals("dosSemanas"))
                {
                    terminoTemp = terminoTemp.AddDays(14);
                }
                else if (TipoAgrupacion.Equals("mensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(1);
                }
                else if (TipoAgrupacion.Equals("bimensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(2);
                }
                else if (TipoAgrupacion.Equals("trimestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(3);
                }
                else if (TipoAgrupacion.Equals("semestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(6);
                }
                else if (TipoAgrupacion.Equals("anual"))
                {
                    terminoTemp = terminoTemp.AddYears(1);
                }
            }

            if (inicioTemp < Termino)
            {
                terminoTemp = Termino;

                disponibilidad disponibilidadUlt = new disponibilidad(inicioTemp, terminoTemp, Equip);
                double         dispUlt           = Math.Round(disponibilidadUlt.tiempoDisponible, 2);

                tiempoMedioEntreFallas tMedioEntreFallasUlt = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);
                double tMedioFallasUlt = Math.Round(tMedioEntreFallasUlt.MTBF, 2);

                confiabilidad confiabilidadUlt = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallasUlt);
                double        confUlt          = Math.Round(confiabilidadUlt.RazonDeFallas, 2);

                tiempoMedioParaReparar MTTRUlt = new tiempoMedioParaReparar(inicioTemp, terminoTemp, Equip);
                double mttrUlt = Math.Round(MTTRUlt.MTTR, 2);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacionUlt =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, inicioTemp, terminoTemp, MTTRUlt.cantidadTotalDetenciones, confiabilidadUlt.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOpUlt = Math.Round(tMedioOperacionUlt.MTBS, 2);

                utilizacion UtilizUlt = new utilizacion(Equip, inicioTemp, terminoTemp, disponibilidadUlt.tiempoTranscurrido, disponibilidadUlt.tiemposDeBaja, tMedioEntreFallasUlt.totalHorasOperacionales);
                double      utilizUlt = Math.Round(UtilizUlt.Utilizacion, 2);

                indicadoresReporte nuevo = new indicadoresReporte();

                nuevo.fechaInicio                      = Formateador.fechaCompletaToString(inicioTemp);
                nuevo.fechaTermino                     = Formateador.fechaCompletaToString(terminoTemp);
                nuevo.equipo                           = Equip.numeroAFI;
                nuevo.disponibilidad                   = dispUlt * 100;
                nuevo.confiabilidad                    = confUlt * 100;
                nuevo.utilizacion                      = utilizUlt * 100;
                nuevo.tiempoMedioEntreFallas           = tMedioFallasUlt;
                nuevo.tiempoMedioOperacionAntesDeFalla = tMedioOpUlt;
                nuevo.tiempoMedioParaReparar           = mttrUlt;
                nuevo.periodo                          = agrupacionEscrita;

                retorno.Add(nuevo);
            }

            return(retorno);
        }
        public static List<indicadoresReporte> obtenerDatosEquipo(int id, string fechaInicio, string fechaFinal, string tipoAgrupacion) 
        {
            List<indicadoresReporte> retorno = new List<indicadoresReporte>();

            DateTime Inicio = DateTime.Today.AddMonths(-1);
            DateTime Termino = DateTime.Today;
            string TipoAgrupacion = "semanal";
            string agrupacionEscrita = TipoAgrupacion;
            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            if (tipoAgrupacion != null)
            {
                TipoAgrupacion = tipoAgrupacion;
            }

            equipos Equip = equipos.ObtenerConTipo(id);

            //Se realiza el cálculo según la agrupación:

            DateTime inicioTemp = Inicio;
            DateTime terminoTemp = Inicio;

            if (TipoAgrupacion.Equals("semanal"))
            {
                agrupacionEscrita = "Semanal";
                terminoTemp = Inicio.AddDays(7);
            }
            else if (TipoAgrupacion.Equals("dosSemanas"))
            {
                agrupacionEscrita = "Dos Semanas";
                terminoTemp = terminoTemp.AddDays(14);
            }
            else if (TipoAgrupacion.Equals("mensual"))
            {
                agrupacionEscrita = "Mensual";
                terminoTemp = terminoTemp.AddMonths(1);
            }
            else if (TipoAgrupacion.Equals("bimensual"))
            {
                agrupacionEscrita = "Bimensual";
                terminoTemp = terminoTemp.AddMonths(2);
            }
            else if (TipoAgrupacion.Equals("trimestral"))
            {
                agrupacionEscrita = "Trimensual";
                terminoTemp = terminoTemp.AddMonths(3);
            }
            else if (TipoAgrupacion.Equals("semestral"))
            {
                agrupacionEscrita = "Semestral";
                terminoTemp = terminoTemp.AddMonths(6);
            }
            else if (TipoAgrupacion.Equals("anual"))
            {
                agrupacionEscrita = "Anual";
                terminoTemp = terminoTemp.AddYears(1);
            }

            while (terminoTemp < Termino)
            {
                disponibilidad disponibilidad = new disponibilidad(inicioTemp, terminoTemp, Equip);
                double disp = Math.Round(disponibilidad.tiempoDisponible, 2);

                tiempoMedioEntreFallas tMedioEntreFallas = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);
                double tMedioFallas = Math.Round(tMedioEntreFallas.MTBF, 2);

                confiabilidad confiabilidad = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallas);
                double conf = Math.Round(confiabilidad.RazonDeFallas, 2);

                tiempoMedioParaReparar MTTR = new tiempoMedioParaReparar(inicioTemp, terminoTemp, Equip);
                double mttr = Math.Round(MTTR.MTTR, 2);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacion =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, inicioTemp, terminoTemp, MTTR.cantidadTotalDetenciones, confiabilidad.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOp = Math.Round(tMedioOperacion.MTBS, 2);

                utilizacion Utiliz = new utilizacion(Equip, inicioTemp, terminoTemp, disponibilidad.tiempoTranscurrido, disponibilidad.tiemposDeBaja, tMedioEntreFallas.totalHorasOperacionales);
                double utiliz = Math.Round(Utiliz.Utilizacion, 2);

                indicadoresReporte nuevo = new indicadoresReporte();

                nuevo.fechaInicio = Formateador.fechaCompletaToString(inicioTemp);
                nuevo.fechaTermino = Formateador.fechaCompletaToString(terminoTemp);
                nuevo.equipo = Equip.numeroAFI;
                nuevo.disponibilidad = disp * 100;
                nuevo.confiabilidad = conf * 100;
                nuevo.utilizacion = utiliz * 100;
                nuevo.tiempoMedioEntreFallas = tMedioFallas;
                nuevo.tiempoMedioOperacionAntesDeFalla = tMedioOp;
                nuevo.tiempoMedioParaReparar = mttr;
                nuevo.periodo = agrupacionEscrita;

                retorno.Add(nuevo);
                
                inicioTemp = terminoTemp.AddDays(1);
                if (TipoAgrupacion.Equals("semanal"))
                {
                    terminoTemp = terminoTemp.AddDays(7);
                }
                else if (TipoAgrupacion.Equals("dosSemanas"))
                {
                    terminoTemp = terminoTemp.AddDays(14);
                }
                else if (TipoAgrupacion.Equals("mensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(1);
                }
                else if (TipoAgrupacion.Equals("bimensual"))
                {
                    terminoTemp = terminoTemp.AddMonths(2);
                }
                else if (TipoAgrupacion.Equals("trimestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(3);
                }
                else if (TipoAgrupacion.Equals("semestral"))
                {
                    terminoTemp = terminoTemp.AddMonths(6);
                }
                else if (TipoAgrupacion.Equals("anual"))
                {
                    terminoTemp = terminoTemp.AddYears(1);
                }
            }

            if (inicioTemp < Termino)
            {
                terminoTemp = Termino;

                disponibilidad disponibilidadUlt = new disponibilidad(inicioTemp, terminoTemp, Equip);
                double dispUlt = Math.Round(disponibilidadUlt.tiempoDisponible, 2);

                tiempoMedioEntreFallas tMedioEntreFallasUlt = new Models.tiempoMedioEntreFallas(Equip, inicioTemp, terminoTemp);
                double tMedioFallasUlt = Math.Round(tMedioEntreFallasUlt.MTBF, 2);

                confiabilidad confiabilidadUlt = new confiabilidad(Equip, inicioTemp, terminoTemp, tMedioEntreFallasUlt);
                double confUlt = Math.Round(confiabilidadUlt.RazonDeFallas, 2);

                tiempoMedioParaReparar MTTRUlt = new tiempoMedioParaReparar(inicioTemp, terminoTemp, Equip);
                double mttrUlt = Math.Round(MTTRUlt.MTTR, 2);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacionUlt =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, inicioTemp, terminoTemp, MTTRUlt.cantidadTotalDetenciones, confiabilidadUlt.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOpUlt = Math.Round(tMedioOperacionUlt.MTBS, 2);

                utilizacion UtilizUlt = new utilizacion(Equip, inicioTemp, terminoTemp, disponibilidadUlt.tiempoTranscurrido, disponibilidadUlt.tiemposDeBaja, tMedioEntreFallasUlt.totalHorasOperacionales);
                double utilizUlt = Math.Round(UtilizUlt.Utilizacion, 2);

                indicadoresReporte nuevo = new indicadoresReporte();

                nuevo.fechaInicio = Formateador.fechaCompletaToString(inicioTemp);
                nuevo.fechaTermino = Formateador.fechaCompletaToString(terminoTemp);
                nuevo.equipo = Equip.numeroAFI;
                nuevo.disponibilidad = dispUlt * 100;
                nuevo.confiabilidad = confUlt * 100;
                nuevo.utilizacion = utilizUlt * 100;
                nuevo.tiempoMedioEntreFallas = tMedioFallasUlt;
                nuevo.tiempoMedioOperacionAntesDeFalla = tMedioOpUlt;
                nuevo.tiempoMedioParaReparar = mttrUlt;
                nuevo.periodo = agrupacionEscrita;

                retorno.Add(nuevo);
            }

            return retorno;
        }
        public static List<indicadoresReporte> obtenerDatosEquipos(string fechaInicio, string fechaFinal)
        {
            List<indicadoresReporte> retorno = new List<indicadoresReporte>();
            Context db = new Context();

            DateTime Inicio = DateTime.Today.AddMonths(-1);
            DateTime Termino = DateTime.Today;
            if (fechaInicio != null || fechaFinal != null)
            {
                string[] inicioSeparado = fechaInicio.Split('-');
                string[] terminoSeparado = fechaFinal.Split('-');

                Inicio = new DateTime(int.Parse(inicioSeparado[2]), int.Parse(inicioSeparado[1]), int.Parse(inicioSeparado[0]));
                Termino = new DateTime(int.Parse(terminoSeparado[2]), int.Parse(terminoSeparado[1]), int.Parse(terminoSeparado[0]));
            }

            List<equipos> Equipos = db.Equipos.ToList();

            foreach (equipos Equip in Equipos)
            {

                disponibilidad disponibilidad = new disponibilidad(Inicio, Termino, Equip);
                double disp = Math.Round(disponibilidad.tiempoDisponible, 2);
                
                tiempoMedioEntreFallas tMedioEntreFallas = new Models.tiempoMedioEntreFallas(Equip, Inicio, Termino);
                double tMedioFallas = Math.Round(tMedioEntreFallas.MTBF, 2);

                confiabilidad confiabilidad = new confiabilidad(Equip, Inicio, Termino, tMedioEntreFallas);
                double conf = Math.Round(confiabilidad.RazonDeFallas, 2);

                tiempoMedioParaReparar MTTR = new tiempoMedioParaReparar(Inicio, Termino, Equip);
                double mttr = Math.Round(MTTR.MTTR, 2);

                tiempoMedioDeOperacionAntesDeFalla tMedioOperacion =
                    new tiempoMedioDeOperacionAntesDeFalla(Equip, Inicio, Termino, MTTR.cantidadTotalDetenciones, confiabilidad.tMedioEntreFallas.totalHorasOperacionales);
                double tMedioOp = Math.Round(tMedioOperacion.MTBS, 2);

                utilizacion Utiliz = new utilizacion(Equip, Inicio, Termino, disponibilidad.tiempoTranscurrido, disponibilidad.tiemposDeBaja, tMedioEntreFallas.totalHorasOperacionales);
                double utiliz = Math.Round(Utiliz.Utilizacion, 2);

                indicadoresReporte nuevo = new indicadoresReporte();
                nuevo.fechaInicio = fechaInicio;
                nuevo.fechaTermino = fechaFinal;
                nuevo.equipo = Equip.numeroAFI;
                nuevo.disponibilidad = disp * 100;
                nuevo.confiabilidad = conf * 100;
                nuevo.utilizacion = utiliz * 100;
                nuevo.tiempoMedioEntreFallas = tMedioFallas;
                nuevo.tiempoMedioOperacionAntesDeFalla = tMedioOp;
                nuevo.tiempoMedioParaReparar = mttr;

                retorno.Add(nuevo);

            }

            return retorno;
        }