public TimeTrackingVo(EventoViaje entrada, EventoViaje salida, EventoViaje anterior, int numeroViaje, DAOFactory daoFactory) { IdEntrada = entrada != null ? entrada.Id : 0; IdSalida = salida != null ? salida.Id : 0; Viaje = numeroViaje.ToString(CultureInfo.InvariantCulture); Tipo = anterior == null && entrada == null && salida != null && salida.EsInicio ? 0 : entrada != null && salida == null && entrada.EsFin ? 2 : 1; var evento = entrada ?? salida; if (evento == null) { return; } Vehiculo = evento.Vehiculo.Interno; Empleado = evento.Empleado != null ? evento.Empleado.Entidad.Descripcion : string.Empty; ReferenciaGeografica = evento.ReferenciaGeografica.Descripcion; Fecha = evento.Fecha.ToDisplayDateTime(); Duracion = entrada != null && salida != null?salida.Fecha.Subtract(entrada.Fecha) : TimeSpan.Zero; TiempoViaje = entrada != null && anterior != null?entrada.Fecha.Subtract(anterior.Fecha) : TimeSpan.Zero; DaoFactory = daoFactory; IdVehiculo = evento.Vehiculo.Id; Anterior = anterior; }
protected override List <TimeTrackingVo> GetResults() { var list = DAOFactory.EventoViajeDAO.GetList(cbEmpresa.SelectedValues, cbLinea.SelectedValues, cbVehiculo.SelectedValues, cbEmpleado.SelectedValues, dtDesde.SelectedDate.Value, dtHasta.SelectedDate.Value) .OrderBy(v => v.Vehiculo) .ThenBy(v => v.Fecha) .ToList(); var viajes = new List <TimeTrackingVo>(list.Count); var numeroViaje = 0; EventoViaje anterior = null; EventoViaje entrada = null; var iniciado = false; var start = string.Empty; var startDate = DateTime.MinValue; var vehiculo = 0; foreach (var evento in list) { if (evento.Vehiculo.Id != vehiculo) { anterior = null; entrada = null; iniciado = false; start = string.Empty; vehiculo = evento.Vehiculo.Id; } var inicio = !evento.EsEntrada && evento.EsInicio; var fin = evento.EsEntrada && evento.EsFin; if (!inicio && !iniciado) { continue; } if (inicio) { var viaje = new TimeTrackingVo(null, evento, null, numeroViaje, DAOFactory); iniciado = true; anterior = evento; entrada = null; start = string.Format("{0}. De {1} a ", numeroViaje, evento.ReferenciaGeografica.Descripcion); startDate = evento.Fecha; viajes.Add(viaje); } else if (fin) { var viaje = new TimeTrackingVo(evento, null, anterior, numeroViaje, DAOFactory); iniciado = false; anterior = null; entrada = null; viajes.Add(viaje); foreach (var v in viajes.Where(v => v.Viaje == numeroViaje.ToString(CultureInfo.InvariantCulture))) { var duracionTotal = evento.Fecha.Subtract(startDate); v.Viaje = start + evento.ReferenciaGeografica.Descripcion + " (" + duracionTotal.ToString() + ")"; v.FechaDesde = startDate; v.FechaHasta = evento.Fecha; } numeroViaje++; } else if (evento.EsEntrada) { entrada = evento; } else if (!evento.EsEntrada) { if (entrada != null && evento.ReferenciaGeografica.Id == entrada.ReferenciaGeografica.Id) { var viaje = new TimeTrackingVo(entrada, evento, anterior, numeroViaje, DAOFactory); viajes.Add(viaje); } anterior = evento; entrada = null; } } return(viajes); }