public IHttpActionResult FinishDelivery(FinishDeliveryModel model) { var order = context.GetTable <Order>().Where(x => x.Id == model.OrderId).FirstOrDefault(); TimeSpan dif = DateTime.Now - order.StateChangeTimestamp; order.StateChangeTimestamp = DateTime.Now; order.State = OrderStateEnum.Deliveried; context.SubmitChanges(); return(Ok(dif)); }
public async Task <ActionResult <Result2> > FinishDeliverySummary(FinishDeliveryModel finish) { try { DeliverySummary summary = _context.DeliverySummaries .Where(d => d.Id == finish.DeliverySummaryId).Include(d => d.Delivery).Single(); summary.Delivery.Finished = true; Driver driver = _context.Deliveries.Where(d => d.Id == summary.Delivery.Id) .Include(d => d.Driver).First().Driver; Company company = _context.Drivers.Where(d => d.Id == driver.Id).Include(d => d.Company).First().Company; summary.EndFuelLevel = finish.EndFuelLevel; summary.EndOdometer = finish.EndOdometer; summary.EndTime = finish.EndTime; summary.FuelConsumptionRate = (summary.Delivery.OptimalFuelConsumption / (summary.StartFuelLevel - summary.EndFuelLevel)) * 5; summary.OnTimeDeliveryRate = (summary.Delivery.OptimalTime / (summary.EndTime - summary.StartTime).Minutes) * 5; float DistanceRate = (summary.Delivery.OptimalDistance / (summary.EndOdometer - summary.StartOdometer)) * 5; //Remove later summary.FuelConsumptionRate = 5; summary.OnTimeDeliveryRate = 5; DistanceRate = 5; // summary.PerformanceScore = (summary.OverRevving + summary.HardCorneringRate + summary.HarshAccelerationAndDeceleration + summary.HarshBreakingsRate + summary.Idling + summary.FuelConsumptionRate) / 6; summary.ComplianceScore = (summary.OnTimeDeliveryRate + summary.SpeedingsRate + DistanceRate) / 3; summary.SafetyScore = (summary.SeatBeltRate + summary.SpeedingsRate + summary.HarshBreakingsRate + summary.HarshAccelerationAndDeceleration) / 4; float DeliveryScore = (summary.PerformanceScore + summary.ComplianceScore + summary.SafetyScore) / 3; driver.Score = (_context.DeliverySummaries.Where(d => d.Delivery.Driver == driver) .Average(d => d.PerformanceScore) + _context.DeliverySummaries.Where(d => d.Delivery.Driver == driver) .Average(d => d.ComplianceScore) + _context.DeliverySummaries.Where(d => d.Delivery.Driver == driver) .Average(d => d.SafetyScore)) / 3; _context.DeliverySummaries.Update(summary); //_context.Deliveries.Update(summary.Delivery); _context.Drivers.Update(driver); _context.SaveChanges(); Driver[] drivers = _context.Drivers.Where(d => d.Company == company) .OrderByDescending(d => d.Score).ToArray(); for (int i = 0; i < drivers.Length; i++) { drivers[i].Rank = i + 1; } _context.UpdateRange(drivers); _context.SaveChanges(); await _context.SaveChangesAsync(); return(new Result2() { DeliveryScore = DeliveryScore, OverallScore = driver.Score, Rank = driver.Rank, PerformanceScore = summary.PerformanceScore, ComplianceScore = summary.ComplianceScore, SafetyScore = summary.SafetyScore, NbOfDrivers = drivers.Length }); } catch (Exception) { return(new Result2() { DeliveryScore = 0, OverallScore = 0, Rank = 0, PerformanceScore = 0, ComplianceScore = 0, SafetyScore = 0, NbOfDrivers = 0 }); } }