filters: and: - note.up == "[[Tasks]]" formulas: 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) daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null) daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor() daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor() isOverdue: due && date(due) < today() && status != "done" && status != "cancelled" isDueToday: due && date(due).date() == today() isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d" isScheduledToday: scheduled && date(scheduled).date() == today() isRecurring: recurrence && !recurrence.isEmpty() hasTimeEstimate: time-estimate-mim && time-estimate-mim > 0 timeRemaining: if(time-estimate-mim && time-estimate-mim > 0, time-estimate-mim - if(time-entries, list(time-entries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null) efficiencyRatio: if(time-estimate-mim && time-estimate-mim > 0 && time-entries, (list(time-entries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / time-estimate-mim * 100).round(), null) timeTrackedThisWeek: if(time-entries, list(time-entries).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(time-entries, list(time-entries).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") dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date") scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "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"))))) timeEstimateCategory: if(!time-estimate-mim || time-estimate-mim == 0, "No estimate", if(time-estimate-mim < 30, "Quick (<30m)", if(time-estimate-mim <= 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"))) createdMonth: file.ctime.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")))) 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")) trackingStatus: if(!time-estimate-mim || time-estimate-mim == 0, "No estimate", if(!time-entries || list(time-entries).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)) daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled)) hasDate: due || scheduled 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") 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"))) 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)) timeTrackedFormatted: if(time-entries, if(list(time-entries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(time-entries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(time-entries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(time-entries).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"))))))) views: - type: tasknotesTaskList name: All Tasks order: - status - due - scheduled - projects - contexts - file.tags - blocked-by - time-entries - file.name - recurrence - instances-complete sort: - property: due direction: ASC enableSearch: true - type: tasknotesTaskList name: Not Blocked filters: and: - or: - and: - recurrence.isEmpty() - status != "done" - status != "cancelled" - and: - recurrence - '!instances-complete.contains(today().format("yyyy-MM-dd"))' - or: - blocked-by.isEmpty() - list(blocked-by).filter(file(value.uid).properties.status != "done" && file(value.uid).properties.status != "cancelled").isEmpty() order: - status - due - scheduled - projects - contexts - file.tags - blocked-by - time-entries - file.name - recurrence - instances-complete sort: - property: formula.urgencyScore direction: DESC - type: tasknotesTaskList name: Today filters: and: - or: - and: - recurrence.isEmpty() - status != "done" - status != "cancelled" - and: - recurrence - '!instances-complete.contains(today().format("yyyy-MM-dd"))' - or: - date(due) == today() - date(scheduled) == today() order: - status - due - scheduled - projects - contexts - file.tags - blocked-by - time-entries - file.name - recurrence - instances-complete sort: - property: formula.urgencyScore direction: DESC - type: tasknotesTaskList name: Overdue filters: and: - or: - and: - recurrence.isEmpty() - status != "done" - status != "cancelled" - and: - recurrence - '!instances-complete.contains(today().format("yyyy-MM-dd"))' - date(due) < today() order: - status - due - scheduled - projects - contexts - file.tags - blocked-by - time-entries - file.name - recurrence - instances-complete sort: - property: formula.urgencyScore direction: DESC - type: tasknotesTaskList name: This Week filters: and: - or: - and: - recurrence.isEmpty() - status != "done" - status != "cancelled" - and: - recurrence - '!instances-complete.contains(today().format("yyyy-MM-dd"))' - or: - and: - date(due) >= today() - date(due) <= today() + "7 days" - and: - date(scheduled) >= today() - date(scheduled) <= today() + "7 days" order: - status - due - scheduled - projects - contexts - file.tags - blocked-by - time-entries - file.name - recurrence - instances-complete sort: - property: formula.urgencyScore direction: DESC - type: tasknotesTaskList name: Unscheduled filters: and: - or: - and: - recurrence.isEmpty() - status != "done" - status != "cancelled" - and: - recurrence - '!instances-complete.contains(today().format("yyyy-MM-dd"))' - date(due).isEmpty() - date(scheduled).isEmpty() order: - status - due - scheduled - projects - contexts - file.tags - blocked-by - time-entries - file.name - recurrence - instances-complete sort: - property: status direction: ASC