- Rechte-Bug im Kalender behoben, der verhindert hat, dass man einen Termin mit Ressource und sich selbst in der Mitarbeiterliste bearbeiten konnte. MoK: - Minuten/Stunden/Minuten&Stunden als Zeiterfassungseinheit wie im FaC implementiert - Quittierungsbelegunterschriftenansicht verbessert - Laden der Zeiterfassungseinträge effizienter gemacht
186 lines
7.2 KiB
JavaScript
186 lines
7.2 KiB
JavaScript
function calculateTimeWithDuration(timeInputValue, timeElement, startDate, duration, hoursMinutesDropdownBtnId) {
|
|
var isInMin = getIsZeiterfassungseinheitInMinutes();
|
|
|
|
var hoursToMinutes = parseTimeInputToIntegerArray(timeInputValue);
|
|
var hours = parseInt(hoursToMinutes[0]);
|
|
var minutes = parseInt(hoursToMinutes[1]);
|
|
var stdMinDropdown = $("#" + hoursMinutesDropdownBtnId);
|
|
|
|
startDate.hours(hours);
|
|
startDate.minutes(minutes);
|
|
|
|
if(stdMinDropdown.length) {
|
|
isInMin = stdMinDropdown.text().replaceAll(/\s/g, "") === "Minuten";
|
|
}
|
|
|
|
var durationFormat = isInMin ? "m" : "h";
|
|
|
|
startDate.add(duration, durationFormat);
|
|
|
|
timeInputValue = startDate.format("HH:mm");
|
|
|
|
timeElement.val(timeInputValue);
|
|
}
|
|
|
|
function onDurationChange(startTimeId, endTimeId, startDateId, endDateId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId) {
|
|
try {
|
|
var isInMin = getIsZeiterfassungseinheitInMinutes();
|
|
|
|
var startTime = $("#" + startTimeId).val();
|
|
var endTime = $("#" + endTimeId).val();
|
|
var duration = $("#" + durationId).val();
|
|
var hoursMinutesDropdownButton = $("#" + hoursMinutesDropdownBtnId);
|
|
|
|
var startTimeCondition = startTime !== undefined && startTime !== null && startTime.length > 0;
|
|
var endTimeCondition = endTime !== undefined && endTime !== null && endTime.length > 0;
|
|
var durationNumber = parseFloat(duration.replace(",", "."));
|
|
var durationCondition = !isNaN(durationNumber);
|
|
|
|
if((false === startTimeCondition && false === endTimeCondition) || durationCondition === false) {
|
|
return;
|
|
}
|
|
|
|
var startDateString = $("#" + startDatePickerId).datetimepicker("date");
|
|
var endDate = moment(new Date());
|
|
var startDate = moment(new Date());
|
|
|
|
if(startDateString.length !== 0) {
|
|
startDate = moment(startDateString);
|
|
endDate = startDate.clone();
|
|
}
|
|
|
|
if($("#" + endDatePickerId).length !== 0) {
|
|
var endDateString = $("#" + endDatePickerId).datetimepicker("date");
|
|
endDate = moment(endDateString);
|
|
}
|
|
|
|
var h2m = [0, 0];
|
|
|
|
if(hoursMinutesDropdownButton.length) {
|
|
isInMin = hoursMinutesDropdownButton.text().replaceAll(/\s/g, "") === "Minuten";
|
|
}
|
|
|
|
var durationFormat = isInMin ? "m" : "h";
|
|
|
|
if(startTimeCondition === true) {
|
|
h2m = parseTimeInputToIntegerArray(startTime);
|
|
|
|
startDate = startDate.hours(h2m[0]).minutes(h2m[1]);
|
|
endDate = startDate.clone().add(durationNumber, durationFormat);
|
|
|
|
$("#" + endTimeId).val(endDate.format("HH:mm"));
|
|
$("#" + endDateId).val(endDate.format("DD.MM.yyyy"));
|
|
} else {
|
|
h2m = parseTimeInputToIntegerArray(endTime);
|
|
|
|
endDate = endDate.hours(h2m[0]).minutes(h2m[1]);
|
|
startDate = endDate.clone().add(durationNumber * -1, durationFormat);
|
|
|
|
$("#" + startTimeId).val(startDate.format("HH:mm"));
|
|
$("#" + startDateId).val(startDate.format("DD.MM.yyyy"));
|
|
}
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function calculateDuration(isInvocatedByHoursMinutesButton, startTimeId, endTimeId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId, isInvokedByStartElement, isInvokedByEndElement) {
|
|
var startTime = $("#" + startTimeId).val();
|
|
var endTime = $("#" + endTimeId).val();
|
|
var duration = $("#" + durationId).val();
|
|
|
|
var hoursMinutesDropdownButton = $("#" + hoursMinutesDropdownBtnId);
|
|
var hoursMinutesText = hoursMinutesDropdownButton.length ? hoursMinutesDropdownButton.text().replaceAll(/\s/g, "") : "";
|
|
|
|
var isInMin = getIsZeiterfassungseinheitInMinutes();
|
|
|
|
if (hoursMinutesDropdownButton.length) {
|
|
isInMin = hoursMinutesDropdownButton.text().replaceAll(/\s/g, "") === "Minuten";
|
|
}
|
|
|
|
var durationFormat = isInMin ? "m" : "h";
|
|
|
|
if((startTime.length > 0 && startTime.length < 5) || (endTime.length > 0 && endTime.length < 5)) {
|
|
return;
|
|
}
|
|
|
|
var startTimeCondition = startTime !== undefined && startTime !== null && startTime.length > 0;
|
|
var endTimeCondition = endTime !== undefined && endTime !== null && endTime.length > 0;
|
|
|
|
var durationNumber = parseFloat(duration.replace(",", "."));
|
|
var durationCondition = !isNaN(durationNumber);
|
|
|
|
var startDateString = $("#" + startDatePickerId).datetimepicker("date");
|
|
|
|
var endDate = moment(new Date());
|
|
var startDate = moment(new Date());
|
|
|
|
if(startDateString !== null && startDateString.length !== 0) {
|
|
startDate = moment(startDateString);
|
|
endDate = startDate.clone();
|
|
}
|
|
|
|
// Es gibt ein Enddatumsfeld
|
|
if($("#" + endDatePickerId).length !== 0) {
|
|
var endDateString = $("#" + endDatePickerId).datetimepicker("date");
|
|
|
|
if(endDateString !== null && endDateString.length !== 0) {
|
|
endDate = moment(endDateString);
|
|
}
|
|
}
|
|
|
|
var newDurationValue = 0;
|
|
|
|
// Start- und Enddatum sind vorhanden und das Event wurde nicht vom Stunden/Minuten-Dropdown aufgerufen
|
|
if(startTimeCondition && endTimeCondition && isInvocatedByHoursMinutesButton === false) {
|
|
var startHHmm = parseTimeInputToIntegerArray(startTime);
|
|
var endHHmm = parseTimeInputToIntegerArray(endTime);
|
|
|
|
startDate.hours(startHHmm[0]);
|
|
startDate.minutes(startHHmm[1]);
|
|
endDate.hours(endHHmm[0]);
|
|
endDate.minutes(endHHmm[1]);
|
|
|
|
var momentDuration = moment.duration(endDate.diff(startDate));
|
|
|
|
if(durationNumber > 0 && isInvokedByStartElement && startDate >= endDate) {
|
|
endDate = startDate.clone().add(durationNumber, durationFormat);
|
|
|
|
$("#" + endTimeId).val(endDate.format("HH:mm"));
|
|
$("#" + endDatePickerId).val(endDate.format("DD.MM.yyyy"));
|
|
|
|
momentDuration = moment.duration(endDate.diff(startDate));
|
|
}
|
|
|
|
if (durationNumber > 0 && isInvokedByEndElement && startDate >= endDate) {
|
|
startDate = endDate.clone().subtract(durationNumber, durationFormat);
|
|
|
|
$("#" + startTimeId).val(startDate.format("HH:mm"));
|
|
$("#" + startDatePickerId).val(startDate.format("DD.MM.yyyy"));
|
|
|
|
momentDuration = moment.duration(endDate.diff(startDate));
|
|
}
|
|
|
|
newDurationValue = isInMin ? momentDuration.asMinutes() : momentDuration.asHours();
|
|
|
|
$("#" + durationId).val(newDurationValue);
|
|
// Startdatum und Dauer sind vorhanden
|
|
} else if(startTimeCondition && durationCondition) {
|
|
if (hoursMinutesDropdownButton.length) {
|
|
durationNumber = isInMin ? durationNumber *= 60 : durationNumber /= 60;
|
|
|
|
$("#" + durationId).val(durationNumber);
|
|
}
|
|
|
|
calculateTimeWithDuration(startTime, $("#" + endTimeId), startDate, durationNumber, hoursMinutesDropdownBtnId);
|
|
// Enddatum und Dauer sind vorhanden
|
|
} else if(endTimeCondition && durationCondition) {
|
|
if (hoursMinutesDropdownButton.length) {
|
|
durationNumber = isInMin ? durationNumber *= 60 : durationNumber /= 60;
|
|
|
|
$("#" + durationId).val(durationNumber);
|
|
}
|
|
|
|
calculateTimeWithDuration(endTime, $("#" + startTimeId), startDate, durationNumber * -1, hoursMinutesDropdownBtnId);
|
|
}
|
|
} |