Package: django-timepiece
django-timepiece is a multi-user application for tracking people’s time on
projects. Documentation is available onRead The Docs.master:develop:FeaturesA simple CRM with projects and businessesUser dashboards with budgeted hours based on project contractsTime sheets with daily, weekly, and monthly summariesVerified, approved, and invoiced time sheet workflowsMonthly payroll reporting with overtime, paid leave, and vacation summariesProject invoicing with hourly summariesRequirementsdjango-timepiece is compatible with Django 1.8 (on Python 2.7 and Python 3.5) and
Django 1.9 (on Python 2.7 and Python 3.5). PostgreSQL is the only
officially supported backend. For a full list of required libraries, see
therequirements/base.txtfrom the project source onGitHub.We actively support desktop versions of Chrome and Firefox, as well as common
mobile platforms. We do not support most versions of Internet Explorer. We
welcome pull requests to fix bugs on unsupported browsers.DocumentationDocumentation is hosted onRead The Docs.To build the documentation locally:Download a copy of thedjango-timepiecesource, either through
use ofgit cloneor by downloading a zipfile fromGitHub.Make sure that the top-level directory is on your Python path. If you’re
using a virtual environment, this can be accomplished via:cd /path/to/django-timepiece/ && add2virtualenv .Install the requirements inrequirements/docs.txtfrom the project
source onGitHub.Runmake htmlfrom within thedocs/directory. HTML files will be
output in thedocs/_build/html/directory.Installationdjango-timepiece is available onPyPI, so the easiest way to
install it and its dependencies is to usepip:$ pip install django-timepieceEnsure thatlessis installed on your machine and the version is <=1.4.0:# 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 from package.json:
$ npm installIf you are starting from the included example project, copy the example
local settings file atexample_project/settings/local.py.exampletoexample_project/settings/local.py.If you are using an existing project, you will need to make the following
changes to your settings:Addtimepieceand its dependencies toINSTALLED_APPS:INSTALLED_APPS = (
    ...
    'bootstrap_toolkit',
    'compressor',
    'selectable',

    # Must come last.
    'timepiece',
    'timepiece.contracts',
    'timepiece.crm',
    'timepiece.entries',
    'timepiece.reports',
)Configure your middleware:MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)Adddjango.core.context_processors.requestand django-timepiece context
processors toTEMPLATE_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.quick_clock_in",      # <----
    "timepiece.context_processors.quick_search",        # <----
    "timepiece.context_processors.extra_settings",      # <----
)Configure compressor settings:COMPRESS_PRECOMPILERS = (
    ('text/less', 'lessc {infile} {outfile}'),
)
COMPRESS_ROOT = '%s/static/' % PROJECT_PATH
INTERNAL_IPS = ('127.0.0.1',)SetUSE_TZtoFalse. django-timepiece does not currently support
timezones.Runsyncdbandmigrate.Add URLs for django-timepiece and selectable tourls.py, e.g.:urlpatterns = [
    ...
    (r'^selectable/', include('selectable.urls')),
    (r'', include('timepiece.urls')),
    ...
]Add thedjango.contrib.authURLs tourls.py, e.g.:urlpatterns = [
    ...
    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
inexample_project/templates/registration. Ensure that your project’s
template directory is added toTEMPLATE_DIRS:TEMPLATE_DIRS = (
    ...
    '%s/templates' % PROJECT_PATH,
    ...
)Development sponsored byCaktus Group.