/// <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; }
/// <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); } }
/// <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); }
/// <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)); }
/// <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); }