public static List<molinos> obtenerPorPlanta(string nombrePlanta)
        {
            List<molinos> retorno = new List<molinos>();

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT * from molinos WHERE planta='" + nombrePlanta + "' ORDER BY nombreMolino ASC";
            cmd.CommandType = CommandType.Text;
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                molinos molino = new molinos();

                molino.nombre = (string)dr["nombreMolino"];
                molino.planta = (string)dr["planta"];
                molino.alarmaAlta = (double)dr["alarma_alta"];
                molino.alarmaMedia = (double)dr["alarma_media"];
                retorno.Add(molino);
            }
            cnx.Close();

            return retorno;
        }
        public ActionResult GraficoMolinoAlternativa(string nombreMolino)
        {
            if (Session["nombre"] != null)
            {
                List<lecturas> listaLecturas = lecturas.obtenerUltimasLecturasMolino(nombreMolino);
                ViewBag.Molino = nombreMolino;

                molinos molino = new molinos().getMolino(nombreMolino);

                ViewBag.AlertaAlta = molino.alarmaAlta;
                ViewBag.AlertaAltaMasTreinta = molino.alarmaAlta + 30;
                ViewBag.AlertaMedia = molino.alarmaMedia;

                return View(listaLecturas);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        public ActionResult GraficoMolinoLineaTempPeriodo(string temperatura, string nombreMolino, string inicio, string fin) 
        {
            if (Session["nombre"] != null)
            {
                List<lecturas> listaLecturas = lecturas.obtenerUltimosDiezMinutosMolinoTemp(nombreMolino, temperatura, inicio, fin);

                List<lecturasAgrupadas> listaAgrupadas = lecturasAgrupadas.agruparLecturas(listaLecturas);

                List<object> listaDatos = new List<object>();

                List<string> keys = new List<string>();

                for (int i = 0; i < listaAgrupadas.Count; i++)
                {
                    listaDatos.Add(listaAgrupadas[i].fecha);
                    for (int j = 0; j < listaAgrupadas[i].listaLecturas.Count; j++)
                    {
                        listaDatos.Add(listaAgrupadas[i].listaLecturas[j]);

                        if (!keys.Contains(listaAgrupadas[i].listaLecturas[j].numeroPolo.ToString()))
                            keys.Add(listaAgrupadas[i].listaLecturas[j].numeroPolo.ToString());
                    }
                }

                ViewBag.Molino = nombreMolino;
                ViewBag.periodo = true;
                ViewBag.Inicio = inicio;
                ViewBag.Fin = fin;

                molinos molino = new molinos().getMolino(nombreMolino);

                ViewBag.AlertaAlta = molino.alarmaAlta;
                ViewBag.AlertaMedia = molino.alarmaMedia;

                ViewBag.filtro = temperatura;

                ViewBag.yKeys = keys;

                return View("GraficoMolinoLinea", listaDatos);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        public ActionResult GraficoMolinoLinea(string nombreMolino)
        {
            if (Session["nombre"] != null)
            {
                List<lecturas> listaLecturas = lecturas.obtenerUltimosDiezMinutosMolino(nombreMolino);

                List<lecturasAgrupadas> listaAgrupadas = lecturasAgrupadas.agruparLecturas(listaLecturas);

                List<object> listaDatos = new List<object>();

                for (int i = 0; i < listaAgrupadas.Count; i++) 
                {
                    listaDatos.Add(listaAgrupadas[i].fecha);
                    for (int j = 0; j < listaAgrupadas[i].listaLecturas.Count; j++) 
                    {
                        listaDatos.Add(listaAgrupadas[i].listaLecturas[j]);
                    }
                }
                
                ViewBag.Molino = nombreMolino;

                molinos molino = new molinos().getMolino(nombreMolino);

                ViewBag.AlertaAlta = molino.alarmaAlta;
                ViewBag.AlertaMedia = molino.alarmaMedia;

                List<string> keys = new List<string>();
                List<sensores> sensoresMolino = sensores.obtenerTodosMolino(nombreMolino);
                for (int i = 0; i < sensoresMolino.Count; i++)
                {
                    keys.Add(sensoresMolino[i].numero + "");
                }

                ViewBag.yKeys = keys;

                return View(listaDatos);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        //------------------------------------------------------------>
        public molinos getMolino(string id)
        {
            SqlConnection cnx = conexion.crearConexion();
            molinos tdato = new molinos();
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnx;
                string sqlcmd = string.Empty;
                sqlcmd = "select * ";
                sqlcmd += "from molinos ";
                sqlcmd += "where ( nombreMolino = '" + id + "')";

                cmd.CommandText = sqlcmd;
                cmd.CommandType = CommandType.Text;
                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    tdato.nombre = (string)dr["nombreMolino"];
                    tdato.planta = (string)dr["planta"];
                    tdato.alarmaAlta = (double)dr["alarma_alta"];
                    tdato.alarmaMedia = (double)dr["alarma_media"];
                  
                }
                dr.Close();
            }
            catch (Exception)
            {
            }
            cnx.Close();
            return tdato;
        }
        public ActionResult Borrar(string id)
        {
            if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
            {
                if (!molinos.verificarEnSensores(id))
                {
                    molinos molino = new molinos();
                    molino.borrarmolino(id);

                    registros nuevo = new registros();
                    nuevo.fecha = DateTime.Now;
                    nuevo.usuario = Session["nombre"].ToString();
                    nuevo.tipo = "Eliminación de Molino";
                    nuevo.descripcion = "El usuario " + nuevo.usuario
                        + " ha eliminado el molino con nombre " + id + " del sistema";

                    registros.agregarRegistro(nuevo);

                    flag = 3;//Eliminado con éxito

                    return RedirectToAction("todos");
                }
                else 
                {
                    flag = 1;//Se usa
                    return RedirectToAction("todos");
                }
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        //-------------------------------------------------
        public ActionResult Guardar(FormCollection post)
        {
            if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
            {
                molinos molino = new molinos();
                molino.nombre = (string)post["nombre"];
                molino.planta = (string)post["planta"];
                molino.alarmaMedia = double.Parse(post["temperaturaMedia"].ToString());
                molino.alarmaAlta = double.Parse(post["temperaturaAlta"].ToString());
                molino.agregarMolino();

                registros nuevo = new registros();
                nuevo.fecha = DateTime.Now;
                nuevo.usuario = Session["nombre"].ToString();
                nuevo.tipo = "Creación de Molino";
                nuevo.descripcion = "El usuario " + nuevo.usuario
                    + " ha creado un nuevo molino con nombre " + molino.nombre + " en el sistema";

                registros.agregarRegistro(nuevo);

                flag = 2;//Agregado con éxito

                return RedirectToAction("todos");
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
 public ActionResult editar(string id)
 {
     if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
     {
         ViewData["plantas"] = plantas.obtenerTodas();
         molinos tdato = new molinos().getMolino(id);
         if (tdato.nombre != null)
         {
             return View(tdato);
         }
         return RedirectToAction("Index", "Home");
     }
     else
     {
         return RedirectToAction("Index", "Home");
     }
 }
        public ActionResult GuardarEditar(FormCollection form)
        {
            if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
            {
                molinos molino = new molinos();
                string id_old = form["nombreAnterior"];//old
                molino.borrarmolino(id_old);
                //Actualizar producto..            
                molino.nombre = (string)form["nombreMolino"];
                molino.planta = (string)form["planta"];
                molino.alarmaMedia = double.Parse(form["temperaturaMedia"].ToString());
                molino.alarmaAlta = double.Parse(form["temperaturaAlta"].ToString());
                molino.agregarMolino();
                molino.actualizarEnSensores(id_old);

                registros nuevo = new registros();
                nuevo.fecha = DateTime.Now;
                nuevo.usuario = Session["nombre"].ToString();
                nuevo.tipo = "Edición de Molino";
                nuevo.descripcion = "El usuario " + nuevo.usuario
                    + " ha editado el molino con nombre " + molino.nombre + " del sistema";

                registros.agregarRegistro(nuevo);

                flag = 4;//Modificado con éxito

                return RedirectToAction("todos");
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        public ActionResult Index()
        {
            if (Session["rol"] != null)
            {
                List<molinos> molinosNormal = molinos.obtenerTodos();

                List<molinos> listaMolinosPreferencias = new List<molinos>();

                int j = 0;

                for (int i = 1; i < 7; i++) 
                {
                    if (Session["molino" + i] != null) 
                    {
                        molinos temp = new molinos().getMolino(Session["molino" + i].ToString());
                        while (listaMolinosPreferencias.Count+1 < i) 
                        {
                            if (!listaMolinosPreferencias.Contains(molinosNormal[j])) listaMolinosPreferencias.Add(molinosNormal[j]);
                            j++;
                        }
                        listaMolinosPreferencias.Add(temp);
                    }
                }

                for (int i = 0; i < molinosNormal.Count && listaMolinosPreferencias.Count<6; i++)
                {
                    if (!contieneDato(listaMolinosPreferencias, molinosNormal[i])) 
                    {
                        listaMolinosPreferencias.Add(molinosNormal[i]);
                    }
                }

                for (int i = 0; i < listaMolinosPreferencias.Count && i < 6; i++)
                {
                    string nombreMolino = listaMolinosPreferencias[i].nombre;
                    List<lecturas> listaLecturas = lecturas.obtenerUltimasLecturasMolino(nombreMolino);

                    if (i == 0)
                    {
                        ViewBag.nombreMolino1 = nombreMolino;
                        ViewBag.lecturasMolino1 = listaLecturas;
                        molinos molino = new molinos().getMolino(nombreMolino);
                        ViewBag.AlertaAlta1 = molino.alarmaAlta;
                        ViewBag.AlertaAltaMasTreinta1 = molino.alarmaAlta + 30;
                        ViewBag.AlertaMedia1 = molino.alarmaMedia;
                    }
                    else if (i == 1)
                    {
                        ViewBag.nombreMolino2 = nombreMolino;
                        ViewBag.lecturasMolino2 = listaLecturas;
                        molinos molino = new molinos().getMolino(nombreMolino);
                        ViewBag.AlertaAlta2 = molino.alarmaAlta;
                        ViewBag.AlertaAltaMasTreinta2 = molino.alarmaAlta + 30;
                        ViewBag.AlertaMedia2 = molino.alarmaMedia;
                    }
                    else if (i == 2)
                    {
                        ViewBag.nombreMolino3 = nombreMolino;
                        ViewBag.lecturasMolino3 = listaLecturas;
                        molinos molino = new molinos().getMolino(nombreMolino);
                        ViewBag.AlertaAlta3 = molino.alarmaAlta;
                        ViewBag.AlertaAltaMasTreinta3 = molino.alarmaAlta + 30;
                        ViewBag.AlertaMedia3 = molino.alarmaMedia;
                    }
                    else if (i == 3)
                    {
                        ViewBag.nombreMolino4 = nombreMolino;
                        ViewBag.lecturasMolino4 = listaLecturas;
                        molinos molino = new molinos().getMolino(nombreMolino);
                        ViewBag.AlertaAlta4 = molino.alarmaAlta;
                        ViewBag.AlertaAltaMasTreinta4 = molino.alarmaAlta + 30;
                        ViewBag.AlertaMedia4 = molino.alarmaMedia;
                    }
                    else if (i == 4)
                    {
                        ViewBag.nombreMolino5 = nombreMolino;
                        ViewBag.lecturasMolino5 = listaLecturas;
                        molinos molino = new molinos().getMolino(nombreMolino);
                        ViewBag.AlertaAlta5 = molino.alarmaAlta;
                        ViewBag.AlertaAltaMasTreinta5 = molino.alarmaAlta + 30;
                        ViewBag.AlertaMedia5 = molino.alarmaMedia;
                    }
                    else if (i == 5)
                    {
                        ViewBag.nombreMolino6 = nombreMolino;
                        ViewBag.lecturasMolino6 = listaLecturas;
                        molinos molino = new molinos().getMolino(nombreMolino);
                        ViewBag.AlertaAlta6 = molino.alarmaAlta;
                        ViewBag.AlertaAltaMasTreinta6 = molino.alarmaAlta + 30;
                        ViewBag.AlertaMedia6 = molino.alarmaMedia;
                    }
                }

                return View();
            }
            else
            {
                return RedirectToAction("login", "Home");
            }
            
        }
 private bool contieneDato(List<molinos> listaMolinosPreferencias, molinos molinos)
 {
     for (int i = 0; i < listaMolinosPreferencias.Count; i++) 
     {
         if (listaMolinosPreferencias[i].nombre.Equals(molinos.nombre)) return true;
     }
     return false;
 }
        public string temperaturasMolino(string nombreMolino) 
        {
            if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
            {
                string retorno = "";

                molinos seleccionado = new molinos().getMolino(nombreMolino);

                retorno = seleccionado.alarmaMedia + ";" + seleccionado.alarmaAlta;

                retorno += ";" + (sensores.obtenerMayorsensor(nombreMolino) + 1);

                return retorno;
            }
            else return "null";
        }