{% set title = (template.options.name ?? 'export.document_title')|trans %} {# show the generation date of the PDF #} {% set now = create_date('now', app.user) %} {# internal variables to keep stats #} {% set duration = 0 %} {% set rate = 0 %} {% set rateInternal = 0 %} {% set currency = false %} {{ title }}
{# Summary only if passed into template #} {% if summary|length > 0 %} {% set summaryColumns = ['customer', 'project'] %} {% for column in summary %} {% if column == 'project_budget_time' %} {% set summaryColumns = summaryColumns|merge(['timeBudget']) %} {% elseif column == 'project_budget_money' %} {% set summaryColumns = summaryColumns|merge(['budget']) %} {% elseif column == 'duration' %} {% set summaryColumns = summaryColumns|merge(['duration']) %} {% elseif column == 'internal_rate' %} {% set summaryColumns = summaryColumns|merge(['internalRate']) %} {% elseif column == 'duration_decimal' %} {% set summaryColumns = summaryColumns|merge(['duration_decimal']) %} {% elseif column == 'rate' %} {% set summaryColumns = summaryColumns|merge(['rate']) %} {% endif %} {% endfor %}

{{ 'export.summary'|trans }}

{% for summaryColumn in summaryColumns %} {% if summaryColumn == 'duration_decimal' %} {% elseif summaryColumn == 'budget' %} {% elseif summaryColumn == 'timeBudget' %} {% elseif summaryColumn == 'customer' or summaryColumn == 'project' %} {% else %} {% endif %} {% endfor %} {% set showCustomerSummary = true %} {% set showTotalSummary = true %} {% set customer = null %} {% set customerDuration = 0 %} {% set customerRate = 0 %} {% set customerInternalRate = 0 %} {% set customerCurrency = null %} {% set customerCount = 0 %} {% set multiCurrency = false %} {% set totalDuration = 0 %} {% set totalInternalRate = 0 %} {% set totalRate = 0 %} {% for id, summary in summaries %} {% set totalDuration = totalDuration + summary.duration %} {% set totalInternalRate = totalInternalRate + summary.rate_internal %} {% set totalRate = totalRate + summary.rate %} {% if customerCurrency is not null and customerCurrency is not same as(summary.currency) %} {% set multiCurrency = true %} {% endif %} {% if customer is same as(null) %} {% set customer = summary.customer %} {% set customerCurrency = summary.currency %} {% endif %} {% if customer is not same as(summary.customer) %} {% for summaryColumn in summaryColumns %} {% if summaryColumn == 'duration' %} {% elseif summaryColumn == 'duration_decimal' %} {% elseif summaryColumn == 'internalRate' %} {% elseif summaryColumn == 'rate' %} {% else %} {% endif %} {% endfor %} {% set customerCurrency = summary.currency %} {% set customer = summary.customer %} {% set customerDuration = 0 %} {% set customerRate = 0 %} {% set customerInternalRate = 0 %} {% set customerCount = 0 %} {% endif %} {% for summaryColumn in summaryColumns %} {% if summaryColumn == 'customer' %} {% elseif summaryColumn == 'project' %} {% elseif summaryColumn == 'timeBudget' %} {% elseif summaryColumn == 'budget' %} {% elseif summaryColumn == 'hourlyRate' %} {% set summaryHourlyRate = summary.duration/3600 %} {% elseif summaryColumn == 'duration' %} {% elseif summaryColumn == 'duration_decimal' %} {% elseif summaryColumn == 'internalRate' %} {% elseif summaryColumn == 'rate' %} {% endif %} {% endfor %} {% set customerDuration = customerDuration + summary.duration %} {% set customerRate = customerRate + summary.rate %} {% set customerInternalRate = customerInternalRate + summary.rate_internal %} {% set customerCount = customerCount + 1 %} {% endfor %} {% if showCustomerSummary and customer is not same as(null) %} {% for summaryColumn in summaryColumns %} {% if summaryColumn == 'duration' %} {% elseif summaryColumn == 'duration_decimal' %} {% elseif summaryColumn == 'internalRate' %} {% elseif summaryColumn == 'rate' %} {% else %} {% endif %} {% endfor %} {% endif %} {% if showTotalSummary %} {% for summaryColumn in summaryColumns %} {% if summaryColumn == 'duration' %} {% elseif summaryColumn == 'duration_decimal' %} {% elseif summaryColumn == 'internalRate' %} {% elseif summaryColumn == 'rate' %} {% elseif summaryColumn not in ['customer', 'project'] %} {% endif %} {% endfor %} {% endif %}
{{ 'duration'|trans }}{{ 'remaining_budget'|trans }}{{ 'remaining_budget'|trans }}{{ summaryColumn|trans }}{{ summaryColumn|trans }}
{{ customerDuration|duration }}{{ customerDuration|duration(true) }}{{ customerInternalRate|money(customerCurrency) }}{{ customerRate|money(customerCurrency) }}
{{ summary.customer }}{{ summary.project }} {% if budgets[id] is defined and budgets[id].time_left > 0 %} {{ budgets[id].time_left|duration }} {% endif %} {% if budgets[id] is defined and budgets[id].money_left > 0 %} {{ budgets[id].money_left|money(summary.currency) }} {% endif %} {{ summaryHourlyRate > 0 ? (summary.rate/summaryHourlyRate)|money(summary.currency) : '' }}{{ summary.duration|duration }}{{ summary.duration|duration(true) }}{{ summary.rate_internal|money(summary.currency) }}{{ summary.rate|money(summary.currency) }}
{{ customerDuration|duration }}{{ customerDuration|duration(true) }}{{ customerInternalRate|money(customerCurrency) }}{{ customerRate|money(customerCurrency) }}
{{ 'sum.total'|trans }} {{ totalDuration|duration }}{{ totalDuration|duration(true) }} {% if not multiCurrency %} {{ totalInternalRate|money(customerCurrency) }} {% endif %} {% if not multiCurrency %} {{ totalRate|money(customerCurrency) }} {% endif %}
{% endif %} {# the list of all export items follows below #}

{{ 'export.full_list'|trans }}

{% set replace_classes = { 'hourlyRate': 'center', 'internalRate': 'center', 'fixedRate': 'center', 'rate': 'center', 'duration': 'center', 'break': 'center', } %} {% for column in columns %} {{ column.header|trans }} {% endfor %} {% for entry in entries %} {% set duration = duration + entry.duration %} {% set entryCurrency = entry.project.customer.currency %} {% if currency is same as(false) %} {% set currency = entryCurrency %} {% endif %} {% if currency is not same as(entryCurrency) %} {% set currency = null %} {% endif %} {# no check for is_granted('view_rate', entry) because it is only available for timesheets, but maybe missing for other potential export repositories #} {% set rate = rate + entry.rate %} {% set rateInternal = rateInternal + entry.internalRate %} {% for id, col in columns %} {% set column = col.name %} {% set value = col.extract(entry) %} {% if column == 'date' %} {% elseif column == 'begin' %} {% elseif column == 'end' %} {% elseif column == 'user' %} {% elseif column == 'currency' %} {% elseif column == 'description' %} {% elseif id == 'hourly_rate' %} {% elseif id in ['duration', 'duration_decimal', 'duration_seconds'] %} {% elseif id in ['break', 'break_decimal', 'break_seconds'] %} {% elseif id == 'internal_rate' %} {% elseif id == 'rate' %} {% elseif id == 'exported' or id == 'billable' %} {% elseif column == 'tags' %} {% else %} {% endif %} {% endfor %} {% endfor %} {% for id, column in columns %} {% if id in ['duration', 'duration_decimal', 'duration_seconds'] %} {% elseif id == 'internal_rate' %} {% elseif id == 'rate' %} {% else %} {% endif %} {% endfor %}
{{ value|date_short }}{{ value|time }}{{ value|time }}{{ value }}{{ entryCurrency }}{{ value|desc2html }} {% if entry.fixedRate %} - {% else %} {{ value|money(entryCurrency) }} {% endif %} {{ value|duration(id == 'duration_decimal') }}{{ value|duration(id == 'break_decimal') }}{{ value|money(entryCurrency) }}{{ value|money(entryCurrency) }}{{ value is same as (false) ? ('no'|trans) : ('yes'|trans) }}{{ value|join(', ') }}{{ value }}
{{ duration|duration(id == 'duration_decimal') }}{% if currency is not null %}{{ rateInternal|money(currency) }}{% endif %}{% if currency is not null %}{{ rate|money(currency) }}{% endif %}