private ViajeDistribucion GetDistribucion(DateTime date) { var distribuciones = Distribuciones.Where(d => d.InicioReal.HasValue).ToList(); if (!distribuciones.Any()) { return(null); } while (distribuciones.Any()) { var distribucion = distribuciones[0]; var inicio = distribucion.InicioReal.Value; var fin = distribucion.Fin; if (distribucion.Fin < date) { distribuciones.RemoveAt(0); } else if (date >= inicio && date < fin) { return(distribucion); } else { break; } } return(null); }
public void LoadFechasDeCorte() { var horas = new List <DateTime>(); var inicio = Inicio; while (inicio < Fin) { foreach (var turno in Turnos) { if (turno.AppliesToDate(inicio, Feriados)) { horas.Add(inicio.Date.AddHours(turno.Inicio - GmtModifier)); horas.Add(inicio.Date.AddHours(turno.Fin - GmtModifier)); } } for (var i = inicio.Date; i < inicio.Date.AddDays(1); i = i.AddHours(1)) { if (i < inicio) { continue; } horas.Add(i); } inicio = inicio.Date.AddDays(1); } FechasDeCorte = Tickets.Select(t => t.FechaTicket.Value) .Union(Tickets.Where(t => t.FechaFin.HasValue).Select(t => t.FechaFin.Value)) .Union(Distribuciones.Where(d => d.InicioReal.HasValue).Select(d => d.InicioReal.Value)) .Union(Distribuciones.Where(d => d.InicioReal.HasValue).Select(d => d.Fin)) .Union(EventosRfid.Select(e => e.Key)) .Union(EventosGeocerca.Select(e => e.Key)) //.Union(EventosTimeTracking.Select(e => e.Key)) .Union(horas) .Where(h => h >= Inicio && h <= Fin) .Distinct() .OrderBy(h => h) .ToList(); if (FechasDeCorte.Last() != Fin) { FechasDeCorte.Add(Fin); } }