public void TestCalculateNextPlanDates() { DateTimeOffset d1 = DateTimeOffset.Now; PlannerResult result = Planner.PlanNext(ReviewValues.Values.VALUE_1, d1, null); Assert.AreEqual(1, result.DaysNext); Assert.AreEqual(d1.AddDays(1), result.NextDate); result = Planner.PlanNext(ReviewValues.Values.VALUE_4, d1, null); Assert.AreEqual(12, result.DaysNext); Assert.AreEqual(d1.AddDays(12), result.NextDate); result = Planner.PlanNext(ReviewValues.Values.VALUE_2, d1, d1.AddDays(-122)); Assert.AreEqual(137, result.DaysNext); Assert.AreEqual(d1.AddDays(137), result.NextDate); result = Planner.PlanNext(ReviewValues.Values.VALUE_0, d1, null); Assert.AreEqual(0, result.DaysNext); Assert.AreEqual(d1, result.NextDate); }
private async Task SaveReview(int cardInstanceId) { using (var cardDao = new CardDao(DbContext)) { CardInstance cardInstance = await cardDao.GetCardInstanceWithPlan(cardInstanceId); if (cardInstance == null) { return; } DateTimeOffset now = DateTimeOffset.Now; CardPlan plan = cardInstance.Plan; if (plan.NextDate != null && now < plan.NextDate) { return; } var value = int.Parse(GetParameter("value")); Values reviewValue = GetValueFromOrdinal(value); PlannerResult plannerResult = Planner.PlanNext( reviewValue, now, plan.LastDate); plan.LastDate = now; plan.LastDays = plannerResult.PassedDays; plan.NextDate = plannerResult.NextDate; plan.NextDays = plannerResult.DaysNext; var review = cardInstance.AddReview(); review.DateTime = now; review.Value = reviewValue; await cardDao.UpdateCardInstance(cardInstance); } }