django-timepiece is a multi-user application for tracking people’s time on projects. Complete documentation is available on Read The Docs.
- A simple CRM with projects and businesses
- User dashboards with budgeted hours based on project contracts
- Time sheets with daily, weekly, and monthly summaries
- Verified, approved, and invoiced time sheet workflows
- Monthly payroll reporting with overtime, paid leave, and vacation summaries
- Project invoicing with hourly summaries
django-timepiece is compatible with Python 2.{6,7}, Django 1.{3,4}, and PostgreSQL. PostgreSQL is the only offically supported database backend and, therefore, requires psycopg2. django-timepiece also depends on the following Django apps:
django-timepiece uses Sphinx and RST for documentation. You can use Sphinx to build the documentation:
A makefile is included with the documentation so you can run make html in the doc/ directory to build the documentation.
django-timepiece is available on PyPI, so the easiest way to install it is to use pip:
$ pip install django-timepiece
Ensure that less is installed on your machine:
# Install node.js and npm:
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs npm
# Use npm to install less:
$ npm install less -g
If you are starting from the included example project, copy the example local settings file at example_project/settings/local.py.example to example_project/settings/local.py.
If you are using an existing project, you will need to make the following changes to your settings:
Add timepiece and its dependencies to INSTALLED_APPS:
INSTALLED_APPS = (
...
'bootstrap_toolkit',
'compressor',
'pagination',
'selectable',
'timepiece',
...
)
Add django.core.context_processors.request and django-timepiece context processors to TEMPLATE_CONTEXT_PROCESSORS:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request", # <----
"timepiece.context_processors.extra_nav", # <----
"timepiece.context_processors.quick_clock_in", # <----
"timepiece.context_processors.quick_search", # <----
)
Configure compressor settings:
COMPRESS_PRECOMPILERS = (
('text/less', 'lessc {infile} {outfile}'),
)
COMPRESS_ROOT = '%s/static/' % PROJECT_PATH
INTERNAL_IPS = ('127.0.0.1',)
Set USE_TZ to False. django-timepiece does not currently support timezones.
Run syncdb.
Add URLs for django-timepiece and selectable to urls.py, e.g.:
urlpatterns = patterns('',
...
(r'^selectable/', include('selectable.urls')),
(r'', include('timepiece.urls')),
...
)
Add the django.contrib.auth URLs to urls.py, e.g.:
urlpatterns = patterns('',
...
url(r'^accounts/login/$', 'django.contrib.auth.views.login',
name='auth_login'),
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout_then_login',
name='auth_logout'),
url(r'^accounts/password-change/$',
'django.contrib.auth.views.password_change',
name='change_password'),
url(r'^accounts/password-change/done/$',
'django.contrib.auth.views.password_change_done'),
url(r'^accounts/password-reset/$',
'django.contrib.auth.views.password_reset',
name='reset_password'),
url(r'^accounts/password-reset/done/$',
'django.contrib.auth.views.password_reset_done'),
url(r'^accounts/reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
'django.contrib.auth.views.password_reset_confirm'),
url(r'^accounts/reset/done/$',
'django.contrib.auth.views.password_reset_complete'),
...
)
Create registration templates. For examples, see the registration templates in example_project/templates/registration. Ensure that your project’s template directory is added to TEMPLATE_DIRS:
TEMPLATE_DIRS = (
...
'%s/templates' % PROJECT_PATH,
...
)
Development sponsored by Caktus Consulting Group, LLC.
Contents: