Preis on the fly erzeugen

Hallo, in meinem Shop werden nur Softwarelizenzen verkauft und wenn jemand für sein Produkt ein Upgrade bestellt, soll der bereits gezahlte Zeitraum mit der Bestellung verrechnet werden was vom Ablaufdatum der Lizenz und den Bestelldatum abhängt. Unter Hook für coreklasse gibt es ein Beispiel daß den Preis ändert, ich habe aber noch “sCalculatingPrice” entdeckt sCalculatingPrice und frage mich nun was der sinnvollere Weg ist um den Preis zu ändern. Aus dem normalen Shopfrontend läßt sich der Artikel nicht in den Warenkorb legen sondern ich habe einen Button in der Bestellübersicht gebastelt, der direkt auf shopware.php/sViewport,checkout/sAction,addArticle/sAddRelatedArticles,basket/sAdd,12345/type,upgrade verlinkt, so daß man direkt zum Checkout kommt ohne das Upgrade in den Warenkorb legen zu müssen. Edit: Mit einem hook auf sCalculatingPrice wird zwar in der Artikelansicht ein anderer Preis angezeigt, beim direkten Reinlegen des Artikels mit o.g. URL wird aber trotzdem der normale Preis benutzt. Ich versuchs mal mit einem Event auf “Enlight_Controller_Action_PostDispatch_Frontend_Checkout” und bearbeite den Preis im Warenkorb nachträglich.

Ok, daß man den Preis in der Tabelle s_order_basket nicht direkt ändern kann habe ich nun verstanden und erstelle im Event Enlight_Controller_Action_PostDispatch_Frontend_Checkout einen Gutschein mit der Preisdifferenz und lege den in den Warenkorb. Das funktioniert auch super, nur der Code wird dreimal ausgeführt, d.h. es werden drei Gutscheine in der Datenbank erzeugt. Im Warenkorb landet zum Glück nur einer. Wie kann man generell verhindern, daß eigener Eventcode mehrmals ausgeführt wird? Eine wirklich unschöne Sache.