{% extends 'timepiece/invoice/base.html' %} {% load timepiece_tags %} {% load bootstrap_toolkit %} {% load url from future %} {% block title %}Outstanding Hours{% endblock title %} {% block crumbs %} {{ block.super }}
  • / Outstanding Hours
  • {% endblock crumbs %} {% block content %}

    Outstanding Hours

    {% date_filters "date-filter" "months" 0 %}
    {{ date_form|as_bootstrap:"horizontal" }}
    {% if unverified %}

    Warning: The following users have unverified time during this period:

    {% endif %} {% if unapproved %}

    Warning: The following users have unapproved time during this period:

    {% endif %} {% if not unverified and not unapproved %}

    All time verified and approved

    {% endif %}
    {# Display each project type as a separate table. #} {# For each table, order by project status, then business display name, then project name. #} {% regroup project_totals by project.type.label as type_list %} {% for type in type_list %}

    Summary of {{ type.grouper }} Entries

    {% regroup type.list by project.name as project_list %} {% for project in project_list %} {% endfor %}
    Project Active Contracts Business Status Uninvoiced Hours
    Billable Non-billable
    {{ project.grouper }} {# FIXME: This generates a db query for each project; can we make it faster? #} {% for contract in project.list.0.project.get_active_contracts %} {{ contract.name }} {% if not forloop.last %}
    {% endif %} {% endfor %}
    {{ project.list.0.project.business.get_display_name }} {{ project.list.0.project.status.label|title }} {% get_uninvoiced_hours project.list 'billable' %} {% get_uninvoiced_hours project.list 'nonbillable' %} {% if from_date %} Make Invoice {% else %} Make Invoice {% endif %}
    {% empty %}

    There are no outstanding hours which match your filter criteria.

    {% endfor %}
    {% endblock content %}