document.addEventListener("DOMContentLoaded", function(event) { document.myModal = document.getElementById('mymodal'); document.myModalDelete = document.getElementById('mymodalDelete'); document.myModalDelete.addEventListener('show.bs.modal', function (event) { var button = event.relatedTarget; var id = button.getAttribute('data-bs-id'); var tab = button.getAttribute('data-bs-table'); document.myModalDelete.setAttribute('data-bs-id',id); document.myModalDelete.setAttribute('data-bs-table',tab); }); document.myModal.addEventListener('show.bs.modal', function (event) { var button = event.relatedTarget; var id = button.getAttribute('data-bs-id'); var tab = button.getAttribute('data-bs-table'); document.myModal.setAttribute('data-bs-id',id); document.myModal.setAttribute('data-bs-table',tab); }); document.getElementById('modal_delete').addEventListener('click', deleteEntry ); var event = new Event('change'); switchMulti(); // dropdown elemente anpassen wenn parent sich ändert document.querySelectorAll(".parent").forEach((papa) => { papa.addEventListener("change", hdlDropDownChange); }); document.querySelectorAll(".dt-amount.input,.dt-amount.output , .dt-subamount").forEach((amount) => { amount.addEventListener("change", hdlAmountChange); amount.dispatchEvent(event); }); document.querySelectorAll(".dt-amount.input,.dt-amount.output,.dt-subamount, .parent").forEach((amount) => { amount.addEventListener("focus", hdlValidityStateLine); }); const form = document.getElementById('newbill'); form.addEventListener('formdata', function(event) { const formData = event.formData; formData.set('validate', formData.has('validate') ? '1' : '0'); // console.log(formData); }); }); function loadPage(ev){ let url = ev.relatedTarget.getAttribute('url'); window.location.href="url"; } function switchMulti(){ //const multi = document.getElementById("multi"); if (document.getElementById("linecont").childElementCount>1) { document.getElementById("multiadd").text = "+Zeile"; const singles = document.querySelectorAll(".single").forEach((single) => { single.classList.add("d-none"); }); const multis = document.querySelectorAll(".multi").forEach((multi) => { multi.classList.remove("d-none"); }); // addLine(); } else { document.getElementById("multiadd").text = "Multi"; const singles = document.querySelectorAll(".single").forEach((single) => { single.classList.remove("d-none"); }); const multis = document.querySelectorAll(".multi").forEach((ele) => { ele.classList.add("d-none"); }); } } function recalcRow(einnahme, ausgabe){ let value = einnahme.value - ausgabe.value; if (value < 0) { ausgabe.value = convertOutput(value *(-1)); einnahme.value = ''; } else { einnahme.value = convertOutput(value); ausgabe.value = ''; } } function hdlAmountChange(event) { var temp = convertInput(event.target.value); event.target.value = convertOutput(temp); let zeile = event.target.parentElement.parentElement; var einnahme = zeile.querySelector(".input"); var ausgabe = zeile.querySelector(".output"); if (event.target.classList.contains("input")) { if ( ausgabe.value !== '') recalcRow(einnahme,ausgabe); }else { if ( einnahme.value !== '') recalcRow(einnahme, ausgabe); } calcAmount(); if (document.getElementById("linecont").childElementCount>1) { recalcOpenAmount(); } } function hdlDropDownChange(event) { var $sub = event.target.parentElement.parentElement.querySelector(".sub"); while ($sub.options.length) { $sub.remove(0); } var output = ''; var liste = subsdata[(event.target.value=="")?0:event.target.value]; var sort = Object.entries(liste).sort((a, b) => (a[1] > b[1]) ? 1 : (b[1] > a[1]) ? -1 : 0); sort.forEach((value) => { output += ''; }); $sub.innerHTML = output; } function hdlValidityState(ev){ form = document.getElementById("newbill"); this.classList.remove("is-invalid"); this.setCustomValidity(""); form.classList.remove('was-validated'); } function hdlValidityStateLine(ev){ let form = document.getElementById("newbill"); if (form.classList.contains('was-validated')) { //ev.target.parentNode.parentNode //document.getElementById("linecont"). form.querySelectorAll(".dt-amount, .dt-subamount, .parent, .sub").forEach((amount) => { amount.setCustomValidity(""); amount.classList.remove("is-invalid"); amount.classList.remove("is-valid"); }); form.classList.remove('was-validated'); } } function logData(event) { var data = document.getElementById("billfile"); console.log(data.value); } function addLine() { //let ele =document.querySelector("#linecont > div:last-child"); var clonedDiv = document.getElementById("template").cloneNode(true); clonedDiv.removeAttribute("id"); clonedDiv.classList.remove("d-none"); clonedDiv.querySelector(".parent").addEventListener("change", hdlDropDownChange); clonedDiv.querySelectorAll(".dt-subamount").forEach((amount) => { amount.addEventListener("change", hdlAmountChange); }); clonedDiv.querySelectorAll(".dt-subamount, .parent").forEach((amount) => { amount.addEventListener("focus", hdlValidityStateLine); }); document.getElementById("linecont").appendChild(clonedDiv); if (document.getElementById("linecont").childElementCount==2){ switchMulti(); } } function removeBillFile(e) { e.classList.add("d-none"); document.getElementById("billfile").classList.remove("d-none"); const billFile = document.getElementById("billfileRef"); const form = document.getElementById('newbill'); var DOB = document.createElement("input"); DOB.setAttribute("name", "removeBillFile"); DOB.setAttribute("value", billFile.innerText); DOB.setAttribute("type", "hidden"); form.appendChild(DOB); billFile.innerText = "REMOVED FILE: "+billFile.innerText; billFile.classList.add("text-decoration-line-through"); billFile.classList.add("text-danger"); billFile.removeAttribute("href"); } function convertInput(number) { var zahl = number.replace(/\,/g, "."); var czahl = eval(zahl); return czahl; } function convertOutput(number) { if (typeof number !== 'undefined') { var string = number.toFixed(2); return string.replace(/\,/g, "."); } else return ""; } function calcAmount() { //let amount = convertInput(document.getElementsByName("amount")[0].value); let amount = 0.0; document.querySelectorAll(".dt-subamount").forEach((subamount) => { var b = convertInput(subamount.value); if (typeof b !== 'undefined') { b = subamount.classList.contains("output") ? b * (-1) : b; amount = amount + b; } }); document.getElementsByName("amount")[0].value = convertOutput(amount); } function recalcOpenAmount() { form = document.getElementById('newbill'); let summe = convertInput(document.getElementsByName("amount")[0].value); console.log("Re calculating open amount"); var total_in = convertInput(document.getElementById("total_in").value || "0.0"); var total_out = convertInput(document.getElementById("total_out").value || "0.0"); let val = convertOutput(Math.round((total_in - total_out - summe) * 100) / 100); if (parseFloat(val) !== 0.0){ setValState(form.openamount,"Muss 0 sein"); } else { setValState(form.openamount,"Muss 0 sein",true); } document.getElementById("openamount").value = val; } function setValState(ele, message,valid=false){ if (valid){ ele.classList.add("is-valid"); ele.classList.remove("is-invalid"); ele.setCustomValidity(""); } else { ele.classList.add("is-invalid"); ele.classList.remove("is-valid"); ele.setCustomValidity(message); } } function checkForm(e,form) { const subinputs = form.elements; //for new transfer if (form.receiver.value =='' && form.transfer.value) form.receiver.value = subinputs['parent_id[]'].selectedOptions[0].text+"-"+subinputs['account_id[]'].selectedOptions[0].text; if (!form.total_in.parentElement.parentElement.classList.contains("d-none")) { //Gesamtbetrag fehlt if ((form.total_in.value == "" ) && (form.total_out.value == "")) { if (parseFloat(form.amount.value) > 0.0){ setValState(form.total_in, "Notwendig"); } else { setValState(form.total_out, "Notwendig"); } } //Restbetrag if (parseFloat(form.openamount.value) !== 0.0){ setValState(form.openamount, "Offener Betrag!"); form.openamount.readOnly = false; }else{ setValState(form.openamount, "Offener Betrag!",true); } subinputs['account_id[]'].forEach((line,index) => { //wenn Kategorie gewählt muss Betrag da sein if (line.value > 0){ if (!((parseFloat(subinputs['output[]'][index].value) > 0.0) || (parseFloat(subinputs['input[]'][index].value) > 0.0))){ setValState(subinputs['output[]'][index],"Notwendig"); setValState(subinputs['input[]'][index],"Notwendig"); } else { setValState(subinputs['output[]'][index],"Notwendig",true); setValState(subinputs['input[]'][index],"Notwendig",true); } } else if ((subinputs['output[]'][index].value !=="") || (subinputs['input[]'][index].value !=="")){ setValState(line,"Notwendig"); setValState(subinputs['parent_id[]'][index],"Notwendig"); } else { setValState(line,"Notwendig",true); setValState(subinputs['parent_id[]'][index],"Notwendig",true); } }); } if (!form.checkValidity()) { e.preventDefault(); e.stopPropagation(); form.openamount.readOnly = true; } form.classList.add('was-validated'); }