Track time and hour budgets with Task View
Organize projects and tasks in the Task View tree, run timers that log to Timesheets, set hour budgets, and read the budget meters.
On this page
This document covers day-to-day work in the ERPNext TaskView app: arranging projects and tasks in the tree, timing your work, setting hour budgets, and reading the meters that tell you how much budget is left. Use it when you are the person doing the work or planning it. The customer portal that ships in the same app is covered separately in Using the Client Project Portal.
Open the Task View
Task View is a list view for both Task and Project, and it is the default view for each. If you land on a plain list, open the view menu at the top of the list and choose Task View. Choose List to switch back.
Three buttons next to the title change what the tree shows:
All Tasks shows every project and its task tree.
My Tasks shows only tasks assigned to you, plus the parents above them so you can see where each one lives.
Pinned shows a flat list of tasks you have pinned, across projects.
Completed and Cancelled tasks are hidden unless you filter on status. Their logged hours still count toward budgets (see How hours are counted).
Work the tree
Projects are the top level. Tasks sit under them, and any task can have subtasks.
Add a task inline. Select a project or task, then type or click the "Add task..." placeholder that appears. Press Enter to save and keep typing the next one.
Add many at once. Use the clipboard-list button on a row to add subtasks, one per line.
Reorder and re-parent. Drag a row to a new position or onto another task to make it a subtask. Drag a task into a different project and its subtasks move with it. Drag projects to reorder them. A task cannot be dropped at the root level, only inside a project or another task. Dragging works while the list is sorted by Manual, which is the default.
Edit the subject. Double-click it. Press Enter to save or Escape to cancel.
Open the full form. The panel button on a row opens the Task or Project form in a side panel. This is where you set budgets.
Complete a task. Tick the checkbox on an Open task. The row stays on screen, struck through, until the next refresh, so you can tick several in a row. The checkbox only switches a task between Open and Completed, so ticking a task that is Working or Pending Review sets it back to Open instead of completing it. For those, tick Completed in the Log Timer dialog (see below) or change the status on the task form.
Copy as Markdown. Ctrl-click (or Cmd-click) rows to select them, Shift-click to select a range, then press Ctrl+C or Cmd+C. You get a nested checklist, with each selected task's subtasks included. Escape clears the selection.
The expand and collapse state of the tree is remembered in your browser, per user.
Pinned tasks
Pinning adds a task to your own Pinned list, and it also assigns the task to you. If you already have an open assignment on the task it is reused; otherwise one is created the way Assign to does it. You then appear among the task's assignees, the task shows up in My Tasks, and you receive any Client Portal notifications for it. Anyone already assigned stays assigned. Unpinning removes the task from your list but keeps the assignment, so unassign yourself from the task form if you no longer want it.
In Pinned, type a title and press Enter to add a task, then keep typing. New tasks go below the last task you clicked, or at the end.
A task you add this way has no project yet. Pick one from the project chip on the row. The project also sets the customer. Until a task has a project it cannot run a timer, get subtasks, or be unpinned.
Time a task
Timers live on task rows. Project rows have no timer buttons, because time is always logged against a task.
Click the play button on a task row. The task needs a project.
Work. The floating timer dock appears on every desk page, not only in Task View, and shows each open timer with a live HH:MM:SS clock.
Click pause when you step away, or play to resume.
Click stop (the square) when you finish. A Log Timer dialog opens with the elapsed hours filled in.
Check the dialog and click Submit.
Only one timer runs at a time. Starting or resuming a timer pauses whichever one was running. Paused timers stay open in the dock until you stop or discard them.
The Log Timer dialog
Stopping pauses the clock first, then asks you to confirm:
| Field | Notes |
|---|---|
| Task | Defaults to the timed task. You can move the time to another task in the same project. |
| Activity Type | Optional. |
| Hrs | Prefilled from the clock. Whatever you leave here is what gets logged, so edit it if the clock ran while you were away. |
| Description | What you did. |
| Is Billable | Marks the entry billable. |
| Billable Time | Appears when Is Billable is checked and starts at the same value as Hrs. |
| Completed | Marks the log complete and sets the task to Completed. |
Cancel closes the dialog and resumes the timer. If you tick Completed on a task that still has open subtasks, the time is logged but the task is not completed, and you see a notice explaining why. Any subtask that is not Completed counts as open here, including a Cancelled one.
Note
The Log Timer dialog shows Billable Time whichever way you stop, but only stopping from a task row saves the value you enter. Stopping from the dock card saves Is Billable and Hrs but not Billable Time, so the figure you typed is lost. ERPNext then fills a billable entry's Billable Time from Hrs when the Timesheet is saved or submitted. If you need a Billable Time that differs from Hrs, stop from the task row.
The timer dock
The dock is a small floating window. Drag its header to move it, drag its side edges to resize it, and use the chevron to collapse it to a single line that still shows the running timer. Its position and width are kept for your browser session.
Click a card to expand it and write a description ("What are you working on?"). It saves when you leave the field, or 30 seconds after you start typing, and it is carried into the Log Timer dialog.
Warning
The trash button means different things in two places. On a task row it deletes the task. On a dock card it discards the timer and deletes its time entry, along with the draft Timesheet if that was its only entry. Check which one you are pointing at.
Where the time goes
Each timer is a row in the time logs of an ordinary ERPNext Timesheet, so everything downstream (submitting, billing, reporting) is standard ERPNext.
By default, the first timer you start for a project creates a draft Timesheet for you and that project. Later timers reuse any draft Timesheet that matches your Employee and the project. The Employee is the one whose User ID is your login, so make sure your user is linked to an Employee.
Timers keep appending to that draft until you submit it. Submitting a Timesheet moves its tasks forward only: Open becomes Working, and a task that is Pending Review or Completed stays where it is. A task someone already approved will not slip back to Working because you submitted a timesheet.
The app adds four fields to each Timesheet Detail row: Paused, Start Time, Paused Time and Task Subject. They hold the timer state and are read-only.
Change which Timesheet receives time
If you want a different policy, such as one Timesheet per calendar month per project, a custom app can register a taskview_find_timesheet hook. TaskView calls it with the employee and the project, and it returns the name of a draft Timesheet to reuse, or nothing to create a new one. If several apps register the hook, the last one wins.
# hooks.py of your own app
taskview_find_timesheet = "my_app.timesheets.find_timesheet"# my_app/timesheets.py
import frappe
def find_timesheet(employee: str, project: str) -> str | None:
return frappe.db.exists(
"Timesheet",
{"employee": employee, "parent_project": project, "docstatus": 0},
)Set hour budgets
You set budgets in two places, both reached from the side panel button on a row:
Task: the standard Expected Time (in hours) field.
Project: the Budgeted Hours field, which TaskView adds to the Project form below Estimated Cost.
Both fields are optional. When you leave them empty, budgets are added up from what is below.
| Level | Budget | If left empty |
|---|---|---|
| Task | Its Expected Time | The sum of its subtasks' budgets |
| Project | Its Budgeted Hours | The sum of its top-level tasks' budgets |
A top-level task with subtasks works as a phase. Give it an Expected Time to cap the phase, or leave it empty and let its subtasks add up. An explicit figure always wins: a phase set to 20 hours stays at 20 even if its subtasks add up to more, and a project with Budgeted Hours stays at that figure whatever its tasks add up to. Cancelled tasks contribute no budget.
Read the meters
Any task or project with a budget shows a small bar and a label on its row, for example 12.5 / 20 h. Rows without a budget show no meter. Hover over a meter for a sentence such as "12.5 of 20 h logged (63%), 7.5 h remaining".
The bar changes colour as you spend the budget:
| State | When | Colour |
|---|---|---|
| Normal | Logged is under 80% of the budget | Blue |
| Warning | Logged is at least 80% of the budget | Amber |
| Over | Logged is more than 100% of the budget | Red, with the label in bold |
The bar fills to 100% and stops there, so use the label and tooltip to see how far over you are. Hours show with one decimal below 100 and as whole hours above.
Your own running timers tick on the meters of the task, its parents and the project, and refresh about every 30 seconds. Other people's open timers are included when the view loads.
How hours are counted
Every entry on a draft or submitted Timesheet counts. Cancelled Timesheets do not.
Open timers count for the time they have actually run. Time while a timer is paused is not counted.
A task's logged hours include all of its subtasks. A project's logged hours include every entry on the project, including entries with no task.
Completed and hidden tasks still count.
Note
ERPNext's own Actual Time on a Task or Project only counts submitted Timesheets, so it can lag by days while your draft Timesheet is still open. The meters count drafts, which is why the two numbers can differ.
Reporting
TaskView does not add a report of its own. For a quick answer, read the meters on the project and its phases. For the underlying entries, use the standard ERPNext Timesheet list or report view and filter by project, employee or date. Because the entries are ordinary Timesheet rows, billing and invoicing from Timesheets work as they do in stock ERPNext.
The customer portal at /projects shows the same meters to customers, including a budget per phase, so keep the figures on your side tidy before you share a project. Clients see the portal's view of these numbers as described in Using the Client Project Portal.
Sources
This article is in the public domain (CC0 1.0), code samples included. Use it however helps you.