public List <TrayectoSugerido> CalcularTresMejoresTrayectos(Direccion origen, Direccion destino, DateTime?fechaDesde, DateTime?fechaHasta) { var trayecto1 = CrearPrimerTrayecto(origen, destino, fechaDesde, fechaHasta); var trayecto2 = CrearSegundoTrayecto(origen, destino, fechaDesde, fechaHasta); var trayecto3 = CrearTercerTrayecto(origen, destino, fechaDesde, fechaHasta); var trayectos = new List <TrayectoSugerido>(); trayectos.Add(trayecto1); trayectos.Add(trayecto2); trayectos.Add(trayecto3); foreach (var trayecto in trayectos) { foreach (var tramo in trayecto.Tramos) { var estrategia = EstrategiaFactory.CrearEstrategia(tramo.TipoTramo.Nombre); tramo.AgregarEstrategiaCalculoTramo(estrategia); } } return(trayectos); }
private TrayectoSugerido CrearPrimerTrayecto(Direccion origen, Direccion destino, DateTime?fechaDesde, DateTime?fechaHasta) { // Normalmente esto implicaría llamadas a la base de datos // Para simplificar el patrón vamos a utilizar datos hardcodeados var tiposTramo = BuscarTiposTramo(); var trayectoSugerido = new TrayectoSugerido(); trayectoSugerido.Trayecto = new Trayecto(); trayectoSugerido.Trayecto.Origen = origen; trayectoSugerido.Trayecto.Destino = destino; trayectoSugerido.FechaHoraInicio = fechaDesde.Value; trayectoSugerido.DistanciaACaminar = 22; trayectoSugerido.DuracionTotalEstimada = 44; trayectoSugerido.Tramos.Add(new Tramo { Distancia = 22, HoraSalida = new TimeSpan(fechaDesde.Value.Hour, fechaDesde.Value.Minute, fechaDesde.Value.Second), Orden = 1, UbicacionSalida = origen, UbicacionLlegada = new Direccion { Calle = "General Paez", Nro = 222 }, TipoTramo = tiposTramo["walk"] }); trayectoSugerido.Tramos.Add(new Tramo { Distancia = 900, HoraSalida = new TimeSpan(fechaDesde.Value.Hour, fechaDesde.Value.Minute, fechaDesde.Value.Second), Orden = 1, UbicacionSalida = trayectoSugerido.Tramos[0].UbicacionLlegada, UbicacionLlegada = new Direccion { Calle = "29 de abril", Nro = 11 }, TipoTramo = tiposTramo["bus"] }); trayectoSugerido.Tramos.Add(new Tramo { Distancia = 1400, HoraSalida = new TimeSpan(fechaDesde.Value.Hour, fechaDesde.Value.Minute, fechaDesde.Value.Second), Orden = 1, UbicacionSalida = trayectoSugerido.Tramos[1].UbicacionLlegada, UbicacionLlegada = new Direccion { Calle = "Octavio Pintos", Nro = 456 }, TipoTramo = tiposTramo["trole"] }); trayectoSugerido.Tramos.Add(new Tramo { Distancia = 929, HoraSalida = new TimeSpan(fechaDesde.Value.Hour, fechaDesde.Value.Minute, fechaDesde.Value.Second), Orden = 1, UbicacionSalida = trayectoSugerido.Tramos[2].UbicacionLlegada, UbicacionLlegada = new Direccion { Calle = "Ing. Martinez", Nro = 994 }, TipoTramo = tiposTramo["walk"] }); return(trayectoSugerido); }