public static List<sensores> obtenerTodos()
        {
            List<sensores> retorno = new List<sensores>();

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT * from sensores ORDER BY epc ASC";
            cmd.CommandType = CommandType.Text;
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                sensores sensor = new sensores();

                sensor.epc = (string)dr["EPC"];
                sensor.molino = (string)dr["molino"];
                sensor.numero = (int)dr["numero"];
                sensor.temperaturaAlta = (double)dr["alarma_alta"];
                sensor.temperaturaMedia = (double)dr["alarma_media"];
                retorno.Add(sensor);
            }
            cnx.Close();

            return retorno;
        }
        public ActionResult GraficoSensorVeinteMinutos(string EPC)
        {
            if (Session["nombre"] != null)
            {
                List<lecturas> listaLecturas = lecturas.obtenerUltimosVeinteMinutosSensor(EPC);

                sensores sensor = new sensores().getSensor(EPC);

                ViewBag.Sensor = sensor.numero;
                ViewBag.Molino = sensor.molino;
                ViewBag.AlertaAlta = sensor.temperaturaAlta;
                ViewBag.AlertaMedia = sensor.temperaturaMedia;
                ViewBag.EPC = sensor.epc;

                return View(listaLecturas);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        public ActionResult GraficoSensorVeinteMinutosNSensorYMolino(string numeroSensor, string nombreMolino)
        {
            string EPC="";

            if (Session["nombre"] != null)
            {
                List<sensores> listaSensores = sensores.obtenerTodosMolino(nombreMolino);

                for (int i = 0; i < listaSensores.Count; i++)
                {
                    if (listaSensores[i].numero.Equals(int.Parse(numeroSensor)))
                    {
                        EPC = listaSensores[i].epc;
                    }
                }

                List<lecturas> listaLecturas = lecturas.obtenerUltimosVeinteMinutosSensor(EPC);

                sensores sensor = new sensores().getSensor(EPC);

                ViewBag.Sensor = sensor.numero;
                ViewBag.Molino = sensor.molino;
                ViewBag.AlertaAlta = sensor.temperaturaAlta;
                ViewBag.AlertaMedia = sensor.temperaturaMedia;
                ViewBag.EPC = sensor.epc;

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

                sensores sensor = new sensores().getSensor(EPC);

                ViewBag.Sensor = sensor.numero;
                ViewBag.Molino = sensor.molino;
                ViewBag.Inicio = inicio;
                ViewBag.Fin = fin;
                ViewBag.AlertaAlta = sensor.temperaturaAlta;
                ViewBag.AlertaMedia = sensor.temperaturaMedia;
                ViewBag.EPC = sensor.epc;

                ViewBag.periodo = true;

                return View("GraficoSensorVeinteMinutos", listaLecturas);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        public static List<lecturasReporte> convertirLecturas(List<lecturas> listaLecturas, string diagnostico, string recomendacion, string observaciones) 
        {
            List<lecturasReporte> retorno = new List<lecturasReporte>();

            sensores esteSensor = new sensores();
            
            if(listaLecturas.Count>0) esteSensor = new sensores().getSensor(listaLecturas[0].epc);

            for (int i = 0; i < listaLecturas.Count; i++)             
            {
                lecturasReporte nueva = new lecturasReporte();

                nueva.fecha = listaLecturas[i].fecha;
                nueva.temperatura = listaLecturas[i].temperatura;
                nueva.epc = listaLecturas[i].epc;
                nueva.numeroPolo = listaLecturas[i].numeroPolo;
                nueva.color = listaLecturas[i].color;
                nueva.molino = esteSensor.molino;

                if (i == 0)
                {
                    nueva.diagnostico = diagnostico;
                    nueva.recomendacion = recomendacion;
                    nueva.observaciones = observaciones;
                }

                retorno.Add(nueva);
            }

                return retorno;
        }
        //------------------------------------------------------------>
        public sensores getSensor(string EPC)
        {
            SqlConnection cnx = conexion.crearConexion();
            sensores tdato = new sensores();
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnx;
                string sqlcmd = string.Empty;
                sqlcmd = "select * ";
                sqlcmd += "from sensores ";
                sqlcmd += "where ( EPC = '" + EPC + "')";

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

                while (dr.Read())
                {
                    tdato.epc = (string)dr["EPC"];
                    tdato.molino = (string)dr["molino"];
                    tdato.numero = (int)dr["numero"];
                    tdato.temperaturaAlta = (double)dr["alarma_alta"];
                    tdato.temperaturaMedia = (double)dr["alarma_media"];
                }
                dr.Close();
            }
            catch (Exception)
            {
            }
            cnx.Close();
            return tdato;
        }
        public static List<lecturas> obtenerUltimosDatos(string EPC, string inicio, string fin)
        {
            string año = inicio.Split(' ')[0].Split('/')[2];
            string mes = inicio.Split(' ')[0].Split('/')[1];
            string dia = inicio.Split(' ')[0].Split('/')[0];

            string hora = inicio.Split(' ')[1].Split(':')[0];
            string minuto = inicio.Split(' ')[1].Split(':')[1];

            if (inicio.Split(' ')[2].Equals("AM") && hora.Equals("12")) hora = "0";
            if (inicio.Split(' ')[2].Equals("PM") && !hora.Equals("12")) hora = (int.Parse(hora) + 12).ToString();

            DateTime Inicio = new DateTime(int.Parse(año), int.Parse(mes), int.Parse(dia), int.Parse(hora), int.Parse(minuto), 0);

            año = fin.Split(' ')[0].Split('/')[2];
            mes = fin.Split(' ')[0].Split('/')[1];
            dia = fin.Split(' ')[0].Split('/')[0];

            hora = fin.Split(' ')[1].Split(':')[0];
            minuto = fin.Split(' ')[1].Split(':')[1];

            if (fin.Split(' ')[2].Equals("AM") && hora.Equals("12")) hora = "0";
            if (fin.Split(' ')[2].Equals("PM") && !hora.Equals("12")) hora = (int.Parse(hora) + 12).ToString();

            DateTime Fin = new DateTime(int.Parse(año), int.Parse(mes), int.Parse(dia), int.Parse(hora), int.Parse(minuto), 0);
            
            List<lecturas> retorno = new List<lecturas>();

            sensores sensor = new sensores().getSensor(EPC);

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT * from lecturas WHERE EPC='" + sensor.epc 
                + "' AND fecha>=@inicio AND fecha<=@fin ORDER BY fecha ASC";
            cmd.CommandType = CommandType.Text;
            
            cmd.Parameters.Add("@inicio", SqlDbType.DateTime).Value = Inicio;
            cmd.Parameters.Add("@fin", SqlDbType.DateTime).Value = Fin;

            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                lecturas temp = new lecturas();
                temp.numeroPolo = sensor.numero;
                temp.epc = sensor.epc;
                temp.fecha = (DateTime)dr["fecha"];
                temp.temperatura = (double)dr["temperatura"];
                if (sensor.temperaturaAlta <= temp.temperatura) temp.color = "red";
                else if (sensor.temperaturaMedia <= temp.temperatura) temp.color = "yellow";
                else temp.color = "green";

                retorno.Add(temp);
            }
            dr.Close();
            cnx.Close();

            return retorno;
        }
        public static lecturas obtenerUltimaLectura(string EPC)
        {
            lecturas retorno = new lecturas();

            sensores sensor = new sensores().getSensor(EPC);

            DateTime diezMinutos = DateTime.Now.AddMinutes(-10);

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT TOP 1 * from lecturas WHERE EPC='" + sensor.epc + "' and fecha>@fecha ORDER BY fecha DESC";
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add("@fecha", SqlDbType.DateTime).Value = diezMinutos;

            SqlDataReader dr = cmd.ExecuteReader();

            if (!dr.HasRows) 
            {
                retorno.numeroPolo = sensor.numero;
                retorno.epc = sensor.epc;
                retorno.fecha = DateTime.Now;
                retorno.temperatura = 0;
                if (sensor.temperaturaAlta <= retorno.temperatura) retorno.color = "red";
                else if (sensor.temperaturaMedia <= retorno.temperatura) retorno.color = "yellow";
                else retorno.color = "green";
            }
            while (dr.Read())
            {
                retorno.numeroPolo = sensor.numero;
                retorno.epc = sensor.epc;
                retorno.fecha = (DateTime)dr["fecha"];
                retorno.temperatura = (double)dr["temperatura"];
                if (sensor.temperaturaAlta <= retorno.temperatura) retorno.color = "red";
                else if (sensor.temperaturaMedia <= retorno.temperatura) retorno.color = "yellow";
                else retorno.color = "green";
            }
            dr.Close();
            cnx.Close();

            return retorno;
        }
        public static List<lecturas> obtenerUltimosDatos(string EPC, string tiempo)
        {
            List<lecturas> retorno = new List<lecturas>();

            sensores sensor = new sensores().getSensor(EPC);

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT * from lecturas WHERE EPC='" + sensor.epc + "' AND fecha>=@fecha ORDER BY fecha ASC";
            cmd.CommandType = CommandType.Text;

            DateTime fecha = new DateTime();

            if (tiempo.Equals("all"))
            {
                fecha = new DateTime(2001, 01, 01);
            }
            else if (tiempo.Equals("3h")) 
            {
                fecha = DateTime.Now.AddMinutes(-180);
            }
            else if (tiempo.Equals("1h"))
            {
                fecha = DateTime.Now.AddMinutes(-60);
            }
            else if (tiempo.Equals("20m"))
            {
                fecha = DateTime.Now.AddMinutes(-20);
            }

            cmd.Parameters.Add("@fecha", SqlDbType.DateTime).Value=fecha;

            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                lecturas temp = new lecturas();
                temp.numeroPolo = sensor.numero;
                temp.epc = sensor.epc;
                temp.fecha = (DateTime)dr["fecha"];
                temp.temperatura = (double)dr["temperatura"];
                if (sensor.temperaturaAlta <= temp.temperatura) temp.color = "red";
                else if (sensor.temperaturaMedia <= temp.temperatura) temp.color = "yellow";
                else temp.color = "green";

                retorno.Add(temp);
            }
            dr.Close();
            cnx.Close();

            return retorno;
        }
        public ActionResult Borrar(string id)
        {
            if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
            {
                sensores sensor = new sensores().getSensor(id);

                if (sensores.obtenerMayorsensor(sensor.molino) == sensor.numero)
                {
                    sensor.borrarsensor(id);

                    registros nuevo = new registros();
                    nuevo.fecha = DateTime.Now;
                    nuevo.usuario = Session["nombre"].ToString();
                    nuevo.tipo = "Eliminación del Sensor";
                    nuevo.descripcion = "El usuario " + nuevo.usuario
                        + " ha eliminado el sensor con EPC: " + 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 editar(string id)
 {
     if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
     {
         ViewData["molinos"] = molinos.obtenerTodos();
         sensores tdato = new sensores().getSensor(id);
         if (tdato.epc != 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")))
            {
                sensores sensor = new sensores();
                string id_old = form["nombreAnterior"];//old
                sensor.borrarsensor(id_old);
                //Actualizar producto..            
                sensor.epc = (string)form["EPC"];
                sensor.molino = (string)form["molino"];
                sensor.numero = (int.Parse((string)form["numero"]));
                sensor.temperaturaAlta = (double.Parse((string)form["tMaxima"]));
                sensor.temperaturaMedia = (double.Parse((string)form["tMinima"]));
                sensor.agregarSensor();

                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 polo numero " + sensor.numero + " con el EPC: " + sensor.epc + " en el Sistema";

                registros.agregarRegistro(nuevo);

                flag = 4;//Modificado con éxito

                return RedirectToAction("todosMolino", "Sensor", new { molino = sensor.molino });
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        //-------------------------------------------------
        public ActionResult Guardar(FormCollection post)
        {
            if (Session["rol"] != null && (Session["rol"].ToString().Equals("analista") || Session["rol"].ToString().Equals("admin")))
            {
                sensores sensor = new sensores();

                sensor.epc = (string)post["EPC"];
                sensor.molino = (string)post["molino"];
                sensor.numero = (int.Parse((string)post["numero"]));
                sensor.temperaturaAlta = (double.Parse((string)post["tMaxima"]));
                sensor.temperaturaMedia = (double.Parse((string)post["tMinima"]));
                sensor.agregarSensor();

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

                registros.agregarRegistro(nuevo);

                flag = 2;//Agregado con éxito


                return RedirectToAction("todosMolino", "Sensor", new { molino = sensor.molino});
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }