Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
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
                });
            }
        }