private Tuple <Distance, PaceData, string> DistanceAndPaceOfLogEvent(dynamic runLogEvent) { var route = ((object)runLogEvent).Route(dataCache); var distance = ((object)route).Distance().ConvertTo(HttpContext.UserDistanceUnits(dataCache)); var paceData = new PaceData { Distance = distance, Time = runLogEvent.TimeTaken, Calc = "Pace" }; var paceCalc = new PaceCalculator(); paceCalc.Calculate(paceData); return(Tuple.Create(distance, paceData, route.Name.Replace('"', '\''))); }
public void Given_5_min_per_mile_should_convert_to_8_min_km() { var calc = new PaceCalculator(); var pace = new PaceData { Pace = "5:00", Calc = "pacemilesunits" }; calc.Calculate(pace); Assert.Equal("8:02", pace.Pace); // 5 min/mile is actually a little over 8 min/km pace.Calc = "pacekmunits"; calc.Calculate(pace); Assert.Equal("4:59", pace.Pace); // and then due to rounding, converting back gives just under 5min/mile }
public RunLogModel(HttpContext context, dynamic runLogEvent, IDataCache dataCache) { this.context = context; RunLogEvent = runLogEvent; this.dataCache = dataCache; TimeTaken = runLogEvent.TimeTaken; Route = ((object)RunLogEvent).Route(dataCache); Distance = ((object)Route).Distance().ConvertTo(context.UserDistanceUnits(dataCache)); var paceData = new PaceData { Distance = Distance, Time = TimeTaken, Calc = "Pace" }; var paceCalc = new PaceCalculator(); paceCalc.Calculate(paceData); Pace = paceData; }
public ActionResult CalcPace(PaceData paceCalculation) { if (!ModelState.IsValid) { return(Json(paceCalculation)); } logger.LogInformation("Calculating pace (route/dist/time/pace/calc): {0}/{1}/{2}/{3}/{4}", paceCalculation.Route, paceCalculation.Distance, paceCalculation.Time, paceCalculation.Pace, paceCalculation.Calc); if (paceCalculation.HasRoute) { var userUnits = paceCalculation.Distance.BaseUnits; var route = MassiveDB.Current.FindRoute(paceCalculation.Route.Value); if (route != null) { paceCalculation.Distance = new Distance((double)route.Distance, (DistanceUnits)route.DistanceUnits).ConvertTo(userUnits); } } paceCalc.Calculate(paceCalculation); logger.LogInformation("Calculated pace (route/dist/time/pace/calc): {0}/{1}/{2}/{3}/{4}", paceCalculation.Route, paceCalculation.Distance, paceCalculation.Time, paceCalculation.Pace, paceCalculation.Calc); return(Json(paceCalculation)); }
public PaceModel CalculatePace() { PaceModel objPaceModel = new PaceModel(); DateTime currDate = new DateTime(2015, 08, 26); DateTime eDateSwp = DateTime.Now; DateTime sDateSwp = GetPreviousDate(currDate.DayOfWeek, currDate, out eDateSwp); DateTime eDateVac = DateTime.Now; DateTime sDateVac = GetUpcomingDate(currDate.DayOfWeek, currDate, out eDateVac); PaceData objPaceDataDAL = new PaceData(); List <Vacation> lstVacation = _proxy.GetVacationData(); List <Swipe> lstSwipe = objPaceDataDAL.GetSwipeData(); List <DateTime> vacationDates = new List <DateTime>(); lstVacation = lstVacation.Where(vac => vac.FromDate <= eDateVac && vac.ToDate >= sDateVac).ToList(); if (lstVacation.Count() > 0) { DateTime vacStart = lstVacation.Where(vac => vac.FromDate <= vac.FromDate).First().FromDate; DateTime vacEnd = lstVacation.Where(vac => vac.ToDate >= vac.ToDate).Last().ToDate; vacationDates = GetVacationDates(vacStart, vacEnd); } lstSwipe = lstSwipe.Where(vac => vac.SwipeDate >= sDateSwp && vac.SwipeDate <= eDateSwp).ToList(); List <DateTime> lstDates = lstSwipe.GroupBy(a => a.SwipeDate).Select(b => b.First().SwipeDate).ToList(); List <SwipeHours> swipes = new List <SwipeHours>(); foreach (DateTime date in lstDates) { foreach (Swipe sp in lstSwipe.Where(a => a.SwipeDate == date).ToList()) { SwipeHours spHr = swipes.Where(b => b.Date == sp.SwipeDate).FirstOrDefault(); if (spHr != null) { if (sp.In < sp.Out) { double hrs = (sp.Out - sp.In).TotalHours; spHr.Hours = spHr.Hours + Convert.ToInt32(hrs); swipes.Remove(spHr); swipes.Add(spHr); } } else { if (sp.In < sp.Out) { double hrs = (sp.Out - sp.In).TotalHours; spHr = new SwipeHours(); spHr.Hours = Convert.ToInt32(hrs); spHr.Date = sp.SwipeDate; swipes.Add(spHr); } } lstSwipe.Remove(sp); } } DateTime weekSt = currDate; DateTime weekEn = GetWeekStartEnd(currDate, out weekSt); objPaceModel.SwipeHr = new List <SwipeHours>(); objPaceModel.VacationHr = new List <SwipeHours>(); objPaceModel.OtherHr = new List <SwipeHours>(); foreach (DateTime weekDts in GetVacationDates(weekSt, weekEn)) { SwipeHours objSwipeHours = swipes.Where(a => a.Date == weekDts).FirstOrDefault(); SwipeHours objVacHours; SwipeHours objOthr = new SwipeHours(); if (objSwipeHours == null) { objSwipeHours = new SwipeHours(); objSwipeHours.Date = weekDts; objSwipeHours.Hours = 0; } if (weekDts.DayOfWeek == DayOfWeek.Friday) { objSwipeHours = new SwipeHours(); objSwipeHours.Date = weekDts; objSwipeHours.Hours = 5; objOthr.Hours = 4; } objPaceModel.SwipeHr.Add(objSwipeHours); if (vacationDates.Any(a => a == weekDts)) { objVacHours = new SwipeHours(); objVacHours.Date = weekDts; objVacHours.Hours = 8; } else { objVacHours = new SwipeHours(); objVacHours.Date = weekDts; objVacHours.Hours = 0; } objPaceModel.VacationHr.Add(objVacHours); objOthr.Date = weekDts; objPaceModel.OtherHr.Add(objOthr); } ////foreach (DateTime dtm in lstDates) ////{ //// if (!swipes.Any(a => a.Date == dtm)) //// swipes.Add(new SwipeHours { Date = dtm, Hours = 8 }); ////} ////objPaceModel.SwipeHr = swipes; return(objPaceModel); }