Implements repeat every X days since last completion (Fixes #6941) (#8962)

* Implemented repeat after completion

* Added tests for repeat after completion in shouldDo.test.js

* Remove lastTicked

* Undoes removal of website/client/README.md
This commit is contained in:
Asif Mallik
2017-11-08 00:56:46 +06:00
committed by Sabe Jones
parent 19500600bc
commit 9d69d4b863
6 changed files with 96 additions and 4 deletions

View File

@@ -122,19 +122,39 @@ export function shouldDo (day, dailyTask, options = {}) {
if (dailyTask.frequency === 'daily') {
if (!dailyTask.everyX) return false; // error condition
let schedule = moment(startDate).recur()
.every(dailyTask.everyX).days();
let lastCompletedDate;
if (dailyTask.repeatAfterCompletion && dailyTask.lastCompleted) {
lastCompletedDate = moment(dailyTask.lastCompleted).zone(o.timezoneOffset).startOf('day');
}
if (options.nextDue) {
let filteredDates = [];
for (let i = 1; filteredDates.length < 6; i++) {
let calcDate = moment(startDate).add(dailyTask.everyX * i, 'days');
let calcDate;
if (dailyTask.repeatAfterCompletion) {
if (lastCompletedDate) {
calcDate = moment(lastCompletedDate).add(dailyTask.everyX + i - 1, 'days');
} else {
calcDate = moment(startDate).add(i, 'days');
}
} else {
calcDate = moment(startDate).add(dailyTask.everyX * i, 'days');
}
if (calcDate > startOfDayWithCDSTime) filteredDates.push(calcDate);
}
return filteredDates;
}
return schedule.matches(startOfDayWithCDSTime);
if (dailyTask.repeatAfterCompletion) {
if (lastCompletedDate) {
return moment(lastCompletedDate).add(dailyTask.everyX, 'days').isSameOrBefore(startOfDayWithCDSTime);
} else {
return moment(startDate).isSameOrBefore(startOfDayWithCDSTime);
}
} else {
let schedule = moment(startDate).recur().every(dailyTask.everyX).days();
return schedule.matches(startOfDayWithCDSTime);
}
} else if (dailyTask.frequency === 'weekly') {
let schedule = moment(startDate).recur();