-
Notifications
You must be signed in to change notification settings - Fork 26
Tasking Design
- Tasks all have 0..1 parent task and 0..* children. This allows use of a hierarchical schema to model tasks.
Task Properties
- Core properties
- Created timestamp
- Modified timestamp
- Disabled timestamp
- Created by user
- Modified by user
- Disabled by user
- Projected Start timestamp
- Actual Start timestamp
- Due date timestamp
- Projected End timestamp
- Actual End timestamp
- Time spent
- Ordered list of Start/Stop timestamps
- Parent
- Children
- Relations
- Assigned Contacts - people participating
- Responsible Users - who's todo list(s) it shows up on
- Method: Direct/Delegated
- Categorized tags
- IsGroupingTask
Tasking Features
- Time tracking
- Subtasking
- Delegation
- Repeating
- Sequential dependence
- Group dependence
- Categorized tagging
Database Classes
- Task : Core
- Id long
- Title string
- Description string
- ProjectedStart timestamp
- DueDate timestamp
- ProjectedEnd timestamp
- ActualEnd timestamp
- Parent long
- IsGroupingTask bit - indicates if this is a grouping task meaning that the projected dates, work times, etc need to be grouped and not tracked as part of this task.
- SequentialPredecessor long - indicates who is sequentially in front of this task
- TaskResponsibleUser : Core
- Id guid
- TaskID long
- UserID int
- AssignmentType enum { Direct, Delegated }
- TaskAssignedBusinessContact : Core
- Id guid
- TaskID long
- BusinessContactID int
- AssignmentType enum { Direct, Delegated }
- TaskAssignedIndividualContact : Core
- Id guid
- TaskID long
- IndividualContactID int
- AssignmentType eum
- TaskTag : Core - user defined tags
- Id guid
- TaskID long
- TaskTagCategoryID int?
- Tag string
- TaskTagCategory : Core - user defined categories for tags
- Id int
- Name string
- Time : Core
- Id guid
- Start timestamp
- Stop timestamp
- WorkerIndividualContactID - individual contact id of the person that did the work (biller)
- TaskTime : Core
- Id guid
- TaskID long
- TimeID guid
- TaskMatter : Core
- Id guid
- TaskID long
- MatterID long
The user creates a task "file motion" as subtasks the user creates "research", "draft", "file", "notify client", setting research and draft as grouped together under a "prepare motion" task with as a sequential dependency predecessor to file which is a sequential dependency to notify client. User will then begin work on research and drafting, logging time under each task appropriately. Once research and drafting are completed, the "prepare motion" grouping task will auto-complete opening up the file task and so on. All of the work times and billable expenses get logged into the system by the user as incurred. When the user decides to invoice, the system will need to pull all costs, mileage and time into a selectable list. The user then selects what to include. Then the user saves the invoice which makes it printable.
Detailed:
- User creates a task "file motion"
- Open Tasks
- Clicks Create
- Completes the required fields including naming it "file motion"
- Clicks Save
- User creates a grouping subtask called "prepare motion"
- Click create
- a check is run to the server to see if the task is capable of accepting subtasks
- tasks with any time logged to it cannot accept a subtask
- tasks that are already part of an invoice cannot have a subtask
- create view appears - it will have a hierarchical selector where a parent can be chosen
- user fills fields
- save
- gets created on server and updates UI tree
- UI should auto select the newly created subtask
- User creates the subtask called "research" within the "prepare motion" task
- Click create
- again, the check is run to determine the ability to subtask
- create view appears - selects the "prepare motion" item from the hierarchical selector
- user fills fields
- save
- gets created on server and updates ui tree
- UI should auto select the newly created subtask
- User creates the subtask called "draft" within the "prepare motion" task - see above for details
- User creates the subtask of "file motion" called "file" and sets it as a sequentially dependent on "prepare motion"
- sequentially dependent on will be a field with a hierarchical selection to pick what item precedes it
- User creates the subtask of "file motion" called "notify client" and sets it as a sequentially dependent on "prepare motion"
- User logs time to tasks
- Opens task
- clicks start timer, the server is signaled so that the start time can be recorded to prevent any potential loss of data
- user does the work
- clicks stop timer, the server is signaled so that that the time entry is updated and the stop time is entered