Files
BeWoPlaner/BeWoPlanerMobil/Scripts/ownSoft-Scripts/view-scripts/main.js
Lyndon Jetten a75991e805 MoK: Reports werden alle in einem einzigen PartialView angezeigt und das AbstractModel von dem alle Model erben, hat die Report- und ReportTitle-Eigenschaften.
ServiceRecords werden wie im FaC validiert, d.h. dass Arbeitszeiten und Pausenzeiten keine Überschneidungswarnung bekommen.
2024-07-24 16:45:56 +02:00

497 lines
15 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 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 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);
}
}