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));
        }
Exemplo n.º 3
0
        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 }));
        }
Exemplo n.º 4
0
        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 }));
        }
Exemplo n.º 5
0
        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
                });
            }
        }
Exemplo n.º 6
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));
            }
        }