<%* // iterdef: defines a planning iteration with sequence id, status, start/end and optional goal. const componentName = "iterdef"; const newId = tp.user.auto_increment("iterdef_id"); const today = tp.date.now("YYYY-MM-DD"); const file = tp.file.find_tfile(tp.file.path(true)); setTimeout(async () => { await tp.app.fileManager.processFrontMatter(file, (frontmatter) => { const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : []; if (!components.includes(componentName)) components.push(componentName); frontmatter["components"] = components; frontmatter["iterdef_id"] = frontmatter["iterdef_id"] ?? newId; frontmatter["iterdef_status"] = frontmatter["iterdef_status"] ?? "planned"; frontmatter["iterdef_start"] = frontmatter["iterdef_start"] ?? today; frontmatter["iterdef_end"] = frontmatter["iterdef_end"] ?? today; frontmatter["iterdef_goal"] = frontmatter["iterdef_goal"] ?? ""; frontmatter["iterdef_capacity_minutes"] = frontmatter["iterdef_capacity_minutes"] ?? 0; frontmatter["cssclasses"] = frontmatter["cssclasses"] ?? "wide-page"; }); }, 300) -%> ## Goal ## Workspace ```base filters: and: - file.hasLink(this.file.path) formulas: Aufwand (ET: action_effort_minutes / 60 / 8 properties: formula.Aufwand (ET: displayName: Aufwand (ET) views: - type: table name: Table order: - file.name - action_status - formula.Aufwand (ET - action_impact - action_effort_minutes sort: - property: action_status direction: ASC ``` ## Bound Work ```dataview TABLE action_status as "Action", work_status as "Work", round(action_effort_minutes / 60 / 8, 1) as "Aufwand (ET)", action_impact as "Impact" FROM "" WHERE iterbind_target = this.file.link SORT action_impact DESC, action_effort_minutes ASC ```