vault backup: 2025-12-09 23:43:30
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 1m28s
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 1m28s
This commit is contained in:
136
content/.obsidian/plugins/tasknotes/data.json
vendored
136
content/.obsidian/plugins/tasknotes/data.json
vendored
@@ -288,5 +288,139 @@
|
|||||||
"googleCalendarSyncTokens": {},
|
"googleCalendarSyncTokens": {},
|
||||||
"enabledMicrosoftCalendars": [],
|
"enabledMicrosoftCalendars": [],
|
||||||
"microsoftCalendarSyncTokens": {},
|
"microsoftCalendarSyncTokens": {},
|
||||||
"lastSeenVersion": "4.1.3"
|
"lastSeenVersion": "4.1.3",
|
||||||
|
"modalFieldsConfig": {
|
||||||
|
"version": 1,
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"id": "title",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "basic",
|
||||||
|
"displayName": "Title",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "details",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "basic",
|
||||||
|
"displayName": "Details",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "contexts",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "metadata",
|
||||||
|
"displayName": "Contexts",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tags",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "metadata",
|
||||||
|
"displayName": "Tags",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "time-estimate",
|
||||||
|
"fieldType": "core",
|
||||||
|
"group": "metadata",
|
||||||
|
"displayName": "Time Estimate",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 2,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "projects",
|
||||||
|
"fieldType": "organization",
|
||||||
|
"group": "organization",
|
||||||
|
"displayName": "Projects",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "subtasks",
|
||||||
|
"fieldType": "organization",
|
||||||
|
"group": "organization",
|
||||||
|
"displayName": "Subtasks",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "blocked-by",
|
||||||
|
"fieldType": "dependency",
|
||||||
|
"group": "dependencies",
|
||||||
|
"displayName": "Blocked By",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 0,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "blocking",
|
||||||
|
"fieldType": "dependency",
|
||||||
|
"group": "dependencies",
|
||||||
|
"displayName": "Blocking",
|
||||||
|
"visibleInCreation": true,
|
||||||
|
"visibleInEdit": true,
|
||||||
|
"order": 1,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"id": "basic",
|
||||||
|
"displayName": "Basic Information",
|
||||||
|
"order": 0,
|
||||||
|
"collapsible": false,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "metadata",
|
||||||
|
"displayName": "Metadata",
|
||||||
|
"order": 1,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "organization",
|
||||||
|
"displayName": "Organization",
|
||||||
|
"order": 2,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dependencies",
|
||||||
|
"displayName": "Dependencies",
|
||||||
|
"order": 3,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom",
|
||||||
|
"displayName": "Custom Fields",
|
||||||
|
"order": 4,
|
||||||
|
"collapsible": true,
|
||||||
|
"defaultCollapsed": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"icsSubscriptions": []
|
||||||
}
|
}
|
||||||
38
content/.obsidian/workspace.json
vendored
38
content/.obsidian/workspace.json
vendored
@@ -4,21 +4,22 @@
|
|||||||
"type": "split",
|
"type": "split",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "b89ff55393473206",
|
"id": "33cf68c6719cb278",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "d89c9bed2dbbc633",
|
"id": "fb89c054e0a630b7",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "split-diff-view",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"aFile": "content/TaskNotes/Tasks/ETK-kortlek imorgon kl 09.md",
|
"file": "TaskNotes/Tasks/ETK-kortlek imorgon kl 09.md",
|
||||||
"bFile": "content/TaskNotes/Tasks/ETK-kortlek imorgon kl 09.md",
|
"mode": "source",
|
||||||
"aRef": ""
|
"source": false,
|
||||||
|
"backlinks": false
|
||||||
},
|
},
|
||||||
"icon": "diff",
|
"icon": "lucide-file",
|
||||||
"title": "Diff: ETK-kortlek imorgon kl 09"
|
"title": "ETK-kortlek imorgon kl 09"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -68,7 +69,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 435.50390243530273
|
"width": 294.50390243530273
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"id": "0948c66181b40af9",
|
"id": "0948c66181b40af9",
|
||||||
@@ -161,7 +162,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 332.5
|
"width": 332.5,
|
||||||
|
"collapsed": true
|
||||||
},
|
},
|
||||||
"left-ribbon": {
|
"left-ribbon": {
|
||||||
"hiddenItems": {
|
"hiddenItems": {
|
||||||
@@ -186,17 +188,17 @@
|
|||||||
"tasknotes:Create new task": false
|
"tasknotes:Create new task": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "d89c9bed2dbbc633",
|
"active": "fb89c054e0a630b7",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"TaskNotes/Tasks/ETK-kortlek imorgon kl 09.md",
|
|
||||||
"TaskNotes/Views/calendar-default.base",
|
|
||||||
"TaskNotes/Tasks",
|
|
||||||
"TaskNotes/Views/mini-calendar-default.base",
|
|
||||||
"Biokemi/Metabolism/Enzymer/Anteckningar I.md",
|
|
||||||
"TaskNotes/Views/relationships.base",
|
|
||||||
"TaskNotes/Views/agenda-default.base",
|
"TaskNotes/Views/agenda-default.base",
|
||||||
"TaskNotes/Views/tasks-default.base",
|
"TaskNotes/Views/mini-calendar-default.base",
|
||||||
"TaskNotes/Views/kanban-default.base",
|
"TaskNotes/Views/kanban-default.base",
|
||||||
|
"TaskNotes/Views/tasks-default.base",
|
||||||
|
"TaskNotes/Views/calendar-default.base",
|
||||||
|
"TaskNotes/Views/relationships.base",
|
||||||
|
"TaskNotes/Tasks/ETK-kortlek imorgon kl 09.md",
|
||||||
|
"TaskNotes/Tasks",
|
||||||
|
"Biokemi/Metabolism/Enzymer/Anteckningar I.md",
|
||||||
"TaskNotes/Views",
|
"TaskNotes/Views",
|
||||||
"TaskNotes",
|
"TaskNotes",
|
||||||
"Biokemi/Metabolism/🍖 Aminosyrametabolism/Anteckningar.md",
|
"Biokemi/Metabolism/🍖 Aminosyrametabolism/Anteckningar.md",
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
status: open
|
status: none
|
||||||
priority: normal
|
priority: normal
|
||||||
scheduled: 2025-12-10T09:00
|
scheduled: 2025-12-10T09:00
|
||||||
dateCreated: 2025-12-09T23:34:59.094+01:00
|
dateCreated: 2025-12-09T23:34:59.094+01:00
|
||||||
dateModified: 2025-12-09T23:35:37.370+01:00
|
dateModified: 2025-12-09T23:38:30.465+01:00
|
||||||
tags:
|
tags:
|
||||||
- task
|
- task
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,53 +1,49 @@
|
|||||||
# Agenda
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("task")
|
- file.hasTag("task")
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
daysUntilScheduled: 'if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: 'due && date(due) < today() && status != "done"'
|
isOverdue: due && date(due) < today() && status != "done"
|
||||||
isDueToday: 'due && date(due).date() == today()'
|
isDueToday: due && date(due).date() == today()
|
||||||
isDueThisWeek: 'due && date(due) >= today() && date(due) <= today() + "7d"'
|
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||||
isScheduledToday: 'scheduled && date(scheduled).date() == today()'
|
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||||
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||||
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||||
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if(due, date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if(due, date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))'
|
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||||
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||||
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||||
createdMonth: 'file.ctime.format("YYYY-MM")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||||
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||||
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||||
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||||
trackingStatus: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
trackingStatus: if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||||
nextDate: 'if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))'
|
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||||
daysUntilNext: 'if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: 'due || scheduled'
|
hasDate: due || scheduled
|
||||||
isToday: '(due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())'
|
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||||
isThisWeek: '(due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")'
|
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||||
nextDateCategory: 'if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))'
|
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||||
nextDateMonth: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))'
|
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||||
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||||
dueDateDisplay: 'if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesCalendar
|
- type: tasknotesCalendar
|
||||||
name: "Agenda"
|
name: Agenda
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -60,7 +56,7 @@ views:
|
|||||||
- file.name
|
- file.name
|
||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
calendarView: "listWeek"
|
calendarView: listWeek
|
||||||
startDateProperty: file.ctime
|
startDateProperty: file.ctime
|
||||||
listDayCount: 7
|
listDayCount: 7
|
||||||
titleProperty: file.basename
|
titleProperty: file.basename
|
||||||
|
|||||||
@@ -1,53 +1,52 @@
|
|||||||
# Kanban Board
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("task")
|
- file.hasTag("task")
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
daysUntilScheduled: 'if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: 'due && date(due) < today() && status != "done"'
|
isOverdue: due && date(due) < today() && status != "done"
|
||||||
isDueToday: 'due && date(due).date() == today()'
|
isDueToday: due && date(due).date() == today()
|
||||||
isDueThisWeek: 'due && date(due) >= today() && date(due) <= today() + "7d"'
|
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||||
isScheduledToday: 'scheduled && date(scheduled).date() == today()'
|
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||||
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||||
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||||
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if(due, date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if(due, date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))'
|
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||||
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||||
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||||
createdMonth: 'file.ctime.format("YYYY-MM")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||||
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||||
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||||
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||||
trackingStatus: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
trackingStatus: if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||||
nextDate: 'if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))'
|
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||||
daysUntilNext: 'if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: 'due || scheduled'
|
hasDate: due || scheduled
|
||||||
isToday: '(due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())'
|
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||||
isThisWeek: '(due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")'
|
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||||
nextDateCategory: 'if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))'
|
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||||
nextDateMonth: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))'
|
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||||
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||||
dueDateDisplay: 'if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesKanban
|
- type: tasknotesKanban
|
||||||
name: "Kanban Board"
|
name: Kanban Board
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -60,9 +59,6 @@ views:
|
|||||||
- file.name
|
- file.name
|
||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
groupBy:
|
|
||||||
property: status
|
|
||||||
direction: ASC
|
|
||||||
options:
|
options:
|
||||||
columnWidth: 280
|
columnWidth: 280
|
||||||
hideEmptyColumns: false
|
hideEmptyColumns: false
|
||||||
|
|||||||
@@ -1,58 +1,55 @@
|
|||||||
# Relationships
|
|
||||||
# This view shows all relationships for the current file
|
|
||||||
# Dynamically shows/hides tabs based on available data
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("task")
|
- file.hasTag("task")
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
daysUntilScheduled: 'if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: 'due && date(due) < today() && status != "done"'
|
isOverdue: due && date(due) < today() && status != "done"
|
||||||
isDueToday: 'due && date(due).date() == today()'
|
isDueToday: due && date(due).date() == today()
|
||||||
isDueThisWeek: 'due && date(due) >= today() && date(due) <= today() + "7d"'
|
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||||
isScheduledToday: 'scheduled && date(scheduled).date() == today()'
|
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||||
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||||
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||||
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if(due, date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if(due, date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))'
|
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||||
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||||
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||||
createdMonth: 'file.ctime.format("YYYY-MM")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||||
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||||
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||||
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||||
trackingStatus: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
trackingStatus: if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||||
nextDate: 'if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))'
|
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||||
daysUntilNext: 'if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: 'due || scheduled'
|
hasDate: due || scheduled
|
||||||
isToday: '(due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())'
|
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||||
isThisWeek: '(due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")'
|
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||||
nextDateCategory: 'if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))'
|
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||||
nextDateMonth: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))'
|
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||||
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||||
dueDateDisplay: 'if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesKanban
|
- type: tasknotesKanban
|
||||||
name: "Subtasks"
|
name: Subtasks
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- note.projects.contains(this.file.asLink())
|
- note.projects.contains(this.file.asLink())
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -65,11 +62,8 @@ views:
|
|||||||
- file.name
|
- file.name
|
||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
groupBy:
|
|
||||||
property: status
|
|
||||||
direction: ASC
|
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Projects"
|
name: Projects
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- list(this.projects).contains(file.asLink())
|
- list(this.projects).contains(file.asLink())
|
||||||
@@ -86,7 +80,7 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Blocked By"
|
name: Blocked By
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- list(this.note.blockedBy).map(value.uid).contains(file.asLink())
|
- list(this.note.blockedBy).map(value.uid).contains(file.asLink())
|
||||||
@@ -103,10 +97,13 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
- type: tasknotesKanban
|
- type: tasknotesKanban
|
||||||
name: "Blocking"
|
name: Blocking
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- note.blockedBy.map(value.uid).contains(this.file.asLink())
|
- note.blockedBy.map(value.uid).contains(this.file.asLink())
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -119,6 +116,3 @@ views:
|
|||||||
- file.name
|
- file.name
|
||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
groupBy:
|
|
||||||
property: status
|
|
||||||
direction: ASC
|
|
||||||
|
|||||||
@@ -1,53 +1,49 @@
|
|||||||
# All Tasks
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("task")
|
- file.hasTag("task")
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
daysUntilScheduled: 'if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: 'due && date(due) < today() && status != "done"'
|
isOverdue: due && date(due) < today() && status != "done"
|
||||||
isDueToday: 'due && date(due).date() == today()'
|
isDueToday: due && date(due).date() == today()
|
||||||
isDueThisWeek: 'due && date(due) >= today() && date(due) <= today() + "7d"'
|
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||||
isScheduledToday: 'scheduled && date(scheduled).date() == today()'
|
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||||
timeRemaining: 'if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)'
|
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||||
efficiencyRatio: 'if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)'
|
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||||
timeTrackedThisWeek: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
timeTrackedToday: 'if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)'
|
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if(due, date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if(due, date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))'
|
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||||
timeEstimateCategory: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))'
|
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||||
ageCategory: 'if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))'
|
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||||
createdMonth: 'file.ctime.format("YYYY-MM")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.format("YYYY-MM")'
|
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||||
priorityCategory: 'if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))'
|
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||||
projectCount: 'if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))'
|
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||||
contextCount: 'if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))'
|
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||||
trackingStatus: 'if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))'
|
trackingStatus: if(!timeEstimate || timeEstimate == 0, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||||
nextDate: 'if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))'
|
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||||
daysUntilNext: 'if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: 'due || scheduled'
|
hasDate: due || scheduled
|
||||||
isToday: '(due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())'
|
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||||
isThisWeek: '(due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")'
|
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||||
nextDateCategory: 'if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))'
|
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||||
nextDateMonth: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))'
|
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||||
timeTrackedFormatted: 'if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")'
|
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||||
dueDateDisplay: 'if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "All Tasks"
|
name: All Tasks
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -61,28 +57,22 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
sort:
|
sort:
|
||||||
- column: due
|
- property: due
|
||||||
direction: ASC
|
direction: ASC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Not Blocked"
|
name: Not Blocked
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence
|
||||||
- and:
|
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
||||||
- recurrence
|
|
||||||
- "!complete_instances.contains(today().format(\"yyyy-MM-dd\"))"
|
|
||||||
# Not blocked by any incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# No blocking dependencies at all
|
- blockedBy.isEmpty()
|
||||||
- blockedBy.isEmpty()
|
- list(blockedBy).filter(file(value.uid).properties.status != "done").isEmpty()
|
||||||
# All blocking tasks are completed (filter returns only incomplete, then check if empty)
|
|
||||||
- 'list(blockedBy).filter(file(value.uid).properties.status != "done").isEmpty()'
|
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -96,26 +86,22 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Today"
|
name: Today
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks (handles both recurring and non-recurring)
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence
|
||||||
- and:
|
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
||||||
- recurrence
|
|
||||||
- "!complete_instances.contains(today().format(\"yyyy-MM-dd\"))"
|
|
||||||
# Due or scheduled today
|
|
||||||
- or:
|
- or:
|
||||||
- date(due) == today()
|
- date(due) == today()
|
||||||
- date(scheduled) == today()
|
- date(scheduled) == today()
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -129,23 +115,19 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Overdue"
|
name: Overdue
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence
|
||||||
- and:
|
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
||||||
- recurrence
|
|
||||||
- "!complete_instances.contains(today().format(\"yyyy-MM-dd\"))"
|
|
||||||
# Due in the past
|
|
||||||
- date(due) < today()
|
- date(due) < today()
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
@@ -160,30 +142,26 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "This Week"
|
name: This Week
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence
|
||||||
- and:
|
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
||||||
- recurrence
|
|
||||||
- "!complete_instances.contains(today().format(\"yyyy-MM-dd\"))"
|
|
||||||
# Due or scheduled this week
|
|
||||||
- or:
|
- or:
|
||||||
- and:
|
- and:
|
||||||
- date(due) >= today()
|
- date(due) >= today()
|
||||||
- date(due) <= today() + "7 days"
|
- date(due) <= today() + "7 days"
|
||||||
- and:
|
- and:
|
||||||
- date(scheduled) >= today()
|
- date(scheduled) >= today()
|
||||||
- date(scheduled) <= today() + "7 days"
|
- date(scheduled) <= today() + "7 days"
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -197,23 +175,19 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Unscheduled"
|
name: Unscheduled
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence
|
||||||
- and:
|
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
||||||
- recurrence
|
|
||||||
- "!complete_instances.contains(today().format(\"yyyy-MM-dd\"))"
|
|
||||||
# No due date and no scheduled date
|
|
||||||
- date(due).isEmpty()
|
- date(due).isEmpty()
|
||||||
- date(scheduled).isEmpty()
|
- date(scheduled).isEmpty()
|
||||||
order:
|
order:
|
||||||
@@ -229,5 +203,5 @@ views:
|
|||||||
- recurrence
|
- recurrence
|
||||||
- complete_instances
|
- complete_instances
|
||||||
sort:
|
sort:
|
||||||
- column: status
|
- property: status
|
||||||
direction: ASC
|
direction: ASC
|
||||||
|
|||||||
Reference in New Issue
Block a user