mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-16 21:17:14 +01:00
262 lines
9.4 KiB
JavaScript
262 lines
9.4 KiB
JavaScript
var TimeManagementRequest = (function ($) {
|
|
'use strict';
|
|
|
|
var me = {
|
|
isInitialized: false,
|
|
|
|
selector: {
|
|
msg: '#timemanagement-msg',
|
|
easyCalendar: '#easycalendar',
|
|
form: '#timemanagement-form',
|
|
newEdit: '#timemanagement-new-edit',
|
|
fromInput: '#from',
|
|
tillInput: '#till',
|
|
remainingVacationSpan: '#remaining-vacation',
|
|
totalVacationSpan: '#total-vacation',
|
|
acceptedVacationSpan: '#accepted-vacation',
|
|
commentTextarea: '#comment',
|
|
newDialog: '#timemanagement-new-dialog',
|
|
requestTitle: '#request-title',
|
|
deleteTitle: '#delete-title',
|
|
calendarattributes: '#calendarattributes',
|
|
buttonOk: '#button-ok',
|
|
plannedVacationSpan: '#planned-vacation',
|
|
statusOldTypeHidden: '#status-old-type',
|
|
statusWishTypeDiv: '#status-wish-type-box',
|
|
//internalComment: '#internal-comment',
|
|
halfday: '#halfday'
|
|
},
|
|
|
|
storage: {
|
|
$dialog: null,
|
|
monthNames: [
|
|
'Januar', 'Februar', 'März', 'April', 'Mai',
|
|
'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
|
dayNames: ['SO', 'MO', 'DI', 'MI', 'DO', 'FR', 'SA']
|
|
},
|
|
|
|
init: function () {
|
|
if (me.isInitialized === true) {
|
|
return;
|
|
}
|
|
|
|
me.storage.$dialog = $(me.selector.newEdit);
|
|
me.dialogInit();
|
|
me.registerEvents();
|
|
me.registerDatepicker(me.selector.fromInput);
|
|
me.registerDatepicker(me.selector.tillInput);
|
|
|
|
me.isInitialized = true;
|
|
},
|
|
|
|
registerDatepicker: function (field) {
|
|
|
|
if ($(me.selector.calendarattributes).length !== 0) {
|
|
try {
|
|
var calendarattributes = JSON.parse($(me.selector.calendarattributes).html());
|
|
|
|
me.storage.monthNames = calendarattributes.monthNames;
|
|
|
|
let dayNames = calendarattributes.dayNames;
|
|
|
|
let shortNames = [];
|
|
me.storage.dayNames = [];
|
|
for (let i = 0; i <= dayNames.length; i++) {
|
|
let shortname = dayNames[i].toUpperCase().substring(0, 2);
|
|
me.storage.dayNames.push(shortname);
|
|
}
|
|
}
|
|
catch (e) {
|
|
//do nothing, fallback from storage
|
|
}
|
|
}
|
|
|
|
$(field).datepicker({
|
|
dateFormat: 'dd.mm.yy',
|
|
dayNamesMin: me.storage.dayNames,
|
|
firstDay: 1,
|
|
showWeek: false,
|
|
monthNames: me.storage.monthNames
|
|
});
|
|
},
|
|
|
|
registerEvents: function () {
|
|
|
|
let clickables = [
|
|
'monclick',
|
|
'tueclick',
|
|
'wedclick',
|
|
'thuclick',
|
|
'friclick',
|
|
'satclick',
|
|
'sunclick'
|
|
];
|
|
|
|
let clickClasses = [
|
|
'.monday',
|
|
'.tuesday',
|
|
'.wednesday',
|
|
'.thursday',
|
|
'.friday',
|
|
'.saturday',
|
|
'.sunday'
|
|
];
|
|
|
|
for (let i = 0; i <= clickables.length; i++) {
|
|
if ($(me.selector.easyCalendar).hasClass(clickables[i])) {
|
|
$(me.selector.easyCalendar).on('click', clickClasses[i], function (event) {
|
|
let day = $(this).data('day');
|
|
let month = $(this).data('month');
|
|
let year = $(this).data('year');
|
|
me.dialogOpen(day, month, year);
|
|
});
|
|
}
|
|
}
|
|
|
|
$(me.selector.newDialog).on('click', function (event) {
|
|
event.preventDefault();
|
|
me.dialogOpen();
|
|
});
|
|
},
|
|
|
|
dialogInit: function () {
|
|
me.storage.$dialog.dialog({
|
|
modal: true,
|
|
bgiframe: true,
|
|
closeOnEscape: false,
|
|
minWidth: 650,
|
|
minHeight: 350,
|
|
maxHeight: 500,
|
|
autoOpen: false,
|
|
open: function () {
|
|
if ($(me.selector.fromInput).val() === '') {
|
|
$(me.selector.fromInput).trigger('focus');
|
|
} else {
|
|
$(me.selector.tillInput).trigger('focus');
|
|
}
|
|
},
|
|
|
|
close: function () {
|
|
me.dialogReset();
|
|
},
|
|
buttons: [
|
|
{
|
|
id: 'button-ok',
|
|
text: 'SPEICHERN',
|
|
click: function () {
|
|
$(me.selector.form).submit();
|
|
}
|
|
}
|
|
]
|
|
});
|
|
},
|
|
|
|
dialogOpen: function (day, month, year) {
|
|
|
|
$.ajax({
|
|
url: 'index.php?module=mitarbeiterzeiterfassung&action=timemanagementrequest&cmd=timemanagementinfo',
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
data: {
|
|
year: year,
|
|
month: month,
|
|
day: day
|
|
},
|
|
success: function (data) {
|
|
|
|
if (data.error) {
|
|
me.storage.$dialog.find(me.selector.msg).text(data.error);
|
|
$(me.selector.msg).addClass('error');
|
|
} else {
|
|
|
|
me.dialogReset();
|
|
var date = '';
|
|
|
|
if (day && month && year) {
|
|
date = day + '.' + month + '.' + year;
|
|
}
|
|
|
|
let title = '';
|
|
if (
|
|
data.day_type !== '' &&
|
|
data.day_type !== 'C' &&
|
|
data.day_type !== 'J'
|
|
) {
|
|
title = $(me.selector.deleteTitle).text();
|
|
me.storage.$dialog.find(me.selector.statusOldTypeHidden).val(data.day_type);
|
|
$(me.selector.statusWishTypeDiv).css('display', 'none');
|
|
} else {
|
|
title = $(me.selector.requestTitle).text();
|
|
}
|
|
|
|
if (me.isInPast(day, month, year)) {
|
|
$(me.selector.msg).text('Der Tag liegt in der Vergangenheit.');
|
|
if (data.is_accepted_type) {
|
|
$(me.selector.msg).addClass('error');
|
|
} else {
|
|
$(me.selector.msg).addClass('warning');
|
|
}
|
|
}
|
|
|
|
me.storage.$dialog.find(me.selector.totalVacationSpan).text(data.vacation_total);
|
|
me.storage.$dialog.find(me.selector.acceptedVacationSpan).text(data.vacation_accepted);
|
|
me.storage.$dialog.find(me.selector.plannedVacationSpan).text(data.planned);
|
|
me.storage.$dialog.find(me.selector.remainingVacationSpan).text(
|
|
data.vacation_total - data.vacation_accepted - data.planned
|
|
);
|
|
//me.storage.$dialog.find(me.selector.internalComment).text(data.internal_comment);
|
|
|
|
me.storage.$dialog.find(me.selector.fromInput).val(date);
|
|
me.storage.$dialog.find(me.selector.tillInput).val(date);
|
|
|
|
if (me.isInPast(day, month, year) && data.is_accepted_type) {
|
|
$(me.selector.buttonOk).button('disable');
|
|
}
|
|
|
|
me.storage.$dialog.dialog('option', 'title', title);
|
|
me.storage.$dialog.dialog('open');
|
|
}
|
|
},
|
|
beforeSend: function () {}
|
|
});
|
|
},
|
|
|
|
isInPast: function (day, month, year) {
|
|
let dateString = year + '-' + month + '-' + day;
|
|
let date = new Date(dateString).setHours(0, 0, 0, 0);
|
|
let now = new Date().setHours(0, 0, 0, 0);
|
|
return date < now;
|
|
},
|
|
|
|
dialogClose: function () {
|
|
me.storage.$dialog.dialog('close');
|
|
},
|
|
|
|
dialogReset: function () {
|
|
me.storage.$dialog.find(me.selector.fromInput).val(null);
|
|
me.storage.$dialog.find(me.selector.tillInput).val(null);
|
|
me.storage.$dialog.find(me.selector.commentTextarea).val(null);
|
|
me.storage.$dialog.find(me.selector.statusOldTypeHidden).val('');
|
|
$(me.selector.statusWishTypeDiv).css('display', 'inline');
|
|
me.storage.$dialog.find(me.selector.halfday).prop('checked', false);
|
|
|
|
$(me.selector.msg).removeClass('error');
|
|
$(me.selector.msg).removeClass('warning');
|
|
me.storage.$dialog.find(me.selector.msg).text('');
|
|
$(me.selector.buttonOk).button('enable');
|
|
|
|
let title = $(me.selector.requestTitle).text();
|
|
me.storage.$dialog.dialog('option', 'title', title);
|
|
}
|
|
};
|
|
|
|
return {
|
|
init: me.init
|
|
};
|
|
|
|
})(jQuery);
|
|
|
|
$(document).ready(function () {
|
|
TimeManagementRequest.init();
|
|
});
|