private string agregarEquipoSolicitud(string body, string telefono)
        {
            int indice1 = 0;
            int indice2 = 0;
            int contador = 0;
            int idSolicitud = 0;
            int idEquipo = 0;
            int cantidad = 0;
            List<Equipo> disponibles = new List<Equipo>();
            Solicitud solicitud = new Solicitud();

            for (int i = 0; i < body.Length; i++)
            {

                if (body.ElementAt(i) == '*' && contador == 0)
                {
                    indice1 = i;
                    contador++;
                }
                else if (contador == 1 && body.ElementAt(i) == '*')
                {
                    indice2 = i;
                }
            }
            try
            {
                idSolicitud = Int32.Parse(body.Substring(0, indice1));
                idEquipo = Int32.Parse(body.Substring(indice1 + 1, indice2 - indice1 - 1));
                cantidad = Int32.Parse(body.Substring(indice2 + 1, body.Length - indice2 - 1));
            }
            catch
            {
                return "Ha ocurido un problema.\nVerifique el formato y vuelva a intentarlo";
            }

            solicitud = db.Solicituds.Find(idSolicitud);
            if (solicitud == null)
            {
                return "Codigo Solicitud invalido. Vuelva a intentarlo.";
            }
            if (solicitud.EstatusSolicitud == 3 || solicitud.EstatusSolicitud == 2 && solicitud.Fecha > DateTime.Now)
            {

                disponibles = EquiposDisponibles(solicitud.Fecha.ToString(), solicitud.HoraInicio.ToString(), solicitud.HoraFin.ToString());

                if (disponibles.Where(e => e.IdModeloEquipo == idEquipo).Count() == 0)
                {
                    return "Equipo no esta disponible.";
                }
                else if (disponibles.Where(e => e.IdModeloEquipo == idEquipo).Count() < cantidad)
                {
                    return "La cantidad seleccionada no esta disponible. \nIntente con una cantidad menor";
                }

                foreach (var item in disponibles)
                {
                    if (cantidad > 0 && item.IdModeloEquipo == idEquipo)
                    {
                        solicitud.Equipoes.Add(item);
                        cantidad--;
                    }
                }
            }
            else
            {
                return "La solicitud ya no puede ser editada";
            }

            db.SaveChanges();
            return "Equipo agregado. gracias";
        }
        private string eliminarEquipoSolicitud(string body, string p)
        {
            int indice1 = 0;
            int indice2 = 0;
            int contador = 0;
            int idSolicitud = 0;
            int idModeloEquipo = 0;
            int cantidad = 0;

            Solicitud solicitud = new Solicitud();

            for (int i = 0; i < body.Length; i++)
            {

                if (body.ElementAt(i) == '*' && contador == 0)
                {
                    indice1 = i;
                    contador++;
                }
                else if (contador == 1 && body.ElementAt(i) == '*')
                {
                    indice2 = i;
                }
            }
            try
            {
                idSolicitud = Int32.Parse(body.Substring(0, indice1));
                idModeloEquipo = Int32.Parse(body.Substring(indice1 + 1, indice2 - indice1 - 1));
                cantidad = Int32.Parse(body.Substring(indice2 + 1, body.Length - indice2 - 1));
            }
            catch
            {
                return "Ha ocurido un problema.\nVerifique el formato y vuelva a intentarlo";
            }

            if (db.Solicituds.SingleOrDefault(s => s.Id == idSolicitud) != null)
            {
                solicitud = db.Solicituds.SingleOrDefault(s => s.Id == idSolicitud);
            }
            else
            {
                return "Codigo Solicitud invalido. Vuelva a intentarlo.";
            }
            if (solicitud.EstatusSolicitud == 3 || solicitud.EstatusSolicitud == 2 && solicitud.Fecha > DateTime.Now)
            {
                List<Equipo> equipos = solicitud.Equipoes.ToList();

                if (equipos.Where(e => e.IdModeloEquipo == idModeloEquipo).Count() == 0)
                {
                    return "No existen equipos con ese codigo.";
                }

                foreach (var equipo in equipos)
                {
                    if (solicitud.Equipoes.Count() == 1)
                    {
                        return "No se pueden eliminar Todos los equipos de la solicitud, de lo contrario sera cancelada.";
                    }
                    if (cantidad > 0 && equipo.IdModeloEquipo == idModeloEquipo)
                    {
                        solicitud.Equipoes.Remove(equipo);
                        cantidad--;
                    }
                }
            }
            else
            {
                return "La solicitud ya no puede ser editada";
            }

            db.SaveChanges();
            return "Equipos eliminados. gracias";
        }
        public string ProcesarSolicitud(string solicitud, string telefono)
        {
            string fecha;
            string horaInicio;
            string horaFin;
            string equiposStr;
            int lugar = 0;
            string nipSMS = null;
            List<ModeloEquipo> modelosDisponibles = new List<ModeloEquipo>();
            List<Equipo> equiposDisponibles = new List<Equipo>();

            //almacena la nueva Solicitud
            Solicitud nuevaSolicitud = new Solicitud();

            //Seleccionando los id de las Solicitudes anteriores para obtener la ultima
            var SolicitudsId = db.Solicituds.Select(s => s.Id).ToList();

            try
            {
                //Validando que el usuario este registrado para proceder con la solicitud
                int codigoUsuario = 0;
                var contacto = db.Contactoes.SingleOrDefault(c => c.Descripcion == telefono);
                if (contacto != null)
                {
                    codigoUsuario = db.Contactoes.SingleOrDefault(c => c.Descripcion == telefono).IdUserProfile;

                    //Validando que el usurario solo pueda Registrar 5 solucitudes maximas por sms cada semestre

                    var solicitudesSMS = from s in contacto.Solicituds
                                         where contacto.IdUserProfile == codigoUsuario && s.Fecha >= DateTime.Now.AddMonths(-3)
                                              && s.Fecha <= DateTime.Now.AddMonths( 3)
                                         select s.Id;

                    if (solicitudesSMS.Count() > 8)
                    {
                        Session["opcion"] = "";
                        Session["spp"] = "";
                        Session["sppOpcion"] = "";
                        return "Usted ha excedido el maximo de solicitud sms por semestre.";
                    }

                }
                else
                {
                    Session["opcion"] = "";
                    Session["spp"] = "";
                    Session["sppOpcion"] = "";
                    return "Su numero No esta registrado como Contacto de algun usuario.\n Registrelo o cree una cuenta. ";
                }

                fecha = solicitud.Substring(2, 10);
                horaInicio = solicitud.Substring(13, 5);
                horaFin = solicitud.Substring(19, 5);
                nipSMS = solicitud.Substring(25, 4);
                equiposStr = solicitud.Substring(30, solicitud.Length - 30);

                //validando que el nipsms enviado sea igual al que esta registrado y pertenece al usuario para confirmar la solicitud
                if (db.UserProfiles.SingleOrDefault(n => n.UserId == codigoUsuario).NipSms != nipSMS)
                {
                    Session["opcion"] = "";
                    Session["spp"] = "";
                    Session["sppOpcion"] = "";
                    return "NipSMS invalido. \nFavor vuelva a intentarlo.\nPuede Solicitarlo via web.";
                }

                try
                {
                    nuevaSolicitud.Fecha = DateTime.Parse(fecha);
                    nuevaSolicitud.HoraInicio = TimeSpan.Parse(horaInicio);
                    nuevaSolicitud.HoraFin = TimeSpan.Parse(horaFin);
                    nuevaSolicitud.Descripcion = "Solicitud SMS";
                    nuevaSolicitud.IdUserProfile = codigoUsuario;
                    nuevaSolicitud.EstatusSolicitud = (int)EstatusSolicitudes.En_Proceso;
                }
                catch
                {
                    Session["opcion"] = "";
                    Session["spp"] = "";
                    Session["sppOpcion"] = "";
                    return "Error en el formato de la hora o la fecha";
                }

                //Obteniendo los equipos disponibles a partir de la fecha horaInicio y horaFin de la solicitudSms
                equiposDisponibles = EquiposDisponibles(fecha, horaInicio, horaInicio);

                if (equiposDisponibles.Count == 0)
                {
                    Session["opcion"] = "";
                    Session["spp"] = "";
                    Session["sppOpcion"] = "";
                    return "No hay equipos disponibles para esta fecha";
                }

                List<Tuple<string, string>> equipos = new List<Tuple<string, string>>();

                int cont = 50;
                int indice = 0;
                int indice2 = 0;

                for (int i = 0; i < equiposStr.Length; i++)
                {
                    //sacando el id del salon para agregarlo a la solicitud
                    if (equiposStr.ElementAt(i) == '*' && cont == 50)
                    {
                        lugar = Int32.Parse(equiposStr.Substring(0, i));
                        equiposStr = equiposStr.Substring(i + 1, equiposStr.Length - i - 1);
                        cont = 0;
                        i = 0;

                        //validando que el salon sea valido
                        if (db.AulaEdificios.SingleOrDefault(a => a.Id == lugar) != null)
                        {
                            nuevaSolicitud.IdAulaEdificio = lugar;
                        }
                        else
                        {
                            Session["opcion"] = "";
                            Session["spp"] = "";
                            Session["sppOpcion"] = "";

                            return "Error con el codigo Lugar.\nVuelva a intentarlo.\nEnviar Lu para saber mas.";
                        }
                    }
                    //sacando los equipos y la cantidad para agregarlos a la solicitud
                    if (equiposStr.ElementAt(i) == '*' && cont == 0)
                    {
                        indice2 = i;
                        cont++;
                    }
                    else if (equiposStr.ElementAt(i) == '*' && cont != 0)
                    {
                        equipos.Add(new Tuple<string, string>(equiposStr.Substring(indice, indice2), equiposStr.Substring((indice2) + 1, i - indice2 - 1)));

                        indice = 0;
                        cont = 0;

                        equiposStr = equiposStr.Substring(i + 1, equiposStr.Length - i - 1);
                        i = 0;

                    }

                }

                //Verificando si el modelo seleccionado esta disponible con relacion a los modelos disponibles por fecha y hora
                foreach (var item in equipos)
                {
                    int cantidadXModelo = equiposDisponibles.Where(e => e.IdModeloEquipo == Int32.Parse(item.Item1)).Count();

                    if (cantidadXModelo == 0)
                    {
                        Session["opcion"] = "";
                        Session["spp"] = "";
                        Session["sppOpcion"] = "";
                        return "Equipo " + item.Item1 + " no esta disponible.\nSolicitud cancelada\n Vuelva a intentarlo";
                    }
                    else if (cantidadXModelo < Int32.Parse(item.Item2))
                    {
                        Session["opcion"] = "";
                        Session["spp"] = "";
                        Session["sppOpcion"] = "";
                        return "Cantidad Equipo " + item.Item1 + " solo hay " + cantidadXModelo + " disponible.\nSolicitud cancelada\n Vuelva a intentarlo";
                    }
                    else
                    {
                        int cantidad = Int32.Parse(item.Item2);
                        int cantidadXModelo2 = equiposDisponibles.Where(e => e.IdModeloEquipo == Int32.Parse(item.Item1)).Count();

                        foreach (var equipo in equiposDisponibles)
                        {
                            if (cantidad > 0 && equipo.IdModeloEquipo == Int32.Parse(item.Item1) && cantidad <= cantidadXModelo2)
                            {

                               //Actualizamos el estatus del equipo para que se refleje su primer uso en caso de que no haya sido utilizado
                                db.Equipoes.SingleOrDefault(e => e.Id == equipo.Id).EstatusEquipo = 1;
                                nuevaSolicitud.Equipoes.Add(equipo);

                                cantidad--;
                            }

                        }
                    }

                }

                //nuevaSolSms.IdContacto = db.Contactoes.SingleOrDefault(c => c.Descripcion == telefono).Id;

                try
                {
                    db.Solicituds.Add(nuevaSolicitud);
                    db.SaveChanges();

                }
                catch (DbEntityValidationException e)
                {
                    return e.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage;
                }

            }
            catch (Exception e)
            {
                Session["opcion"] = "";
                Session["spp"] = "";
                Session["sppOpcion"] = "";
                return "Error procesando su solicitud Revise el formato";
            }

            Session["opcion"] = "";
            Session["spp"] = "";
            Session["sppOpcion"] = "";
            return "Solicitud Procesada.\nSu codigo:" +nuevaSolicitud.Id + "\n!Gracias!\n!Favor guardar Codigo!";
        }