public static void asociarPasajesOrigen(parada p, ICollection <pasaje> po)
 {
     foreach (var item in po)
     {
         item.parada_origen    = p;
         item.parada_id_origen = p.id;
         p.pasajes_origen.Add(item);
     }
 }
        public Linea RegistrarLinea(Linea l)
        {
            using (uruguay_busEntities db = new uruguay_busEntities())
            {
                try
                {
                    // convertir linea
                    // convertir tramos y asociarlos a la linea
                    // para cada tramo obtener la parada desde la DB y asociarlo
                    // para cada tramo convertir y asociar el precio
                    linea lin = LineaConverter.convert(l);
                    foreach (var t in l.tramos)
                    {
                        tramo tra = TramoConverter.convert(t);
                        lin.tramo.Add(tra);

                        parada par = db.parada.Find(t.parada.id);
                        if (par == null)
                        {
                            throw new Exception("No se encontro ninguna parada con ese ID");
                        }
                        tra.parada = par;

                        tra.precio.Add(PrecioConverter.convert(t.precio.First()));
                    }

                    // guardo la linea, sus tramos y sus precios (las paradas no, esas ya estaban en a DB)
                    db.linea.Add(lin);
                    //foreach (var tra in lin.tramo)
                    //{
                    //    db.tramo.Add(tra);
                    //    db.precio.Add(tra.precio.First());
                    //}
                    db.SaveChanges();

                    // Hago las conversiones inversas y las asociaciones
                    l = LineaConverter.convert(lin);
                    foreach (var tra in lin.tramo)
                    {
                        Tramo t = TramoConverter.convert(tra);
                        l.tramos.Add(t);

                        t.parada = ParadaConverter.convert(tra.parada);

                        precio pre = db.precio.FirstOrDefault(x => x.linea_id == l.id && x.parada_id == t.parada.id);
                        Precio p   = PrecioConverter.convert(pre);
                        t.precio.Add(p);
                    }

                    return(l);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
 public static void asociarTramos(parada p, ICollection <tramo> t)
 {
     foreach (var item in t)
     {
         item.parada    = p;
         item.parada_id = p.id;
         p.tramo.Add(item);
     }
 }
 public static void asociarPasajesDestino(parada p, ICollection <pasaje> pd)
 {
     foreach (var item in pd)
     {
         item.parada_destino    = p;
         item.parada_id_destino = p.id;
         p.pasajes_destino.Add(item);
     }
 }
        public static parada convert(Parada p)
        {
            if (p == null)
            {
                return(null);
            }

            parada ret = new parada()
            {
                id       = p.id,
                nombre   = p.nombre,
                latitud  = p.latitud,
                longitud = p.longitud
            };

            return(ret);
        }
        public Parada RegistrarParada(Parada p)
        {
            using (uruguay_busEntities db = new uruguay_busEntities())
            {
                try
                {
                    parada par = ParadaConverter.convert(p);

                    db.parada.Add(par);
                    db.SaveChanges();

                    return(ParadaConverter.convert(par));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
        private int GetParadaAnterior(int idlinea, int?idParada)
        {
            DAL_Global DAL_G   = new DAL_Global();
            var        paradas = DAL_G.obtenerParadasDeLinea(idlinea).Select(x => ParadaConverter.convert(x)).ToList();

            // obtengo laparada de referencia y luego obtengo su indice en la coleccion
            parada paradaReferencia      = paradas.Where(x => x.id == idParada).FirstOrDefault();
            int    indexParadaReferencia = paradas.IndexOf(paradaReferencia);

            // si no se encuentra o si es la primera, devuelvo 0
            // si se encuentra la ubico en la coleccion y devuelvo su ID
            if (indexParadaReferencia <= 0)
            {
                return(0);
            }
            else
            {
                return(paradas.ElementAt(indexParadaReferencia - 1).id);
            }
        }
        public Parada ModificarParada(Parada p)
        {
            using (uruguay_busEntities db = new uruguay_busEntities())
            {
                try
                {
                    if (p == null || db.parada.Find(p.id) == null)
                    {
                        throw new Exception("No se encontro ninguna parada con ese ID");
                    }

                    parada par = db.parada.Find(p.id);
                    par.nombre = p.nombre;
                    //par.latitud = p.latitud;
                    //par.longitud = p.longitud;
                    db.SaveChanges();
                    return(ParadaConverter.convert(par));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
        public ICollection <Usuario> RegistrarPasoPorParada(int idParada, int idViaje)
        {
            using (uruguay_busEntities db = new uruguay_busEntities())
            {
                try
                {
                    IDAL_Global           blg             = new DAL_Global();
                    ICollection <usuario> retSinConvertir = new List <usuario>();
                    viaje  v = db.viaje.Find(idViaje);
                    parada p = db.parada.Find(idParada);

                    if (v == null)
                    {
                        throw new Exception("No se encontro ningun viaje con ese ID");
                    }

                    if (p == null)
                    {
                        throw new Exception("No se encontro ninguna parada con ese ID");
                    }

                    vehiculo vh = v.horario.vehiculo;

                    paso_por_parada ppp = new paso_por_parada()
                    {
                        fecha_hora = DateTime.Now,
                        viaje      = v,
                        parada     = p
                    };

                    db.paso_por_parada.Add(ppp);

                    vh.latitud  = p.latitud;
                    vh.longitud = p.longitud;
                    db.SaveChanges();


                    ICollection <parada> paradasOrdenadas = ParadaConverter.convert(blg.obtenerParadasDeLinea(v.horario.linea.id));

                    parada siguienteParada = null;
                    for (int i = 0; i < paradasOrdenadas.Count; i++)
                    {
                        if (paradasOrdenadas.ElementAt(i).id == idParada && i + 1 < paradasOrdenadas.Count)
                        {
                            siguienteParada = paradasOrdenadas.ElementAt(i + 1);
                        }
                    }

                    if (siguienteParada == null)
                    {
                        return(new List <Usuario>());
                    }

                    retSinConvertir = siguienteParada.pasajes_origen
                                      .Where(x => x.usuario != null)
                                      .Select(x => x.usuario).ToList();

                    //foreach (var item in siguienteParada.pasaje1)
                    //{
                    //    retSinConvertir.Add(item.usuario);
                    //}

                    ICollection <Usuario> retConvertido = new List <Usuario>();

                    foreach (var item in retSinConvertir)
                    {
                        Usuario nuevo = UsuarioConverter.convert(item);
                        nuevo.persona = PersonaConverter.convert(item.persona);
                        retConvertido.Add(nuevo);
                    }

                    return(retConvertido);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }