|
|
@@ -2,13 +2,13 @@ |
|
|
{# Variablen: clients, projects, services, userList, filterRaw, filterActive, |
|
|
{# Variablen: clients, projects, services, userList, filterRaw, filterActive, |
|
|
filterDateFrom, filterDateTo, isTracker, limit #} |
|
|
filterDateFrom, filterDateTo, isTracker, limit #} |
|
|
|
|
|
|
|
|
{% set fr = filterRaw %} |
|
|
|
|
|
|
|
|
{% set fr = filterRaw %} |
|
|
{% set frPeriod = fr.period is defined ? fr.period : '' %} |
|
|
{% set frPeriod = fr.period is defined ? fr.period : '' %} |
|
|
{% set frInvoiced = fr.invoiced is defined ? fr.invoiced : '' %} |
|
|
{% set frInvoiced = fr.invoiced is defined ? fr.invoiced : '' %} |
|
|
{% set months = deMonths() %} |
|
|
|
|
|
{% set yearNow = 'now'|date('Y') %} |
|
|
|
|
|
{% set dayNow = 'now'|date('j') %} |
|
|
|
|
|
{% set monthNow = 'now'|date('n') %} |
|
|
|
|
|
|
|
|
{% set months = deMonths() %} |
|
|
|
|
|
{% set yearNow = 'now'|date('Y') %} |
|
|
|
|
|
{% set dayNow = 'now'|date('j') %} |
|
|
|
|
|
{% set monthNow = 'now'|date('n') %} |
|
|
|
|
|
|
|
|
{% set hasClients = fr.clients is defined and fr.clients is not empty %} |
|
|
{% set hasClients = fr.clients is defined and fr.clients is not empty %} |
|
|
{% set hasProjects = fr.projects is defined and fr.projects is not empty %} |
|
|
{% set hasProjects = fr.projects is defined and fr.projects is not empty %} |
|
|
@@ -19,6 +19,12 @@ |
|
|
{% set hasInvoiced = fr.invoiced is defined and fr.invoiced is not empty %} |
|
|
{% set hasInvoiced = fr.invoiced is defined and fr.invoiced is not empty %} |
|
|
{% set isCustom = hasPeriod and frPeriod == 'custom' %} |
|
|
{% set isCustom = hasPeriod and frPeriod == 'custom' %} |
|
|
|
|
|
|
|
|
|
|
|
{% set clientsNeg = fr.clients_neg is defined and fr.clients_neg is not empty %} |
|
|
|
|
|
{% set projectsNeg = fr.projects_neg is defined and fr.projects_neg is not empty %} |
|
|
|
|
|
{% set servicesNeg = fr.services_neg is defined and fr.services_neg is not empty %} |
|
|
|
|
|
{% set usersNeg = fr.users_neg is defined and fr.users_neg is not empty %} |
|
|
|
|
|
{% set periodNeg = fr.period_neg is defined and fr.period_neg is not empty %} |
|
|
|
|
|
|
|
|
{% set fromDay = filterDateFrom ? filterDateFrom|date('j') : dayNow %} |
|
|
{% set fromDay = filterDateFrom ? filterDateFrom|date('j') : dayNow %} |
|
|
{% set fromMonth = filterDateFrom ? filterDateFrom|date('n') : monthNow %} |
|
|
{% set fromMonth = filterDateFrom ? filterDateFrom|date('n') : monthNow %} |
|
|
{% set fromYear = filterDateFrom ? filterDateFrom|date('Y') : yearNow %} |
|
|
{% set fromYear = filterDateFrom ? filterDateFrom|date('Y') : yearNow %} |
|
|
@@ -40,23 +46,31 @@ |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasClients %} checked{% endif %}> |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasClients %} checked{% endif %}> |
|
|
<span>{{ 'app.report.filter_client'|trans }}</span> |
|
|
<span>{{ 'app.report.filter_client'|trans }}</span> |
|
|
</label> |
|
|
</label> |
|
|
<div class="filter-row__controls" id="filter-controls-clients"> |
|
|
|
|
|
{% set selClients = hasClients ? fr.clients : [''] %} |
|
|
|
|
|
{% for i, val in selClients %} |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<select class="select filter-select" data-filter-key="clients"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
{% for client in clients %} |
|
|
|
|
|
<option value="{{ client.id }}"{% if val == client.id %} selected{% endif %}>{{ client.name }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
{% if i > 0 %} |
|
|
|
|
|
<button type="button" class="filter-row__remove">×</button> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</div> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls" id="filter-controls-clients"> |
|
|
|
|
|
{% set selClients = hasClients ? fr.clients : [''] %} |
|
|
|
|
|
{% for i, val in selClients %} |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<select class="select filter-select" data-filter-key="clients"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
{% for client in clients %} |
|
|
|
|
|
<option value="{{ client.id }}"{% if val == client.id %} selected{% endif %}>{{ client.name }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
{% if i > 0 %} |
|
|
|
|
|
<button type="button" class="filter-row__remove">×</button> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</div> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="filter-row__meta"> |
|
|
|
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-clients" data-filter-key="clients">+</button> |
|
|
|
|
|
<label class="filter-neg"> |
|
|
|
|
|
<input type="checkbox" class="filter-neg-checkbox"{% if clientsNeg %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_neg'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-clients" data-filter-key="clients">+</button> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
{# ── Projekt ──────────────────────────────────────────────────── #} |
|
|
{# ── Projekt ──────────────────────────────────────────────────── #} |
|
|
@@ -66,23 +80,31 @@ |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasProjects %} checked{% endif %}> |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasProjects %} checked{% endif %}> |
|
|
<span>{{ 'app.report.filter_project'|trans }}</span> |
|
|
<span>{{ 'app.report.filter_project'|trans }}</span> |
|
|
</label> |
|
|
</label> |
|
|
<div class="filter-row__controls" id="filter-controls-projects"> |
|
|
|
|
|
{% set selProjects = hasProjects ? fr.projects : [''] %} |
|
|
|
|
|
{% for i, val in selProjects %} |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<select class="select filter-select" data-filter-key="projects"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
{% for project in projects %} |
|
|
|
|
|
<option value="{{ project.id }}"{% if val == project.id %} selected{% endif %}>{{ project.name }} ({{ project.client.name }})</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
{% if i > 0 %} |
|
|
|
|
|
<button type="button" class="filter-row__remove">×</button> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</div> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls" id="filter-controls-projects"> |
|
|
|
|
|
{% set selProjects = hasProjects ? fr.projects : [''] %} |
|
|
|
|
|
{% for i, val in selProjects %} |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<select class="select filter-select" data-filter-key="projects"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
{% for project in projects %} |
|
|
|
|
|
<option value="{{ project.id }}"{% if val == project.id %} selected{% endif %}>{{ project.name }} ({{ project.client.name }})</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
{% if i > 0 %} |
|
|
|
|
|
<button type="button" class="filter-row__remove">×</button> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</div> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="filter-row__meta"> |
|
|
|
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-projects" data-filter-key="projects">+</button> |
|
|
|
|
|
<label class="filter-neg"> |
|
|
|
|
|
<input type="checkbox" class="filter-neg-checkbox"{% if projectsNeg %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_neg'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-projects" data-filter-key="projects">+</button> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
{# ── Leistung ─────────────────────────────────────────────────── #} |
|
|
{# ── Leistung ─────────────────────────────────────────────────── #} |
|
|
@@ -92,65 +114,26 @@ |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasServices %} checked{% endif %}> |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasServices %} checked{% endif %}> |
|
|
<span>{{ 'app.report.filter_service'|trans }}</span> |
|
|
<span>{{ 'app.report.filter_service'|trans }}</span> |
|
|
</label> |
|
|
</label> |
|
|
<div class="filter-row__controls" id="filter-controls-services"> |
|
|
|
|
|
{% set selServices = hasServices ? fr.services : [''] %} |
|
|
|
|
|
{% set activeServices = services|filter(s => not s.isArchived()) %} |
|
|
|
|
|
{% set archivedServices = services|filter(s => s.isArchived()) %} |
|
|
|
|
|
{% for i, val in selServices %} |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<select class="select filter-select" data-filter-key="services"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
{% if activeServices|length > 0 %} |
|
|
|
|
|
<optgroup label="Aktiv"> |
|
|
|
|
|
{% for service in activeServices %} |
|
|
|
|
|
<option value="{{ service.id }}"{% if val == service.id %} selected{% endif %}>{{ service.name }}{% if not service.billable %} (nicht-verrechenbar){% endif %}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</optgroup> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
{% if archivedServices|length > 0 %} |
|
|
|
|
|
<optgroup label="Archiviert"> |
|
|
|
|
|
{% for service in archivedServices %} |
|
|
|
|
|
<option value="{{ service.id }}"{% if val == service.id %} selected{% endif %}>{{ service.name }}{% if not service.billable %} (nicht-verrechenbar){% endif %}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</optgroup> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</select> |
|
|
|
|
|
{% if i > 0 %} |
|
|
|
|
|
<button type="button" class="filter-row__remove">×</button> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</div> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</div> |
|
|
|
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-services" data-filter-key="services">+</button> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
{# ── Benutzer (nur für Admins / Members, nicht für Tracker) ───── #} |
|
|
|
|
|
{% if not isTracker %} |
|
|
|
|
|
<div class="filter-row{% if not hasUsers %} filter-row--inactive{% endif %}" |
|
|
|
|
|
data-filter-key="users"> |
|
|
|
|
|
<label class="filter-row__label"> |
|
|
|
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasUsers %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_user'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
|
|
|
<div class="filter-row__controls" id="filter-controls-users"> |
|
|
|
|
|
{% set selUsers = hasUsers ? fr.users : [''] %} |
|
|
|
|
|
{% set activeUsers = userList|filter(u => not u.archived) %} |
|
|
|
|
|
{% set archivedUsers = userList|filter(u => u.archived) %} |
|
|
|
|
|
{% for i, val in selUsers %} |
|
|
|
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls" id="filter-controls-services"> |
|
|
|
|
|
{% set selServices = hasServices ? fr.services : [''] %} |
|
|
|
|
|
{% set activeServices = services|filter(s => not s.isArchived()) %} |
|
|
|
|
|
{% set archivedServices = services|filter(s => s.isArchived()) %} |
|
|
|
|
|
{% for i, val in selServices %} |
|
|
<div class="filter-row__control-group"> |
|
|
<div class="filter-row__control-group"> |
|
|
<select class="select filter-select" data-filter-key="users"> |
|
|
|
|
|
|
|
|
<select class="select filter-select" data-filter-key="services"> |
|
|
<option value="">...</option> |
|
|
<option value="">...</option> |
|
|
{% if activeUsers|length > 0 %} |
|
|
|
|
|
|
|
|
{% if activeServices|length > 0 %} |
|
|
<optgroup label="Aktiv"> |
|
|
<optgroup label="Aktiv"> |
|
|
{% for user in activeUsers %} |
|
|
|
|
|
<option value="{{ user.id }}"{% if val == user.id %} selected{% endif %}>{{ user.name }}</option> |
|
|
|
|
|
|
|
|
{% for service in activeServices %} |
|
|
|
|
|
<option value="{{ service.id }}"{% if val == service.id %} selected{% endif %}>{{ service.name }}{% if not service.billable %} (nicht-verrechenbar){% endif %}</option> |
|
|
{% endfor %} |
|
|
{% endfor %} |
|
|
</optgroup> |
|
|
</optgroup> |
|
|
{% endif %} |
|
|
{% endif %} |
|
|
{% if archivedUsers|length > 0 %} |
|
|
|
|
|
|
|
|
{% if archivedServices|length > 0 %} |
|
|
<optgroup label="Archiviert"> |
|
|
<optgroup label="Archiviert"> |
|
|
{% for user in archivedUsers %} |
|
|
|
|
|
<option value="{{ user.id }}"{% if val == user.id %} selected{% endif %}>{{ user.name }}</option> |
|
|
|
|
|
|
|
|
{% for service in archivedServices %} |
|
|
|
|
|
<option value="{{ service.id }}"{% if val == service.id %} selected{% endif %}>{{ service.name }}{% if not service.billable %} (nicht-verrechenbar){% endif %}</option> |
|
|
{% endfor %} |
|
|
{% endfor %} |
|
|
</optgroup> |
|
|
</optgroup> |
|
|
{% endif %} |
|
|
{% endif %} |
|
|
@@ -161,7 +144,62 @@ |
|
|
</div> |
|
|
</div> |
|
|
{% endfor %} |
|
|
{% endfor %} |
|
|
</div> |
|
|
</div> |
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-users" data-filter-key="users">+</button> |
|
|
|
|
|
|
|
|
<div class="filter-row__meta"> |
|
|
|
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-services" data-filter-key="services">+</button> |
|
|
|
|
|
<label class="filter-neg"> |
|
|
|
|
|
<input type="checkbox" class="filter-neg-checkbox"{% if servicesNeg %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_neg'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
{# ── Benutzer (nur für Admins / Members, nicht für Tracker) ───── #} |
|
|
|
|
|
{% if not isTracker %} |
|
|
|
|
|
<div class="filter-row{% if not hasUsers %} filter-row--inactive{% endif %}" |
|
|
|
|
|
data-filter-key="users"> |
|
|
|
|
|
<label class="filter-row__label"> |
|
|
|
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasUsers %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_user'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls" id="filter-controls-users"> |
|
|
|
|
|
{% set selUsers = hasUsers ? fr.users : [''] %} |
|
|
|
|
|
{% set activeUsers = userList|filter(u => not u.archived) %} |
|
|
|
|
|
{% set archivedUsers = userList|filter(u => u.archived) %} |
|
|
|
|
|
{% for i, val in selUsers %} |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<select class="select filter-select" data-filter-key="users"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
{% if activeUsers|length > 0 %} |
|
|
|
|
|
<optgroup label="Aktiv"> |
|
|
|
|
|
{% for user in activeUsers %} |
|
|
|
|
|
<option value="{{ user.id }}"{% if val == user.id %} selected{% endif %}>{{ user.name }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</optgroup> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
{% if archivedUsers|length > 0 %} |
|
|
|
|
|
<optgroup label="Archiviert"> |
|
|
|
|
|
{% for user in archivedUsers %} |
|
|
|
|
|
<option value="{{ user.id }}"{% if val == user.id %} selected{% endif %}>{{ user.name }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</optgroup> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</select> |
|
|
|
|
|
{% if i > 0 %} |
|
|
|
|
|
<button type="button" class="filter-row__remove">×</button> |
|
|
|
|
|
{% endif %} |
|
|
|
|
|
</div> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="filter-row__meta"> |
|
|
|
|
|
<button type="button" class="filter-row__add" data-target="filter-controls-users" data-filter-key="users">+</button> |
|
|
|
|
|
<label class="filter-neg"> |
|
|
|
|
|
<input type="checkbox" class="filter-neg-checkbox"{% if usersNeg %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_neg'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
{% endif %} |
|
|
{% endif %} |
|
|
|
|
|
|
|
|
@@ -172,60 +210,67 @@ |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasPeriod %} checked{% endif %}> |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasPeriod %} checked{% endif %}> |
|
|
<span>{{ 'app.report.filter_period'|trans }}</span> |
|
|
<span>{{ 'app.report.filter_period'|trans }}</span> |
|
|
</label> |
|
|
</label> |
|
|
<div class="filter-row__controls"> |
|
|
|
|
|
<div class="filter-row__control-group filter-row__control-group--period"> |
|
|
|
|
|
<select class="select filter-select filter-period-select" data-filter-key="period"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
<option value="today" {% if frPeriod == 'today' %}selected{% endif %}>{{ 'app.report.period_today'|trans }}</option> |
|
|
|
|
|
<option value="yesterday" {% if frPeriod == 'yesterday' %}selected{% endif %}>{{ 'app.report.period_yesterday'|trans }}</option> |
|
|
|
|
|
<option value="current_week" {% if frPeriod == 'current_week' %}selected{% endif %}>{{ 'app.report.period_current_week'|trans }}</option> |
|
|
|
|
|
<option value="prev_week" {% if frPeriod == 'prev_week' %}selected{% endif %}>{{ 'app.report.period_prev_week'|trans }}</option> |
|
|
|
|
|
<option value="current_month" {% if frPeriod == 'current_month' %}selected{% endif %}>{{ 'app.report.period_current_month'|trans }}</option> |
|
|
|
|
|
<option value="prev_month" {% if frPeriod == 'prev_month' %}selected{% endif %}>{{ 'app.report.period_prev_month'|trans }}</option> |
|
|
|
|
|
<option value="current_year" {% if frPeriod == 'current_year' %}selected{% endif %}>{{ 'app.report.period_current_year'|trans }}</option> |
|
|
|
|
|
<option value="prev_year" {% if frPeriod == 'prev_year' %}selected{% endif %}>{{ 'app.report.period_prev_year'|trans }}</option> |
|
|
|
|
|
<option value="custom" {% if frPeriod == 'custom' %}selected{% endif %}>{{ 'app.report.period_custom'|trans }}</option> |
|
|
|
|
|
</select> |
|
|
|
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls"> |
|
|
|
|
|
<div class="filter-row__control-group filter-row__control-group--period"> |
|
|
|
|
|
<select class="select filter-select filter-period-select" data-filter-key="period"> |
|
|
|
|
|
<option value="">...</option> |
|
|
|
|
|
<option value="today" {% if frPeriod == 'today' %}selected{% endif %}>{{ 'app.report.period_today'|trans }}</option> |
|
|
|
|
|
<option value="yesterday" {% if frPeriod == 'yesterday' %}selected{% endif %}>{{ 'app.report.period_yesterday'|trans }}</option> |
|
|
|
|
|
<option value="current_week" {% if frPeriod == 'current_week' %}selected{% endif %}>{{ 'app.report.period_current_week'|trans }}</option> |
|
|
|
|
|
<option value="prev_week" {% if frPeriod == 'prev_week' %}selected{% endif %}>{{ 'app.report.period_prev_week'|trans }}</option> |
|
|
|
|
|
<option value="current_month" {% if frPeriod == 'current_month' %}selected{% endif %}>{{ 'app.report.period_current_month'|trans }}</option> |
|
|
|
|
|
<option value="prev_month" {% if frPeriod == 'prev_month' %}selected{% endif %}>{{ 'app.report.period_prev_month'|trans }}</option> |
|
|
|
|
|
<option value="current_year" {% if frPeriod == 'current_year' %}selected{% endif %}>{{ 'app.report.period_current_year'|trans }}</option> |
|
|
|
|
|
<option value="prev_year" {% if frPeriod == 'prev_year' %}selected{% endif %}>{{ 'app.report.period_prev_year'|trans }}</option> |
|
|
|
|
|
<option value="custom" {% if frPeriod == 'custom' %}selected{% endif %}>{{ 'app.report.period_custom'|trans }}</option> |
|
|
|
|
|
</select> |
|
|
|
|
|
|
|
|
<div class="filter-custom-dates"{% if not isCustom %} hidden{% endif %}> |
|
|
|
|
|
<div class="filter-date-group"> |
|
|
|
|
|
<span class="filter-date-label">{{ 'app.report.period_from'|trans }}</span> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="from-day"> |
|
|
|
|
|
{% for d in 1..31 %} |
|
|
|
|
|
<option value="{{ d }}"{% if fromDay == d %} selected{% endif %}>{{ d }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--month" data-date-field="from-month"> |
|
|
|
|
|
{% for i in 0..11 %} |
|
|
|
|
|
<option value="{{ i + 1 }}"{% if fromMonth == (i + 1) %} selected{% endif %}>{{ months[i] }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="from-year"> |
|
|
|
|
|
{% for y in range(yearNow - 5, yearNow) %} |
|
|
|
|
|
<option value="{{ y }}"{% if fromYear == y %} selected{% endif %}>{{ y }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="filter-date-group"> |
|
|
|
|
|
<span class="filter-date-label">{{ 'app.report.period_to'|trans }}</span> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="to-day"> |
|
|
|
|
|
{% for d in 1..31 %} |
|
|
|
|
|
<option value="{{ d }}"{% if toDay == d %} selected{% endif %}>{{ d }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--month" data-date-field="to-month"> |
|
|
|
|
|
{% for i in 0..11 %} |
|
|
|
|
|
<option value="{{ i + 1 }}"{% if toMonth == (i + 1) %} selected{% endif %}>{{ months[i] }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="to-year"> |
|
|
|
|
|
{% for y in range(yearNow - 5, yearNow) %} |
|
|
|
|
|
<option value="{{ y }}"{% if toYear == y %} selected{% endif %}>{{ y }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
|
|
|
<div class="filter-custom-dates"{% if not isCustom %} hidden{% endif %}> |
|
|
|
|
|
<div class="filter-date-group"> |
|
|
|
|
|
<span class="filter-date-label">{{ 'app.report.period_from'|trans }}</span> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="from-day"> |
|
|
|
|
|
{% for d in 1..31 %} |
|
|
|
|
|
<option value="{{ d }}"{% if fromDay == d %} selected{% endif %}>{{ d }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--month" data-date-field="from-month"> |
|
|
|
|
|
{% for i in 0..11 %} |
|
|
|
|
|
<option value="{{ i + 1 }}"{% if fromMonth == (i + 1) %} selected{% endif %}>{{ months[i] }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="from-year"> |
|
|
|
|
|
{% for y in range(yearNow - 5, yearNow) %} |
|
|
|
|
|
<option value="{{ y }}"{% if fromYear == y %} selected{% endif %}>{{ y }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="filter-date-group"> |
|
|
|
|
|
<span class="filter-date-label">{{ 'app.report.period_to'|trans }}</span> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="to-day"> |
|
|
|
|
|
{% for d in 1..31 %} |
|
|
|
|
|
<option value="{{ d }}"{% if toDay == d %} selected{% endif %}>{{ d }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--month" data-date-field="to-month"> |
|
|
|
|
|
{% for i in 0..11 %} |
|
|
|
|
|
<option value="{{ i + 1 }}"{% if toMonth == (i + 1) %} selected{% endif %}>{{ months[i] }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
<select class="select filter-date-select filter-date-select--sm" data-date-field="to-year"> |
|
|
|
|
|
{% for y in range(yearNow - 5, yearNow) %} |
|
|
|
|
|
<option value="{{ y }}"{% if toYear == y %} selected{% endif %}>{{ y }}</option> |
|
|
|
|
|
{% endfor %} |
|
|
|
|
|
</select> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="filter-row__meta filter-row__meta--no-add"> |
|
|
|
|
|
<label class="filter-neg"> |
|
|
|
|
|
<input type="checkbox" class="filter-neg-checkbox"{% if periodNeg %} checked{% endif %}> |
|
|
|
|
|
<span>{{ 'app.report.filter_neg'|trans }}</span> |
|
|
|
|
|
</label> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
@@ -237,9 +282,11 @@ |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasNote %} checked{% endif %}> |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasNote %} checked{% endif %}> |
|
|
<span>{{ 'app.report.filter_note'|trans }}</span> |
|
|
<span>{{ 'app.report.filter_note'|trans }}</span> |
|
|
</label> |
|
|
</label> |
|
|
<div class="filter-row__controls"> |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<input type="text" class="input filter-note-input" value="{{ fr.note ?? '' }}" placeholder="..."> |
|
|
|
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls"> |
|
|
|
|
|
<div class="filter-row__control-group"> |
|
|
|
|
|
<input type="text" class="input filter-note-input" value="{{ fr.note ?? '' }}" placeholder="..."> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
@@ -251,16 +298,18 @@ |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasInvoiced %} checked{% endif %}> |
|
|
<input type="checkbox" class="filter-row__checkbox"{% if hasInvoiced %} checked{% endif %}> |
|
|
<span>{{ 'app.report.filter_invoiced'|trans }}</span> |
|
|
<span>{{ 'app.report.filter_invoiced'|trans }}</span> |
|
|
</label> |
|
|
</label> |
|
|
<div class="filter-row__controls"> |
|
|
|
|
|
<div class="filter-row__control-group filter-row__control-group--radio"> |
|
|
|
|
|
<label class="filter-radio"> |
|
|
|
|
|
<input type="radio" class="filter-invoiced-radio" name="filter-invoiced-radio" value="yes"{% if frInvoiced != 'no' %} checked{% endif %}> |
|
|
|
|
|
{{ 'app.report.invoiced_yes'|trans }} |
|
|
|
|
|
</label> |
|
|
|
|
|
<label class="filter-radio"> |
|
|
|
|
|
<input type="radio" class="filter-invoiced-radio" name="filter-invoiced-radio" value="no"{% if frInvoiced == 'no' %} checked{% endif %}> |
|
|
|
|
|
{{ 'app.report.invoiced_no'|trans }} |
|
|
|
|
|
</label> |
|
|
|
|
|
|
|
|
<div class="filter-row__body"> |
|
|
|
|
|
<div class="filter-row__controls"> |
|
|
|
|
|
<div class="filter-row__control-group filter-row__control-group--radio"> |
|
|
|
|
|
<label class="filter-radio"> |
|
|
|
|
|
<input type="radio" class="filter-invoiced-radio" name="filter-invoiced-radio" value="yes"{% if frInvoiced != 'no' %} checked{% endif %}> |
|
|
|
|
|
{{ 'app.report.invoiced_yes'|trans }} |
|
|
|
|
|
</label> |
|
|
|
|
|
<label class="filter-radio"> |
|
|
|
|
|
<input type="radio" class="filter-invoiced-radio" name="filter-invoiced-radio" value="no"{% if frInvoiced == 'no' %} checked{% endif %}> |
|
|
|
|
|
{{ 'app.report.invoiced_no'|trans }} |
|
|
|
|
|
</label> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|