Files
thetool/public/js/pages/timerecording/index.js
Spitzer Daniel 258067ef4d Zeiterfassung Update
* Script für Email Alarmierung §57a
 * Automatische auswahl beim Buchen von Dienstreisen auf das zugewiesene Fahrzeug
2024-04-28 12:23:36 +02:00

578 lines
21 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
let table;
if (typeof hidesearch === "undefined") {
var hidesearch;
hidesearch = [100];
}
if (typeof cstmdom === "undefined") {
var cstmdom;
cstmdom = "flBrtip";
}
if (typeof columndefs === "undefined") {
var columndefs;
columndefs = "";
}
if (typeof columnfilter === "undefined") {
var columnfilter;
columnfilter = "";
}
if (typeof columnoptions === "undefined") {
var columnoptions;
columnoptions = "";
}
$('#filterrow th').each(function (i) {
let title = $('#datatable thead th').eq($(this).index()).text();
if (hidesearch.includes($(this).index())) {
} else if (columnfilter.includes($(this).index())) {
$(this).html('<select style="padding: 0;height: 28px;;text-align: center;" id="selectsearch" class="form-control form-control-select form-control-special" data-index="' + i + '">' + columnoptions + '</select>');
} else {
$(this).html('<input type="text" placeholder="' + title + '" class="form-control" data-index="' + i + '" value="" />');
}
});
table = $('#datatable').DataTable({
responsive: true,
"order": [[0, "desc"]],
buttons: [
{
extend: 'excelHtml5',
text: 'XLSX Export',
className: 'btn-success margina d-none d-lg-block',
exportOptions: {
columns: ['th:not(:last-child)']
}
}
], columnDefs: [
columndefs
],
"language": {
"url": "/datatables/json/german.json?v1"
},
orderCellsTop: true,
stateSave: true,
stateDuration: 60 * 60 * 24 * 30,
"initComplete": function () {
$('#datatable_filter').append('<i id="clear_cookie" class="fas fa-times clear-fa" title="Filter löschen" aria-hidden="true" ></i>');
$('#clear_cookie').click(function () {
$('#filterrow input').val('');
$('#filterrow select').val('');
table.search('').columns().search('').draw();
});
},
"dom": cstmdom,
"ajax": {
"url": requestUrl,
"type": "POST",
"data": function (d) {
$('.display-calendar').each(function (index) {
if ($(this).hasClass('active-calendar')) {
d.datatype = $(this).data('datatype');
}
})
d.dataweek = $('#dataweek').val();
d.datamonth = $('#datamonth').val();
d.datayear = $('#datayear').val();
},
"dataSrc": function (json) {
$('#is-time').text(json.time.is);
$('#must-time').text(json.time.must);
$('#holidays').text(json.time.holidays);
$('#plushours').text(json.time.plushours);
if ($("#plushours").text().includes("-")) {
$('#plushours-label').css('background-color', '#fda7a7');
} else {
$('#plushours-label').css('background-color', '#d0fbd9');
}
if (json.time.auto_workinghours == "1") {
$('#auto-workinghours-button').show();
}
return json.data;
}
},
"columns": [
{
"data": {
_: "date.date",
"sort": "date.order"
},
className: "text-nowrap"
}, {
"data": {
_: "start.start",
"sort": "start.order"
},
className: "text-center"
}, {
"data": {
_: "end.end",
"sort": "end.order"
},
className: "text-center"
}, {
"data": {
_: "sum.sum",
"sort": "sum.order"
},
className: "text-center"
}, {
"data": {
_: "category.category",
"sort": "category.order"
},
className: ""
}
, {
"data": {
_: "comment.comment",
"sort": "comment.order"
},
className: "text-left"
}, {
"data": {
_: "edit.edit",
"sort": "edit.order"
},
className: "edit-td"
}
]
});
$('#filterrow').on('keyup', 'input', function () {
table
.column($(this).data('index'))
.search(this.value)
.draw();
});
$('#selectsearch').change(function () {
table
.column($(this).data('index'))
.search(this.value)
.draw();
});
let state = table.state.loaded();
if (state) {
table.columns().eq(0).each(function (colIdx) {
var colSearch = state.columns[colIdx].search;
if (colSearch.search) {
$('#filterrow').find("[data-index='" + colIdx + "']").val(colSearch.search);
}
});
table.draw();
}
$(document).ready(function () {
$(".select2").select2();
$("body").on("change", "#timerecordingCategory_id", function () {
if (parseInt($(this).find(':selected').data('hourday')) === 2) {
$("#endtime-div").hide();
$("#endtime-div").find('input').each(function () {
$(this).prop("required", false);
});
$("#enddate-div").show();
$("#enddate-div").find('input').each(function () {
$(this).prop("required", true);
$(this).prop("min", $('#date').val());
$(this).val($('#date').val());
});
$("#div-calc-overtime").hide();
} else if (parseInt($(this).find(':selected').data('hourday')) === 1 || parseInt($(this).find(':selected').data('hourday')) === 6) {
if (parseInt($(this).find(':selected').data('hourday')) === 6) {
$("#div-calc-overtime").show();
} else {
$("#div-calc-overtime").hide();
}
$("#endtime-div").show();
$("#endtime-div").find('input').each(function () {
$(this).prop("required", true);
$(this).prop("disabled", false);
});
$("#enddate-div").hide();
$("#enddate-div").find('input').each(function () {
$(this).prop("required", false);
$(this).prop("min", '');
$(this).val('');
})
} else if (parseInt($(this).find(':selected').data('hourday')) === 3 || parseInt($(this).find(':selected').data('hourday')) === 4) {
$("#endtime-div").hide();
$("#endtime-div").find('input').each(function () {
$(this).prop("required", false);
$(this).prop("disabled", true);
});
$("#div-calc-overtime").hide();
$("#enddate-div").hide();
$("#enddate-div").find('input').each(function () {
$(this).prop("required", false);
$(this).prop("min", '');
$(this).val('');
})
} else if (parseInt($(this).find(':selected').data('hourday')) === 7) {
$("#endtime-div").show();
$("#endtime-div").find('input').each(function () {
$(this).prop("required", true);
$(this).prop("disabled", false);
});
$("#enddate-div").hide();
$("#enddate-div").find('input').each(function () {
$(this).prop("required", false);
$(this).prop("min", '');
$(this).val('');
})
$('#businesstrip_info').val('');
$('#businesstrip_info').show();
$('.car-div-car').show();
}
if (parseInt($(this).find(':selected').data('comment')) === 1) {
$('#comment').prop("required", true);
} else {
$('#comment').prop("required", false);
}
if (parseInt($(this).find(':selected').data('businesstrip')) === 1) {
$('.businesstrip-div').show();
$('#businesstrip').prop("checked", false);
$('#businesstrip_info').val('');
$('#businesstrip_info').hide();
$('.car-div').find('input').prop("required", false);
$('.car-div').find('input').val('');
$('#timerecordingCar_id').val('').change();
$('.car-div').hide();
} else if (parseInt($(this).find(':selected').data('hourday')) === 7) {
$('.businesstrip-div').show();
$('.businesstrip-check-div').hide();
$('#businesstrip').prop("checked", true);
$('#businesstrip_info').show();
$('#businesstrip_info').prop('required', true);
$('#homeoffice-div').hide();
} else {
$('.businesstrip-div').hide();
$('#businesstrip').prop("checked", false);
$('#businesstrip_info').val('');
$('#timerecordingCar_id').val('').change();
$('.car-div').find('input').prop("required", false);
$('.car-div').find('input').val('');
$('.car-div').hide();
$('#businesstrip_info').hide();
}
if (parseInt($(this).find(':selected').data('homeoffice')) === 1) {
$('#homeoffice-div').show();
$('#homeoffice').prop("checked", false);
} else {
$('#homeoffice').prop("checked", false);
$('#homeoffice-div').hide();
}
});
$("body").on("change", "#date", function () {
if ($('#enddate-div').css('display') === "block") {
if ($('#date').val() > $('#enddate').val()) {
$('#enddate').prop("min", $('#date').val());
$('#enddate').val($('#date').val());
} else {
$('#enddate').prop("min", $('#date').val());
}
}
});
$("body").on("change", "#start", function () {
if ($('#start').val() > $('#end').val()) {
$('#end').val($('#start').val());
}
$('#end').prop("min", $('#start').val());
});
$("body").on("change", "#start,#end,#date,#timerecordingCategory_id", function () {
if (parseInt($('#timerecordingCategory_id').find(':selected').data('hourday')) === 6) {
$.post(checkWorkinghoursUrl, {
date: $.trim($('#date').val()),
start: $.trim($('#start').val()),
end: $.trim($('#end').val()),
ajax: 1
}).done(function (data) {
var result = $.parseJSON(data);
if (result.state === "success") {
$('#calc-overtime').html(result.message);
}
if (result.state === "error") {
$('#calc-overtime').html('<div class="text-danger text-bold">' + result.error + '</div>');
}
});
}
});
$("body").on("click", ".edit-button", function () {
$('#submit-button').hide().removeClass('btn-primary').addClass('btn-danger').show();
$('#submit-button').text('Ändern');
$('#cancel-button').show();
$('#timerecordingCategory_id').val($(this).data('category')).change();
$('#id').val($(this).data('id'));
$('#date').val($(this).data('date'));
$('#start').val($(this).data('start'));
$('#end').val($(this).data('end'));
$('#end').prop("min", $('#start').val());
$('#enddate').val($(this).data('enddate'));
$('#enddate').prop("min", $('#date').val());
$('#comment').val($(this).data('comment'));
if ($(this).data('businesstrip') == 1) {
$('#businesstrip').prop("checked", true);
$('#businesstrip_info').val($(this).data('businesstripinfo'));
$('#businesstrip_info').show();
$('#businesstrip_info').prop('required', true);
$('#homeoffice-div').hide();
$('#timerecordingCar_id').val('').change();
}
if ($(this).data('homeoffice') == 1) {
$('.businesstrip-div').hide();
$('#homeoffice').prop("checked", true);
$('#homeoffice-div').show();
}
if ($(this).data('car')) {
$('#timerecordingCar_id').val($(this).data('car')).change();
if ($(this).data('mileagestart')) {
$('.car-div').show();
$('.car-div').find('input').prop("required", true);
$('#mileage_start').val($(this).data('mileagestart'));
$('#mileage_end').val($(this).data('mileageend'));
$('#mileage_end').prop("min", $(this).data('mileagestart'));
} else {
}
}
$('.alert-success').remove();
window.scrollTo(0, 0);
});
$("body").on("click", "#cancel-button", function () {
$('#submit-button').hide().removeClass('btn-danger').addClass('btn-primary').show();
$('#submit-button').text('Speichern');
$('#cancel-button').hide();
$('#id').val('');
$('.businesstrip-div').hide();
$('#businesstrip').prop("checked", false);
$('#businesstrip_info').val('');
$('#businesstrip_info').hide();
$('#businesstrip_info').prop("required", false);
$('#homeoffice').prop("checked", false);
$('.car-div').hide();
$('.car-div').find('input').val('');
$('.car-div').find('input').prop("required", false);
$('#timerecordingCar_id').val('').change();
$('#timerecordingCategory_id').change();
});
$("body").on("change", "#dataweek,#datamonth,#datayear", function () {
table.ajax.reload();
});
$("body").on("click", ".display-calendar", function () {
$('.display-calendar').each(function (index) {
$(this).removeClass('active-calendar');
});
$(this).addClass('active-calendar');
if ($(this).data('datatype') == "1") {
$('#dataweek-col').show();
$('#dynamictime-div').show();
$('#datamonth-col').hide();
$('#datayear-col').hide();
} else if ($(this).data('datatype') == "2") {
$('#datamonth-col').show();
$('#dynamictime-div').show();
$('#dataweek-col').hide();
$('#datayear-col').hide();
} else if ($(this).data('datatype') == "3") {
$('#datayear-col').show();
$('#dynamictime-div').hide();
$('#datamonth-col').hide();
$('#dataweek-col').hide();
}
$(".select2").select2();
table.ajax.reload();
});
$("body").on("click", "#businesstrip", function () {
if ($(this).prop('checked') == true) {
$('#businesstrip_info').show();
$('#businesstrip_info').prop('required', true);
$('#homeoffice').prop('checked', false);
$('#homeoffice-div').hide();
$('.car-div-car').show();
$.each($('#timerecordingCar_id option'), function (index, value) {
if ($(this).data('user') == $('#id').data('userid')) {
$('#timerecordingCar_id').val($(this).val()).change();
}
});
} else {
$('#businesstrip_info').hide();
$('#businesstrip_info').val('');
$('#businesstrip_info').prop('required', false);
$('#timerecordingCategory_id').change();
}
});
$("body").on("click", "#homeoffice", function () {
if ($(this).prop('checked') == true) {
$('#businesstrip').prop('checked', false);
$('.businesstrip-div').hide();
$('#timerecordingCar_id').val('');
$('.car-div').find('input').prop("required", false);
$('.car-div').find('input').val('');
$('.car-div').hide();
$('#businesstrip_info').hide();
$('#businesstrip_info').val('');
$('#businesstrip_info').prop('required', false);
} else {
$('#timerecordingCategory_id').change();
}
});
$("body").on("click", "#auto-workinghours-button", function () {
var timestamp = $('#dataweek').val() * 1000
const date = new Date(timestamp);
var day = date.getDay(),
diff = date.getDate() - day + (day == 0 ? -6 : 1);
diff = date.getDate() - day + (day == 0 ? -6 : 1);
var monday = new Date(date.setDate(diff));
monday = monday.getTime();
monday = new Date(monday);
monday = monday.toLocaleDateString('de-DE');
//last day of week
var sunday = new Date(date.setDate(diff + 6));
sunday = sunday.getTime();
sunday = new Date(sunday);
sunday = sunday.toLocaleDateString('de-DE');
if (confirm('Sollen die Arbeitszeiten von ' + monday + ' bis ' + sunday + ' automatisch eingetragen werden?')) {
$.post(autoWorkinghoursUrl, {
dataweek: $.trim($('#dataweek').val()),
ajax: 1
}).done(function (data) {
table.ajax.reload();
});
}
});
$("body").on("change", "#timerecordingCar_id", function () {
if ($('#timerecordingCar_id').val() == "") {
$('.car-div').find('input').prop("required", false);
$('.car-div').find('input').val('');
$('.car-div').hide();
$('.car-div-car').show();
} else {
$('.car-div').show();
$('.car-div').find('input').prop("required", true);
$('#mileage_start').val($(this).find(':selected').data('mileagenow'));
$('#mileage_end').prop("min", $('#mileage_start').val());
}
});
$("body").on("change", "#mileage_start", function () {
$('#mileage_end').prop("min", $('#mileage_start').val());
});
$("body").on("click", ".delete-item", function () {
if (confirm('Buchung wirklich löschen?')) {
$.post(deleteUrl, {
id: $.trim($(this).data('id')),
ajax: 1
}).done(function (data) {
table.ajax.reload();
});
}
});
$('form').submit(function (e) {
e.preventDefault();
$('#alert-box').remove();
var businesstrip = false;
var homeoffice = false;
var car = false;
if ($('#businesstrip').prop('checked') == true) {
businesstrip = 1;
}
if ($('#homeoffice').prop('checked') == true) {
homeoffice = 1;
}
if ($.trim($('#timerecordingCar_id').val())) {
car = 1;
}
$.post(insertUrl, {
id: $.trim($('#id').val()),
timerecordingCategory_id: $.trim($('#timerecordingCategory_id').val()),
date: $.trim($('#date').val()),
enddate: $.trim($('#enddate').val()),
start: $.trim($('#start').val()),
end: $.trim($('#end').val()),
comment: $.trim($('#comment').val()),
businesstrip: businesstrip,
businesstrip_info: $.trim($('#businesstrip_info').val()),
timerecordingCar_id: $.trim($('#timerecordingCar_id').val()),
mileage_start: $.trim($('#mileage_start').val()),
mileage_end: $.trim($('#mileage_end').val()),
homeoffice: homeoffice,
hourday: $.trim($('#timerecordingCategory_id').find(':selected').data('hourday')),
ajax: 1
}).done(function (data) {
var result = $.parseJSON(data);
if (result.state === "success") {
$('.wrapper .container-fluid').prepend(`<div id="alert-box" class="row">
<div class="col-md-1"></div>
<div class="col-md-10 alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><i class="icon fas fa-check"></i> Erfolgreich</h5>
` + result.message + `</div>
</div>`);
if ($.trim($('#mileage_start').val())) {
$('#timerecordingCar_id').find(':selected').data('mileagenow', $.trim($('#mileage_end').val()));
}
if (car == 1) {
$('#timerecordingCar_id').val('').change();
}
}
if (result.state === "error") {
$('.wrapper .container-fluid').prepend(`<div id="alert-box" class="row">
<div class="col-md-1"></div>
<div class="col-md-10 alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><i class="icon fas fa-ban"></i> Fehler</h5>
` + result.error + `</div>
</div>`);
}
$('#submit-button').hide().removeClass('btn-danger').addClass('btn-primary').show();
$('#submit-button').text('Speichern');
$('#cancel-button').hide();
$('#id').val('');
table.ajax.reload();
});
});
$('#timerecordingCategory_id').change();
})
;