Beispiel #1
0
        public static DriverStyleReview GetDriverStyleReview(
            this PerUnitDriverRidesReview perUnitDriverRidesReview,
            Company company, double rateScaleMaximum)
        {
            DriverRidesReview ridesReview = perUnitDriverRidesReview.DriverRidesReview;
            DriverStyleReview styleReview = new DriverStyleReview {
                DaysPeriod           = ridesReview.DaysPeriod,
                DriverUsername       = ridesReview.DriverUsername,
                AverageRideMilesRate = ridesReview.AverageRideMiles
                                       .Normalize(company.MaxAverageRideMiles, rateScaleMaximum),
                AverageSpeedRate = ridesReview.AverageSpeed
                                   .Normalize(company.MaxAverageSpeed, rateScaleMaximum),
                MileageRate = ridesReview.Mileage
                              .Normalize(company.MaxMileage, rateScaleMaximum),
                OverSpeedingAmountRate = ridesReview.OverSpeedingAmount
                                         .Normalize(company.MaxOverSpeedingAmount, rateScaleMaximum),
                PhoneUsageSecondsRate = ridesReview.PhoneUsageSeconds
                                        .Normalize(company.MaxPhoneUsageSeconds, rateScaleMaximum),
                SharpSlowDownsAmountRate = ridesReview.SharpSlowDownsAmount
                                           .Normalize(company.MaxSharpSlowDownsAmount, rateScaleMaximum),
                SharpSpeedUpsAmountRate = ridesReview.SharpSpeedUpsAmount
                                          .Normalize(company.MaxSharpSpeedUpsAmount, rateScaleMaximum),
                SharpSteeringsWheelAmountRate = ridesReview.SharpSteeringsWheelAmount
                                                .Normalize(company.MaxSharpSteeringsWheelAmount, rateScaleMaximum),
                SharpTurnEntriesAmountRate = ridesReview.SharpTurnEntriesAmount
                                             .Normalize(company.MaxSharpTurnEntriesAmount, rateScaleMaximum),
            };

            return(styleReview);
        }
Beispiel #2
0
        public async Task <DriverStyleReview> GetDriverStyleReview(DriverRidesReview driverRidesReview)
        {
            Driver driver = await driverRepository.GetByUsernameWithCompany(driverRidesReview.DriverUsername);

            DriverStyleReview driverStyleReview = driverRidesReview
                                                  .GetPerUnitDriverRidesReview(driver.Company.MileageUnit)
                                                  .GetDriverStyleReview(driver.Company, rateScaleMaximum);

            List <KeyValuePair <int, double> > ratesPriorities =
                GetRatesPriorities(driverStyleReview, driver.Company);


            driverStyleReview.TotalScore = convolutionService
                                           .CountConvolution(ratesPriorities.ToRatesWeightsList());

            return(driverStyleReview);
        }
Beispiel #3
0
        private List <KeyValuePair <int, double> > GetRatesPriorities(
            DriverStyleReview driverStyleReview, Company company)
        {
            List <KeyValuePair <int, double> > ratesPriorities = new();

            foreach (var property in company.GetType().GetProperties())
            {
                object[] attributes = property.GetCustomAttributes(false);
                if (attributes.Any(a => a is PriorityPropertyAttribute))
                {
                    int priority = Convert.ToInt32(property
                                                   .GetValue(company));
                    double rate = Convert.ToDouble(driverStyleReview
                                                   .GetType()
                                                   .GetProperty(property.Name.ToRatePropertyName())
                                                   .GetValue(driverStyleReview));

                    ratesPriorities.Add(new KeyValuePair <int, double>(priority, rate));
                }
            }

            return(ratesPriorities);
        }