2024-05-29 22:23:51 +02:00

110 lines
3.9 KiB
JavaScript

import { fetchData, postData, putData, deleteData } from "./api.js";
const urlParams = new URLSearchParams(window.location.search);
let accounts = [];
let editAccount = null;
function start() {
fetchData("accounts").then((data) => {
extractAccounts(data, "");
const selectElement = document.getElementById("account-select");
accounts.forEach(element => {
const option = document.createElement("option");
option.text = `${element.id} - ${element.name}`;
option.value = element.value;
selectElement.append(option);
});
// Prüft ob ein Paramter vorhanden ist, wenn ja dann wird das Konto geladen und die Daten zum bearbeiten befüllt
if (urlParams.get('account')) {
fetchData(`accounts/${urlParams.get('account')}`).then((data) => {
document.getElementById("number").value = data.number;
document.getElementById("name").value = data.name;
document.getElementById("description").value = data.description ? data.description : "";
document.getElementById("type").value = data.type;
document.getElementById("account-select").value = data.qualifiedName.replace(`:${data.name}`, "");
console.log(data.qualifiedName.replace(`:${data.name}`, ""))
editAccount = data;
document.getElementById("submit").value = "speichern";
document.getElementById("delete").style.display = "block";
});
}
});
}
/**
* Extrahiert die Kontodetails/namen und erstellt dazu ein neues Array
* @param {array} data
* @param {string} parentName
*/
function extractAccounts(data, parentName) {
data.forEach(element => {
let parentAccount = element.name;
if (parentName !== "")
parentAccount = `${parentName}:${parentAccount}`
accounts.push({ id: element.number, name: element.name, value: parentAccount });
if (element.subaccounts.length > 0) {
extractAccounts(element.subaccounts, parentAccount);
}
});
}
/**
* Eventhandler um den Vorgang abzubrechen und zurück zu Startseite zu navigieren
*/
document.getElementById("cancel").addEventListener("click", () => {
window.location.href = "../index.html";
});
/**
* Eventhandler um ein Konto zu löschen
*/
document.getElementById("delete").addEventListener("click", () => {
if (editAccount && editAccount.entries.length > 0) {
alert("Löschen nur möglich, wenn keine Buchungen stattgefunden haben und keine Unterkonten existieren");
return;
}
deleteData(`accounts/${urlParams.get('account')}`).then((response) => {
if (response)
window.location.href = "../index.html";
});
});
/**
* Eventhandler um ein neues Konto anzulegen bzw. das Konto zu bearbeiten
*/
document.getElementById("submit").addEventListener("click", () => {
if (editAccount && editAccount.entries.length > 0) {
alert("Accountbearbeitung nur möglich, wenn keine Buchungen stattgefunden haben");
return;
}
const number = document.getElementById("number").value;
const name = document.getElementById("name").value;
const description = document.getElementById("description").value;
const type = document.getElementById("type").value;
const parentAccount = document.getElementById("account-select").value;
const data = {
"number": Number.parseInt(number),
"name": name,
"description": description,
"type": type,
"parentAccount": parentAccount
}
if (editAccount) {
putData(`accounts/${urlParams.get('account')}`, data).then((response) => {
if (response)
window.location.href = "../index.html";
});
} else {
postData("accounts", data).then((response) => {
if (response)
window.location.href = "../index.html";
});
}
});
start();