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.
523 lines
16 KiB
JavaScript
523 lines
16 KiB
JavaScript
function selectSupportConcept(cb2ScOid) {
|
|
showSpinner();
|
|
$("#CostBearer2SupportConceptOid").val(cb2ScOid);
|
|
$("#selectSupportConceptForm").submit();
|
|
}
|
|
|
|
function setSelectedEmployee() {
|
|
var employeeOid = parseInt($("#employeesDropDown").find(":selected").val());
|
|
|
|
if (isNaN(employeeOid)) {
|
|
return;
|
|
}
|
|
|
|
$.get(getSetServiceRecordEmployeeUrl(), { employeeOid: employeeOid });
|
|
}
|
|
|
|
function checkJson(str) {
|
|
try {
|
|
JSON.parse(str);
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function serviceDescriptionSelectOnReset(categorySelectId, leistungSelectId, textmoduleContainerId, treeId) {
|
|
setTimeout(function () {
|
|
loadServiceDescriptions(categorySelectId, leistungSelectId, textmoduleContainerId, treeId);
|
|
}, 100);
|
|
}
|
|
|
|
function showAlertMessage(message) {
|
|
$("#form-alert").html(message);
|
|
$("#form-alert").show();
|
|
}
|
|
|
|
function resetCreateForm() {
|
|
$("#serviceRecordCreationForm").trigger("reset");
|
|
|
|
var test = $("#has-any-rating-types").val().toLowerCase() === "true";
|
|
|
|
if (test) {
|
|
$(".goal-rating-badge").text("Bewerten");
|
|
} else {
|
|
$(".goal-rating-badge").text("");
|
|
}
|
|
}
|
|
|
|
function submitSingleBookingForm() {
|
|
showSpinner();
|
|
|
|
validateForm($("#singleBookingForm"), null);
|
|
}
|
|
|
|
function submitCreateForm() {
|
|
showSpinner();
|
|
|
|
validateForm($("#serviceRecordCreationForm"), null);
|
|
}
|
|
|
|
function submitEditForm() {
|
|
showSpinner();
|
|
|
|
validateForm($("#serviceRecordEditForm"), null);
|
|
}
|
|
|
|
function submitGroupBookingEditForm() {
|
|
showSpinner();
|
|
|
|
validateForm($("#groupBookingEditingForm"), null);
|
|
}
|
|
|
|
function submitGroupBookingForm() {
|
|
showSpinner();
|
|
|
|
validateForm($("#groupBookingForm"), null);
|
|
}
|
|
|
|
function deactivateGroupBookingForm() {
|
|
$("#employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", true);
|
|
}
|
|
|
|
function activateGroupBookingForm() {
|
|
$("#employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", false);
|
|
}
|
|
|
|
function deleteServiceRecord(serviceRecordOid) {
|
|
showMessagePopupWithCallback("Eintrag löschen", "Sind Sie sicher, dass Sie den Eintrag löschen möchten?",
|
|
function() {
|
|
var url = getValidateServiceRecordDeletionUrl();
|
|
|
|
$.get(url, { serviceRecordOidString: serviceRecordOid }).done(function(result) {
|
|
if(result === "Error") {
|
|
hideSpinner();
|
|
showAlertMessageBox("Fehler", "Es ist ein Fehler aufgetreten", null, false);
|
|
return;
|
|
}
|
|
|
|
if(false === checkJson(result)) {
|
|
logWarning("deleteServiceRecord: Der zurückgegebene Wert ist kein gültiges JSON!");
|
|
hideSpinner();
|
|
return;
|
|
}
|
|
|
|
var form = $("#deletion-form");
|
|
|
|
if(result.length === 0) {
|
|
if(form.length !== 0) {
|
|
logError("Sollte nicht mehr eintreffen; serviceRecordOid: " + serviceRecordOid);
|
|
$("#oidHolder").val(serviceRecordOid);
|
|
|
|
showSpinner();
|
|
form.submit();
|
|
}
|
|
} else { // Meldungen
|
|
hideSpinner();
|
|
|
|
var validationResult = parseJason(result);
|
|
|
|
if(validationResult.Message === null) {
|
|
$("#oidHolder").val(serviceRecordOid);
|
|
|
|
showSpinner();
|
|
form.submit();
|
|
return;
|
|
}
|
|
|
|
$("#oidHolder").val(serviceRecordOid);
|
|
|
|
var kannTrotzdemGespeichertWerden = validationResult.KannTrotzdemGespeichertWerden;
|
|
|
|
var validationCallback = function() {
|
|
$("#messagePopup .modal-body").html();
|
|
if(kannTrotzdemGespeichertWerden) {
|
|
showSpinner();
|
|
form.submit();
|
|
}
|
|
};
|
|
|
|
if(kannTrotzdemGespeichertWerden) {
|
|
showWarningMessageBox("Fehler", validationResult.Message, validationCallback, false);
|
|
} else {
|
|
showAlertMessageBox("Fehler", validationResult.Message, validationCallback, false);
|
|
}
|
|
}
|
|
});
|
|
}, false);
|
|
}
|
|
|
|
function validateForm(form, prefix) {
|
|
if(form === undefined || form === null) {
|
|
hideSpinner();
|
|
return;
|
|
}
|
|
|
|
if(prefix === undefined || prefix === null) {
|
|
prefix = "";
|
|
}
|
|
|
|
var errorMessage = "";
|
|
var isNoticeMandatory = getIsDocumentationMandatory();
|
|
var numberOfNoticeTextareas = getNumberOfDokutypes();
|
|
|
|
var isValid = true;
|
|
|
|
if(isNoticeMandatory) {
|
|
if(numberOfNoticeTextareas === 0) {
|
|
var doku = $("#" + prefix + "dokufeld").val();
|
|
|
|
isValid = doku.length > 0;
|
|
} else {
|
|
for(var i = 0; i < numberOfNoticeTextareas; i++) {
|
|
var d = $("#" + prefix + "doku-textarea-" + i).val();
|
|
|
|
isValid = d.length > 0;
|
|
|
|
if(isValid) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isValid === false) {
|
|
errorMessage = "Bitte füllen Sie " + (numberOfNoticeTextareas > 1 ? "mindestens ein" : "das") + " Dokumentationsfeld aus.<br/>";
|
|
}
|
|
}
|
|
|
|
var startAndEndDates = getStartAndEndDate(prefix);
|
|
|
|
if(startAndEndDates === null && isValid) {
|
|
isValid = false;
|
|
errorMessage += "Die Datums- und / oder Zeitangaben sind nicht korrekt.<br/>";
|
|
}
|
|
|
|
if(isValid === false) {
|
|
hideSpinner();
|
|
|
|
showAlertMessageBox("Fehler",
|
|
errorMessage,
|
|
function() {
|
|
$("#messagePopup .modal-body").html();
|
|
},
|
|
true);
|
|
|
|
return;
|
|
}
|
|
|
|
if(startAndEndDates !== null && isValid) {
|
|
var start = startAndEndDates[0];
|
|
var end = startAndEndDates[1];
|
|
|
|
if (end.isBefore(start)) {
|
|
showAlertMessageBox("Fehler", "Das Ende muss vor dem Start liegen!", null, false);
|
|
}
|
|
|
|
var [doku1, doku2, doku3, doku4, doku5] = getDokuTexte();
|
|
|
|
var startTimeInput = $(`#${prefix}start-time`);
|
|
var endTimeInput = $(`#${prefix}end-time`);
|
|
|
|
$("#srv-date").val(start.format("DD.MM.YYYY"));
|
|
$("#srv-end-date").val(end.format("DD.MM.YYYY"));
|
|
$("#srv-start").val(startTimeInput.val());
|
|
$("#srv-end").val(endTimeInput.val());
|
|
|
|
$("#srv-doku1").val(doku1);
|
|
$("#srv-doku2").val(doku2);
|
|
$("#srv-doku3").val(doku3);
|
|
$("#srv-doku4").val(doku4);
|
|
$("#srv-doku5").val(doku5);
|
|
$("#srv-distance").val($(`#${prefix}distance`).val());
|
|
$("#srv-form-id").val(form.attr("id"));
|
|
$("#srv-marker").val($(`${prefix}marker-cb`).val());
|
|
$("#srv-service-description").val($(`#${prefix}leistung-select`).find(":selected").val());
|
|
$("#srv-duration").val($(`#${prefix}duration`).val());
|
|
|
|
showSpinner();
|
|
$("#service-record-validation-form").submit();
|
|
}
|
|
}
|
|
|
|
function getDokuTexte() {
|
|
try {
|
|
var noticeList = [null, null, null, null, null];
|
|
|
|
var isMultiBooking = $("#mb-dokufeld").length > 0 || $("#mb-doku-textarea-0").length > 0;
|
|
|
|
var multiBookingPrefix = isMultiBooking ? "mb-" : "";
|
|
|
|
var hasMultipleDokufelder = $("#" + multiBookingPrefix + "dokufeld").length === 0;
|
|
|
|
var dokufeldCounter = 0;
|
|
|
|
if(hasMultipleDokufelder) {
|
|
for(var i = 0; i < 5; i++) {
|
|
var dokufeld = $("#" + multiBookingPrefix + "doku-textarea-" + i);
|
|
|
|
if(dokufeld.length > 0) {
|
|
noticeList[i] = dokufeld.val();
|
|
dokufeldCounter++;
|
|
}
|
|
}
|
|
} else {
|
|
noticeList[0] = $("#" + multiBookingPrefix + "dokufeld").val();
|
|
dokufeldCounter = 1;
|
|
}
|
|
|
|
var x = "";
|
|
for (var ii = 0; ii < dokufeldCounter; ii++) {
|
|
x += noticeList[ii];
|
|
|
|
if (ii < noticeList.length - 1) {
|
|
x += ", ";
|
|
}
|
|
}
|
|
|
|
return noticeList;
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function showGoalRatingPopup(goalOid) {
|
|
try {
|
|
$("#goal-rating-popup").modal("show");
|
|
$("#goal-to-rate-oid").val(goalOid);
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function hideGoalRatingPopup() {
|
|
try {
|
|
$("#goal-rating-popup").modal("hide");
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function checkChildNodes(parentOid) {
|
|
var rootElement = $("#c-" + parentOid);
|
|
var checkboxes = rootElement.find("input");
|
|
|
|
var isChecked = $("#" + parentOid).prop("checked") === true;
|
|
|
|
$.each(checkboxes, function(index, checkbox) {
|
|
var box = $(checkbox);
|
|
var id = box.attr("id");
|
|
|
|
if(!id !== parentOid) {
|
|
box.prop("checked", isChecked);
|
|
}
|
|
});
|
|
}
|
|
|
|
function getCheckedGoals() {
|
|
var rootElement = $("#goals-tree");
|
|
var checkboxes = rootElement.find("input");
|
|
|
|
var selectedGoals = "";
|
|
|
|
$.each(checkboxes, function(index, checkbox) {
|
|
var box = $(checkbox);
|
|
var id = box.attr("id");
|
|
|
|
if(box.prop("checked") === true && !id.includes("goal")) {
|
|
selectedGoals += id + ";";
|
|
}
|
|
});
|
|
|
|
return selectedGoals.substr(0, selectedGoals.length - 1);
|
|
}
|
|
|
|
function updateSelectedGoals() {
|
|
var selectedGoals = getCheckedGoals();
|
|
|
|
$.get(getUpdateGoalsUrl(), { pGoalOids: selectedGoals });
|
|
}
|
|
|
|
function validateDistanceInput() {
|
|
checkNumberInput("distance");
|
|
}
|
|
|
|
function checkNumberInput(inputId) {
|
|
var input = $("#" + inputId).val();
|
|
|
|
var isNum = /^\d+$/.test(input);
|
|
|
|
return isNum;
|
|
}
|
|
|
|
// Wird bei der Validierung des Formulars benutzt
|
|
function getStartAndEndDate(prefix) {
|
|
if(prefix === undefined || prefix === null) {
|
|
prefix = "";
|
|
}
|
|
|
|
var startTimePicker = $("#" + prefix + "start-time-picker");
|
|
var endTimePicker = $("#" + prefix + "end-time-picker");
|
|
var startDatePicker = $("#" + prefix + "start-date-picker");
|
|
var endDatePicker = $("#" + prefix + "end-date-picker");
|
|
|
|
startDatePicker.datetimepicker("show");
|
|
startDatePicker.datetimepicker("hide");
|
|
|
|
endDatePicker.datetimepicker("show");
|
|
endDatePicker.datetimepicker("hide");
|
|
|
|
var startDate = startDatePicker.datetimepicker("date");
|
|
var endDate = endDatePicker.datetimepicker("date");
|
|
|
|
var a = startDate === undefined || startDate === null || !startDate.isValid();
|
|
var b = endDatePicker.length === 0 ? false : endDate === undefined || endDate === null || !endDate.isValid();
|
|
|
|
// Bei leeren Startzeit- und Endzeitfeldern. Muss ein Dummydate zurückgeben,
|
|
// damit das Speichern ohne Angabe der Start- und Endzeit möglich ist.
|
|
if(a && $(`#${prefix}start-time`).val().length === 0 || $(`#${prefix}end-time`).val().length === 0) {
|
|
var dummyStart = startDate;
|
|
var dummyEnd = endDatePicker.length === 0 ? startDate.clone() : endDate;
|
|
|
|
dummyStart.hours(0);
|
|
dummyStart.minutes(0);
|
|
dummyStart.seconds(1);
|
|
|
|
dummyEnd.hours(0);
|
|
dummyEnd.minutes(0);
|
|
dummyEnd.seconds(1);
|
|
|
|
if (dummyEnd.isBefore(dummyStart)) {
|
|
return null;
|
|
}
|
|
|
|
return [dummyStart, dummyEnd];
|
|
}
|
|
|
|
startTimePicker.datetimepicker("show");
|
|
startTimePicker.datetimepicker("hide");
|
|
|
|
endTimePicker.datetimepicker("show");
|
|
endTimePicker.datetimepicker("hide");
|
|
|
|
var startTime = startTimePicker.datetimepicker("date");
|
|
var endTime = endTimePicker.datetimepicker("date");
|
|
|
|
var c = startTime === undefined || startTime === null || !startTime.isValid();
|
|
var d = endTime === undefined || endTime === null || !endTime.isValid();
|
|
|
|
if(a || b || c || d) {
|
|
return null;
|
|
}
|
|
|
|
if(endDatePicker.length === 0 || endDate.isValid() === false) {
|
|
endDate = startDate.clone();
|
|
}
|
|
|
|
startDate = startDate.hours(startTime.hours());
|
|
startDate = startDate.minutes(startTime.minutes());
|
|
|
|
endDate = endDate.hours(endTime.hours());
|
|
endDate = endDate.minutes(endTime.minutes());
|
|
|
|
if(endDate.isBefore(startDate)) {
|
|
// Wenn das Enddatum nicht sichtbar ist und der Termin länger als den Starttag geht, muss das Enddatum neu berechnet werden
|
|
// Bei Vorhandensein der Minuten/Stunden-Auswahl ist kein (h) im Dauertext!
|
|
var dropDownbutton = $(`#${prefix}hours-minutes-dropdown-btn`);
|
|
|
|
var hasMinHourDropdown = dropDownbutton.length > 0;
|
|
var duration = $(`#${prefix}duration`).val();
|
|
var isHour = $(`#${prefix}duration`).prev().text().trim() === "Dauer (h)" || (hasMinHourDropdown && $(`#${prefix}hours-minutes-dropdown-btn`).text() === "Stunden");
|
|
var minutesToAdd = isHour ? 60 * duration : duration;
|
|
|
|
endDate = startDate.clone().add(minutesToAdd, "minutes");
|
|
|
|
return endDate.isBefore(startDate) ? null : [startDate, endDate];
|
|
}
|
|
|
|
return [startDate, endDate];
|
|
}
|
|
|
|
function textCategoryOnClick(categoryId) {
|
|
var childrenContainer = $("#" + categoryId + "-children-container");
|
|
var iconSpan = $("#" + categoryId + "-icon-span");
|
|
|
|
var displayValue = childrenContainer.css("display");
|
|
|
|
var classToRemove = displayValue === "block" ? "fa-angle-down" : "fa-angle-up";
|
|
var classToAdd = displayValue === "block" ? "fa-angle-up" : "fa-angle-down";
|
|
|
|
iconSpan.removeClass(classToRemove);
|
|
iconSpan.addClass(classToAdd);
|
|
|
|
childrenContainer.toggle();
|
|
}
|
|
|
|
function supportConceptSearchOnChange() {
|
|
try {
|
|
var text = $("#support-concept-search-input").val().toLowerCase();
|
|
|
|
var links = $(".blubb-test");
|
|
|
|
if (text.length === 0) {
|
|
links.show();
|
|
}
|
|
|
|
$.each(links,
|
|
function(index, item) {
|
|
var supportConcept = $(item);
|
|
|
|
if(supportConcept.find(".supportconcept-name-header").text().toLowerCase().includes(text)) {
|
|
supportConcept.show();
|
|
} else {
|
|
supportConcept.hide();
|
|
}
|
|
});
|
|
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function resetSupportConceptSearch() {
|
|
try {
|
|
$("#support-concept-search-input").val("");
|
|
$(".blubb-test").show();
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function getSignatureImage(serviceRecordOid, signatureOid) {
|
|
try {
|
|
var url = getGetSignatureImageUrl();
|
|
|
|
$.get(url, { serviceRecordOid: serviceRecordOid, signatureOid: signatureOid }).done(function(textAndImage) {
|
|
var kek = textAndImage.split(";");
|
|
|
|
var serviceRecordDescription = kek[0];
|
|
var imageData = kek[1] + ";" + kek[2];
|
|
|
|
$("#signature-text").html(serviceRecordDescription);
|
|
$("#signature-img").attr("src", imageData);
|
|
|
|
$("#signature-img-popup").modal("show");
|
|
});
|
|
} catch (error) {
|
|
showErrorPopup(error);
|
|
}
|
|
}
|
|
|
|
function setServiceDescription(id) {
|
|
try {
|
|
var url = getSetServiceDescriptionUrl();
|
|
|
|
var selectedServiceDescription = $("#" + id).find(":selected").val();
|
|
|
|
$.get(url, {pServiceDescriptionOid: selectedServiceDescription});
|
|
} catch(error) {
|
|
showErrorPopup(error);
|
|
}
|
|
} |