.. header:: .. image:: doc/netresearch.jpg :height: 25px :align: left
Project and customer based time tracking for company employees.
Features:
__ https://github.com/netresearch/timalytics
.. sectnum::
.. contents:: Table of Contents
Click the button Add Entry. Or use the keyboard shortcut a.
Just click inside any field of any existing worklog entry.
Rightclick on an worklog entry and select Delete from context menu. Or use keyboard shortcut d to delete focused worklog entry.
Worklog entry with focus has a yellow background. Move the focus with keyboard up and down keys.
DEV (Developer) is allowed to track times, do bulk entries (if presets where created) and view bar charts in the Interpretation tab
CTL (Controller) Includes the role DEV and is additionally able export data to csv in the Controlling tab
PL (Project leader) Includes the role CTL and is additionally able manage customers, projects, user, teams, presets, ticket systems and activities in Administration tab
composer.json
$ git clone git@github.com:netresearch/timetracker.git
sql/full.sql
into it$ composer install
It will ask you for some configuration options.
If you want to adjust that later, edit app/config/parameters.yml
Also copy app/config/sentry.yml.dist
to app/config/sentry.yml
,
and fill the dsn
key if necessary.
$ chmod -R og+w app/cache/ app/logs/
web/.htaccess_dev
to web/.htaccess
.For nginx, symlink web/app_dev.php
or web/app.php
to web/index.php
.
pointing to /path/to/timetracker/web/
$ php app/console assets:install
$ mysql timetracker < sql/testdata.sql
Change the username of user 1
to your LDAP username.
app/config/parameters.yml.dist
from this repo as parameters.yml
into the above created folder, and sentry.yml.dist
as sentry.yml
.docker-compose up -d
To work behind a proxy Symfony needs to know which proxies are allowed to trust.
There are two ENV variables which can be set to modify the proxy behavior of the app:
TRUSTED_PROXY_LIST The variable expects a valid JSON encoded list of IPs or IP ranges::
TRUSTED_PROXY_LIST=["192.0.0.1","10.0.0.0\/8"]
TRUSTED_PROXY_ALL
The variable expects a boolean 1/0 to indicate if the application
should handle each address in $_SERVER[REMOTE_ADDR]
as a trusted proxy::
TRUSTED_PROXY_ALL=1
Create a OpenSSL key pair with private and public pem file::
$ openssl genrsa -out jira_privatekey.pem 1024 $ openssl req -newkey rsa:1024 -x509 -key jira_privatekey.pem -out jira_publickey.cer -days 365 $ openssl pkcs8 -topk8 -nocrypt -in jira_privatekey.pem -out jira_privatekey.pcks8 $ openssl x509 -pubkey -noout -in jira_publickey.cer > jira_publickey.pem
Open "Application links" page in your Jira: https://jira.example.com/plugins/servlet/applinks/listApplicationLinks
"Create new link" with URL pointing to your TimeTracker installation
Just click "Continue" if Jira is blaming "no response"
Fill out the following form:
After new Application is created click on action "edit" (the little pencil at the right to your new application)
jira_publickey.pem
)timetracker
)jira_privatekey.pcks8
).
Must begin with -----BEGIN PRIVATE KEY-----
(not BEGIN RSA
!).Per default every TimeTracker user has to be created manually. While setting ldap_create_user in app/config/parameters.yml to true new users of type DEV are going to be created automatically on a valid LDAP authentication. The type can be changed afterwards via the users panel in the administration tab or directly in the database.
Sometimes you not only want to track the times for the tickets from your ticket system. Assuming that you have a client providing an own ticket system, but you want to track the times for work on this tickets into your ticket system.
Example:
EXTERNAL-1
, EXTERNAL-200
etc.INTERNAL-1
INTERNAL-1
via TimetrackerThis feature tries to solve that problem.
task
Customer Project
with the key INTERNAL
Administration > Ticket-Sytem
and create a new one: Name:
e.g. ``Customer ticket system``
Type:
``Jira`` or ``Other`` or what you like
The type does not effect this feature in any way
URL:
e.g. ``https://ticketing.customer.org/%s``
This is used to generate links in the work log description
Timebooking:
No
This disables any contact to external ticket system
Administration > Projects
and create a new one: Name:
set to e.g. ``Customer Project``
Ticket-System:
Select the above created ``Customer ticket system``
Ticket-Prefix:
Enter the prefix of your customers project tickets e.g. ``EXTERNAL`` if the tickets are in the form
``EXTERNAL-123``
Active:
Yes
"Internal Jira project key":
select ``INTERNAL``
"Internal Jira ticket system":
select your internal ticket system
If everything is correct, the following will happen:
EXTERNAL-1
in TimeTracker for project Customer Project
EXTERNAL-1
in the configured internal Jira projectEXTERNAL-1
.. image:: doc/images/jira-cloud-1.png :alt: Jira cloud: Button "Zeiten aus Timetracker laden"
.. image:: doc/images/jira-cloud-2.png :alt: Jira cloud displaying times
It is possible to show the timetracker times in Jira cloud, even when not syncing the times into such an instance.
To get it working, install the Greasemonkey browser extension
__ and import
the scripts/timeSummaryForJira
script.
Then visit a ticket detail page of a cloud-hosted Jira instance. The right sidebar will show a "Zeiten aus Timetracker laden" button. When it has been clicked, the statistics are fetched from the Timetracker API and displayed there.
__ https://addons.mozilla.org/de/firefox/addon/greasemonkey/
The timetracker API is documented in web/api.yml
(OpenAPI v3).