Example #1
0
        /// <summary>
        /// Generates and returns average fare of total rides.
        /// </summary>
        /// <param name="rides">Array of object Ride providing multiple rides.</param>
        /// <param name="type">Type of ride.</param>
        /// <returns>Average fare for multiple rides</returns>
        public double GenerateAverageFare(Ride[] rides, RIDETYPE type = RIDETYPE.NORMAL_RIDE)
        {
            double total = 0;
            foreach (Ride ride in rides)
            {
                total += this.GenerateFare(ride.Distance, ride.Time, type);
            }

            return total / rides.Length;
        }
Example #2
0
        /// <summary>
        /// Calculates the fare based on type of ride.
        /// </summary>
        /// <param name="rideType">Type of the ride.</param>
        /// <param name="distance">The distance in km.</param>
        /// <param name="time">The time in minutes.</param>
        /// <returns>Fare generated based on type.</returns>
        /// <exception cref="CabInvoiceExceptions"></exception>
        public static double CalculateFare(this RIDETYPE rideType, double distance, int time)
        {
            switch (rideType)
            {
            case RIDETYPE.NORMAL_RIDE:
                return(Math.Max(NORMAL_COST_PER_KILOMETER * distance + time * NORMAL_COST_PER_MINUTE, NORMAL_MINIMUM_FARE));

            case RIDETYPE.PREMUIM_RIDE:
                return(Math.Max(PREMIUM_COST_PER_KILOMETER * distance + time * PREMIUM_COST_PER_MINUTE, PREMIUM_MINIMUM_FARE));

            default:
                throw new CabInvoiceExceptions(ExceptionEnums.ExceptionType.INVALID_RIDE_TYPE);
            }
        }
Example #3
0
 /// <summary>
 /// Returns the generated invoice based on userId. 
 /// </summary>
 /// <param name="userId">user id</param>
 /// <param name="type">enum type of ride</param>
 /// <returns>Invoice summary for given user id</returns>
 public InvoiceSummary GetInvoiceByuserId(string userId, RIDETYPE type = RIDETYPE.NORMAL_RIDE)
 {
    Ride[] rides = this.rideRepository.GetRides(userId);
    return this.GetInvoiceSummary(rides, type);
 }
Example #4
0
 /// <summary>
 /// Returns the generated invoice summary of given rides.
 /// </summary>
 /// <param name="rides">Array of object Ride for providing multiple rides.</param>
 /// <param name="type">Type of ride.</param>
 /// <returns>Invoice summary</returns>
 public InvoiceSummary GetInvoiceSummary(Ride[] rides, RIDETYPE type = RIDETYPE.NORMAL_RIDE)
 {
     return new InvoiceSummary(rides.Length, this.GenerateAverageFare(rides, type));
 }
Example #5
0
 /// <summary>
 /// Returns the generated fare based on type.
 /// </summary>
 /// <param name="distance">Distance in km.</param>
 /// <param name="time">Time in minutes.</param>
 /// <param name="type">Type of ride.</param>
 /// <returns> Returns generated fare</returns>
 public double GenerateFare(double distance, int time, RIDETYPE type = RIDETYPE.NORMAL_RIDE)
 {
     return type.CalculateFare(distance, time);
 }