Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }