Ejemplo n.º 1
0
 public async Task SignalForDriverReports(DriverReport driverReport)
 {
     try
     {
         await Clients.All.SendAsync(SignalMethods.SignalForDriverReports.Method, driverReport);
     }
     catch (Exception ex)
     {
         Log.Error($"Exception was thrown while sending driver report {ex.Message}");
         throw new SignalHubException($"Error in SignalForDriverReports method", ex);
     }
 }
Ejemplo n.º 2
0
        public Report GenerateReport()
        {
            var report = new Report();

            foreach (var driver in _driverRepository.GetDrivers())
            {
                var driverReport = new DriverReport(driver.Name);

                foreach (var trip in driver.Trips.Where(t => IsValidTrip(t)))
                {
                    driverReport.TotalDistance += (int)Math.Round(trip.Distance);
                    driverReport.TotalTime     += (trip.EndTime - trip.StartTime);
                }
                report.DriverReports.Add(driverReport);
            }

            return(report);
        }
        public void RemoveDriveInDb(int id, string comment)
        {
            Driver driver = context.Drivers
                            .FirstOrDefault(d => d.Id == id);

            driver.IsFired = true;
            DriverReport driverReport = new DriverReport()
            {
                Comment = comment,
                DriversLicenseNumber = driver.DriversLicenseNumber,
                FullName             = driver.FullName,
                IdDriver             = driver.Id,
                DateRegistration     = driver.DateRegistration,
                DateFired            = DateTime.Now.ToString()
            };

            context.DriverReports.Add(driverReport);
            context.SaveChanges();
        }
        public Task Handle(TripAddedEvent @event, CancellationToken cancellationToken)
        {
            _eventRepository.AddEvent(@event);
            var trips = _tripRepository.GetTripsByDriverName(@event.DriverName);

            if (trips.Any())
            {
                var totalMiles       = trips.Sum(trip => trip.MilesDriven);
                var totalTimeInHours = trips.Sum(trip => (trip.StopTime - trip.StartTime).TotalHours);
                var averageSpeed     = totalMiles > 0 && totalTimeInHours > 0 ? totalMiles / totalTimeInHours : 0.0;
                var driverReport     = new DriverReport
                {
                    Name         = @event.DriverName,
                    TotalMiles   = (int)Math.Round(totalMiles),
                    AverageSpeed = (int)Math.Round(totalMiles / totalTimeInHours)
                };
                _driverReportRepository.AddDriverReport(driverReport);
            }
            return(Task.CompletedTask);
        }
        public IActionResult UpdateDriverReport([FromBody] DriverReport report)
        {
            try
            {
                if (TryValidateModel(report))
                {
                    this.Log.Info($"Receiving driver report: {report}");

                    this.statisticsService.UpdateDriverReports(report);

                    return(Ok());
                }
                else
                {
                    return(ValidationProblem());
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
Ejemplo n.º 6
0
        public WebFleetDriver Map(DriverReport driver)
        {
            var result = new WebFleetDriver()
            {
                Name         = driver.personName.name1,
                Company      = driver.company,
                DriverNumber = driver.driverNo,
                Email        = driver.email,
                Pin          = driver.pin,
                Code         = driver.driverCode,
            };

            if (driver.currentVehicle != null)
            {
                result.CurrentVehicleObjectNumber = driver.currentVehicle.objectNo;
            }

            if (driver.addrPos != null && driver.addrPos.latitudeSpecified && driver.addrPos.longitudeSpecified)
            {
                result.CurrentPosition = new WebFleetPosition()
                {
                    Latitude  = driver.addrPos.latitude,
                    Longitude = driver.addrPos.longitude,
                };

                if (driver.location != null)
                {
                    result.CurrentPosition.PositionText = string.Format("{0} {1} {2}",
                                                                        driver.location.street, driver.location.city,
                                                                        driver.location.postcode);
                }
            }

            if (driver.phoneNumbers != null)
            {
                if (driver.phoneNumbers.phoneMobile != null && driver.phoneNumbers.phoneMobile.Length > 2)
                {
                    result.Phone = string.Format("{0} (Mobile)", driver.phoneNumbers.phoneMobile);
                }
                else if (driver.phoneNumbers.phonePersonal != null && driver.phoneNumbers.phonePersonal.Length > 2)
                {
                    result.Phone = string.Format("{0} (Personal)", driver.phoneNumbers.phonePersonal);
                }
                else if (driver.phoneNumbers.phoneBusiness != null && driver.phoneNumbers.phoneBusiness.Length > 2)
                {
                    result.Phone = string.Format("{0} (Business)", driver.phoneNumbers.phoneBusiness);
                }
            }

            if (driver.currentWorkStateSpecified && driver.currentWorkState != null)
            {
                result.WorkInfo = new WebFleetDriverWorkInfo();

                switch (driver.currentWorkState)
                {
                case WorkState.DRIVING:
                    result.WorkInfo.Status = WebFleetWorkState.Driving;
                    break;

                case WorkState.FREETIME:
                    result.WorkInfo.Status = WebFleetWorkState.FreeTime;
                    break;

                case WorkState.OTHER_WORK:
                    result.WorkInfo.Status = WebFleetWorkState.Other;
                    break;

                case WorkState.PAUSE:
                    result.WorkInfo.Status = WebFleetWorkState.Pause;
                    break;

                case WorkState.STANDBY:
                    result.WorkInfo.Status = WebFleetWorkState.Unknown;
                    break;

                case WorkState.UNKNOWN:
                    result.WorkInfo.Status = WebFleetWorkState.Unknown;
                    break;

                case WorkState.WORKING:
                    result.WorkInfo.Status = WebFleetWorkState.Working;
                    break;
                }


                result.WorkInfo.StartTime = driver.currentWorkingTimeStart;
                result.WorkInfo.EndTime   = driver.currentWorkingTimeEnd;

                if (driver.currentWorkingTime != null)
                {
                    result.WorkInfo.WorkTimeSpan = new TimeSpan(driver.currentWorkingTime.Value);
                }
            }
            return(result);
        }
 public void UpdateDriverReports(DriverReport report)
 {
     this.driverReports.Add(report);
 }
 /// <summary>
 /// Adds DriverReport to the store.
 /// </summary>
 /// <param name="driverReport"></param>
 public void AddDriverReport(DriverReport driverReport)
 {
     driverReport.CreatedAt = DateTime.Now;
     _driverReportStore.Add(driverReport);
 }
Ejemplo n.º 9
0
 public async Task Update(DriverReport report)
 {
     await this.ApiClient.SendAsync(report, Endpoints.DriverReport);
 }
Ejemplo n.º 10
0
        public List <DriverReport> ProcessFile(IFormFile file)
        {
            string              line;
            List <string>       drivers = new List <string>();
            List <Trip>         trips   = new List <Trip>();
            List <DriverReport> reports = new List <DriverReport>();

            try
            {
                if (file.Length > 0)
                {
                    using (var stream = new StreamReader(file.OpenReadStream()))
                    {
                        while ((line = stream.ReadLine()) != null)
                        {
                            line = line.Trim();
                            if (line.StartsWith("Driver"))
                            {
                                drivers.Add(line.Split(new[] { " " }, StringSplitOptions.None)[1]);
                            }
                            else if (line.StartsWith("Trip"))
                            {
                                var properties = line.Split(new[] { " " }, StringSplitOptions.None);
                                if (properties.Length == 5)
                                {
                                    var  startDate = new DateTime(1, 1, 1, Convert.ToInt32(properties[2].Split(new[] { ":" }, StringSplitOptions.None)[0]), Convert.ToInt32(properties[2].Split(new[] { ":" }, StringSplitOptions.None)[1]), 0);
                                    var  endDate   = new DateTime(1, 1, 1, Convert.ToInt32(properties[3].Split(new[] { ":" }, StringSplitOptions.None)[0]), Convert.ToInt32(properties[3].Split(new[] { ":" }, StringSplitOptions.None)[1]), 0);
                                    Trip newTrip   = new Trip {
                                        Driver   = properties[1],
                                        Duration = endDate - startDate,
                                        Distance = Convert.ToDouble(properties[4])
                                    };
                                    if (newTrip.Speed >= 5 && newTrip.Speed <= 100)
                                    {
                                        trips.Add(newTrip);
                                    }
                                }
                                else
                                {
                                    throw new Exception("The Trip information provided does not match expected formats: TRIP Driver HH:MM HH:MM Miles");
                                }
                            }
                            else
                            {
                                throw new Exception("The file contains a line with an unknown command.");
                            }
                        }
                    }
                }
                else
                {
                    throw new Exception("The file is empty.");
                }
                foreach (var driver in drivers)
                {
                    var driverTrips  = trips.Where(m => m.Driver.ToUpper().Equals(driver.ToUpper())).ToList();
                    var driverReport = new DriverReport {
                        DriverName = driver, Distance = 0
                    };
                    if (driverTrips.Any())
                    {
                        driverReport.Distance = (int)Math.Round(driverTrips.Sum(m => m.Distance));
                        driverReport.Speed    = (int)Math.Round(driverTrips.Average(m => m.Speed));
                    }
                    reports.Add(driverReport);
                }
                reports = reports.OrderByDescending(m => m.Distance).ToList();
                return(reports);
            }
            catch (Exception ex)
            {
                //log exception
                return(null);
            }
        }