mirror of
https://github.com/kevinpapst/kimai2.git
synced 2024-12-22 12:18:29 +00:00
165 lines
8.2 KiB
Twig
165 lines
8.2 KiB
Twig
{% import "macros/widgets.html.twig" as widgets %}
|
|
{%- set absoluteDuration = 0 -%}
|
|
{%- set absoluteInternalRate = 0 -%}
|
|
{%- set absoluteRate = 0 -%}
|
|
{%- set totalsDuration = {} -%}
|
|
{%- set totalsInternalRate = {} -%}
|
|
{%- set totalsRate = {} -%}
|
|
{%- set with_links = with_links is defined ? with_links : false -%}
|
|
{% if dataType == 'rate' %}
|
|
{% set dataTypeTitle = 'stats.amountTotal' %}
|
|
{% elseif dataType == 'internalRate' %}
|
|
{% set dataTypeTitle = 'internalRate' %}
|
|
{% else %}
|
|
{% set dataTypeTitle = 'stats.durationTotal' %}
|
|
{% endif %}
|
|
{% set columns = 0 %}
|
|
{% set totalCurrency = false %}
|
|
{% set filter_options = {'begin': begin, 'end': end} %}
|
|
{% set filter_route = 'timesheet' %}
|
|
{% if is_granted('view_other_timesheet') %}
|
|
{% set filter_route = 'admin_timesheet' %}
|
|
{% set filter_options = filter_options|merge({'user': user.id}) %}
|
|
{% endif %}
|
|
<table class="table table-hover dataTable">
|
|
<thead>
|
|
<tr>
|
|
<th>{% block upper_left %}{{ user.displayName|sanitize_dde }}{% endblock %}</th>
|
|
<th class="text-center reportDataTypeTitle">{{ dataTypeTitle|trans }}</th>
|
|
{% for column in period.dateTimes %}
|
|
{% block period_name %}
|
|
<th>{{ column|date_short }}</th>
|
|
{% endblock %}
|
|
{% set columns = columns + 1 %}
|
|
{% set dateKey = column|report_date %}
|
|
{% set totalsDuration = totalsDuration|merge({(dateKey): 0}) %}
|
|
{% set totalsInternalRate = totalsInternalRate|merge({(dateKey): 0}) %}
|
|
{% set totalsRate = totalsRate|merge({(dateKey): 0}) %}
|
|
{% endfor %}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for customerId, data in rows %}
|
|
{% set currency = data.customer.currency %}
|
|
{% if totalCurrency is same as (false) %}
|
|
{% set totalCurrency = currency %}
|
|
{% elseif data.customer != totalCurrency %}
|
|
{% set totalCurrency = null %}
|
|
{% endif %}
|
|
<tr class="summary">
|
|
<td>{{ widgets.label_customer(data.customer) }}</td>
|
|
<td class="text-center total">
|
|
{% if with_links %}<a href="{{ widgets.search_filter(filter_route, filter_options|merge({'customer': data.customer.id})) }}">{% endif %}
|
|
{% if dataType == 'rate' %}
|
|
{{ data.rate|money(currency) }}
|
|
{% elseif dataType == 'internalRate' %}
|
|
{{ data.internalRate|money(currency) }}
|
|
{% else %}
|
|
{{ data.duration|duration(decimal) }}
|
|
{% endif %}
|
|
{% if with_links %}</a>{% endif %}
|
|
</td>
|
|
<td colspan="{{ columns }}"></td>
|
|
</tr>
|
|
{% for project in data.projects %}
|
|
{% set absoluteDuration = absoluteDuration + project.duration %}
|
|
{% set absoluteInternalRate = absoluteInternalRate + project.internalRate %}
|
|
{% set absoluteRate = absoluteRate + project.rate %}
|
|
<tr class="project">
|
|
<td class="text-nowrap">
|
|
<strong>{{ widgets.label_project(project.project) }}</strong>
|
|
</td>
|
|
<td class="text-nowrap text-center total">
|
|
{% if with_links %}<a href="{{ widgets.search_filter(filter_route, filter_options|merge({'project': project.project.id})) }}">{% endif %}
|
|
{%- if dataType == 'rate' -%}
|
|
{{ project.rate|money(currency) }}
|
|
{%- elseif dataType == 'internalRate' -%}
|
|
{{ project.internalRate|money(currency) }}
|
|
{%- else -%}
|
|
{{ project.duration|duration(decimal) }}
|
|
{%- endif -%}
|
|
{% if with_links %}</a>{% endif %}
|
|
</td>
|
|
{% for column in project.data.data %}
|
|
{% set dateKey = column.date|report_date %}
|
|
<td class="text-nowrap text-center day-total {% block column_classes_project %}{% endblock %}">
|
|
{% if column.duration != 0 or column.rate != 0 or column.internalRate != 0 %}
|
|
{% if dataType == 'rate' %}
|
|
{% set totalsRate = totalsRate|merge({(dateKey): (totalsRate[dateKey] + column.rate)}) %}
|
|
<strong>{{ column.rate|money(currency) }}</strong>
|
|
{% elseif dataType == 'internalRate' %}
|
|
{% set totalsInternalRate = totalsInternalRate|merge({(dateKey): (totalsInternalRate[dateKey] + column.internalRate)}) %}
|
|
<strong>{{ column.internalRate|money(currency) }}</strong>
|
|
{% else %}
|
|
{% set totalsDuration = totalsDuration|merge({(dateKey): (totalsDuration[dateKey] + column.duration)}) %}
|
|
<strong>{{ column.duration|duration(decimal) }}</strong>
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% for activity in project.activities %}
|
|
<tr class="activity">
|
|
<td class="text-nowrap">
|
|
{{ widgets.label_activity(activity.activity) }}
|
|
</td>
|
|
<td class="text-nowrap text-center">
|
|
{% if with_links %}<a href="{{ widgets.search_filter(filter_route, filter_options|merge({'activity': activity.activity.id})) }}">{% endif %}
|
|
{% if dataType == 'rate' %}
|
|
{{ activity.rate|money(currency) }}
|
|
{% elseif dataType == 'internalRate' %}
|
|
{{ activity.internalRate|money(currency) }}
|
|
{% else %}
|
|
{{ activity.duration|duration(decimal) }}
|
|
{% endif %}
|
|
{% if with_links %}</a>{% endif %}
|
|
</td>
|
|
{% for column in activity.data.data %}
|
|
<td class="text-nowrap text-center day-total {% block column_classes_activity %}{% endblock %}">
|
|
{% if column.duration != 0 or column.rate != 0 or column.internalRate != 0 %}
|
|
{% if dataType == 'rate' %}
|
|
{{ column.rate|money(currency) }}
|
|
{% elseif dataType == 'internalRate' %}
|
|
{{ column.internalRate|money(currency) }}
|
|
{% else %}
|
|
{{ column.duration|duration(decimal) }}
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
</tbody>
|
|
{% if totalCurrency is same as (false) %}
|
|
{% set totalCurrency = null %}
|
|
{% endif %}
|
|
<tfoot>
|
|
<tr class="summary">
|
|
<td>{{ dataTypeTitle|trans }}</td>
|
|
<td class="text-nowrap text-center total">
|
|
{% if dataType == 'rate' %}
|
|
{{ absoluteRate|money(totalCurrency) }}
|
|
{% elseif dataType == 'internalRate' %}
|
|
{{ absoluteInternalRate|money(totalCurrency) }}
|
|
{% else %}
|
|
{{ absoluteDuration|duration(decimal) }}
|
|
{% endif %}
|
|
</td>
|
|
{% for column in period.dateTimes %}
|
|
{% set dateKey = column|report_date %}
|
|
<td class="text-nowrap text-center day-total {% block column_classes_total %}{% endblock %}">
|
|
{% if dataType == 'rate' %}
|
|
{{ totalsRate[dateKey]|money(totalCurrency) }}
|
|
{% elseif dataType == 'internalRate' %}
|
|
{{ totalsInternalRate[dateKey]|money(totalCurrency) }}
|
|
{% else %}
|
|
{{ totalsDuration[dateKey]|duration(decimal) }}
|
|
{% endif %}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|