Rechnungsmaske: "Drucken und Buchen" und Browser-Zurück entschärfen
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 26 Jan 2022 16:17:45 +0000 (17:17 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 13 Apr 2022 11:43:26 +0000 (13:43 +0200)
Wenn nach dem "Drucken und Buchen" in der Rechnungsmaske eine andere Maske
aufgerufen wird und dann mit "Browser-Zurück" wieder zur Rechnungsmaske
zurückgegangen wird, dann wird im günstigsten Fall erneut gedruckt. Es ist
aber auch schon passiert (je nach Browser-Version?), dass eine zweite Rechnung
gebucht wurde.
Nun wird durch eine Hidden-Variable verhindert, dass der submit erneut
durchgeführt wird.

Das ist nur ein Hack. Eventuell ist es besser, das resubmit umzustellen auf:
- Druckdatei generieren
- per js zum Download anbieten und update-Triggern

Da ist aber einiges zu beachten durch die verschiedenen Ausgabetypen (media)
und $form->parse_template muss so umgestellt werden, dass es die Datei nicht
an den Browser schickt.

templates/webpages/is/form_header.html

index ec575dd..b155850 100644 (file)
@@ -18,6 +18,7 @@
 <input type="hidden" name="follow_up_trans_info_1" id="follow_up_trans_info_1" value="[% HTML.escape(follow_up_trans_info) %]">
 <input type="hidden" name="follow_up_rowcount" id="follow_up_rowcount" value="1">
 <input type="hidden" name="lastmtime" id="lastmtime" value="[% HTML.escape(lastmtime) %]">
+<input type="hidden" name="already_printed_flag" id="already_printed_flag" value="0">
 
 <h1>[% title %]</h1>
 
        kivi.SalesPurchase.show_print_dialog();
        kivi.SalesPurchase.print_record();
 [% ELSIF resubmit %]
-       kivi.SalesPurchase.show_print_dialog();
-       kivi.SalesPurchase.print_record();
+       if ($('#already_printed_flag').val() === "0") {
+         kivi.SalesPurchase.show_print_dialog();
+         kivi.SalesPurchase.print_record();
+         $('#already_printed_flag').val("1");
+       }
 [% ELSIF creditwarning != '' %]
        alert('[% 'Credit Limit exceeded!!!' | $T8 %]');
 [% ELSE %]