django-timepiece is a multi-user application for tracking people's time on projects.
- 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} and Django 1.{3,4}. 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
Add timepiece to INSTALLED_APPS in settings.py and run syncdb:
INSTALLED_APPS = ( ... '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.active_entries", # <---- )
Add the timepiece URLs to urls.py, e.g.:
urlpatterns = patterns('', ... (r'^timepiece/', 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'), ... )
django-timepiece includes several different alternatives for testing. Test can be run using the default django test runner, through Tox, or with django-jenkins. Tox and django-jenkins are not required to run the tests for django-timepiece, but it is possible to use them:
pip install --upgrade tox django-jenkins
A Python module, run_tests.py
, is included if you do not want to run tests using Tox. This is the Python module used to run tests when executing python setup.py test
. The tests are run through Django, using Django's default test runner. It accepts an optional argument, run_tests.py jenkins
, that runs the tests using django-jenkins. Running the tests with django-jenkins also requires you to install coverage and pep8.
django-timepiece inclues a Tox configuration file to run tests in a variety of environments:
- py26-1.3 - Test using Python 2.6 and Django 1.3.x
- py26-1.4 - Test using Python 2.6 and Django 1.4.x
- py27-1.3 - Test using Python 2.7 and Django 1.3.x
- py27-1.4 - Test using Python 2.7 and Django 1.4.x
You can run any of the environments listed above using: tox -e name
. The tests are run through Django's default test runner, but you can also run the tests using django-jenkins along with tox by providing an extra argument: tox -e name -- jenkins
.
Development sponsored by Caktus Consulting Group, LLC.