Release Notes

1.1.0 (2016-02-29)


  • Activity autocomplete on entry creation / editing now works. Activity search

results were previously not actually being restricted by the search term, and incorrect handling of empty project values was causing errors when the user started to search for an activity without selecting a project. * Invoice totals now reflect the summing up of values rounded to two decimal places rather than the rounding to two decimal places of a sum of numbers with five decimal places.

1.0.0 (2016-01-04)

Release 1.0.0 is a comprehensive update of the django-timepiece codebase. It is based on 0.9.5, which was not officially released to PyPI. Release 1.0.0 includes the bulk of the unofficial 0.9.5 release, along with several critical code quality improvements to 0.9.5.

Please note that release 1.0.0 is not backwards compatible with any 0.9.x release. It is a new and separate refactoring of django-timepiece.


  • Assigning Project hours to a User not associated with the Project will automatically

associate User with Project * Admins are now able to add Entries after User’s timesheet has been approved * Payroll summary now groups by User last name * Dashboard comments have been converted to modal popups to keep interface clean * Contract detail now shows total hours worked before Contract start date and post Contract end date * Sticky headers have been added to all tables * Time Entries are now more precise to prevent the number of seconds being off in totals * Tabs for pending and completed Projects in the Contracts page * Users can only log activities that are allowed for a Project * Estimation Accuracy report has been refined for readability


  • Alphabetized entries in weekly schedule
  • Previous/Next options returned to the bottom of pages
  • Hourly Report outputs correct data
  • Sum of parts now accurately matches title (rounding display has been removed to show explicit

times) * Dashboard header styling has been made consistent (hover styling removed and background color matched) * lessc installs locally rather than globally

Code Quality

  • Compatibility with Django 1.9 with Python 2.7 or Python 3.5
  • Compatibility with Django 1.8 with Python 2.7 or Python 3.5
  • Drops support for all other combinations of Django and Python
  • Drops support for testing with Jenkins
  • Flake8 compliance
  • Tests updated to clean up stray data which led to inconsistent failures

