js date init

main
Mel 3 years ago
parent f57bc4a3fc
commit d9e3e77614

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.4.17",
"version": "0.4.18",
"minAppVersion": "0.12.0",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",

@ -93,7 +93,7 @@
},
"syntaxHighlight": false,
"copyButton": false,
"version": "6.3.4",
"version": "6.3.5",
"autoCollapse": false,
"defaultCollapseType": "open",
"syncLinks": true,

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-admonition",
"name": "Admonition",
"version": "6.3.4",
"version": "6.3.5",
"minAppVersion": "0.11.0",
"description": "Admonition block-styled content for Obsidian.md",
"author": "Jeremy Valentine",

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{
"id": "obsidian-dice-roller",
"name": "Dice Roller",
"version": "7.1.3",
"version": "7.1.4",
"minAppVersion": "0.12.15",
"description": "Inline dice rolling for Obsidian.md",
"author": "Jeremy Valentine",

@ -9,8 +9,8 @@
"state": {
"type": "markdown",
"state": {
"file": "02.01 London/@Bars London.md",
"mode": "source"
"file": "05.01 Computer setup/@Computer Set Up.md",
"mode": "preview"
}
}
}
@ -76,7 +76,7 @@
"state": {
"type": "backlink",
"state": {
"file": "02.01 London/@Bars London.md",
"file": "05.01 Computer setup/@Computer Set Up.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
@ -104,7 +104,7 @@
}
},
{
"id": "348cd33fd194fe86",
"id": "0d5625ecf366c4df",
"type": "leaf",
"state": {
"type": "DICE_ROLLER_VIEW",
@ -115,15 +115,15 @@
},
"active": "c1cbd199334b4022",
"lastOpenFiles": [
"02.01 London/@Bars London.md",
"05.01 Computer setup/@Computer Set Up.md",
"02.01 London/@Restaurants London.md",
"03.01 Reading list/@Reading master.md",
"06.02 Investments/Crypto Investments.md",
"06.02 Investments/VC Investments.md",
"06.02 Investments/Equity Investments.md",
"06.02 Investments/JS snippet.md",
"00.01 Admin/Templates/Template Travel.md",
"00.01 Admin/Templates/Template Task.md"
"06.02 Investments/@Investment Task master.md",
"06.02 Investments/Equity Tasks.md",
"04.01 lebv.org/@lebv.org Tasks.md",
"01.01 Life Orga/@Life Organisation.md",
"04.01 lebv.org/Hosting Tasks.md",
"00.01 Admin/Templates/layout$qtask.md",
"01.01 Life Orga/Lifestyle.md",
"01.01 Life Orga/Life Admin.md",
"01.01 Life Orga/Personal projects.md"
]
}

@ -1,6 +1,4 @@
```dataview
table Priority, Status, NextReviewDate as "Next Review Date", DueDate as "Due Date" from "<% tp.file.folder() %>"
where DocType = "Task"
Where !startswith(file.name, "Template")
sort DueDate ascending, NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getAllTasks({app, dv, luxon, that:this, theme: })
```

