1.18 (#3158)
* bump version * fix translation ids * added css classes to modify form with custom css * improve export pdf file names * respect financial year in new report * added new InvoiceCalculator: price * upgrade packages and node-sass to v7 * title pattern for customer, project and activity via API * support negative money without currency * fix sub-locale in print export template * fix overbooking validation for monthly budget * fix copying entities with different set of custom-fields compared to the current configuration
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
{% extends 'export/layout.html.twig' %}
|
||||
{% import "macros/widgets.html.twig" as widgets %}
|
||||
{% import "macros/datatables.html.twig" as tables %}
|
||||
{% extends 'export/layout.html.twig' %}
|
||||
{% import "macros/webloader.html.twig" as webloader %}
|
||||
|
||||
{% block document_title %}{{ 'export.title'|trans }}{% endblock %}
|
||||
|
||||
@@ -51,27 +52,25 @@
|
||||
}) %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ webloader.init_frontend_loader() }}
|
||||
<script type="text/javascript">
|
||||
let initialized = false;
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
var loader = new KimaiWebLoader({
|
||||
formatDuration: '{{ get_format_duration() }}',
|
||||
locale: '{{ app.request.locale }}',
|
||||
}, {});
|
||||
var DATES = loader.getKimai().getPlugin('date');
|
||||
document.addEventListener('kimai.initialized', function(event) {
|
||||
const KIMAI = event.detail.kimai;
|
||||
const DATES = KIMAI.getPlugin('date');
|
||||
|
||||
document.getElementById('duration-decimal').addEventListener('click', function(event) {
|
||||
var spans = document.getElementsByClassName('duration-format');
|
||||
for (var span of spans) {
|
||||
var duration = span.dataset['duration'];
|
||||
let spans = document.getElementsByClassName('duration-format');
|
||||
for (let span of spans) {
|
||||
let duration = span.dataset['duration'];
|
||||
if (duration === undefined) {
|
||||
continue;
|
||||
}
|
||||
if (!event.target.checked) {
|
||||
span.innerHTML = DATES.formatSeconds(duration);
|
||||
} else {
|
||||
span.innerHTML = (new Intl.NumberFormat('{{ app.request.locale }}', {maximumFractionDigits: 2}).format(duration / 3600));
|
||||
span.innerHTML = (new Intl.NumberFormat('{{ app.request.locale|replace({'_': '-'}) }}', {maximumFractionDigits: 2}).format(duration / 3600));
|
||||
}
|
||||
}
|
||||
saveVisibility();
|
||||
@@ -96,36 +95,36 @@
|
||||
saveVisibility();
|
||||
});
|
||||
document.getElementById('summary-timeBudget').addEventListener('click', function(event) {
|
||||
var cells = document.getElementsByClassName('export-timeBudget');
|
||||
for (var columnCell of cells) {
|
||||
let cells = document.getElementsByClassName('export-timeBudget');
|
||||
for (let columnCell of cells) {
|
||||
columnCell.style.display = event.target.checked ? 'table-cell' : 'none';
|
||||
}
|
||||
saveVisibility();
|
||||
});
|
||||
document.getElementById('summary-budget').addEventListener('click', function(event) {
|
||||
var cells = document.getElementsByClassName('export-budget');
|
||||
for (var columnCell of cells) {
|
||||
let cells = document.getElementsByClassName('export-budget');
|
||||
for (let columnCell of cells) {
|
||||
columnCell.style.display = event.target.checked ? 'table-cell' : 'none';
|
||||
}
|
||||
saveVisibility();
|
||||
});
|
||||
document.getElementById('summary-duration').addEventListener('click', function(event) {
|
||||
var cells = document.getElementsByClassName('summary-duration');
|
||||
for (var columnCell of cells) {
|
||||
let cells = document.getElementsByClassName('summary-duration');
|
||||
for (let columnCell of cells) {
|
||||
columnCell.style.display = event.target.checked ? 'table-cell' : 'none';
|
||||
}
|
||||
saveVisibility();
|
||||
});
|
||||
document.getElementById('summary-rate').addEventListener('click', function(event) {
|
||||
var cells = document.getElementsByClassName('summary-rate');
|
||||
for (var columnCell of cells) {
|
||||
let cells = document.getElementsByClassName('summary-rate');
|
||||
for (let columnCell of cells) {
|
||||
columnCell.style.display = event.target.checked ? 'table-cell' : 'none';
|
||||
}
|
||||
saveVisibility();
|
||||
});
|
||||
document.getElementById('summary-rate-internal').addEventListener('click', function(event) {
|
||||
var cells = document.getElementsByClassName('summary-rate-internal');
|
||||
for (var columnCell of cells) {
|
||||
let cells = document.getElementsByClassName('summary-rate-internal');
|
||||
for (let columnCell of cells) {
|
||||
columnCell.style.display = event.target.checked ? 'table-cell' : 'none';
|
||||
}
|
||||
saveVisibility();
|
||||
@@ -139,17 +138,17 @@
|
||||
saveVisibility();
|
||||
});
|
||||
|
||||
var columnCheckboxes = document.getElementsByClassName('column-visibility-changer');
|
||||
let columnCheckboxes = document.getElementsByClassName('column-visibility-changer');
|
||||
|
||||
for (var checkbox of columnCheckboxes) {
|
||||
for (let checkbox of columnCheckboxes) {
|
||||
checkbox.addEventListener('click', function(event) {
|
||||
changeVisibility(event.target.name, event.target.checked);
|
||||
});
|
||||
}
|
||||
|
||||
var editableTitles = document.querySelectorAll('[contenteditable=true]');
|
||||
let editableTitles = document.querySelectorAll('[contenteditable=true]');
|
||||
|
||||
for (var editable of editableTitles) {
|
||||
for (let editable of editableTitles) {
|
||||
editable.addEventListener('input', function(event) {
|
||||
if (event.target.innerText === '') {
|
||||
return;
|
||||
@@ -200,8 +199,8 @@
|
||||
|
||||
function changeVisibility(column, visible)
|
||||
{
|
||||
var cells = document.getElementsByClassName('column-' + column);
|
||||
for (var columnCell of cells) {
|
||||
let cells = document.getElementsByClassName('column-' + column);
|
||||
for (let columnCell of cells) {
|
||||
columnCell.style.display = visible ? 'table-cell' : 'none';
|
||||
}
|
||||
saveVisibility();
|
||||
@@ -209,9 +208,9 @@
|
||||
|
||||
function changedDateFormat(formatType, className)
|
||||
{
|
||||
var elements = document.getElementsByClassName(className);
|
||||
for (var elem of elements) {
|
||||
var formattedDate = elem.dataset[formatType];
|
||||
let elements = document.getElementsByClassName(className);
|
||||
for (let elem of elements) {
|
||||
let formattedDate = elem.dataset[formatType];
|
||||
if (formattedDate === undefined) {
|
||||
continue;
|
||||
}
|
||||
@@ -242,9 +241,9 @@
|
||||
|
||||
function resetExport()
|
||||
{
|
||||
var editableTitles = document.querySelectorAll('[contenteditable=true]');
|
||||
let editableTitles = document.querySelectorAll('[contenteditable=true]');
|
||||
|
||||
for (var editable of editableTitles) {
|
||||
for (let editable of editableTitles) {
|
||||
editable.innerText = editable.dataset['original'];
|
||||
}
|
||||
|
||||
@@ -252,7 +251,6 @@
|
||||
const form = document.getElementsByTagName('form')[0];
|
||||
form.reset();
|
||||
}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user