Files
BeWoPlaner/BeWoPlanerMobil/Scripts/utils/service-record-time-calc.js

175 lines
7.0 KiB
JavaScript

function calculateTimeWithDuration(timeInputValue, timeElement, startDate, duration, hoursMinutesDropdownBtnId) {
var hoursToMinutes = parseTimeInputToIntegerArray(timeInputValue);
var hours = parseInt(hoursToMinutes[0]);
var minutes = parseInt(hoursToMinutes[1]);
startDate.hours(hours);
startDate.minutes(minutes);
var durationFormat = $("#" + hoursMinutesDropdownBtnId).length && $("#" + hoursMinutesDropdownBtnId).text().replaceAll(/\s/g, "") === "Stunden" ? "h" : "m";
startDate.add(duration, durationFormat);
timeInputValue = startDate.format("HH:mm");
timeElement.val(timeInputValue);
}
function onDurationChange(startTimeId, endTimeId, startDateId, endDateId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId) {
try {
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 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];
var durationFormat = hoursMinutesText === "Stunden" ? "h" : "m";
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, "") :
"";
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, hoursMinutesText === "Stunden" ? "h" : "m");
$("#" + endTimeId).val(endDate.format("HH:mm"));
$("#" + endDatePickerId).val(endDate.format("DD.MM.yyyy"));
}
if(durationNumber > 0 && isInvokedByEndElement && startDate >= endDate) {
startDate = endDate.clone().subtract(durationNumber, hoursMinutesText === "Speichern" ? "h" : "m");
$("#" + startTimeId).val(startDate.format("HH:mm"));
$("#" + startDatePickerId).val(startDate.format("DD.MM.yyyy"));
}
if(hoursMinutesDropdownButton.length && hoursMinutesText === "Stunden") {
newDurationValue = momentDuration.asHours();
} else {
newDurationValue = momentDuration.asMinutes();
}
$("#" + durationId).val(newDurationValue);
// Startdatum und Dauer sind vorhanden
} else if(startTimeCondition && durationCondition) {
if(hoursMinutesDropdownButton.length) {
if(hoursMinutesText === "Stunden") {
durationNumber /= 60;
} else {
durationNumber *= 60;
}
$("#" + durationId).val(durationNumber);
}
calculateTimeWithDuration(startTime, $("#" + endTimeId), startDate, durationNumber, hoursMinutesDropdownBtnId);
// Enddatum und Dauer sind vorhanden
} else if(endTimeCondition && durationCondition) {
if(hoursMinutesDropdownButton.length) {
if (hoursMinutesText === "Stunden") {
durationNumber /= 60;
} else {
durationNumber *= 60;
}
$("#" + durationId).val(durationNumber);
}
calculateTimeWithDuration(endTime, $("#" + startTimeId), startDate, durationNumber * -1, hoursMinutesDropdownBtnId);
}
}