110 lines
3.9 KiB
JavaScript
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(); |