added avatars, show user teams in list, new team dashboard widgets (#1150)
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box">
|
||||
{#
|
||||
{% if not title is empty %}
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">{{ title|trans }}</h3>
|
||||
{#
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
@@ -20,8 +21,9 @@
|
||||
</div>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
#}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
{% import "macros/widgets.html.twig" as widgets %}
|
||||
|
||||
{% if not title is empty %}
|
||||
{{ widgets.page_header(title) }}
|
||||
{% endif %}
|
||||
|
||||
{% set width = widgets|length %}
|
||||
{% set rawWidth = 12 / width %}
|
||||
{% set columnWidth = rawWidth|round(0, 'floor') %}
|
||||
<div class="row">
|
||||
{% for widget in widgets %}
|
||||
{% set columnSize = columnWidth %}
|
||||
{% if width == 5 and (loop.first or loop.last) %}
|
||||
{% set columnSize = columnWidth + 1 %}
|
||||
{% endif %}
|
||||
<div class="col-md-{{ columnSize }} col-sm-{{ columnSize * 2 }} col-xs-{{ columnSize * 4 }}">
|
||||
{{ render_widget(widget) }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if width > 0 %}
|
||||
{% if not title is empty %}
|
||||
{{ widgets.page_header(title) }}
|
||||
{% endif %}
|
||||
|
||||
{% set rawWidth = 12 / width %}
|
||||
{% set columnWidth = rawWidth|round(0, 'floor') %}
|
||||
<div class="row">
|
||||
{% for widget in widgets %}
|
||||
{% set columnSize = columnWidth %}
|
||||
{% if width == 5 and (loop.first or loop.last) %}
|
||||
{% set columnSize = columnWidth + 1 %}
|
||||
{% endif %}
|
||||
<div class="col-md-{{ columnSize }} col-sm-{{ columnSize * 2 }} col-xs-{{ columnSize * 4 }}">
|
||||
{{ render_widget(widget) }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -15,14 +15,6 @@
|
||||
{{ encore_entry_link_tags('chart') }}
|
||||
{{ encore_entry_script_tags('chart') }}
|
||||
|
||||
{% if not title is empty %}
|
||||
<p class="text-center">
|
||||
<strong>
|
||||
{{ title|trans }}
|
||||
</strong>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="chart">
|
||||
<canvas id="{{ chart_id }}" style="height: {{ kimai_context.chart.height }}px;"></canvas>
|
||||
</div>
|
||||
|
||||
60
templates/widget/widget-userteamprojects.html.twig
Normal file
60
templates/widget/widget-userteamprojects.html.twig
Normal file
@@ -0,0 +1,60 @@
|
||||
{% import "macros/widgets.html.twig" as widgets %}
|
||||
{% import "macros/progressbar.html.twig" as progress %}
|
||||
|
||||
{% set projectStats = data %}
|
||||
{% set title = options.title|default('label.my_team_projects') %}
|
||||
{% set widgetId = options.id %}
|
||||
|
||||
{% if projectStats|length > 0 %}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box box-{{ admin_lte_context.widget.type }} WidgetUserTeamProjects" id="{{ widgetId }}">
|
||||
{% if not title is empty %}
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">{{ title|trans }}</h3>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="box-body">
|
||||
<table class="table table-hover dataTable" role="grid">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'label.project'|trans }}</th>
|
||||
<th class="hidden-xs">{{ 'label.team'|trans }}</th>
|
||||
<th style="width:50%">{{ 'label.progress'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for stats in projectStats %}
|
||||
{% set project = stats.project %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ widgets.label_project(stats.project) }}
|
||||
<br>
|
||||
<small>{{ widgets.label_customer(stats.project.customer) }}</small>
|
||||
</td>
|
||||
<td class="hidden-xs">
|
||||
{% for team in project.teams %}
|
||||
{% if app.user.isInTeam(team) %}
|
||||
{{ widgets.label_team(team) }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td style="width:50%">
|
||||
{% if project.timeBudget is not empty and project.timeBudget > 0 %}
|
||||
{% set budgetLeft = project.timeBudget - stats.recordDuration %}
|
||||
{{ progress.progressbar_small(project.timeBudget, stats.recordDuration, budgetLeft, budgetLeft|duration) }}
|
||||
{% elseif project.budget is not empty and project.budget > 0 %}
|
||||
{% set budgetLeft = project.budget - stats.recordRate %}
|
||||
{{ progress.progressbar_small(project.budget, stats.recordRate, budgetLeft, budgetLeft|money(project.customer.currency)) }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
58
templates/widget/widget-userteams.html.twig
Normal file
58
templates/widget/widget-userteams.html.twig
Normal file
@@ -0,0 +1,58 @@
|
||||
{% import "macros/widgets.html.twig" as widgets %}
|
||||
|
||||
{% set teams = data %}
|
||||
{% set title = options.title|default('label.my_teams') %}
|
||||
{% set widgetId = options.id %}
|
||||
|
||||
|
||||
{% if teams|length > 0 %}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box box-{{ admin_lte_context.widget.type }} WidgetUserTeams" id="{{ widgetId }}">
|
||||
{% if not title is empty %}
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">{{ title|trans }}</h3>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="box-body">
|
||||
<table class="table table-hover dataTable" role="grid">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'label.team'|trans }}</th>
|
||||
<th class="text-center">{{ 'label.teamlead'|trans }}</th>
|
||||
<th>{{ 'label.user'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for team in teams %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ team.name }}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{{ widgets.user_avatar(team.teamlead) }}
|
||||
</td>
|
||||
<td class="avatars">
|
||||
{% set userTeamCount = team.users|length %}
|
||||
{% for user in team.users %}
|
||||
{% set teamHiddenId = widgetId ~ '_' ~ team.id ~ '_hiddenUser' %}
|
||||
{{ widgets.user_avatar(user) }}
|
||||
{% if userTeamCount > 5 and loop.index == 5 and not loop.last %}
|
||||
<a href="#" onclick="$('#{{ teamHiddenId }}').toggleClass('hidden');$(this).hide();return false;" class="badge">{{ 'label.plus_more'|trans({'%count%': (userTeamCount - 5)}) }}</a>
|
||||
<span class="hidden" id="{{ teamHiddenId }}">
|
||||
{% endif %}
|
||||
{% if userTeamCount > 5 and loop.index != 5 and loop.last %}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
Reference in New Issue
Block a user