mirror of
https://github.com/kevinpapst/kimai2.git
synced 2024-12-22 12:18:29 +00:00
154 lines
6.3 KiB
Twig
154 lines
6.3 KiB
Twig
{% macro progressbar_full(options) %}
|
|
{% set max = options['max'] ?? 0 %}
|
|
{% set current = options['current'] ?? 0 %}
|
|
{% set open = options['open'] ?? null %}
|
|
{% set reverseColors = options['reverseColors'] ?? false %}
|
|
{% set formatter = options['format'] ?? null %}
|
|
{% set currency = options['currency'] ?? null %}
|
|
{% set percentDecimals = options['decimals'] ?? 1 %}
|
|
{% set transPercentOpen = options['trans_percent_open'] ?? 'stats.percentUsedLeft' %}
|
|
{% set transPercentSpent = options['trans_percent_spent'] ?? 'stats.percentUsed' %}
|
|
{% set outerClass = options['class'] ?? '' %}
|
|
{% if formatter == 'duration' %}
|
|
{% set currentFormatted = current|duration %}
|
|
{% set maxFormatted = max|duration %}
|
|
{% set openFormatted = open is not null ? open|duration : null %}
|
|
{% elseif formatter == 'money' and currency is not null %}
|
|
{% set currentFormatted = current|money(currency) %}
|
|
{% set maxFormatted = max|money(currency) %}
|
|
{% set openFormatted = open is not null ? open|money(currency) : null %}
|
|
{% else %}
|
|
{% set currentFormatted = current %}
|
|
{% set maxFormatted = max %}
|
|
{% set openFormatted = open is not null ? open : null %}
|
|
{% endif %}
|
|
{% set percentReached = 0 %}
|
|
{% if max > 0 %}
|
|
{% set percentReached = (current / (max / 100)) %}
|
|
{% endif %}
|
|
{% set width = percentReached|number_format(1, '.', '') %}
|
|
|
|
{% if width > 100 %}
|
|
{% set width = 100 %}
|
|
{% endif %}
|
|
|
|
<div class="progress-group {{ outerClass }}">
|
|
<div class="progress-title">
|
|
<span class="progress-text">
|
|
{{ currentFormatted }}
|
|
</span>
|
|
<span class="progress-number text-end">
|
|
<strong>
|
|
{{ maxFormatted }}
|
|
</strong>
|
|
</span>
|
|
</div>
|
|
<div class="progress">
|
|
<div class="progress-bar {{ progressbar_color(percentReached, reverseColors) }}" role="progressbar" aria-valuenow="{{ width }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ width }}%"></div>
|
|
</div>
|
|
{% if open is not null and open > 0 %}
|
|
<small>{{ transPercentOpen|trans({'%percent%': percentReached|number_format(percentDecimals), '%left%': openFormatted}) }}</small>
|
|
{% else %}
|
|
<small>{{ transPercentSpent|trans({'%percent%': percentReached|number_format(percentDecimals)}) }}</small>
|
|
{% endif %}
|
|
</div>
|
|
{% endmacro %}
|
|
|
|
{% macro progressbar(max, current, title, subTitle, reverseColors) %}
|
|
{% set percentReached = 0 %}
|
|
{% if max > 0 %}
|
|
{% set percentReached = (current / (max / 100)) %}
|
|
{% endif %}
|
|
{% set width = percentReached|number_format(1, '.', '') %}
|
|
|
|
{% if width > 100 %}
|
|
{% set width = 100 %}
|
|
{% endif %}
|
|
|
|
<div class="progress-group">
|
|
<div class="progress-title">
|
|
<span class="progress-text">
|
|
{{ title }}
|
|
{% if percentReached >= 0 and subTitle is not empty %} – {{ percentReached|number_format(2) }}%{% endif %}
|
|
</span>
|
|
<span class="progress-number text-end">
|
|
{% if percentReached >= 0 and subTitle is empty %}
|
|
{{ percentReached|number_format(2) }}%
|
|
{% elseif subTitle is not empty %}
|
|
{{ subTitle }}
|
|
{% endif %}
|
|
</span>
|
|
</div>
|
|
<div class="progress">
|
|
<div class="progress-bar {{ progressbar_color(percentReached, reverseColors) }}" role="progressbar" aria-valuenow="{{ width }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ width }}%"></div>
|
|
</div>
|
|
</div>
|
|
{% endmacro %}
|
|
|
|
{% macro progressbar_small(max, current, leftValue, leftFormatted, reverseColors) %}
|
|
{% set percentReached = 0 %}
|
|
{% if max > 0 %}
|
|
{% set percentReached = (current / (max / 100)) %}
|
|
{% endif %}
|
|
{% set width = percentReached|number_format(1, '.', '') %}
|
|
|
|
{% if width > 100 %}
|
|
{% set width = 100 %}
|
|
{% endif %}
|
|
|
|
<div class="progress-group">
|
|
<div class="progress progress-sm">
|
|
<div class="progress-bar {{ progressbar_color(percentReached, reverseColors) }}" role="progressbar" aria-valuenow="{{ width }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ width }}%"></div>
|
|
</div>
|
|
{% if leftValue is not null and leftValue > 0 %}
|
|
<small>{{ 'stats.percentUsedLeft'|trans({'%percent%': percentReached|number_format(0), '%left%': leftFormatted}) }}</small>
|
|
{% else %}
|
|
<small>{{ 'stats.percentUsed'|trans({'%percent%': percentReached|number_format(0)}) }}</small>
|
|
{% endif %}
|
|
</div>
|
|
{% endmacro %}
|
|
|
|
{#
|
|
@param \App\Model\BudgetStatisticModelInterface budgetStatisticModel
|
|
@param string currency
|
|
#}
|
|
{% macro progressbar_budget(budgetStatisticModel, currency) %}
|
|
{% if budgetStatisticModel.hasBudget() %}
|
|
{% set options = {
|
|
'max': budgetStatisticModel.getBudget(),
|
|
'current': budgetStatisticModel.getBudgetSpent(),
|
|
'open': (budgetStatisticModel.getBudgetOpen()),
|
|
'format': 'money',
|
|
'currency': currency,
|
|
} %}
|
|
{% if budgetStatisticModel.isMonthlyBudget() %}
|
|
{% set options = options|merge({
|
|
'trans_percent_open': 'stats.percentUsedLeft_month',
|
|
'trans_percent_spent': 'stats.percentUsed_month',
|
|
}) %}
|
|
{% endif %}
|
|
{{ _self.progressbar_full(options) }}
|
|
{% endif %}
|
|
{% endmacro %}
|
|
|
|
{#
|
|
@param \App\Model\BudgetStatisticModelInterface budgetStatisticModel
|
|
#}
|
|
{% macro progressbar_timebudget(budgetStatisticModel) %}
|
|
{% if budgetStatisticModel.hasTimeBudget() %}
|
|
{% set options = {
|
|
'max': budgetStatisticModel.getTimeBudget(),
|
|
'current': budgetStatisticModel.getTimeBudgetSpent(),
|
|
'open': (budgetStatisticModel.getTimeBudgetOpen()),
|
|
'format': 'duration',
|
|
} %}
|
|
{% if budgetStatisticModel.isMonthlyBudget() %}
|
|
{% set options = options|merge({
|
|
'trans_percent_open': 'stats.percentUsedLeft_month',
|
|
'trans_percent_spent': 'stats.percentUsed_month',
|
|
}) %}
|
|
{% endif %}
|
|
{{ _self.progressbar_full(options) }}
|
|
{% endif %}
|
|
{% endmacro %}
|