Fixed weekend between dates; Manual endtimes; Additional testing

This commit is contained in:
João Paulo Poffo
2019-02-07 11:21:00 -02:00
parent 1d04c7e1fe
commit 8a8b7bd48c
2 changed files with 63 additions and 20 deletions

View File

@@ -33,7 +33,7 @@ export const setDateFormat = function (txt) {
} }
export const setExcludes = function (txt) { export const setExcludes = function (txt) {
excludes = txt.split(' ') excludes = txt.toLowerCase().split(/[\s,]+/)
} }
export const setTitle = function (txt) { export const setTitle = function (txt) {
@@ -67,18 +67,27 @@ const isInvalidDate = function (date, dateFormat, excludes) {
if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) { if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) {
return true return true
} }
if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) {
return true
}
return excludes.indexOf(date.format(dateFormat.trim())) >= 0 return excludes.indexOf(date.format(dateFormat.trim())) >= 0
} }
const getNextValidDate = function (date, dateFormat, excludes) { const fixTaskDates = function (task, dateFormat, excludes) {
let mDate = moment(date, dateFormat, true) if (excludes.length && ! task.manualEndTime) {
while (isInvalidDate(mDate, dateFormat, excludes)) { let startTime = moment(task.startTime).add(1, 'd')
mDate = mDate.add(1, 'd') let endTime = moment(task.endTime)
while (startTime.date() <= endTime.date()) {
if (isInvalidDate(startTime, dateFormat, excludes)) {
endTime.add(1, 'd')
}
startTime.add(1, 'd')
}
task.endTime = endTime.toDate()
} }
return mDate.toDate()
} }
const getStartDate = function (prevTime, dateFormat, excludes, str) { const getStartDate = function (prevTime, dateFormat, str) {
str = str.trim() str = str.trim()
// Test for after // Test for after
@@ -99,17 +108,17 @@ const getStartDate = function (prevTime, dateFormat, excludes, str) {
// Check for actual date set // Check for actual date set
let mDate = moment(str, dateFormat.trim(), true) let mDate = moment(str, dateFormat.trim(), true)
if (mDate.isValid()) { if (mDate.isValid()) {
return getNextValidDate(mDate, dateFormat, excludes) return mDate.toDate()
} else { } else {
logger.debug('Invalid date:' + str) logger.debug('Invalid date:' + str)
logger.debug('With date format:' + dateFormat.trim()) logger.debug('With date format:' + dateFormat.trim())
} }
// Default date - now // Default date - now
return getNextValidDate(new Date(), dateFormat, excludes) return new Date()
} }
const getEndDate = function (prevTime, dateFormat, excludes, str) { const getEndDate = function (prevTime, dateFormat, str) {
str = str.trim() str = str.trim()
// Check for actual date // Check for actual date
@@ -143,7 +152,7 @@ const getEndDate = function (prevTime, dateFormat, excludes, str) {
} }
} }
// Default date - now // Default date - now
return getNextValidDate(d, dateFormat, excludes) return d.toDate()
} }
let taskCnt = 0 let taskCnt = 0
@@ -202,25 +211,32 @@ const compileData = function (prevTask, dataStr) {
data[i] = data[i].trim() data[i] = data[i].trim()
} }
let endTimeData = ''
switch (data.length) { switch (data.length) {
case 1: case 1:
task.id = parseId() task.id = parseId()
task.startTime = prevTask.endTime task.startTime = prevTask.endTime
task.endTime = getEndDate(task.startTime, dateFormat, excludes, data[0]) endTimeData = data[0]
break break
case 2: case 2:
task.id = parseId() task.id = parseId()
task.startTime = getStartDate(undefined, dateFormat, excludes, data[0]) task.startTime = getStartDate(undefined, dateFormat, data[0])
task.endTime = getEndDate(task.startTime, dateFormat, excludes, data[1]) endTimeData = data[1]
break break
case 3: case 3:
task.id = parseId(data[0]) task.id = parseId(data[0])
task.startTime = getStartDate(undefined, dateFormat, excludes, data[1]) task.startTime = getStartDate(undefined, dateFormat, data[1])
task.endTime = getEndDate(task.startTime, dateFormat, excludes, data[2]) endTimeData = data[2]
break break
default: default:
} }
if (endTimeData) {
task.endTime = getEndDate(task.startTime, dateFormat, endTimeData)
task.manualEndTime = endTimeData == moment(task.endTime).format(dateFormat.trim())
fixTaskDates(task, dateFormat, excludes)
}
return task return task
} }
@@ -291,6 +307,7 @@ export const addTask = function (descr, data) {
section: currentSection, section: currentSection,
type: currentSection, type: currentSection,
processed: false, processed: false,
manualEndTime: false,
raw: { data: data }, raw: { data: data },
task: descr task: descr
} }
@@ -343,7 +360,7 @@ const compileTasks = function () {
task.startTime = prevTask.endTime task.startTime = prevTask.endTime
break break
case 'getStartDate': case 'getStartDate':
startTime = getStartDate(undefined, dateFormat, excludes, rawTasks[pos].raw.startTime.startData) startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData)
if (startTime) { if (startTime) {
rawTasks[pos].startTime = startTime rawTasks[pos].startTime = startTime
} }
@@ -351,9 +368,11 @@ const compileTasks = function () {
} }
if (rawTasks[pos].startTime) { if (rawTasks[pos].startTime) {
rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, excludes, rawTasks[pos].raw.endTime.data) rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data)
if (rawTasks[pos].endTime) { if (rawTasks[pos].endTime) {
rawTasks[pos].processed = true rawTasks[pos].processed = true
rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data == moment(rawTasks[pos].endTime).format(dateFormat.trim());
fixTaskDates(rawTasks[pos], dateFormat, excludes);
} }
} }

