Probleme in Version 2.9.10 beim Stornieren von Belegen

Antwort erstellen

Bestätigungscode
Gib den Code genau so ein, wie du ihn siehst; Groß- und Kleinschreibung wird nicht unterschieden.
Smileys
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind eingeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Probleme in Version 2.9.10 beim Stornieren von Belegen

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von pichel » Fr 21. Nov 2025, 11:29

Moin,

ich habe heute morgen die Version 2.9.11 veröffentlicht. darin ist das Problem gelöst.

Viele Grüße,

Stefan

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von pichel » Di 18. Nov 2025, 16:27

Es ist die Stornierung von Bon und Trinkgeld. Ich werde bald eine korrigierte Version veröffentlichen

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von Christoph3751 » Di 18. Nov 2025, 15:34

Der Fehler kommt nur wenn man die Zahlung mit Wechselgeldrechner macht.
Ohne Wechselgeldrechner ist Storno ohne Fehler möglich.

LG
Christoph

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von pichel » Mo 17. Nov 2025, 21:12

Hallo,

erst mal vielen Dank für den Fehlerbericht und den Lösungsvorschlag.

Ich schlage allerdings einen anderen Weg vor. Sowie ich das im Moment sehe, habe ich in der Signatur von doCashActionCore versehentlich $allowOwnTransaction als bool deklariert, es ist aber ein int. In PHP wird ein int-Wert beim Übergeben an einen bool-Parameter automatisch in einen Boolean konvertiert.

Zum Hintergrund: Ich hatte ursprünglch noch mehr Optionen vorgesehen und deswegen wollte ich mich nicht auf einen booleschen Wert festlegen (ok, im Nachhinein hätte auch ein bool gereicht...). Mit der richtigen Signatur in bill.php sollte es jedenfalls funktionieren:

Code: Alles auswählen

public static function doCashActionCore($pdo,$money,$remark, $datetime,$userId,$cashtype,$paymentid,int $allowOwnTransactions,$checkForPermissions)
Bevor ich das in eine neue Version gieße, möchte ich es aber noch etwas mehr testen.

Gruß,

Stefan

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von MrTeufel » So 16. Nov 2025, 23:09

Fix:

Code: Alles auswählen

diff --git a/webapp/php/bill.php b/webapp/php/bill.php
index 0dc3ba15..0e705282 100755
--- a/webapp/php/bill.php
+++ b/webapp/php/bill.php
@@ -1231,9 +1231,11 @@ class Bill {
                }

                CommonUtils::log($pdo, "QUEUE", "Cash action with money '$money' at billtime '$datetime' with cashtype '$cashtype' of payment " . $paymentid);
-               if ($allowOwnTransactions == ALLOW_TRANSACTIONS) {
+               $startedTransaction = false;
+               if ($allowOwnTransactions == ALLOW_TRANSACTIONS && !$pdo->inTransaction()) {
                        CommonUtils::setTransactionSerializable($pdo);
                        $pdo->beginTransaction();
+                       $startedTransaction = true;
                }

                $nextbillid = self::testForNewBillIdAndUpdateWorkTable($pdo);
@@ -1286,12 +1288,12 @@ class Bill {

                $status = self::signValueByTseAndUpdateBill($pdo, $lastId, $signStr);
                if ($status["status"] != "OK") {
-                       if ($allowOwnTransactions == ALLOW_TRANSACTIONS) {
+                       if ($startedTransaction) {
                                $pdo->rollBack();
                                CommonUtils::resetTransactionIsolationLevel($pdo);
                        }
                }
-               if ($allowOwnTransactions == ALLOW_TRANSACTIONS) {
+               if ($startedTransaction) {
                        $pdo->commit();
                        CommonUtils::resetTransactionIsolationLevel($pdo);
                }
diff --git a/webapp/php/commonutils.php b/webapp/php/commonutils.php
index 31d2e7f9..4827747c 100755
--- a/webapp/php/commonutils.php
+++ b/webapp/php/commonutils.php
@@ -574,10 +574,16 @@ class CommonUtils {
        }

         public static function setTransactionSerializable($pdo) {
-                CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',null);
+                       if (method_exists($pdo, 'inTransaction') && $pdo->inTransaction()) {
+                               return;
+                       }
+                       CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',null);
         }
         public static function resetTransactionIsolationLevel($pdo) {
-                CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL REPEATABLE READ',null);
+                       if (method_exists($pdo, 'inTransaction') && $pdo->inTransaction()) {
+                               return;
+                       }
+                       CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL REPEATABLE READ',null);
         }

        public static function callPlugin($pdo,$fct,$condition) {

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von MrTeufel » So 16. Nov 2025, 22:41

Code: Alles auswählen

172.18.0.2 -  16/Nov/2025:21:40:52 +0000 "POST /php/contenthandler.php" 500
NOTICE: PHP message: PHP Fatal error:  Uncaught PDOException: SQLSTATE[25001]: Active sql transaction: 1568 Transaction characteristics can't be changed while a transaction is in progress in /var/www/html/webapp/php/commonutils.php:452
Stack trace:
#0 /var/www/html/webapp/php/commonutils.php(452): PDOStatement->execute()
#1 /var/www/html/webapp/php/commonutils.php(577): CommonUtils::execSql()
#2 /var/www/html/webapp/php/bill.php(1235): CommonUtils::setTransactionSerializable()
#3 /var/www/html/webapp/php/bill.php(1320): Bill::cashActionCoreTask()
#4 /var/www/html/webapp/php/bill.php(2150): Bill::doCashActionCore()
#5 /var/www/html/webapp/php/bill.php(237): Bill->cancelBill()
#6 /var/www/html/webapp/php/contenthandler.php(87): Bill->handleCommand()
#7 {main}
  thrown in /var/www/html/webapp/php/commonutils.php on line 452
172.18.0.2 -  16/Nov/2025:21:40:52 +0000 "POST /php/contenthandler.php" 200
172.18.0.2 -  16/Nov/2025:21:40:53 +0000 "POST /php/debug.php" 200

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

von MrTeufel » So 16. Nov 2025, 22:33

Bild

Probleme in Version 2.9.10 beim Stornieren von Belegen

von MrTeufel » So 16. Nov 2025, 13:47

Fehlermeldung „Serverantwort unbekannt“

https://youtube.com/shorts/CEzlMgZB0y8

Nach oben