public async Task <IActionResult> Edit(long id, [Bind("Id,StartTime,EndTime,StartFuelLevel,EndFuelLevel,StartOdometer,EndOdometer,NumberOfSpeedings,NumberOfNoSeatbelts,NumberOfHarshbreaks")] DeliverySummary deliverySummary) { if (id != deliverySummary.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(deliverySummary); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!DeliverySummaryExists(deliverySummary.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(deliverySummary)); }
public async Task <IActionResult> Create([Bind("Id,StartTime,EndTime,StartFuelLevel,EndFuelLevel,StartOdometer,EndOdometer,NumberOfSpeedings,NumberOfNoSeatbelts,NumberOfHarshbreaks")] DeliverySummary deliverySummary) { if (ModelState.IsValid) { _context.Add(deliverySummary); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(deliverySummary)); }
public JsonResult CancelDelivery(string vehicleID, string deliveryID) { // Removes a delivery from the DB // This delivery has NOT been completed, but rather assigned to a driver/vehicle but then the supervisor CANCLED it before it reached the destination // Returns true on success bool isSuccess = true; var delivery = _context.Deliveries.Find(Convert.ToInt64(deliveryID)); try { DeliverySummary deliverySummary = _context.DeliverySummaries.Where(s => s.Delivery == delivery).Single(); _context.Remove(deliverySummary); } catch (Exception) { } _context.Remove(delivery); _context.SaveChanges(); return(Json(new { Result = isSuccess })); }
public JsonResult StartDeliverySummary(StartDeliveryModel Start) { string error = ""; Delivery delivery; try { delivery = _context.Deliveries.Where(d => d.Id == Start.DeliveryId) .Include(d => d.Vehicle).First(); } catch (Exception) { error = "Delivery Not Found"; return(new JsonResult(error)); } if (delivery == null) { error = "Delivery Not Found"; return(new JsonResult(error)); } delivery.Started = true; try { using (var webClient = new WebClient()) { string url = "https://matrix.route.api.here.com/routing/7.2/calculatematrix.json" + "?app_id=ORWs1MBbnXAyzlgdPGpw" + "&app_code=ftEQwIdOxSdxiRv6pd1Rvw"; url += "&start0" + "=" + delivery.SourceLatitude + "," + delivery.SourceLongtitude; url += "&destination0=" + delivery.DestinationLatitude + "," + delivery.DestinationLongtitude; url += "&summaryAttributes=distance,traveltime&mode=fastest;car;traffic:disabled"; var rawJSON = webClient.DownloadStringTaskAsync(url).Result; JObject rss = JObject.Parse(rawJSON); delivery.OptimalDistance = (float)rss["response"]["matrixEntry"][0]["summary"]["distance"] / 1000; delivery.OptimalTime = (int)rss["response"]["matrixEntry"][0]["summary"]["travelTime"] / 60; } } catch (Exception) { // error = "Optimal Distance Error"; //return new JsonResult(error); } delivery.OptimalFuelConsumption = delivery.OptimalDistance * delivery.Vehicle.FuelConsumption; DeliverySummary summary = new DeliverySummary() { Delivery = delivery, StartTime = Start.StartTime, EndTime = Start.StartTime, StartFuelLevel = Start.StartFuelLevel, EndFuelLevel = Start.StartFuelLevel, StartOdometer = Start.StartOdometer, EndOdometer = Start.StartOdometer, HardCorneringRate = 5, HarshAccelerationAndDeceleration = 5, HarshBreakingsRate = 5, FuelConsumptionRate = 5, OnTimeDeliveryRate = 5, Idling = 5, OverRevving = 5, SpeedingsRate = 5, SeatBeltRate = 5 }; Vehicle V = delivery.Vehicle; if (V != null) { V.Latitude = Start.Latitude; V.Longtitude = Start.Longtitude; V.isCurrentlyActive = true; } else { error = "Vehicle Error"; return(new JsonResult(error)); } _context.Deliveries.Update(delivery); _context.DeliverySummaries.Add(summary); _context.Vehicles.Update(V); _context.SaveChanges(); long DeliverySummaryId = summary.Id; return(Json(new { DeliverySummaryId })); }
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 }); } }
public async Task <ActionResult <Result1> > UpdateDeliveryInfo(VehicleLog info) { try { DeliverySummary summary = _context.DeliverySummaries .Where(s => s.Id == info.DeliverySummaryId) .Include(s => s.Delivery) .ThenInclude(d => d.Vehicle) .First(); Vehicle V = summary.Delivery.Vehicle; if (V != null) { V.Latitude = info.Latitude; V.Longtitude = info.Longtitude; } if (info.HardCornering) { summary.HardCorneringRate--; if (summary.HardCorneringRate < 0) { summary.HardCorneringRate = 0; } } if (info.HarshAccelerationAndDeceleration) { summary.HarshAccelerationAndDeceleration--; if (summary.HarshAccelerationAndDeceleration < 0) { summary.HarshAccelerationAndDeceleration = 0; } } if (info.HarshBreaking) { summary.HarshBreakingsRate--; if (summary.HarshBreakingsRate < 0) { summary.HarshBreakingsRate = 0; } } if (info.OverRevving) { summary.OverRevving--; if (summary.OverRevving < 0) { summary.OverRevving = 0; } } if (info.Speeding) { summary.SpeedingsRate--; if (summary.SpeedingsRate < 0) { summary.SpeedingsRate = 0; } } if (info.SeatBelt) { summary.SeatBeltRate--; if (summary.SeatBeltRate < 0) { summary.SeatBeltRate = 0; } } if (info.EngineRunning && info.Odometer == summary.EndOdometer) { summary.Idling--; if (summary.Idling < 0) { summary.Idling = 0; } } summary.EndOdometer = info.Odometer; _context.DeliverySummaries.Update(summary); _context.Vehicles.Update(V); await _context.SaveChangesAsync(); return(new Result1(true)); } catch (Exception) { return(new Result1(false)); } }