@ -23,6 +23,99 @@ class globalFunc {
return resultdc
}
BuildList(arg1, construct) {
let ilength = arg1.length
let TempS = ""
for (let i = 0; i < ilength; i++) {
if (Boolean(arg1[i])) {
if (TempS == "") {
TempS = arg1[i]
} else {
TempS = TempS + construct + arg1[i]
}
}
}
return TempS
}
Get1stArg(arg3) {
if (!Array.isArray(arg3)) {
return arg3
} else {
return arg3[0]
}
}
topLevelFilter(pobj, DocType, subType) {
let result = true
let folderExcl = (DocType == 'Source') ? '00.01' : '00.';
result = !pobj.file.path.contains(folderExcl) && this.GetPoint(pobj, "main", "type") !== undefined && this.GetPoint(pobj, "main", "type") !== null && this.GetPoint(pobj, "main", "type").contains(DocType)
if (Boolean(subType)) {
result = result && this.GetPoint(pobj, DocType, "type") !== undefined && this.GetPoint(pobj, DocType, "type") !== null && this.GetPoint(pobj, DocType, "type").contains(subType)
}
return result
}
IsInSearch(pobj, DocType, darray, iarray) {
let ilength = iarray.length;
let result = true
for (let i = 0; i < iarray.length; i++) {
if (iarray[i] == undefined || darray[i] == undefined) {result = result && true} else {
switch(darray[i]) {
case 'readingd':
if (iarray[i] == true || iarray[i] == false) {result = result && (Boolean(this.GetpProp(pobj, DocType, darray[i])) == iarray[i])} else {
if (Boolean(iarray[i])) {
let pProp = this.GetpProp(pobj, DocType, darray[i])
if (!Boolean(pProp)) { result = result && false } else {
result = result && this.PDataCheck(pProp, iarray[i])
}
} else {result = result && true}
}
break;
default:
if (Boolean(iarray[i])) {
let pProp = this.GetpProp(pobj, DocType, darray[i])
if (!Boolean(pProp)) { result = result && false } else {
result = result && this.PDataCheck(pProp, iarray[i])
}
} else {result = result && true}
break;
}
}
}
return result
}
getTable(dv, DocType, darray, iarray, tabletype) {
// let tablet = (darray.contains('tabletype')) ? iarray[0] : 0;
let page = dv.pages()
.filter(p => p && this.topLevelFilter(p, DocType, 0))
.where(p => p && this.IsInSearch(p, DocType, darray, iarray))
if (page.length === 0) {
return this.EmptyQueryMessage()
}
dv.table(this.GetTableHeaders(DocType, tabletype), page
.sort(p => p.file.name, `asc`)
.map(p => this.GetTableMap(DocType, tabletype,p)));
}
EmptyQueryMessage() {
return dv.el('b', '⚠️ Warning:\nNo result matching your query!')
}
GetTableHeaders(DataT, TableT) {
let TempData = ["Name"]
@ -52,14 +145,10 @@ class globalFunc {
switch(TableT) {
case 'Restaurant':
TempData = ["Name", "Style", "Cuisine", "Phone", "Email", "Website"]
break;
case 'Brunch':
TempData = ["Name", "Style", "Cuisine", "Phone", "Email", "Website"]
break;
case 'Hotel':
TempData = ["Name", "Type", "Influence", "Phone", "Email", "Website"]
break;
case 'Bar':
TempData = ["Name", "Type", "Influence", "Phone", "Email", "Website"]
break;
@ -95,10 +184,10 @@ class globalFunc {
switch(TableT) {
case 'overview':
TempData = [p.file.link, p.Investment.Ccy, p.Investment.Style, p.Investment.Stage, p.Tag]
TempData = [p.file.link, this.GetPoint(p, DataT, "ccy"), this.GetPoint(p, DataT, "style"), this.GetPoint(p, DataT, "stage"), this.GetPoint(p, "main", "tag")]
break;
case 'trading':
TempData = [p.file.link, p.Investment.Ccy, p.Trading.PDate, p.Trading.PPrice]
TempData = [p.file.link, this.GetPoint(p, DataT, "ccy"), this.GetPoint(p, DataT, "tradingd"), this.GetPoint(p, DataT, "tradingp")]
break;
}
@ -106,7 +195,7 @@ class globalFunc {
case 'Source':
TempData = [p.file.link, p.Source.Author, p.Source.Published, p.Source.Language, p.Tag, p.Source.Read]
TempData = [p.file.link, this.GetPoint(p, DataT, "author"), this.GetPoint(p, DataT, "published"), this.GetPoint(p, DataT, "lang"), this.GetPoint(p, "main", "tag"), this.GetPoint(p, DataT, "read")]
break;
@ -114,22 +203,16 @@ class globalFunc {
switch(TableT) {
case 'Restaurant':
TempData = [p.file.link, p.Place.SubType, p.Place.Style, p.Phone, p.Email, p.Website]
break;
case 'Brunch':
TempData = [p.file.link, p.Place.SubType, p.Place.Style, p.Phone, p.Email, p.Website]
break;
case 'Hotel':
TempData = [p.file.link, p.Place.SubType, p.Place.Style, p.Phone, p.Email, p.Website]
break;
case 'Bar':
TempData = [p.file.link, p.Place.SubType, p.Place.Style, p.Phone, p.Email, p.Website]
TempData = [p.file.link, this.GetPoint(p, DataT, "subtype"), this.GetPoint(p, DataT, "style"), this.GetPoint(p, DataT, "phone"), this.GetPoint(p, DataT, "email"), this.GetPoint(p, DataT, "website")]
break;
case 'Sport':
TempData = [p.file.link, p.Phone, p.Email, p.Website]
TempData = [p.file.link, this.GetPoint(p, DataT, "phone"), this.GetPoint(p, DataT, "email"), this.GetPoint(p, DataT, "website")]
break;
case 'Café':
TempData = [p.file.link, p.Place.SubType, p.Phone, p.Email, p.Website]
TempData = [p.file.link, this.GetPoint(p, DataT, "subtype"), this.GetPoint(p, DataT, "phone"), this.GetPoint(p, DataT, "email"), this.GetPoint(p, DataT, "website")]
break;
}
@ -137,7 +220,7 @@ class globalFunc {
case 'Product':
TempData = [p.file.link, p.Product.Type, p.Product.Link, p.Product.Value, p.Tag]
TempData = [p.file.link, this.GetPoint(p, DataT, "type"), this.GetPoint(p, DataT, "link"), this.GetPoint(p, DataT, "value"), this.GetPoint(p, "main", "tag")]
break;
@ -147,64 +230,6 @@ class globalFunc {
}
BuildList(arg1, construct) {
let ilength = arg1.length
let TempS = ""
for (let i = 0; i < ilength; i++) {
if (Boolean(arg1[i])) {
if (TempS == "") {
TempS = arg1[i]
} else {
TempS = TempS + construct + arg1[i]
}
}
}
return TempS
}
Get1stArg(arg3) {
if (!Array.isArray(arg3)) {
return arg3
} else {
return arg3[0]
}
}
IsInSearch(pobj, DocType, darray, iarray) {
let ilength = iarray.length;
let result = true
for (let i = 0; i < iarray.length; i++) {
if (iarray[i] == undefined || darray[i] == undefined) {result = result && true} else {
switch(darray[i]) {
case 'readingd':
if (iarray[i] == true || iarray[i] == false) {result = result && (Boolean(this.GetpProp(pobj, DocType, darray[i])) == iarray[i])} else {
if (Boolean(iarray[i])) {
let pProp = this.GetpProp(pobj, DocType, darray[i])
if (!Boolean(pProp)) { result = result && false } else {
result = result && this.PDataCheck(pProp, iarray[i])
}
} else {result = result && true}
}
break;
default:
if (Boolean(iarray[i])) {
let pProp = this.GetpProp(pobj, DocType, darray[i])
if (!Boolean(pProp)) { result = result && false } else {
result = result && this.PDataCheck(pProp, iarray[i])
}
} else {result = result && true}
break;
}
}
}
return result
}
GetpProp(pobj, DocType, dPoint) {
let result = null
@ -322,10 +347,10 @@ class globalFunc {
result = pobj.Investment.Type
break;
case 'tradingd':
result = pobj.Trading.Date
result = pobj.Trading.PDate
break;
case 'tradingp':
result = pobj.Trading.Price
result = pobj.Trading.PPrice
break;
}

@ -1,18 +1,7 @@
let {sourcetype, dateadded, language, author, publicationd, theme, readingd} = input;
const {globalFunc} = customJS
const DataType = 'Source'
let page = dv.pages()
.filter(p => {return !p.file.path.contains('00.01') && p.DocType !== undefined && p.DocType !== null && p.DocType.contains(DataType) && p.Source.Type !== undefined && p.Source.Type !== null && p.Source.Type.contains(`${sourcetype}`)})
const iArray = [sourcetype, dateadded, language, author, publicationd, theme, readingd];
const dArray = ["sourcetype", "dateadded", "language", "author", "publicationd", "theme", "readingd"];
if (page.length === 0) {
return '"No result matching your query"'
}
dv.table(globalFunc.GetTableHeaders(DataType, 0), page
.where(p => p && globalFunc.IsInSearch(p, DataType, dArray, iArray))
.sort(p => p.file.name, `asc`)
.map(p => globalFunc.GetTableMap(DataType, 0,p)));
return globalFunc.getTable(dv, DataType, dArray, iArray, 0)

@ -2,4 +2,4 @@ let thisf = dv.current();
let {toprint} = input;
const {globalFunc} = customJS
dv.paragraph("search terms: \n" + globalFunc.BuildList(toprint, "\n"));
dv.el('b', "🔎 search terms: \n• " + globalFunc.BuildList(toprint, "\n"));

@ -1,18 +1,7 @@
let curr = dv.current();
let {tabletype, invtype, dateadded, style, stage, ccy, theme, tradingd, tradingp} = input;
const {globalFunc} = customJS
const DataType = 'Investment'
let {tabletype, invtype, dateadded, style, stage, ccy, theme, tradingd, tradingp} = input;
let page = dv.pages()
.filter(p => {return !p.file.path.contains('00.') && p.DocType !== undefined && p.DocType !== null && p.DocType.contains(DataType)})
const iArray = [invtype, dateadded, style, stage, ccy, theme, tradingd, tradingp];
const dArray = ["invtype", "dateadded", "style", "stage", "ccy", "theme", "tradingd", "tradingp"];
if (page.length === 0) {
return '"No result matching your query"'
}
dv.table(globalFunc.GetTableHeaders(DataType, tabletype), page
.where(p => p && globalFunc.IsInSearch(p, DataType, dArray, iArray))
.sort(p => p.file.name, `asc`)
.map(p => globalFunc.GetTableMap(DataType, tabletype,p)));
return globalFunc.getTable(dv, DataType, dArray, iArray, tabletype)

@ -1,19 +1,8 @@
let {placetype, dateadded, style, ambiance, area, theme, country, status} = input;
const {globalFunc} = customJS
const DataType = 'Place'
let curr = dv.current();
let {placetype, dateadded, style, ambiance, area, theme, country, status} = input;
let templacetype = globalFunc.Get1stArg(placetype)
let page = dv.pages()
.filter(p => {return !p.file.path.contains('00.') && p.DocType !== undefined && p.DocType !== null && p.DocType.contains(DataType)})
const iArray = [placetype, dateadded, style, ambiance, area, theme, country, status];
const dArray = ["placetype", "dateadded", "style", "ambiance", "area", "theme", "country", "status"];
let templacetype = globalFunc.Get1stArg(placetype)
if (page.length === 0) {
return '"No result matching your query"'
}
dv.table(globalFunc.GetTableHeaders(DataType, templacetype), page
.where(p => p && globalFunc.IsInSearch(p, DataType, dArray, iArray))
.sort(p => p.file.name, `asc`)
.map(p => globalFunc.GetTableMap(DataType, templacetype,p)));
return globalFunc.getTable(dv, DataType, dArray, iArray, templacetype)

@ -1,17 +1,7 @@
let {prodtype, dateadded, prodvalue, theme} = input;
const {globalFunc} = customJS
const DataType = 'Product'
let {prodtype, dateadded, prodvalue, theme} = input;
let page = dv.pages()
.filter(p => { return !p.file.path.contains('00.0') && p.DocType !== undefined && p.DocType !== null && p.DocType.contains(DataType)})
const iArray = [prodtype, dateadded, prodvalue, theme];
const dArray = ["prodtype", "dateadded", "prodvalue", "theme"];
if (page.length === 0) {
return '"No result matching your query"'
}
dv.table(globalFunc.GetTableHeaders(DataType, 0), page
.where(p => p && globalFunc.IsInSearch(p, DataType, dArray, iArray))
.sort(p => p.file.name, `asc`)
.map(p => globalFunc.GetTableMap(DataType, 0, p)));
return globalFunc.getTable(dv, DataType, dArray, iArray, 0)

@ -0,0 +1,116 @@
class taskFunc {
relDateString(d, luxon) {
if (!(d instanceof luxon.DateTime)) return ''
const now = luxon.DateTime.now()
const days = Math.ceil(d.diff(now, 'days').days)
if (days < 0) return 'Overdue ' + d.toFormat('L/d')
if (days === 0) return 'Today'
if (days === 1) return 'Tomorrow'
if (days < 7) return d.toFormat('cccc')
return d.toFormat('ccc L/d')
}
getButtonStrings(status) {
const completed = status === 'Completed'
const btnStr = completed ? 'Undo' : 'Done'
const updateStr = completed ? 'To-Do' : 'Completed'
return { btnStr, updateStr }
}
getCustomLink(name, target) {
return `[[${target}|${name}]]`
}
getTodayTasks(args) {
const { luxon, dv, that, theme } = args
const finalDate = luxon.DateTime.now().toISODate() //?? dv.current().file.name
return this.getTasksTable({
...args,
filterFn: t => t.DocType == 'Task' && t.Status != 'Completed' && t.DueDate && t.DueDate?.hasSame(luxon.DateTime.fromISO(finalDate), 'day')
})
}
getAllTasks(args) {
const { luxon, dv, that, theme } = args
return this.getTasksTable({
...args,
filterFn: t => t.DocType == 'Task' && t.NextReviewDate
})
}
getOverdueTasks(args) {
const { luxon, dv, that, theme } = args
const finalDate = luxon.DateTime.now().toISODate() //date ?? dv.current().file.name
return this.getTasksTable({
...args,
filterFn: t => t.DocType == 'Task' && t.DueDate && t.DueDate < luxon.DateTime.fromISO(finalDate) && t.Status != 'Completed'
})
}
getLateReviewTasks(args) {
const { luxon, dv, that, theme } = args
const finalDate = luxon.DateTime.now().toISODate() //date ?? dv.current().file.name
return this.getTasksTable({
...args,
filterFn: t => t.DocType == 'Task' && t.NextReviewDate && t.NextReviewDate < luxon.DateTime.fromISO(finalDate) && t.Status != 'Completed'
})
}
getTasksNoDueDate(args) {
return this.getTasksTable({
...args,
// prependText: 'No Due Date',
filterFn: t => t.DocType == 'Task' && !t.DueDate
})
}
getTasksTable(args) {
const {
that,
app,
dv,
luxon,
theme,
getSortProp = t => t.NextReviewDate,
sortOrder = 'asc',
filterFn = t => {t.DocType == 'Task'},
completedCol = false,
prependHeaderLevel = 3,
prependText
} = args;
const { metaedit, buttons } = app.plugins.plugins
const { update } = metaedit.api
const { createButton } = buttons
const pFilter = '#' + theme
const dueStr = completedCol ? 'Completed' : 'Review Date';
const pages = dv.pages(pFilter).sort(getSortProp, sortOrder).where(filterFn)
if (pages.length === 0) {
// console.log('Empty dataview:', args)
return
}
if (prependText) {
dv.header(prependHeaderLevel, prependText)
}
dv.table(["Name", "Category", "Priority", dueStr, "", ""], pages
.map(t => {
const { btnStr, updateStr } = this.getButtonStrings(t.Status)
return [
this.getCustomLink(t.file.name, t.file.name),
t.Tag,
t.Priority,
this.relDateString(t.NextReviewDate, luxon),
createButton({
app,
el: that.container,
args: { name: btnStr },
clickOverride: { click: update, params: ['Status', updateStr, t.file.path] }
}),
]
})
)
}
}

@ -4,18 +4,9 @@ const {globalFunc} = customJS
const DataType = 'Investment'
let curr = dv.current();
let {tabletype, invtype, dateadded, style, stage, ccy, theme, tradingd, tradingp} = input;
let page = dv.pages()
.filter(p => {return !p.file.path.contains('00.01') && p.DocType !== undefined && p.DocType !== null && p.DocType.contains(DataType)})
const iArray = [invtype, dateadded, style, stage, ccy, theme, tradingd, tradingp];
const dArray = ["invtype", "dateadded", "style", "stage", "ccy", "theme", "tradingd", "tradingp"];
const tablet = Boolean(tabletype) ? tabletype : 0;
if (page.length === 0) {
return '"No result matching your query"'
}
dv.table(globalFunc.GetTableHeaders(DataType, tabletype), page
.where(p => p && globalFunc.IsInSearch(p, DataType, dArray, iArray))
.sort(p => p.file.name, `asc`)
.map(p => globalFunc.GetTableMap(DataType, tabletype,p)));
return globalFunc.getTable(dv, DataType, dArray, iArray, tablet)

@ -56,40 +56,27 @@ style: number
&emsp;
```dataview
table Priority, Status, NextReviewDate as "Next Review Date", DueDate as "Due Date" from [[@Life Organisation]]
where DocType = "Task"
sort DueDate ascending, NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getAllTasks({app, dv, luxon, that:this, theme: "LifeHacks"})
```
&emsp;
#### Review overdue
```dataview
table NextReviewDate as "Next Review Date" from [[@Life Organisation]]
where DocType = "Task" and NextReviewDate < date(today)
sort NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getLateReviewTasks({app, dv, luxon, that:this, theme: "LifeHacks"})
```
&emsp;
#### Delivery overdue
```dataview
table DueDate as "Due Date" from [[@Life Organisation]]
where DocType = "Task" and DueDate < date(today)
sort DueDate ascending
```
&emsp;
#### Priority tasks
```dataview
Table Priority, DueDate as "Due Date" from [[@Life Organisation]]
Where DocType = "Task" and DueDate >= date(today) and Priority = "High"
Sort DueDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getOverdueTasks({app, dv, luxon, that:this, theme: "LifeHacks"})
```
&emsp;

@ -1,11 +1,11 @@
---
Tag: ["Personal", "Family"]
Tag: ["LifeHacks", "Personal", "Family"]
Date: 2021-10-01
DocType: "Task"
Hierarchy: Root2
Priority: High
Status: In-progress
Status: "In Progress"
StartDate: 2021-10-01
DueDate: 2021-12-31
NextReviewDate: 2021-11-01

@ -5,7 +5,7 @@ Date: 2021-08-12
DocType: "Task"
Hierarchy: "NonRoot"
Priority: "Medium"
Status: "In-progress"
Status: Completed
StartDate: 2021-08-12
DueDate: 2021-12-31
NextReviewDate: 2021-12-15
@ -59,7 +59,7 @@ All tasks and To-dos linked to IT and Computer
- [x] Continue building server capabilities ✅ 2021-09-15
- [ ] Find a good (&synced) [[IT & Computer#App dependencies|Calendar]] platform
- [x] Find a good (&synced) [[IT & Computer#App dependencies|Calendar]] platform ✅ 2021-10-19
- [x] Set-up [[Nextcloud]]
- [x] Transfer [[Server Alias|aliases]]
- [x] Computer security: set-up [[IT & Computer#Snort|Snort]] ✅ 2021-09-15

@ -104,6 +104,8 @@ id EditMetaData
dv.view("00.01 Admin/dv-views/print_data", {toprint: [dv.current().QPType, dv.current().QPDAdded, dv.current().QPStyle, dv.current().QPAmbiance, dv.current().QPArea, dv.current().QPKeyword, dv.current().QPStatus]})
```
&emsp;
```dataviewjs
dv.view("00.01 Admin/dv-views/query_place", {placetype: dv.current().QPType, dateadded: dv.current().QPDAdded, style: dv.current().QPStyle, ambiance: dv.current().QPAmbiance, area: dv.current().QPArea, theme: dv.current().QPKeyword, country: "UK", status: dv.current().QPStatus})
```

@ -102,10 +102,6 @@ dv.view("00.01 Admin/dv-views/query_place", {country: "UK", placetype: "Bar", ar
#### Shoreditch
```dataviewjs
dv.paragraph("header: " + this.getPreviousHeader)
```
```dataviewjs
dv.view("00.01 Admin/dv-views/query_place", {country: "UK", placetype: "Bar", area: "Shoreditch"})
```

@ -86,6 +86,8 @@ id EditMetaData
dv.view("00.01 Admin/dv-views/print_data", {toprint: [dv.current().QueryAddedDate, dv.current().QueryLanguage, dv.current().QueryAuthor, dv.current().QueryPublishedD, dv.current().QueryTheme, dv.current().QueryReadD]})
```
&emsp;
```dataviewjs
dv.view("00.01 Admin/dv-views/book_query", {sourcetype: "Book", dateadded: dv.current().QueryAddedDate, language: dv.current().QueryLanguage, author: dv.current().QueryAuthor, publicationd: dv.current().QueryPublishedD, theme: dv.current().QueryTheme, readingd: dv.current().QueryReadD})
```

@ -61,40 +61,27 @@ style: number
&emsp;
```dataview
table Priority, Status, NextReviewDate as "Next Review Date", DueDate as "Due Date" from "04.01 lebv.org"
where DocType = "Task"
sort DueDate ascending, NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getAllTasks({app, dv, luxon, that:this, theme: "lebv"})
```
&emsp;
#### Review overdue
```dataview
table NextReviewDate as "Next Review Date" from "04.01 lebv.org"
where DocType = "Task" and NextReviewDate < date(today)
sort NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getLateReviewTasks({app, dv, luxon, that:this, theme: "lebv"})
```
&emsp;
#### Delivery overdue
```dataview
table DueDate as "Due Date" from "04.01 lebv.org"
where DocType = "Task" and DueDate < date(today)
sort DueDate ascending
```
&emsp;
#### Priority tasks
```dataview
Table Priority, DueDate as "Due Date" from "04.01 lebv.org"
Where DocType = "Task" and DueDate >= date(today) and Priority = "High"
Sort DueDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getOverdueTasks({app, dv, luxon, that:this, theme: "lebv"})
```
&emsp;

@ -5,7 +5,7 @@ Date: 2021-08-12
DocType: "Task"
Hierarchy: "NonRoot"
Priority: "Low"
Status: "Not started"
Status: "In progress"
StartDate:
DueDate: 2030-12-31
NextReviewDate: 2021-12-31

@ -5,7 +5,7 @@ Date: 2021-08-12
DocType: "Task"
Hierarchy: "NonRoot"
Priority: "Low"
Status: "Not started"
Status: "In progress"
StartDate:
DueDate: 2030-12-31
NextReviewDate: 2021-12-31

@ -5,7 +5,7 @@ Date: 2021-08-12
DocType: "Task"
Hierarchy: "NonRoot"
Priority: "Low"
Status: "Not started"
Status: "In progress"
StartDate:
DueDate: 2030-12-31
NextReviewDate: 2021-12-31

@ -183,7 +183,8 @@ The following Apps require a manual backup:
- [ ] [[Storage and Syncing|Storage & Sync]]: Backup Volumes to [[Sync|Sync.com]] 🔁 every 3 months on the 2nd Monday 📅 2021-12-01
- [x] [[Storage and Syncing|Storage & Sync]]: Backup Volumes to [[Sync|Sync.com]] 🔁 every 3 months on the 2nd Monday 📅 2021-09-16 ✅ 2021-10-16
- [x] Backup Volumes to [[Sync|Sync.com]] 🔁 every 3 months on the 2nd Monday ✅ 2021-09-15
- [ ] [[Storage and Syncing|Storage & Sync]]: Transfer pictures to ED 🔁 every 3 months on the 2nd Thursday
- [ ] [[Storage and Syncing|Storage & Sync]]: Transfer pictures to ED 🔁 every 3 months on the 2nd Thursday 📅 2021-10-20
- [x] [[Storage and Syncing|Storage & Sync]]: Transfer pictures to ED 🔁 every 3 months on the 2nd Thursday ✅ 2021-10-19
&emsp;

@ -61,40 +61,27 @@ style: number
&emsp;
```dataview
table Priority, Status, NextReviewDate as "Next Review Date", DueDate as "Due Date" from "06.02 Investments"
where DocType = "Task"
sort DueDate ascending, NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getAllTasks({app, dv, luxon, that:this, theme: "Wealth"})
```
&emsp;
#### Review overdue
```dataview
table NextReviewDate as "Next Review Date" from "06.02 Investments"
where DocType = "Task" and NextReviewDate < date(today)
sort NextReviewDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getLateReviewTasks({app, dv, luxon, that:this, theme: "Wealth"})
```
&emsp;
#### Delivery overdue
```dataview
table DueDate as "Due Date" from "06.02 Investments"
where DocType = "Task" and DueDate < date(today)
sort DueDate ascending
```
&emsp;
#### Priority tasks
```dataview
Table Priority, DueDate as "Due Date" from "06.02 Investments"
Where DocType = "Task" and DueDate >= date(today) and Priority = "High"
Sort DueDate ascending
```dataviewjs
const {taskFunc} = customJS
taskFunc.getOverdueTasks({app, dv, luxon, that:this, theme: "Wealth"})
```
&emsp;

Loading…
Cancel
Save