From 2663ce41ce38d296eaf8ab0177bced87cd55d62a Mon Sep 17 00:00:00 2001 From: Lyndon Jetten Date: Fri, 1 Mar 2024 16:59:35 +0100 Subject: [PATCH] =?UTF-8?q?MoK:=201.=20GetStatus=20auf=20type=3D1=20ge?= =?UTF-8?q?=C3=A4ndert.=202.=20Bei=20den=20Bargeldkassen=20Bugs=20gefixt?= =?UTF-8?q?=20(ist=20noch=20nicht=20fertig).=203.=20Fehler=20bez=C3=BCglic?= =?UTF-8?q?h=20jsonResult=20in=20mobileUtils.js=20gefixt.=204.=20Meldung?= =?UTF-8?q?=20bei=20Login=20wegen=20GetStatus=20eingebaut.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CustomerController.cs | 10 + .../Controllers/LoginController.cs | 2 +- .../Scripts/ownSoft-Scripts/mobileUtils.js | 14 +- .../Scripts/ownSoft-Scripts/signature.js | 128 +++++++----- .../Customer/CustomerBargeldkassen.cshtml | 164 ++++++++++------ ...omerBargeldtransaktionenFormPartial.cshtml | 54 ++++-- BeWoPlanerMobil/Views/Shared/_Layout.cshtml | 182 +++++++++--------- Data/Access/SearchDAO.cs | 18 +- .../OperationsServiceImp.cs | 39 ++-- 9 files changed, 380 insertions(+), 231 deletions(-) diff --git a/BeWoPlanerMobil/Controllers/CustomerController.cs b/BeWoPlanerMobil/Controllers/CustomerController.cs index 754d31a9f..94dd0d629 100644 --- a/BeWoPlanerMobil/Controllers/CustomerController.cs +++ b/BeWoPlanerMobil/Controllers/CustomerController.cs @@ -422,6 +422,7 @@ namespace BeWoPlanerMobil.Controllers #region Bargeldkassen + [Authorize] private void ReloadBargeldkassen() { if(Model?.SelectedCustomer?.CustomerOid is null) @@ -817,6 +818,7 @@ namespace BeWoPlanerMobil.Controllers return PartialView("CustomerBargeldkassen", Model); } + [Authorize] public ActionResult DeleteTransactionSignature(long transactionOid) { if(Model is null) @@ -861,6 +863,7 @@ namespace BeWoPlanerMobil.Controllers return PartialView("CustomerBargeldkassen", Model); } + [Authorize] public ActionResult LoadHistoryEntries(long transactionOid) { if(Model is null) @@ -877,12 +880,19 @@ namespace BeWoPlanerMobil.Controllers return PartialView("CustomerBargeldtransaktionshistorienPartial", Model); } + [Authorize] public string ClearHistoryEntries() { Model?.BargeldtransaktionshistoryEntries.Clear(); return LeerzeichenFuerGetMethoden; } + + [Authorize] + public string CheckForExistingSignature() + { + return (Model?.SelectedBargeldtransaktion?.SignatureOid.HasValue ?? false) ? "1" : "0"; + } #endregion #region Abwesenheiten diff --git a/BeWoPlanerMobil/Controllers/LoginController.cs b/BeWoPlanerMobil/Controllers/LoginController.cs index 65ceb95fc..ed9b48f70 100644 --- a/BeWoPlanerMobil/Controllers/LoginController.cs +++ b/BeWoPlanerMobil/Controllers/LoginController.cs @@ -17,7 +17,7 @@ namespace BeWoPlanerMobil.Controllers { public class LoginController : AbstractBaseController { - private String GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0"; + private String GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&type=1"; public static string LoginErrorIndex => "LoginErrorIndex"; diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js index d34a08db2..8f7562510 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/mobileUtils.js @@ -461,9 +461,11 @@ function showMessagePopupWithHtmlAndCallback(title, messageAsHtml, hasCloseButto $("#message-popup-ok-btn").off("click"); - $("#message-popup-ok-btn").on("click", function () { - callback(); - }); + if(typeof callback === "function") { + $("#message-popup-ok-btn").on("click", function () { + callback(); + }); + } if (hasCloseButton === false) { $("#message-popup-close-btn").hide(); @@ -471,7 +473,7 @@ function showMessagePopupWithHtmlAndCallback(title, messageAsHtml, hasCloseButto $("#message-popup-close-btn").show(); } - if(executeCallbackByBothButtons === true) { + if(executeCallbackByBothButtons === true && typeof callback === "function") { $("#message-popup-close-btn, #message-popup-esc-btn").off("click"); $("#message-popup-close-btn, #message-popup-esc-btn").on("click", function () { @@ -495,8 +497,8 @@ function parseJason(jsonToParse) { try { return $.parseJSON(jsonToParse); } catch (error) { - if(stringContainsDoctype(jsonResult)) { - showErrorPopup(error, jsonResult); + if(stringContainsDoctype(jsonToParse)) { + showErrorPopup(error, jsonToParse); } else { showErrorPopup(error); } diff --git a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js index d0a49efe5..cc044c573 100644 --- a/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js +++ b/BeWoPlanerMobil/Scripts/ownSoft-Scripts/signature.js @@ -129,57 +129,95 @@ function initializeSignature(selectedServiceRecordOid) { var clearButton = document.getElementById("clear-canvas-btn"); var cancelButton = document.getElementById("cancel-signature-btn"); - saveButton.addEventListener("click", function(event) { - var url = getSetSelectedSignatureUrl(); - var date = moment(new Date()); + var saveButtonClone = saveButton.cloneNode(true); + var clearButtonClone = clearButton.cloneNode(true); + var cancelButtonClone = cancelButton.cloneNode(true); - var clonedCanvas = trimCanvas(cloneCanvas(document.getElementById("sketch-pad"))); + saveButton.parentNode.replaceChild(saveButtonClone, saveButton); + clearButton.parentNode.replaceChild(clearButtonClone, clearButton); + cancelButton.parentNode.replaceChild(cancelButtonClone, cancelButton); - var context = clonedCanvas.getContext("2d", { willReadFrequently: true }); - context.globalCompositeOperation = "destination-over"; - context.fillStyle = "white"; - context.fillRect(0, 0, clonedCanvas.width, clonedCanvas.height); + function saveBtnListener(event) { + saveButtonClick(selectedServiceRecordOid); + } - var dataUrl = clonedCanvas.toDataURL("image/png"); + function clearBtnListener(event) { + clearButtonClick(signaturePad); + } - var formattedDate = date.format("DD.MM.YYYY HH:mm:ss"); + function cancelBtnListener(event) { + cancelButtonClick(signaturePad) + } - showSpinner(); + saveButtonClone.addEventListener("click", saveBtnListener); - $.post(url, { blob: dataUrl, timeStamp: formattedDate, serviceRecordOid: selectedServiceRecordOid }).done(function(json) { - hideSpinner(); - - if(json === "1") { - $("#signature-container").removeClass("d-block"); - $("#main-container, #checkbox-container").show(); - showMessagePopupWithCallback("Unterschrift", "Die Unterschrift wurde erfolgreich gespeichert.", function() { - showSpinner(); - $("#signature-alert").addClass("d-none"); - location.reload(); - }, true); - } else { - var errorMessage = json === "0" ? "Es ist ein Fehler beim Speichern der Unterschrift aufgetreten. Bitte wenden Sie sich an Ihren Administrator." : json; + clearButtonClone.addEventListener("click", clearBtnListener); - showMessagePopup("Fehler", errorMessage); - $("#signature-alert").addClass("d-none"); - signaturePad.clear(); - } - }); - }); - - clearButton.addEventListener("click", function (event) { - signaturePad.clear(); - }); - - cancelButton.addEventListener("click", function(event) { - showMessagePopupWithCallback("Unterschrift", "Sind Sie sicher, dass Sie die Unterschrift nicht speichern möchten?", - function() { - $("#signature-container, #checkbox-container").removeClass("d-block"); - $("#signature-alert").addClass("d-none"); - $("#main-container").show(); - - signaturePad.clear(); - }, false); - }); + cancelButtonClone.addEventListener("click", cancelBtnListener); }); } + +function saveButtonClick(selectedServiceRecordOid) { + try { + var url = getSetSelectedSignatureUrl(); + var date = moment(new Date()); + + var clonedCanvas = trimCanvas(cloneCanvas(document.getElementById("sketch-pad"))); + + var context = clonedCanvas.getContext("2d", {willReadFrequently: true}); + context.globalCompositeOperation = "destination-over"; + context.fillStyle = "white"; + context.fillRect(0, 0, clonedCanvas.width, clonedCanvas.height); + + var dataUrl = clonedCanvas.toDataURL("image/png"); + + var formattedDate = date.format("DD.MM.YYYY HH:mm:ss"); + + showSpinner(); + + $.post(url, {blob: dataUrl, timeStamp: formattedDate, serviceRecordOid: selectedServiceRecordOid}).done(function (json) { + hideSpinner(); + + if(json === "1") { + $("#signature-container").removeClass("d-block"); + $("#main-container, #checkbox-container").show(); + showMessagePopupWithCallback("Unterschrift", "Die Unterschrift wurde erfolgreich gespeichert.", function () { + showSpinner(); + $("#signature-alert").addClass("d-none"); + location.reload(); + }, true); + } else { + var errorMessage = json === "0" ? "Es ist ein Fehler beim Speichern der Unterschrift aufgetreten. Bitte wenden Sie sich an Ihren Administrator." : json; + + showMessagePopup("Fehler", errorMessage); + $("#signature-alert").addClass("d-none"); + signaturePad.clear(); + } + }); + } catch (error) { + showErrorPopup(error); + } +} + +function cancelButtonClick(signaturePad) { + try { + showMessagePopupWithCallback("Unterschrift", "Sind Sie sicher, dass Sie die Unterschrift nicht speichern möchten?", + function () { + $("#signature-container, #checkbox-container").removeClass("d-block"); + $("#signature-alert").addClass("d-none"); + $("#main-container").show(); + + signaturePad.clear(); + }, false); + } catch(error) { + showErrorPopup(error); + } +} + +function clearButtonClick(signaturePad) { + try { + signaturePad.clear(); + } catch(error) { + showErrorPopup(error); + } +} diff --git a/BeWoPlanerMobil/Views/Customer/CustomerBargeldkassen.cshtml b/BeWoPlanerMobil/Views/Customer/CustomerBargeldkassen.cshtml index 224de04ae..0b521c2fe 100644 --- a/BeWoPlanerMobil/Views/Customer/CustomerBargeldkassen.cshtml +++ b/BeWoPlanerMobil/Views/Customer/CustomerBargeldkassen.cshtml @@ -43,7 +43,7 @@ $("#customer-bargeldkassen-modal-body").load("@Url.Action("LoadEditFormPartial")", {bargeldkassenOid: bargeldkassenOid}, function () { hideSpinner(); - $("#customer-bargeldkassen-form-popup-title").text(bargeldkassenname + " bearbeiten"); + $("#customer-bargeldkassen-form-popup-title").text(`${bargeldkassenname} bearbeiten`); $("#customer-bargeldkassen-form-popup").modal("show"); calcBargeldkassenFormPrependWidth(); }); @@ -54,7 +54,8 @@ function deleteBtnClickTest(bargeldkassenOid, bargeldkassenname) { try { - showMessagePopupWithHtmlAndCallback("Bargeldkasse löschen", "Möchten Sie die Bargeldkasse \"" + bargeldkassenname + "\" wirklich löschen?", function () { + + showMessagePopupWithHtmlAndCallback(`Bargeldkasse löschen`, `Möchten Sie die Bargeldkasse "${bargeldkassenname}" wirklich löschen?`, true, function () { showSpinner(); $("#bk-to-delete-oid").val(bargeldkassenOid); document.getElementById("bargeldkassendeleteform").submit(); @@ -152,6 +153,7 @@ } function signZahlungsbeleg(transaktionsOid) { + logInfo(`Transaktion mit Oid ${transaktionsOid} wird unterschrieben`); try { $("#customer-container").hide(); $("#transaktionsunterschriftencontainer").addClass("d-block"); @@ -167,68 +169,27 @@ var saveButton = document.getElementById("transaktionsunterschriften-save-btn"); var clearButton = document.getElementById("transaktionsunterschriften-clear-canvas-btn"); - cancelButton.addEventListener("click", + var cancelButtonClone = cancelButton.cloneNode(true); + var saveButtonClone = saveButton.cloneNode(true); + var clearButtonClone = clearButton.cloneNode(true); + + cancelButton.parentNode.replaceChild(cancelButtonClone, cancelButton); + saveButton.parentNode.replaceChild(saveButtonClone, saveButton); + clearButton.parentNode.replaceChild(clearButtonClone, clearButton); + + cancelButtonClone.addEventListener("click", function () { - var canvas = document.getElementById("transaktionsunterschriftencanvas"); - var width = canvas.getBoundingClientRect().width; - var height = canvas.getBoundingClientRect().height; - - if(width === 0 || height === 0 || signaturePad.isEmpty()) { - logInfo("width oder height sind 0 oder das SignaturePad ist leer"); - - $("#customer-container").show(); - $("#transaktionsunterschriftencontainer").removeClass("d-block"); - $("#transaktionsunterschriftencontainer").addClass("d-none"); - - signaturePad.clear(); - - return; - } - - showMessagePopupWithCallback("Unterschrift", - "Sind Sie sicher, dass Sie die Unterschrift nicht speichern möchten?", - function () { - $("#customer-container").show(); - $("#transaktionsunterschriftencontainer").removeClass("d-block"); - $("#transaktionsunterschriftencontainer").addClass("d-none"); - - signaturePad.clear(); - }, - false); + cancelButtonEvent(signaturePad); }); - saveButton.addEventListener("click", + saveButtonClone.addEventListener("click", function () { - var canvas = document.getElementById("transaktionsunterschriftencanvas"); - var clonedCanvas = cloneCanvas(canvas); - var trimmedCanvas = trimCanvas(clonedCanvas); - - var context = trimmedCanvas.getContext("2d", {willReadFrequently: true}); - context.globalCompositeOperation = "destination-over"; - context.fillStyle = "white"; - context.fillRect(0, 0, trimmedCanvas.width, trimmedCanvas.height); - - var dataUrl = trimmedCanvas.toDataURL("image/png"); - - showSpinner(); - - $("#bargeldkassen-container").load("@Url.Action("SaveTransaktionsunterschrift")", - { - transaktionsOid: transaktionsOid, - signatureAsBase64: dataUrl - }, - function () { - $("#transaktionsunterschriftencontainer").removeClass("d-block"); - $("#transaktionsunterschriftencontainer").addClass("d-none"); - $("#customer-container").show(); - - hideSpinner(); - }); + saveButtonEvent(transaktionsOid); }); - clearButton.addEventListener("click", + clearButtonClone.addEventListener("click", function () { - signaturePad.clear(); + clearButtonEvent(signaturePad); }); } catch(error) { $("#transaktionsunterschriftencontainer").removeClass("d-block"); @@ -236,6 +197,89 @@ $("#customer-container").show(); showErrorPopup(error); } + + function clearButtonEvent(signaturePad) { + try { + signaturePad.clear(); + } catch (error) { + showErrorPopup(error); + } + } + + function saveButtonEvent(transaktionsOid) { + var canvas = document.getElementById("transaktionsunterschriftencanvas"); + var clonedCanvas = cloneCanvas(canvas); + var trimmedCanvas = trimCanvas(clonedCanvas); + + var context = trimmedCanvas.getContext("2d", {willReadFrequently: true}); + context.globalCompositeOperation = "destination-over"; + context.fillStyle = "white"; + context.fillRect(0, 0, trimmedCanvas.width, trimmedCanvas.height); + + var dataUrl = trimmedCanvas.toDataURL("image/png"); + logInfo(`Unterschrift für Transaktion mit Oid ${transaktionsOid} wird zu SaveTransaktionsunterschrift geschickt`); + showSpinner(); + + $("#bargeldkassen-container").load("@Url.Action("SaveTransaktionsunterschrift")", + { + transaktionsOid: transaktionsOid, + signatureAsBase64: dataUrl + }, + function () { + $("#transaktionsunterschriftencontainer").removeClass("d-block"); + $("#transaktionsunterschriftencontainer").addClass("d-none"); + $("#customer-container").show(); + + hideSpinner(); + }); + } + + function cancelButtonEvent(signaturePad) { + try { + var canvas = document.getElementById("transaktionsunterschriftencanvas"); + var width = canvas.getBoundingClientRect().width; + var height = canvas.getBoundingClientRect().height; + + if(width === 0 || height === 0 || signaturePad.isEmpty()) { + logInfo("width oder height sind 0 oder das SignaturePad ist leer"); + + $("#customer-container").show(); + $("#transaktionsunterschriftencontainer").removeClass("d-block"); + $("#transaktionsunterschriftencontainer").addClass("d-none"); + + signaturePad.clear(); + + return; + } + + showMessagePopupWithCallback("Unterschrift", + "Sind Sie sicher, dass Sie die Unterschrift nicht speichern möchten?", + function () { + $("#customer-container").show(); + $("#transaktionsunterschriftencontainer").removeClass("d-block"); + $("#transaktionsunterschriftencontainer").addClass("d-none"); + + signaturePad.clear(); + }, + false); + } catch (error) { + showErrorPopup(error); + } + } + } + + function clearCustomerBargeldtransaktionsForm() { + try { + $("#bargeldtransaktionsbetragsinput").val(""); + $("#bargeldtransaktionsnotizinput").val(""); + $("#bargeldtransaktionsbelegnummerinput").val(""); + + if($("#bargeldtransaktionsarten-select-input").length) { + $("#bargeldtransaktionsarten-select-input select").val("0"); + } + } catch(error) { + showErrorPopup(error); + } } function deleteZahlungsbelegsunterschrift(transaktionsOid, zahlungsdatum, betrag, zahlungstyp) { @@ -382,13 +426,13 @@ Transaktion - - @@ -617,7 +661,7 @@ @using(Html.BeginForm("DeleteBargeldkasse", "Customer", FormMethod.Post, new { id = "bargeldkassendeleteform" })) { - + } @if(AbstractModel.HasRightToCreateCustomerBargeldkassen || AbstractModel.HasRightToEditCustomerBargeldkassen) diff --git a/BeWoPlanerMobil/Views/Customer/CustomerBargeldtransaktionenFormPartial.cshtml b/BeWoPlanerMobil/Views/Customer/CustomerBargeldtransaktionenFormPartial.cshtml index f71262eb8..a3e8bf86f 100644 --- a/BeWoPlanerMobil/Views/Customer/CustomerBargeldtransaktionenFormPartial.cshtml +++ b/BeWoPlanerMobil/Views/Customer/CustomerBargeldtransaktionenFormPartial.cshtml @@ -62,27 +62,30 @@ return /^-?\d*[.,]?\d*$/.test(value); }); } - - function clearCustomerBargeldtransaktionsForm() { - try { - $("#bargeldtransaktionsbetragsinput").val(""); - $("#bargeldtransaktionsnotizinput").val(""); - $("#bargeldtransaktionsbelegnummerinput").val(""); - - if($("#bargeldtransaktionsarten-select-input").length) { - $("#bargeldtransaktionsarten-select-input select").val("0"); - } - } catch(error) { - showErrorPopup(error); - } - } - + function submitBargeldtransaktionsform() { try { if(false === validateTransaktionsForm()) { return; } + $.get("@Url.Action("CheckForExistingSignature")").success(function(hasSignature) { + if(hasSignature === "1") { + //showMessagePopupWithCallback("Warnung", "Für diese Transaktion existiert bereits eine Unterschrift. Eine Änderung löscht die Unterschrift. Möchten Sie die Transaktion ändern?", doSubmitForm, false); + $("#transaction-signature-warning-popup").modal("show"); + } else { + doSubmitForm(); + } + }); + + + } catch(error) { + showErrorPopup(error); + } + } + + function doSubmitForm() { + try { showSpinner(); var rawDate = $("#customer-bargeldtransaktionsdatum-input").val(); @@ -267,4 +270,25 @@ + + + \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml index e871c3692..a6c4236f8 100644 --- a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml +++ b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml @@ -13,12 +13,12 @@ - + @* + Einbindereihenfolge der Skripte für Bootstrap: + 1. jQuery + 2. Popper + 3. Bootstrap + *@ @@ -39,10 +39,9 @@ new Script { ExtensionSuite = ExtensionSuite.Icons }, new Script { ExtensionType = ExtensionType.WebDocumentViewer } ) - + - @**@ @@ -56,7 +55,7 @@ - + @@ -73,8 +72,7 @@ - @**@ - +