mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-18 06:49:47 +02:00
Fixed weekend between dates; Manual endtimes; Additional testing
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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')
|
||||||
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user