1. GetStatus auf type=1 geändert.
2. Bei den Bargeldkassen Bugs gefixt (ist noch nicht fertig).
3. Fehler bezüglich jsonResult in mobileUtils.js gefixt.
4. Meldung bei Login wegen GetStatus eingebaut.
This commit is contained in:
2024-03-01 16:59:35 +01:00
parent 3ab5968cb9
commit 2663ce41ce
9 changed files with 380 additions and 231 deletions

View File

@@ -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

View File

@@ -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";

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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 @@
<i class="fas fa-plus"></i>
Transaktion
</button>
<button class="btn btn-outline-primary" title="Kassenbuch Bearbeiten" type="button" modal="#customer-bargeldkassen-form-popup" onclick="editBtnClickTest(@bargeldkasse.BargeldkassenOid, '@bargeldkasse.Kassenname')">
<button class="btn btn-outline-primary" title="Kassenbuch Bearbeiten" type="button" modal="#customer-bargeldkassen-form-popup" onclick="editBtnClickTest(@bargeldkasse.BargeldkassenOid, `@bargeldkasse.Kassenname`)">
<i class="fas fa-edit"></i>
</button>
<button class="btn btn-outline-primary" title="Kassenbuch drucken" type="button" onclick="previewBargeldkassenReport(@bargeldkasse.BargeldkassenOid)">
<i class="fas fa-file-download"></i>
</button>
<button class="btn btn-outline-danger" title="Kassenbuch löschen" type="button" onclick="deleteBtnClickTest(@bargeldkasse.BargeldkassenOid, '@bargeldkasse.Kassenname')">
<button class="btn btn-outline-danger" title="Kassenbuch löschen" type="button" onclick="deleteBtnClickTest(@bargeldkasse.BargeldkassenOid, `@bargeldkasse.Kassenname`)">
<i class="fas fa-trash-alt"></i>
</button>
</div>
@@ -617,7 +661,7 @@
@using(Html.BeginForm("DeleteBargeldkasse", "Customer", FormMethod.Post, new { id = "bargeldkassendeleteform" }))
{
<input type="hidden" id="bk-to-delete-oid" />
<input type="hidden" id="bk-to-delete-oid" name="bk-to-delete-oid" />
}
@if(AbstractModel.HasRightToCreateCustomerBargeldkassen || AbstractModel.HasRightToEditCustomerBargeldkassen)

View File

@@ -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 @@
</div>
</div>
</div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="transaction-signature-warning-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"></h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="modal-body">
Diese Transaktion wurde bereits unterschrieben. Eine Änderung wird die Unterschrift ungültig machen und zur Löschung derselben führen!
Möchten Sie wirklich die Transaktion ändern?
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal" onclick="doSubmitForm()">Ja</button>
<button class="btn btn-secondary" type="button" data-dismiss="modal" onclick="">Abbrechen</button>
</div>
</div>
</div>
</div>

View File