View File

@@ -174,16 +174,40 @@ describe('when using the ganttDb', function () {
}) })
it('should ignore weekends', function () { it('should ignore weekends', function () {
ganttDb.setDateFormat('YYYY-MM-DD') ganttDb.setDateFormat('YYYY-MM-DD')
ganttDb.setExcludes('weekends 2019-02-06') ganttDb.setExcludes('weekends 2019-02-06,friday')
ganttDb.addSection('testa1') ganttDb.addSection('testa1')
ganttDb.addTask('test1', 'id1,2019-02-01,1d') ganttDb.addTask('test1', 'id1,2019-02-01,1d')
ganttDb.addTask('test2', 'id2,after id1,3d') ganttDb.addTask('test2', 'id2,after id1,2d')
ganttDb.addTask('test3', 'id3,after id2,7d')
ganttDb.addTask('test4', 'id4,2019-02-01,2019-02-20') // Fixed endTime
ganttDb.addTask('test5', 'id5,after id4,1d')
const tasks = ganttDb.getTasks() const tasks = ganttDb.getTasks()
expect(tasks[0].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate())
expect(tasks[0].endTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate())
expect(tasks[0].id).toEqual('id1')
expect(tasks[0].task).toEqual('test1')
expect(tasks[1].startTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()) expect(tasks[1].startTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate())
expect(tasks[1].endTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate()) expect(tasks[1].endTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate())
expect(tasks[1].id).toEqual('id2') expect(tasks[1].id).toEqual('id2')
expect(tasks[1].task).toEqual('test2') expect(tasks[1].task).toEqual('test2')
expect(tasks[2].startTime).toEqual(moment('2019-02-07', 'YYYY-MM-DD').toDate())
expect(tasks[2].endTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate())
expect(tasks[2].id).toEqual('id3')
expect(tasks[2].task).toEqual('test3')
expect(tasks[3].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate())
expect(tasks[3].endTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate())
expect(tasks[3].id).toEqual('id4')
expect(tasks[3].task).toEqual('test4')
expect(tasks[4].startTime).toEqual(moment('2019-02-20', 'YYYY-MM-DD').toDate())
expect(tasks[4].endTime).toEqual(moment('2019-02-21', 'YYYY-MM-DD').toDate())
expect(tasks[4].id).toEqual('id5')
expect(tasks[4].task).toEqual('test5')
}) })
}) })