• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

jQuery Netto zu Brutto Eintrag

The_C

Member
Hallo zusammen,
ich nutze ein jQuery-Skript zur Rechnungserstellung, das bisher in TYPO3 v12 einwandfrei funktionierte. Ursprünglich war das Skript so konzipiert, dass der Nettopreis manuell eingegeben werden musste, um daraus den Bruttopreis zu berechnen. Diesen Ablauf habe ich angepasst, sodass nun der Bruttopreis als Eingabewert dient und alle Berechnungen (inkl. Nettopreis) korrekt abgeleitet werden.
Plötzlich wirft TYPO3 nun einen Fehler, der mit dem alten Skript nie auftrat wenn ich auf den Button Rechnung erstellen klicke.
Bemerkenswert ist:
  • Die zugehörigen PHP-Dateien wurden nicht modifiziert.
  • Alle Variablen- und Funktionsnamen blieben unverändert.
  • Nur die jQuery-Logik wurde angepasst.
Frage: Wie kann es zu diesem Fehler kommen, obwohl nur die JavaScript-Logik geändert wurde? Ich bin für Ideen, Lösungsansätze oder Debugging-Hinweise dankbar.

Das ist das neue JS dazu der den Fehler Produziert:
Javascript:
/**********Rechnung Neue Version mit Mwst************************/
$("#createrechnung").submit(function (event) {
    $('.price').each(function (index, value) {
        $(this).val($(this).val().replace(',', '.'));
    });
    $('.total').each(function (index, value) {
        $(this).val($(this).val().replace(',', '.'));
    });
});

var i = 1;
$("#add_row").click(function () {
    b = i - 1;
    var contentAppend = '<td>' + (i + 1) + '</td><td><input placeholder="Text" class="form-control" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][leistung]" type="text"></td><td><input placeholder="0" class="form-control qty" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][anzahl]" type="text"></td><td><input placeholder="0,00" class="form-control price" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][einzelpreisohnemwst]" type="text"></td><td><input readonly="readonly" placeholder="0,00" class="form-control total" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][totalohnemwst]" type="text"></td>';
    $('#tab_logic').append('<tr id="addr' + i + '">' + contentAppend + '</tr>');
    i++;
});

$("#delete_row").click(function () {
    if (i > 1) {
        $("#addr" + (i - 1)).html('');
        i--;
    }
    calc();
});

$('#tab_logic tbody').on('keyup change', function () {
    calc();
});

$('#tax').on('keyup change', function () {
    calc_total();
});

function calc() {
    $('#tab_logic tbody tr').each(function (i, element) {
        var html = $(this).html();
        if (html != '') {
            var qty = $(this).find('.qty').val();
            var bruttoPrice = $(this).find('.price').val(); // Eingabe ist jetzt Bruttopreis
            var total = 0.0;

            // Umrechnung Brutto -> Netto
            bruttoPrice = bruttoPrice.replace(',', '.');
            var taxRate = parseFloat($('#tax').val()) || 0;
            var price = bruttoPrice / (1 + (taxRate / 100)); // price enthält jetzt Nettopreis

            total = price * qty;
            $(this).find('.total').val(total.toFixed(2).replace('.', ','));

            calc_total();
        }
    });
}

function calc_total() {
    total = 0;
    $('.total').each(function () {
        total += parseFloat($(this).val().replace(',', '.'));
    });
    tax_sum = total * parseFloat($('#tax').val()) / 100;
    $('#sub_total').val(total.toFixed(2).replace('.', ','));

    $('#tax_amount').val(tax_sum.toFixed(2).replace('.', ','));
    $('#total_amount').val((tax_sum + total).toFixed(2).replace('.', ','));
}


Und das ist das alte JS hier wird kein Fehler ausgegeben funktioniert:
Javascript:
/************Rechnung Alte Version ohne Mwst. ************************/
$("#createrechnung").submit(function (event) {

    // DEBUG: Ausgabe aller Formularfelder
    // console.log("Formularfelder vor Submit:", $(this).serializeArray());

    $('.price').each(function (index, value) {
        $(this).val($(this).val().replace(',', '.'));
    });
    $('.total').each(function (index, value) {
        $(this).val($(this).val().replace(',', '.'));
    });

    // DEBUG: Ausgabe nach Komma-Ersetzung
    // console.log("Formularfelder nach Komma-Ersetzung:", $(this).serializeArray());

    // event.preventDefault(); // DEBUG: Zum Testen auskommentieren

});

var i = 1;
$("#add_row").click(function () {
    b = i - 1;
    var contentAppend = '<td>' + (i + 1) + '</td><td><input placeholder="Text" class="form-control" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][leistung]" type="text"></td><td><input placeholder="0" class="form-control qty" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][anzahl]" type="text"></td><td><input placeholder="0,00" class="form-control price" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][einzelpreisohnemwst]" type="text"></td><td><input readonly="readonly" placeholder="0,00" class="form-control total" name="tx_rcterminplaner_rctermine[newRechnungen][leistungen][' + i + '][totalohnemwst]" type="text"></td>';
    $('#tab_logic').append('<tr id="addr' + i + '">' + contentAppend + '</tr><tr id="addr' + i + '"></tr>');
    i++;
});
$("#delete_row").click(function () {
    if (i > 1) {
        $("#addr" + (i - 1)).html('');
        i--;
    }
    calc();
});

$('#tab_logic tbody').on('keyup change', function () {
    calc();
});
$('#tax').on('keyup change', function () {
    calc_total();
});

function calc() {
    $('#tab_logic tbody tr').each(function (i, element) {
        var html = $(this).html();
        if (html != '') {
            var qty = $(this).find('.qty').val();
            var price = $(this).find('.price').val();
            var total = 0.0;

            price = price.replace(',', '.');
            total = price * qty;
            $(this).find('.total').val(total.toFixed(2).replace('.', ','));

            calc_total();
        }
    });
}

function calc_total() {
    total = 0;
    $('.total').each(function () {
        total += parseFloat($(this).val().replace(',', '.'));
    });
    tax_sum = total / 100 * $('#tax').val();
    $('#sub_total').val(total.toFixed(2).replace('.', ','));

    $('#tax_amount').val(tax_sum.toFixed(2));
    $('#total_amount').val((tax_sum + total).toFixed(2).replace('.', ','));
}

Und das ist der Fehler den mir T3 ausgibt:

(1/1) #1255072832 TYPO3\CMS\Extbase\Security\Exception\InvalidArgumentForHashGenerationExceptionThe form field "tx_rcterminplaner_rctermine[newRechnungen][termine][][]" is invalid. Reason: "[]" used not as last argument, but somewhere in the middle (like foo[][bar]).


Im T3 Forum bekomme ich leider keine Hilfe weil das ein jQuery Code ist hoffe Ihr könnt mich da mehr beraten Ihr seit die JS Experten ich habe leider zu wenig Ahnung von dem ganzen.

Danke schon mal im voraus für Eure Hilfe!
 

Anhänge

  • Bildschirmfoto 2025-05-07 um 12.46.09.jpg
    Bildschirmfoto 2025-05-07 um 12.46.09.jpg
    46 KB · Aufrufe: 0
Zurück
Oben