A **[[Project]]** is a transient page that serves as the identity and hub for a collection of other notes, knowledge, and activities serving a singular, unified, and finite purpose. ^about This is a [[Class]] within the [[System]] using the [[State#Standard Action Workflow]]. If the use case has limited complexity with short time-horizon, consider using just a [[Transient]]. >[!quote|no-icon]- Dictionary Block > ````yaml > --- > publish: false > description: > classes: > - "[[Project]]" > states: > - "[[Doing]]" > parents: # any entities involved in the project, e.g. [[Business]] or [[Group]] or [[Person]] > sponsors: # of the parents, which one(s) are funding this work (typically a Business, not specific Persons) > suppliers: # of the parents, which one(s) are doing the work (typically a Business, not specific Persons) > consumers: # of the parents, which one(s) are benefitting from this work (typically a Business, not specific Persons) > start_date: # when the project is commenced > end_date: # when the project got completed > --- > >>[!abstract] Total Hours: `$=dv.pages('"private/logs"').where(p => p.file.outlinks.includes(dv.current().file.link)).hours.values.reduce((acc, val) => acc + val, 0).toFixed(2)` > > ```base > formulas: > Edit: link(file.path, "✏️") > views: > - type: table > name: Parent of Pages > filters: > and: > - note.parents.contains(this.file.name) > order: > - file.name > - classes > - states > columnSize: > file.name: 492 > note.classes: 152 > - type: table > name: Mentioned in Logs > filters: > and: > - file.links.contains(this.file.name) > - file.folder == "private/logs" > order: > - formula.Edit > - datetime > - hours > - event > sort: > - property: datetime > direction: DESC > - property: event > direction: ASC > columnSize: > note.datetime: 237 > note.event: 402 > > ``` > ```` >[!quote|no-icon pub-hidden] Project List (Private) > ```base > filters: > and: > - classes.contains(this.file.asLink()) > views: > - type: table > name: Doing > filters: > and: > - states.contains(link("Doing")) > order: > - file.name > - parents > - sponsors > columnSize: > file.name: 528 > note.parents: 391 > - type: table > name: To Do > filters: > and: > - states.contains(link("To Do")) > order: > - file.name > - parents > - sponsors > columnSize: > file.name: 528 > note.parents: 391 > - type: table > name: Done > filters: > and: > - states.containsAny(link("Cancelled"), link("Done"), link("Subsumed")) > order: > - file.name > - parents > - sponsors > - start_date > - end_date > columnSize: > file.name: 517 > note.parents: 246 > note.sponsors: 147 > note.start_date: 140 > note.end_date: 136 > - type: table > name: All Projects > order: > - file.name > - parents > - states > - sponsors > - suppliers > - consumers > - start_date > - end_date > > ``` %% >[!info|no-icon] Active ><span class="dataview">`$=dv.execute(await dv.page("Project Doing (script)").script_local)`</span>![[Project Doing (tpdv output)|app-hidden]] >[!quote|no-icon]- To Do ><span class="dataview">`$=dv.execute(await dv.page("Project To Do (script)").script_local)`</span>![[Project To Do (tpdv output)|app-hidden]] >[!success|no-icon]- Done / Cancelled / Subsumed ><span class="dataview">`$=dv.execute(await dv.page("Project Done (script)").script_local)`</span>![[Project Done (tpdv output)|app-hidden]] >[!danger|no-icon]- Invalid Action State ><span class="dataview">`$=dv.execute(await dv.page("Project Invalid (script)").script_local)`</span>![[Project Invalid (tpdv output)|app-hidden]]