@@ -13,12 +13,12 @@
<script defer src="~/Content/fontawesome/all.min.js"></script>
<!--
Einbindereihenfolge der Skripte für Bootstrap:
1. jQuery
2. Popper
3. Bootstrap
-->
@*
Einbindereihenfolge der Skripte für Bootstrap:
1. jQuery
2. Popper
3. Bootstrap
*@
<link href="@Url.Content("~/node_modules/jquery-ui/dist/themes/base/jquery-ui.min.css")" rel="stylesheet" type="text/css" />
@@ -39,10 +39,9 @@
new Script { ExtensionSuite = ExtensionSuite.Icons },
new Script { ExtensionType = ExtensionType.WebDocumentViewer }
)
<script type="text/javascript" src="@Url.Content("~/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js")"></script>
@*<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" />*@
<link rel="stylesheet" href="~/Content/style.css" />
<link rel="stylesheet" href="@Url.Content("~/Content/tempusdominus-bootstrap-4.min.css")" />
@@ -56,7 +55,7 @@
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/group-booking.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/view-scripts/main.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/signature.js")" type="text/javascript"></script>
<link rel="stylesheet" href="@Url.Content("~/node_modules/bootstrap4-fullscreen-modal/dist/bootstrap4-modal-fullscreen.min.css")" />
@@ -73,8 +72,7 @@
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/js-helper.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/logging.js")" type="text/javascript"></script>
@*<script src="@Url.Content("~/Scripts/ownSoft-Scripts/utils/password-security.js")" type="text/javascript"></script>*@
<script type="text/javascript">
class PasswordSecurity {
numbers = "0123456789";
@@ -103,19 +101,19 @@
}
validatePassword(password) {
if (false === isUndefinedOrNull(password) && password.length > 0) {
if(false === isUndefinedOrNull(password) && password.length > 0) {
var sx = "";
var passwordStrength = -1;
for (var i = 0; i < password.length; i++) {
for(var i = 0; i < password.length; i++) {
sx += password[i];
if (sx.length < this.partialPassword.length) {
if(sx.length < this.partialPassword.length) {
this.isPartial = true;
this.passwordLengthDifference = this.partialPassword.length - sx.length;
}
if (this.partialPassword !== sx) {
if(this.partialPassword !== sx) {
this.partialPassword = sx;
}
@@ -133,7 +131,7 @@
}
getIntegerFromArray(arr, index) {
if (arr === undefined || arr === null || arr.length < index) {
if(arr === undefined || arr === null || arr.length < index) {
return 0;
}
@@ -143,7 +141,7 @@
}
getLastValue() {
if (this.previousValues === undefined || this.previousValues === null || this.previousValues.length === 0) {
if(this.previousValues === undefined || this.previousValues === null || this.previousValues.length === 0) {
return 0;
}
@@ -154,12 +152,12 @@
var passwordStrength = 0;
this.previousValue = 0;
if (this.isPartial === true) {
if (this.passwordLengthDifference === 1) {
if(this.isPartial === true) {
if(this.passwordLengthDifference === 1) {
this.score -= this.getLastValue();
this.previousValues.pop();
} else {
for (var i = 0; i < this.passwordLengthDifference; i++) {
for(var i = 0; i < this.passwordLengthDifference; i++) {
this.score -= this.getLastValue();
this.previousValues.pop();
}
@@ -169,25 +167,25 @@
} else {
var passwordLength = passwordToValidate.length;
if (passwordLength >= 6 && passwordLength < 9) {
if(passwordLength >= 6 && passwordLength < 9) {
this.score += 1;
this.previousValue = 1;
this.schalter = true;
}
if (passwordLength >= 9 && passwordLength < 12) {
if(passwordLength >= 9 && passwordLength < 12) {
this.score += 2;
this.previousValue = 2;
this.schalter = true;
}
if (passwordLength >= 12 && passwordLength < 18) {
if(passwordLength >= 12 && passwordLength < 18) {
this.score += 3;
this.previousValue = 3;
this.schalter = true;
}
if (passwordLength >= 18) {
if(passwordLength >= 18) {
this.score += 4;
this.previousValue = 4;
this.schalter = true;
@@ -197,8 +195,8 @@
// Zahlen
var containsNumbers = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.numbers.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.numbers.includes(passwordAsArray[i])) {
containsNumbers = true;
break;
}
@@ -206,8 +204,8 @@
// Kleinbuchstaben
var containsLowercaseLetters = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.lowercaseLetters.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.lowercaseLetters.includes(passwordAsArray[i])) {
containsLowercaseLetters = true;
break;
}
@@ -215,8 +213,8 @@
// Großbuchstaben
var containsUppercaseLetters = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.uppercaseLetters.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.uppercaseLetters.includes(passwordAsArray[i])) {
containsUppercaseLetters = true;
break;
}
@@ -224,8 +222,8 @@
// Kleinumlaute
var containsLowercaseUmlauts = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.lowercaseUmlauts.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.lowercaseUmlauts.includes(passwordAsArray[i])) {
containsLowercaseUmlauts = true;
break;
}
@@ -233,8 +231,8 @@
// Großumlaute
var containsUppercaseUmlauts = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.uppercaseUmlauts.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.uppercaseUmlauts.includes(passwordAsArray[i])) {
containsUppercaseUmlauts = true;
break;
}
@@ -242,105 +240,105 @@
// Sonderzeichen 1
var containsSpecialCharacters1 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars1.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.specialChars1.includes(passwordAsArray[i])) {
containsSpecialCharacters1 = true;
break;
}
}
var containsSpecialCharacters2 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars2.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.specialChars2.includes(passwordAsArray[i])) {
containsSpecialCharacters2 = true;
break;
}
}
var containsSpecialCharacters3 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars3.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.specialChars3.includes(passwordAsArray[i])) {
containsSpecialCharacters3 = true;
break;
}
}
var containsSpecialCharacters4 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars4.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.specialChars4.includes(passwordAsArray[i])) {
containsSpecialCharacters4 = true;
break;
}
}
var containsSpecialCharacters5 = false;
for (var i = 0; i < passwordAsArray.length; i++) {
if (this.specialChars5.includes(passwordAsArray[i])) {
for(var i = 0; i < passwordAsArray.length; i++) {
if(this.specialChars5.includes(passwordAsArray[i])) {
containsSpecialCharacters5 = true;
break;
}
}
if (containsNumbers === true) {
if(containsNumbers === true) {
this.addScoreValue(3);
}
if (containsLowercaseLetters === true) {
if(containsLowercaseLetters === true) {
this.addScoreValue(2);
}
if (containsUppercaseLetters === true) {
if(containsUppercaseLetters === true) {
this.addScoreValue(3);
}
if (containsLowercaseUmlauts === true) {
if(containsLowercaseUmlauts === true) {
this.addScoreValue(2);
}
if (containsUppercaseUmlauts === true) {
if(containsUppercaseUmlauts === true) {
this.addScoreValue(2);
}
if (containsSpecialCharacters1 === true) {
if(containsSpecialCharacters1 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters2 === true) {
if(containsSpecialCharacters2 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters3 === true) {
if(containsSpecialCharacters3 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters4 === true) {
if(containsSpecialCharacters4 === true) {
this.addScoreValue(4);
}
if (containsSpecialCharacters5 === true) {
if(containsSpecialCharacters5 === true) {
this.addScoreValue(4);
}
this.previousValues.push(this.previousValue);
}
if (this.score <= 15) {
if(this.score <= 15) {
passwordStrength = 0;
}
if (this.score > 15 && this.score <= 55) {
if(this.score > 15 && this.score <= 55) {
passwordStrength = 1;
}
if (this.score > 55 && this.score <= 115) {
if(this.score > 55 && this.score <= 115) {
passwordStrength = 2;
}
if (this.score > 115 && this.score <= 155) {
if(this.score > 115 && this.score <= 155) {
passwordStrength = 3;
}
if (this.score > 155) {
if(this.score > 155) {
passwordStrength = 4;
}
@@ -348,13 +346,13 @@
}
addScoreValue(defaultValue) {
if (defaultValue === undefined || defaultValue === null || false === $.isNumeric(defaultValue)) {
if(defaultValue === undefined || defaultValue === null || false === $.isNumeric(defaultValue)) {
return;
}
this.score += defaultValue;
if (this.schalter === true) {
if(this.schalter === true) {
this.previousValue += defaultValue;
} else {
this.previousValue = defaultValue;
@@ -364,42 +362,42 @@
displayPasswordStrength(passwordStrength) {
var passwordLabel = $("#" + this.passwordLabelId);
if (passwordStrength === undefined || !$.isNumeric(passwordStrength) || !passwordLabel.length) {
if(passwordStrength === undefined || !$.isNumeric(passwordStrength) || !passwordLabel.length) {
return;
}
passwordLabel.removeClass("text-success text-danger text-warning");
switch (passwordStrength) {
case -1:
passwordLabel.addClass("d-none");
passwordLabel.html("");
break;
case 0:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Sehr schwach");
passwordLabel.addClass("text-danger");
break;
case 1:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Schwach");
passwordLabel.addClass("text-danger");
break;
case 2:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Mittel");
passwordLabel.addClass("text-warning");
break;
case 3:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Stark");
passwordLabel.addClass("text-success");
break;
case 4:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Sehr stark");
passwordLabel.addClass("text-success");
break;
switch(passwordStrength) {
case -1:
passwordLabel.addClass("d-none");
passwordLabel.html("");
break;
case 0:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Sehr schwach");
passwordLabel.addClass("text-danger");
break;
case 1:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Schwach");
passwordLabel.addClass("text-danger");
break;
case 2:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Mittel");
passwordLabel.addClass("text-warning");
break;
case 3:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Stark");
passwordLabel.addClass("text-success");
break;
case 4:
passwordLabel.removeClass("d-none");
passwordLabel.html("Passwortstärke: Sehr stark");
passwordLabel.addClass("text-success");
break;
}
}
}

View File

@@ -5870,12 +5870,28 @@ namespace BeWo.Data.Access
public Signature LoadSignatureByTransaktionsOid(long transaktionsOid)
{
var criteria = CreateCriteriaIsActive<Signature>()
var criteria = CreateCriteria<Signature>()
.Add(Restrictions.Eq(nameof(Signature.BargeldtransaktionsOid), transaktionsOid));
return criteria.List<Signature>().FirstOrDefault();
}
public List<long> LoadSignatureOidsByTransaktionOid(long transactionOid)
{
var criteria = CreateCriteria<Signature>()
.Add(Restrictions.Eq(nameof(Signature.BargeldtransaktionsOid), transactionOid));
return criteria.List<Signature>().Select(s => s.Oid.Value).ToList();
}
public List<Signature> LoadSignaturesByTransactionOids(List<long> transactionOids)
{
var criteria = CreateCriteria<Signature>()
.Add(Restrictions.In(nameof(Signature.BargeldtransaktionsOid), transactionOids));
return criteria.List<Signature>().ToList();
}
public List<Bargeldtransaktionshistory> LoadBargeldtransaktionshistoryEntries(long transaktionsOid)
{
var criteria = CreateCriteria<Bargeldtransaktionshistory>()

View File

@@ -4108,6 +4108,7 @@ namespace BeWo.Service.ServiceImplementations
{
if(originalTransaction.SignatureOid.HasValue)
{
signatureOids2Delete.AddRangeIfElementsNotIn(DAOFactory.SearchDAO.LoadSignatureOidsByTransaktionOid(originalTransaction.BargeldtransaktionOid.Value));
signatureOids2Delete.AddIfNotIn(originalTransaction.SignatureOid.Value);
}
@@ -4129,14 +4130,20 @@ namespace BeWo.Service.ServiceImplementations
{
var newSignatureState = SignatureStateType.None;
// Wenn die Transaktion eine Unterschrift vor der Änderung hatte, wird diese als ungültig gespeichert und die Transaktion gelöscht.
// Wenn die Transaktion eine Unterschrift vor der Änderung hatte, wird diese als ungültig gespeichert und gelöscht.
if(changedOrDeletedTransactionDC.SignatureOid.HasValue)
{
newSignatureState = SignatureStateType.Invalid;
if(originalTransaction.BargeldtransaktionOid.HasValue)
{
deletedOids.AddIfNotIn(originalTransaction.BargeldtransaktionOid.Value);
}
signatureOids2Delete.AddRangeIfElementsNotIn(DAOFactory.SearchDAO.LoadSignatureOidsByTransaktionOid(changedOrDeletedTransactionDC.BargeldtransaktionOid.Value));
signatureOids2Delete.AddIfNotIn(changedOrDeletedTransactionDC.SignatureOid.Value);
changedOrDeletedTransactionDC.SignatureOid = null;
}
// Die Unterschrift wurde gelöscht
else if(changedOrDeletedTransactionDC.SignatureOid is null && originalTransaction.SignatureOid.HasValue)
{
signatureOids2Delete.AddRangeIfElementsNotIn(DAOFactory.SearchDAO.LoadSignatureOidsByTransaktionOid(changedOrDeletedTransactionDC.BargeldtransaktionOid.Value));
newSignatureState = SignatureStateType.ManuallyDeleted;
}
oids2ChangeTypes.AddIfNotIn(new KeyValuePair<long, KeyValuePair<StatementType, SignatureStateType>>(
@@ -4152,6 +4159,7 @@ namespace BeWo.Service.ServiceImplementations
var deletedTransactions = DAOFactory.GenericDAO.LoadByIDs<Bargeldtransaktion>(deletedOids);
var signatures2Delete = new List<Signature>();
// Die Transaktion wurde gelöscht
foreach(var deletedTransaction in deletedTransactions)
{
var signatureStateType = SignatureStateType.None;
@@ -4167,19 +4175,19 @@ namespace BeWo.Service.ServiceImplementations
transactionHistoryEntries.Add(CreateTransactionHistoryObject(deletedTransaction, StatementType.Delete, signatureStateType));
}
MapperFactory.BargeldkassenDCBargeldkasseDC_BargeldkassenDCBargeldkasse.MergeWithEntity(pBargeldkasse, lOriginal);
var newTransactions = lOriginal.Bargeldtransaktionen.Where(transaction => transaction.Oid is null).ToList();
DAOFactory.GenericDAO.Update(lOriginal);
// Nach dem Insert der neuen Transaktionen haben diese eine Oid und es können die History-Einträge gemacht werden
foreach(var newTransaction in newTransactions)
{
transactionHistoryEntries.Add(CreateTransactionHistoryObject(newTransaction, StatementType.Insert, SignatureStateType.None));
}
// Die History-Einträge für die bearbeiteten werden gemacht
foreach(var oid2ChangeTypes in oids2ChangeTypes)
{
var editedTransaction = lOriginal.Bargeldtransaktionen.FirstOrDefault(transaction => transaction.Oid.HasValue && transaction.Oid.Value.Equals(oid2ChangeTypes.Key));
@@ -4194,7 +4202,9 @@ namespace BeWo.Service.ServiceImplementations
DAOFactory.GenericDAO.Insert(transactionHistoryEntries);
DAOFactory.GenericDAO.Delete(DAOFactory.GenericDAO.LoadByIDs<Signature>(signatures2Delete.Where(s => s.Oid.HasValue).Select(s => s.Oid.Value)));
signatureOids2Delete.AddRangeIfElementsNotIn(signatures2Delete.Where(s => s.Oid.HasValue).Select(s => s.Oid.Value));
DAOFactory.GenericDAO.Delete(DAOFactory.GenericDAO.LoadByIDs<Signature>(signatureOids2Delete));
return MapperFactory.BargeldkassenDCBargeldkasseDC_BargeldkassenDCBargeldkasse.MapToNewDC(lOriginal);
}
@@ -4224,9 +4234,7 @@ namespace BeWo.Service.ServiceImplementations
{
var bargeldkasse = DAOFactory.GenericDAO.LoadByID<Bargeldkasse>(pOid);
var signatureOids2Delete = bargeldkasse.Bargeldtransaktionen.Where(transaction => transaction.SignatureOid.HasValue).Select(transaction => transaction.SignatureOid.Value).ToList();
var signatures2Delete = DAOFactory.GenericDAO.LoadByIDs<Signature>(signatureOids2Delete);
var signatures2Delete = DAOFactory.SearchDAO.LoadSignaturesByTransactionOids(bargeldkasse.Bargeldtransaktionen.Where(transaction => transaction.SignatureOid.HasValue).Select(transaction => transaction.SignatureOid.Value).ToList());
var historyEntries = new List<Bargeldtransaktionshistory>();
@@ -4241,6 +4249,15 @@ namespace BeWo.Service.ServiceImplementations
DAOFactory.GenericDAO.Insert(historyEntries);
ServiceLogic.SetActivationType<Bargeldkasse>(new Dictionary<long, long> { { pOid, pVersion } }, ActivationTypeId.Deleted);
// SignatureOids aus den Transaktionen löschen, da die Signature-Objekte gelöscht wurden
bargeldkasse = DAOFactory.GenericDAO.LoadByID<Bargeldkasse>(pOid);
foreach(var transaction in bargeldkasse.Bargeldtransaktionen)
{
transaction.SignatureOid = null;
}
DAOFactory.GenericDAO.Update(bargeldkasse);
}
catch (Exception e)
{