0.9.5 (Not Released to PyPI)


  • Use Bootstrap 2.3.2
  • Estimation Accuracy report
  • Show active entry comment on dashboard page.
  • Order previous invoices by end date descending.


  • Save auth groups when creating a new user.
  • Require crm.change_business permission rather than crm.edit_business permission for EditUser view.
  • Don’t use transaction.commit_on_success on ViewUser or ViewProject views.
  • Fix bug preventing passage of custom default value to utils.get_setting.
  • Manually calculate height/width in hours (#147b95a).
  • Fixed migrations so that they will run on a fresh database. If you have an existing database, you will need to run migrate entries 0002 --fake.

Code Quality

  • Additional tests and code cleanup in the CRM app.
  • Use Model.add_to_class to augment class.
  • Make use of @cbv_decorator to avoid creating new Mixin classes for every decorator.
  • Reorganized navbar templates to make extension easier when Timepiece is a secondary app. Thanks @dannybrowne86!

0.9.4 (Released 04-01-2014)

  • Click to highlight row/column on Payroll summary page

0.9.3 (Released 11-06-2013)

Related issues are in the 0.9.3. milestone.


  • Allow using compress when DEBUG = True with a new context processor, timepiece.context_processors.extra_settings.
  • Align daily summary tables on the user timesheet (#725).
  • Add progress bars on the contract listing page (#707).
  • Add vertical highlighting to the payroll summary report (#727).
  • Bump django-selectable version number to 0.7.0.
  • Added a warning on the outstanding invoices page if users have unverified/unapproved entries for the selected time period (#744).


  • Include entries on last date of query on invoice listing page (#718).
  • Display correct user name on the timesheet rejection confirmation page (#726).
  • Register contracts.ContractHour in the admin so that the get_absolute_url() method can work.

Code Quality

  • Started refactoring and improving the test suite. factory_boy is now required to run the tests.
  • Refactored most CRM views to be class-based, and added more tests.
  • Added several CBV mixins to utils.mixins.

0.9.2 (Released 05-31-2013)

Related issues are in the 0.9.2 milestone.


  • Checkbox filter by status on the outstanding hours list view.
  • Click-to-highlight rows on the payroll summary page.
  • Administrators with ‘entries.add_projecthours’ permission can view unpublished hours on the schedule view page.
  • Refactored Total Progress area on the dashboard to more clearly show total hours worked vs. total hours assigned.
  • Aligned columns on time sheet and dashboard All Entries tables.
  • Displayed negative times with a negative sign and a red font.
  • In Contract listing & detail views, display end date in red+bold if the contract is expired.
  • In Contract listing & detail views, display warning icon next to end date if the contract is due to expire in less than two weeks.
  • Used humanized time format on dashboard and user time sheet.
  • JavaScript on Clock In, Clock Out, and Pause buttons that prevents accidentally double-clicking the button
  • Show active contract names on the Outstanding Hours (invoices) list


  • Added missing apps to INSTALLED_APPS in README.
  • Only include trackable projects in the quick clock in context processor.
  • Filter projects by entry’s user (rather than logged-in user) on Entry edit view.
  • Expose correct link on permanent tabs.
  • Use select_for_update() on the active_entry during clock in to prevent creating a second active entry.
  • Fixed broken admin links for Contract and ContractHour

Code quality

  • Split view test methods from TimepieceDataTestCase to create ViewTestMixin.
  • Removed some outdated styles.
  • Used global styles for table highlight and hover colors.
  • Specified browser support in README.
  • Refreshed template tags, and removed some unused ones.

0.9.1 (Released 05-14-2013)

Related issues are in the 0.9.1 milestone.

  • Fixed a bug with the ‘db_name’ of some contract models that was causing database queries to use the wrong table name.

0.9.0 (Released 05-10-2013)

Related issues are in the 0.9.0 milestone <>_.

We have reorganized the django-timepiece code into 5 co-dependent apps to make the code more modular, readable, and updatable. To upgrade your installation while maintaining your existing data, please follow these guidelines:

  1. Ensure that all existing migrations for django-timepiece are up to date.

  2. Upgrade your django-timepiece installation.

  3. Add 'timepiece', 'timepiece.contracts', 'timepiece.crm', 'timepiece.entries', and 'timepiece.reports' to INSTALLED_APPS in your settings file.

  4. Run the new migrations:

    ./ migrate timepiece --delete-ghost-migrations
    ./ migrate reports
    ./ migrate contracts --fake
    ./ migrate crm --fake
    ./ migrate entries --fake
  5. Remove all of your old *.pyc files, e.g. run something like find . -name ‘*.pyc’ -delete in bash.

  6. Remove stale ContentType and Permission objects. Note: Before doing this, take note of which timepiece permissions are in each of your auth Groups as these will need to be restored.

    # This also deletes associated timepiece permissions.
  7. Trigger the creation of new ContentType and Permission objects:

    from import create_permissions
    from import update_contenttypes
    from django.db.models import get_app, get_models
    for app in ['timepiece', 'contracts', 'crm', 'entries', 'reports']:
        update_content_types(get_app(app), get_models())
        create_permissions(get_app(app), get_models(), 0)
  8. Restore permissions to any auth Groups that you have created.

Related issues are in the 0.9.0 milestone.

  • Reorganized app structure (see notes above)
  • Removed existing migrations (see notes above)
  • Dropped support for Django 1.3
  • Added support for Django 1.5
  • Removed PROJECT_UNSET from ProjectContract.type choices
  • Use ellipsis after comment summary on dashboard so that comment doesn’t appear cut off

0.8.3 (Released 03-27-2013)

Related issues are in the 0.8.3 milestone.

  • Fixed invoice creation to separate out non-billable activities and not count them in the invoice totals.
  • Added link to Outstanding Hours page from Invoice Detail page.
  • Added schedule link to mobile navbar
  • Added requirement that scheduled hours be > 0.
  • Added tests for project hours.
  • Fixed weekly schedule editor so project name changes stick.
  • Clicking ‘Clock Out’ more than once gives 404 error.

0.8.2 (Released 01-25-2013)

Related issues are in the 0.8.2 milestone.

  • Added permission requirements to view invoice list
  • Added static files blocks to the base template

0.8.1 (Released 01-22-2013)

Related issues are in the 0.8.1 milestone.

  • Restored slug field on RelationshipType

0.8.0 (Released 01-21-2013)

Related issues are in the 0.8.0 milestone.


  • Cleaned up the URL and template structure (This will break many existing bookmarks!)
  • Removed the General Ledger report in favor of adding a summary by project on the Hourly Report page
  • Default to showing entries from the previous week grouped by day on the Hourly Report
  • Fall back to displaying username when a user’s first & last name are unavailable
  • Added name field to ProjectContract model
  • Made ProjectContract <-> Project a many-to-many relationship
  • Added additional information on ProjectContract detail page
  • Added list of contracts on Project detail page
  • Allow running a subset of tests through (now in accordance with existing documentation)
  • Created a get_active_entry utility which raises ActiveEntryError if a user has more than one active entry
  • Permanent tabs for user time sheet tabs
  • Upgrade less from 1.3.0 -> 1.3.3
  • New model ContractHours allows tracking whether specific blocks of hours on a contract have been approved.


  • Prevent “None” from appearing under date headers on dashboard’s All Entries tab
  • Save Auth groups when adding/editing a user
  • Include current GET parameters when using ‘next’ in a URL

Other Changes

  • Removed unused methods from ProjectContract and ContractAssignment models
  • Removed unused ContractMilestone model
  • Removed unused AssignmentManager class
  • Removed unused slug fields from Business & RelationshipType models
  • Removed ProjectContract from Project admin
  • Improved test coverage of template tags
  • Changed references to person/people to user/users for consistency with data model
  • Removed unused clear_form.js
  • Used slightly darker highlight color for active project on dashboard’s Progress tab
  • Removed paste styles from styles.less
  • Updated contributing docs to indicate that pull requests should be made to caktus:develop
  • Removed some unused images, renamed a couple of others.

0.7.3 (Released 01-07-2013)

Related issues are in the 0.7.3 milestone.


  • Row and column highlighting on weekly schedule
  • Redirect regular users to schedule view from schedule edit (rather than redirecting to login)
  • Use checkbox select multiple for editing groups on person add/edit forms
  • Added “active” column to front-end user list & detail views
  • Permanent links to dashboard tabs
  • Dashboard project progress table
    • Highlight row of active project
    • Made width of bars relative to maximum worked or assigned hours
    • Show overtime bar for work on unassigned projects
  • Dashboard “All Entries” tab
    • Moved “Add Entry” button to top right of page, and clock in dropdown
    • Split entries by day into separate tables, with a summary row
    • Added comment column, and included comment in row tooltip
    • Hide pause time unless it is greater than 0


  • Fixed bugs in handling filters on the hourly report
  • Only summarize entries in the time period requested on hourly & billable reports (previously, entries for the entire week which includes the from date were included)
  • Fixed bug which prevented projects being removed from the hourly report filter
  • Keep GET parameters when deleting entry (allows proper redirection)
  • Use history.back() on cancel buttons on clock in, clock out, and add entry pages
  • Fixed floating point errors that caused project progress bars to display over two lines
  • Prevent negative worked/assigned time on project progress bars
  • Fix project progress bar behavior when worked = 0 and assigned = 0 (e.g., just after clocking into an unassigned project)
  • Allow editing groups on person edit page
  • Fixed subnav rendering on invoice pages

0.7.2 (Released 11-28-2012)

  • Fixed test failures that resulted from changes to the display of project names when clocking time.

0.7.1 (Released 11-28-2012)

Related issues are in the 0.7.1 milestone.

  • Fixed path to white Glyphicons
  • Fixed duplicates in unverified list on Payroll Summary report
  • Removed unused timepiece/time-sheet/_entry_list.html template
  • Made field required
  • Schema migration to add Business.short_name field
  • Add Business.get_display_name() to retrieve first of short_name or name
  • Show business short name with project name on the dashboard, clock in, clock out, and outstanding invoices pages
  • Added Entry.get_paused_seconds() - gets total time paused on any entry, regardless of whether it is currently active or paused
  • Removed Entry.get_active_seconds()
  • Moved Entry.get_seconds() to Entry.get_total_seconds() - updated to get total worked seconds for any entry, regardless of whether it is currently active or paused, also taking into account the amount of time paused
  • Dashboard tweaks and bug fixes
    • Fixed pause time bug
    • Fixed incorrect link name in mobile navbar
    • Fixed floating point errors in progress bar width calculations
    • Fixed overall progress bar styling when worked width = 0%
    • Fixed project progress bar responsiveness when resizing or zooming the page
    • Show overtime on project progress bars
    • Use dark green instead of red on overtime bars
    • Separated the “Project” and “Activity” columns in the all entries list
    • Include active entry in the all entries list
    • Increased the prominence of the active entry section
    • Show the current activity name in the active entry section
    • Removed link to the active project from the active entry section
    • Use “for” instead of “on” when describing entries

0.7.0 (Released 11-16-2012)


  • Added search to Project list view in admin
  • Added project relationship information on Person detail view
  • Updated the navigation bar
    • Added “Quick Clock In” pulldown to allow link to project-specific clock in form from anywhere on the site
    • Replaced “Dashboard” pulldown with a link to the user’s monthly time sheet. The dashboard is accessible via the “Timepiece” link in the top left corner.
    • Renamed “Reports” dropdown to “Management”, and moved link to the admin from the user pulldown
    • Moved “Online Users” info to weekly dashboard view & removed the active_entries context processor
    • Made search box smaller unless it is the focused element
    • Use user’s first name instead of email address on user pulldown
  • Redesigned the weekly dashboard view
    • Active entry section allows convenient summary & manipulation of the current entry
    • Visualization of overall progress (out of hours set in UserProfile.hours_per_week)
    • Visualization of hours worked on each project (out of ProjectHours assigned this week)
    • Use “humanized” hours display (1:30) rather than decimal (1.5)
  • Added productivity report, which compares the hours worked on a project to the hours that were assigned to it

Bug Fixes

  • Updated to latest version of Bootstrap
  • Updated django-compressor from 1.1.2 -> 1.2 & updated run_tests settings to avoid masking primary errors in tests
  • Set USE_TZ = False in example_project settings because we don’t currently support use of timezones
  • Added missing app and context processors to settings in example_project and run_tests
  • Updated example_project settings & README to reflect that INTERNAL_IPS must be set in order to ensure that Bootstrap Glyphicons can be found
  • Fixed bug when copying the previous week’s ProjectHours entries to current week when entries for the current week already exist.
  • Fixed bug when removing ProjectRelationship through the front end

Code Quality

  • Renamed the ‘timepiece-entries’ URL to ‘dashboard’
  • Removed unnecessary settings from example_project and run_tests
  • Split up settings files in example project to use base and local settings
  • Removed unused jqplot library
  • Moved multiply template tag to timepiece_tags and removed math_tags file
  • Removed most of custom icon set in favor of Bootstrap’s Glyphicons

0.6.0 (Released 10-04-2012)

  • Updated version requirement for South to 0.7.6
  • Updated version requirement for django-bootstrap-toolkit to 2.5.6
  • Use Javascript to manage date filter links on Reports pages
  • Use “empty” text when there is no Billable Report data to visualize
  • Include auth groups select to Person creation form
  • Added pagination and search to Previous Invoices page
  • Show current project name and activity on Clock Out page
  • Maintain selected month on link to Person time sheet from Payroll Report page
  • Maintain selected month on link to Project time sheet from Outstanding Hours page
  • Fixed division-by-0 bug on ContractAssignment admin page
  • Fixed infinite loop when ordering by Project on ProjectContract admin page
  • Prevent admin from requiring that all ProjectContract inlines be completed on Project creation
  • Use default options for the filter form on the Hourly Report page

We also completed a full audit of the code, in which we deleted stale parts, removed unmaintained features, and made some simple cleanups:

  • Migrated the PersonSchedule.hours_per_week field to the UserProfile model
  • Deleted the AssignmentAllocation and PersonSchedule models
  • Removed all projection-related code, including admin and model hooks, forms, views, templates, and
  • Deleted
  • Removed unused fields from DateForm
  • Removed unused templates and static files
  • Removed unused utilities, template tags, and forms
  • Cleaned up imports, used the render shortcut in all views, and used the new-style url in all templates
  • Refreshed the example project and added missing templates and JavaScript files

0.5.4 (Released 09-13-2012)

  • Projects on Invoices/Outstanding Hours page are sorted by status and then by name
  • Weekly Project Hours chart uses horizontal zebra striping
  • New permission added for approving timesheets
  • Fixed a bug in Project Hours edit view that prevented deletion of multiple entries at once
  • Added links to Person timesheet from Payroll Report page
  • Added links to Project timesheet on Invoice page

0.5.3 (Released 08-10-2012)

  • Added a “Billable Hours” report, which displays a chart of billable and non-billable hours for a selected group of people, activities, project types and date range.
  • Improved usability of the payroll report
  • Made forms with date ranges more consistent and DRY
  • Added a restriction that prevents users from adding entries to months with approved or invoiced entries.
  • Removed the link to edit weekly project hours for users without that permission
  • Improved readability of report tables by changing the hover color to something more distinctive.

0.5.2 (Released 08-01-2012)

  • Added “Project Hours” views, which allow managers to assign project hours to users in a spreadsheet-like interface.
  • Simplified implementation of timezone support.
  • Fixed a bug that was preventing the weekly totals in “Hourly Summary” of “My Ledger” from being displayed.
  • Removed the display of “hours out of” in the “billable time” section of “My Work This Week” and added it to the “total time this week” section.

0.5.1 (Released 07-20-2012)

  • Added compatability with Django 1.4 and timezone support
  • Added mobile support for the dashboard (clocking in/out, ledger, etc.)
  • Fixed a bug where the last billable day was calculated incorrectly
  • Payroll report now lists types of projects under billable and non-billable columns
  • Moved the “Others Are Working On” table to a popover in the navigation
  • Work total table now includes the active entry
  • Comment field available when clocking in to a project
  • Added support for custom navigation through EXTRA_NAV setting
  • Across the board styling changes

0.5.0 (Released 07-12-2012)

  • Complete styling upgrade using Twitter Bootstrap
  • Fixed permissions for client users that can’t clock in
  • Replaced deprecated message_set calls with new messages API calls
  • Added django-bootstrap-toolkit requirement
  • Included the top navigation bar inside of the app’s templates.
  • Made the project edit form use selectables for searching for businesses.
  • Improved tox configuration of test database names
  • Added a makefile and /docs for building documentation with Sphinx

0.4.2 (Released 06-15-2012)

  • Fixed permissions for creating businesses.
  • Hourly reports in “My Ledger” display previous weeks of the month if an overlapping entry exists.
  • Fixed permissions for rejecting verified entries.
  • Fixed a bug where you could verify entries while still clocked in.
  • Added user selection for payroll reviewers to switch between timesheets.
  • Fixed bug where the incorrect email was shown in the header.

0.4.1 (Released 06-04-2012)

  • Made projects’ tracker URL’s appear on the project detail view.
  • Added reasonable limits to the total time and pause length of entries.
  • Users can now comment on the active entry while clocking into a new one.
  • Fixed a bug with entries overlapping when clocking in while another entry is active.
  • Added the ability for payroll reviewers to reject an entry, which marks it as unverified.
  • Added a weekly total on the dashboard for all hours worked.
  • The hourly summary in “My Ledger” now shows the entire first week of the month.
  • Made payroll links to timesheets maintain the proper month and year.
  • Made URL’s in entry comments display as HTML links
  • Fixed permissions checking for payroll and entry summary views.
  • Made project list page filterable by project status.
  • Replaced django-ajax-select with latest version of django-selectable
  • Added migration to remove tables related to django-crm

0.4.0 (Released 04-27-2012)

  • Improved personnel timesheets with a simplified, tabbed layout.
  • Improved efficency and consistency of entry queries
  • Removed BillingWindow, RepeatPeriod, and PersonRepeatPeriod models, tables and related code.
  • Removed the update billing windows management command as it is no longer needed.

0.3.8 (Released 02-16-2012)

  • Converted invoice reference to a CharField for more flexibility
  • Added list and detail views for project contracts
  • Hour groups now show totals for each activity nested within them
  • Moved unapproved and unverified entry warnings to the payroll summary page.

0.3.7 (Released 02-01-2012)

  • Make create invoice page inclusive of date

0.3.6 (Released 02-01-2012)

  • Allowed entries to be added in the future.
  • Added per project activity restrictions.
  • Allowed marking entries as ‘not invoiced’ and grouped entries together after clicking on “Mark as invoiced”
  • Added the ability to view previous invoices and export them as csv’s
  • Added the ability to group different activities together into Hour Groups for summarizing in invoices.

0.3.5 (Released 12-09-2011)

  • Optimized Payroll Summary with reusable code from Hourly Reports.
  • Removed use of Textile and used the linebreaks filter tag in its place.

0.3.4 (Released 11-14-2011)

  • Added a new Hourly Reports view with project hours filtered and grouped by user specified criteria.
  • Hourly Reports, General Ledger and Payroll Summary are now subheadings under Reports.
  • Improved My Ledger with row highlighting, better CSS and a title attribute.
  • Fixed Invoice projects to return the date range with m/d/Y.

0.3.3 (Released 10-31-2011)

  • Fixed Time Detail This Week on Dashboard to show correct totals
  • Fixed Billable Summary on My Ledger to show totals for unverified hours

0.3.2 (Released 10-28-2011)

  • My Active Entries on Dashboard now shows the hours worked thus far
  • Improved My Ledger by adding a comments column and a redirect from the edit entry link
  • Fixed issues related to the hourly summary option not appearing for some users
  • Fixed issues with date accuracy in weekly headings on ledger pages
  • General ledger now sorts users by last name
  • Enhanced project time sheets with an activity column and a summary of hours spent on each activity.
  • Invoice projects page now shows project status
  • Activity on clock in page now defaults to the last activity clocked on that project
  • Payroll report only shows users that have clocked hours for the period.

0.3.1 (Released 10-20-2011)

  • Moved to GitHub (and git)
  • Add hourly summary page to report daily, weekly, and monthly hours
  • Refactored weekly overtime calculations to use ISO 8601

0.3.0 (Released 10-03-2011)

  • Removed ability to maintain multiple active entries
  • Enhanced logic on clock in and add entry pages to check for overlapping entries
  • Fixed date redirect when marking projects as invoiced
  • Fixed issues related to the “Approve Timesheet” link missing
  • Include billable, non-billable, uninvoiced, and invoiced summaries on person timesheet
  • Use select_related in a few places to optimize page loads

0.2.0 (Released 09-01-2011)

  • First official release

Development sponsored by Caktus Consulting Group, LLC.