Das Mehrfachbuchungsformular hat ebenfalls die Schnittmenge der Leistungen und Kategorien von den ausgewählten Hilfeplänen. Das Caching ist wieder aktiviert. Und lädt pro Post-Aufruf nur noch einmal 13 MB und danach nur noch 300 kb herunter. Überall konsequent geprüft, ob das Model nicht null ist und falls dem so ist, wird ausgeloggt, damit es zu keinen Fehlern mehr kommt.
269 lines
9.2 KiB
JavaScript
269 lines
9.2 KiB
JavaScript
function resetInsertAppointmentForm() {
|
|
$.get(getResetSelectedAppointmentUrl())
|
|
.always(function() {
|
|
if($(window).width() < 768) {
|
|
hideAppointmentForm();
|
|
}
|
|
});
|
|
|
|
$("#scheduler-start-time, #scheduler-end-time, #subject, #location, #notice").val("");
|
|
|
|
$("#scheduler-start-date, #scheduler-end-date").val(moment().format("DD.MM.YYYY"));
|
|
|
|
$("#resources-popup input:checked, #customers-popup input:checked, #employees-popup input:checked").each(function() {
|
|
$(this).prop("checked", false);
|
|
});
|
|
|
|
$("#selected-resources-list, #selected-employees-list, #selected-customers-list").empty();
|
|
|
|
$("#IsAllDay").prop("checked", false);
|
|
$("#IsPrivate").prop("checked", false);
|
|
}
|
|
|
|
function submitInsertAppointmentForm() {
|
|
showSpinner();
|
|
validateAppointmentForm();
|
|
}
|
|
|
|
function submitSchedulerDateForm() {
|
|
showSpinner();
|
|
$("#scheduler-date-form").submit();
|
|
}
|
|
|
|
function validateAppointmentForm() {
|
|
var isAllDay = $("#IsAllDay").prop("checked") === true;
|
|
|
|
|
|
var startTimePicker = $("#scheduler-start-time-picker");
|
|
var startDatePicker = $("#scheduler-start-date-picker");
|
|
var endTimePicker = $("#scheduler-end-time-picker");
|
|
var endDatePicker = $("#scheduler-end-date-picker");
|
|
|
|
var isStartTimeInputEmpty = isAllDay ? false : isEmptyOrSpaces($("#scheduler-start-time").val());
|
|
var isEndTimeInputEmpty = isAllDay ? false : isEmptyOrSpaces($("#scheduler-end-time").val());
|
|
var isStartDateInputEmpty = isEmptyOrSpaces($("#scheduler-start-date").val());
|
|
var isEndDateInputEmpty = isEmptyOrSpaces($("#scheduler-end-date").val());
|
|
|
|
startTimePicker.datetimepicker("show");
|
|
startTimePicker.datetimepicker("hide");
|
|
|
|
startDatePicker.datetimepicker("show");
|
|
startDatePicker.datetimepicker("hide");
|
|
|
|
endTimePicker.datetimepicker("show");
|
|
endTimePicker.datetimepicker("hide");
|
|
|
|
endDatePicker.datetimepicker("show");
|
|
endDatePicker.datetimepicker("hide");
|
|
|
|
var startTime = startTimePicker.datetimepicker("date");
|
|
var endTime = endTimePicker.datetimepicker("date");
|
|
var startDate = startDatePicker.datetimepicker("date");
|
|
var endDate = endDatePicker.datetimepicker("date");
|
|
|
|
var a = startDate === undefined || startDate === null || !startDate.isValid();
|
|
var b = endDate === undefined || endDate === null || !endDate.isValid();
|
|
var c = isAllDay ? false : startTime === undefined || startTime === null || !startTime.isValid();
|
|
var d = isAllDay ? false : endTime === undefined || endTime === null || !endTime.isValid();
|
|
|
|
if (a || b || c || d || isStartDateInputEmpty || isStartTimeInputEmpty || isEndTimeInputEmpty || isEndDateInputEmpty) {
|
|
hideSpinner();
|
|
|
|
logInfo3("Datumsproblem!");
|
|
|
|
showMessagePopupWithHtml("Fehler", '<div class="alert alert-danger" role="alert">Die Zeit- und/oder Datumsangaben sind nicht korrekt.</div>');
|
|
|
|
$("#scheduler-start-time, #scheduler-end-time").val("");
|
|
return;
|
|
}
|
|
|
|
if(endDate.isValid() === false) {
|
|
endDate = startDate.clone();
|
|
}
|
|
|
|
var startHours = 0;
|
|
var startMinutes = 0;
|
|
var endHours = 0;
|
|
var endMinutes = 0;
|
|
|
|
if(isAllDay === false) {
|
|
startHours = startTime.hours();
|
|
startMinutes = startTime.minutes();
|
|
endHours = endTime.hours();
|
|
endMinutes = endTime.minutes();
|
|
}
|
|
|
|
startDate = startDate.hours(startHours);
|
|
startDate = startDate.minutes(startMinutes);
|
|
|
|
endDate = endDate.hours(endHours);
|
|
endDate = endDate.minutes(endMinutes);
|
|
|
|
if(endDate.isBefore(startDate)) {
|
|
hideSpinner();
|
|
showMessagePopupWithHtml("Fehler", '<div class="alert alert-danger" role="alert">Das Startdatum muss vor dem Enddatum liegen.</div>');
|
|
return;
|
|
}
|
|
|
|
var selectedOids = [];
|
|
var oidString = "";
|
|
|
|
$("#resources-popup input:checked").each(function() {
|
|
var id = $(this).attr("id");
|
|
logInfo(id);
|
|
selectedOids.push(id.split("-")[1]);
|
|
});
|
|
|
|
for(var i = 0; i < selectedOids.length; i++) {
|
|
oidString += selectedOids[i] + ",";
|
|
}
|
|
|
|
$.get(getCheckResourcesAvailabilityUrl(), { start: startDate.format("DD.MM.YYYY HH:mm"), end: endDate.format("DD.MM.YYYY HH:mm"), resourceOids: oidString, allDay: isAllDay }).done(function(result) {
|
|
if (result.length > 1) {
|
|
try {
|
|
hideSpinner();
|
|
|
|
if (result.includes("Fehler!")) {
|
|
showErrorMessagePopup(result.substring(7));
|
|
return;
|
|
} else {
|
|
showMessagePopupWithHtml("Überschneidung",
|
|
result,
|
|
function() {
|
|
$("#messagePopup .modal-body").html();
|
|
showSpinner();
|
|
insertOrUpdateAppointment(startDate.format("DD.MM.YYYY"), endDate.format("DD.MM.YYYY"), startDate.format("HH:mm"), endDate.format("HH:mm"));
|
|
},
|
|
false);
|
|
}
|
|
|
|
// ALT!
|
|
//var unavailableResources = parseJason(result);
|
|
//var resourceCount = 0;
|
|
//var names = "";
|
|
|
|
//$.each(unavailableResources, function(index, resource) {
|
|
// if (names.length > 1) {
|
|
// names += ", ";
|
|
// }
|
|
|
|
// resourceCount++;
|
|
|
|
// names += resource.Name;
|
|
//});
|
|
|
|
//var unavailableResourcesMessage;
|
|
|
|
//if(resourceCount > 0) {
|
|
// if(resourceCount > 1) {
|
|
// unavailableResourcesMessage = "Einige der ausgewählten Ressourcen (" + names + ") sind zum gewählten Zeitpunkt nicht verfügbar.";
|
|
// } else {
|
|
// unavailableResourcesMessage = "Eine der ausgewählten Ressourcen (" + names + ") ist zum gewählten Zeitpunkt nicht verfügbar.";
|
|
// }
|
|
|
|
// hideSpinner();
|
|
|
|
// showWarningMessageBox("Überschneidung", unavailableResourcesMessage, function() {
|
|
// $("#messagePopup .modal-body").html();
|
|
// showSpinner();
|
|
// insertOrUpdateAppointment(startDate.format("DD.MM.YYYY"), endDate.format("DD.MM.YYYY"), startDate.format("HH:mm"), endDate.format("HH:mm"));
|
|
// }, false);
|
|
|
|
// return;
|
|
//}
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
return;
|
|
}
|
|
} else {
|
|
insertOrUpdateAppointment(startDate.format("DD.MM.YYYY"), endDate.format("DD.MM.YYYY"), startDate.format("HH:mm"), endDate.format("HH:mm"));
|
|
}
|
|
});
|
|
}
|
|
|
|
function insertOrUpdateAppointment(formattedStartDate, formattedEndDate, formattedStartTime, formattedEndTime) {
|
|
$.get(
|
|
getCheckForOverlappingAppointmentsUrl(),
|
|
{
|
|
startDateRaw: formattedStartDate,
|
|
endDateRaw: formattedEndDate,
|
|
startTimeRaw: formattedStartTime,
|
|
endTimeRaw: formattedEndTime
|
|
}
|
|
).done(function(result) {
|
|
if(false === checkJson(result)) {
|
|
logWarning("insertOrUpdateAppointment: Der zurückgegebene Wert ist kein gültiges JSON!");
|
|
return;
|
|
}
|
|
|
|
var isOverlapping = parseJason(result);
|
|
|
|
if(isOverlapping === true) {
|
|
hideSpinner();
|
|
$("#messagePopup .modal-body").html('<div class="alert alert-warning" role="alert">Dieser Termin überschneidet sich mit einem anderen bereits existierenden Termin.<br/> Möchten Sie ihn wirklich speichern?</div>');
|
|
showMessagePopupWithCallback(
|
|
"Überschneidung",
|
|
null,
|
|
function() {
|
|
$("#messagePopup .modal-body").html();
|
|
showSpinner();
|
|
$("#insert-appointment-form").submit();
|
|
},
|
|
false);
|
|
} else {
|
|
$("#insert-appointment-form").submit();
|
|
}
|
|
});
|
|
}
|
|
|
|
function hideAppointmentForm() {
|
|
$("#form-container").addClass("d-none d-sm-none");
|
|
}
|
|
|
|
function showAppointmentForm() {
|
|
$("#form-container").removeClass("d-none d-sm-none");
|
|
calcPrependTextSizes();
|
|
}
|
|
|
|
function toggleAppointmentForm() {
|
|
var isVisible = $("#form-container").css("display") === "block";
|
|
|
|
if (isVisible) {
|
|
hideAppointmentForm();
|
|
} else {
|
|
showAppointmentForm();
|
|
}
|
|
}
|
|
|
|
function listSearchOnChange(searchInputId, entryClass, textClass) {
|
|
try {
|
|
var text = $("#" + searchInputId).val().toLowerCase();
|
|
|
|
var entries = $("." + entryClass);
|
|
|
|
if (text.length === 0) {
|
|
entries.show();
|
|
}
|
|
|
|
$.each(entries, function (index, item) {
|
|
var customer = $(item);
|
|
|
|
if (customer.find("." + textClass).text().toLowerCase().includes(text)) {
|
|
customer.show();
|
|
} else {
|
|
customer.hide();
|
|
}
|
|
});
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function resetSearch(searchInputId, entryClass) {
|
|
try {
|
|
$("#" + searchInputId).val("");
|
|
$("." + entryClass).show();
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
} |