Teamwork CLI
Command line interface for Teamwork
This is useful for repetitive time entry into the Teamwork system: https://www.teamwork.com/time-tracking
Installation
Clearly this depends on nodejs and npm. Get your teamwork credentials then you can either clone the repo to install or use npm.
Credentials
This also depends on your teamwork API key and URL. The url is the base of your teamwork website, for example https://mycompany.teamwork.com. The API key can be found by:
- Go to Teamwork
- View your profile
- Click 'Edit My Profile' button in top right
- View the 'API & Mobile' tab in the popup.
- Click 'Show Your Token'
Cloning
git clone https://github.com/jamesburns-rts/teamwork-cli.git
cd teamwork-cli
npm install
node hours.js --url <teamwork base url>
node hours.js --key <teamwork api key>
NPM
sudo npm install -g teamwork-cli
hours --url <teamwork base url>
hours --key <teamwork api key>
Recommendations
To get started run the --interactive
(-i
) option to navigate through your projects and tasks
to get the task IDs you need in a fake directory structure. Use ls
to list subdirectory options
and cd
to move into them (using either the index or id as the argument).
If in interactive mode you can use the search
command to find tasks in subdirectories.
I highly suggest navigating to the task you want and then mark it as a favorite
like fav mytask
you can then use mytask
anywhere you would normally use
a task ID, such as hours -E mytask
to log time. You can also navigate to the task when in
interactive move with cd mytask
or jump right in with hours -i mytask
.
Completions
The zsh tab completion system confuses me but I belive if you copy the zsh-completions
file as _hours
into any of the
directories in $fpath
then you should get completions. For example
curl https://raw.githubusercontent.com/jamesburns-rts/teamwork-cli/master/zsh-completions > ~/.oh-my-zsh/completions/_hours
autoload -U compinit # May not be necessary
compinit # May not be necessary
Usage
hours 1.1.17
OPTIONS
-h, --help
Print this help Screen
-v, --version
Print version info
-i, --interactive [path]
Enter interactive mode. Optionally add path to start in.
-l, --time-logged
Print time logged
-p, --tasks
Print a list of previous entered tasks for the year
-q, --entries
Print entries of today or date specified
-Q, --since
Print entries since date specified
-f, --favorites
Print the list of your favorites
-F, --favorites-full
Print the list of your favorites and their tasks
-w, --percentages
Print percentages of time logged
-g, --get
Print a peice of data
-E, --interactive-entry [taskId]
Enter time through questions for specified task
-e, --entry
Enter time with below options
-b, --billable [0/1]
If billable time (default 1)
-H, --hours [hours]
Set hours to log (default 0)
-M, --minutes [minutes]
Set minutes to log (default 0)
-d, --date [yyyymmdd]
Set date to log for (default today)
-m, --description [message]
Set description to log (default empty)
-t, --task [taskId]
Set the taskId to log to (see --tasks)
-T, --start-time [HH:MM]
Set the start time to log (default 09:00)
-O, --end-time [HH:MM]
Set the length based on the start/end time (default empty)
-z, --tags [tag1,tag2,tag3]
Adds a tag to the time entry. Surround list with quotes if it includes a space
-c, --move [EntryId]
Move the time entry to the task specified by --task
-k, --key [key]
Set teamwork API key to use in the future
-u, --url [url]
Set teamwork URL to use in the future
-a, --arrived [HH:MM]
Record the time as when you arrived (default to now)
-s, --switch [timer]
Switch to a different timer
-S, --startstop [timer]
Start or stop a timer
-D, --delete-timer [timer]
Delete a timer
-A, --add-timer [timer]
Along with -H and -M adds time to a timer
-x, --subtract-timer [timer]
Along with -H and -M subtract from a timer
EXAMPLES
node hours.js --entry --task 6905921 --start-time "09:00" --hours 1 \
--minutes 30 --billable 0 --description "Friday Standup"
Logs an hour and a half for a long Friday standup
node hours.js -e -t 6905921 -T "09:00" -H 1 -M 30 -b 0 -m "Friday Standup"
Same as above but using letters instead
INTERACTIVE MODE
This mode creates a quasi-terminal with a directory structure setup like teamwork.
There is a top level "teamwork" directory containing a folder for each project,
each project contains tasklists, and each tasklist contains tasks.
Once in a task you can log time. You can also create tasks/tasklists.
EXIT: exit, quit, q, :q, :wq, leave
Exit interactive mode.
LIST: list, ls, l, ll
List the contents of the item - a projects tasklists for example.
SELECT: select, sel, cd, c, :e, enter, dir
Select a project, tasklist, or task - aka change directory. You can change to a favorite as well.
EDIT: edit
Update a time entry
MOVE: move, mv
Move a time entry to another task
HELP: help, h, pls, halp
Display this information.
LOG TIME: log, entry, record
Log time while in a given task
CREATE: create, mkdir, touch, make, add
Create a new item in the entity (new task, tasklist, etc.)
HOURS: hours, main
Normal hours command
PATH: path, pwd
Display the current path using the Ids.
ECHO: echo, cat, show, display
Display the json of the item
REMOVE: remove, rm, delete, del
Delete the specified item.
COPY: copy, cp, duplicate, dup
Copy the specified item.
TODAY: today
Show logged today
FAVORITE: favorite, fav
Mark task as favorite: fav [PATH] name
FAVORITES: favorites, favs, faves, favesies
List favorites (use -v for task names)
CLEAR: clear, cle
Clear screen
SEARCH: search, /, ?, find
Searches for a task. If -e option is provided, then time entries with empty descriptions are listed.
TOTAL: total, time, sum
Sums the time spent on an item or items
NOTEBOOKS: notebooks, notes, nb, books
List the notebooks in the current dir