Files
BeWoPlaner/BeWoPlanerMobil/Scripts/utils/service-record-time-calc.js
Lyndon Jetten 3621ab8fc6 FaC:
- 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
2023-05-02 13:03:46 +02:00

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);
}
}