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);
        }
示例#2
0
        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);
            }
        }