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
        }
示例#3
0
            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;
            }
示例#4
0
        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));
        }
示例#5
0
        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);
        }