Artikelpreis beim Speichern überschreiben

Guten Morgen zusammen!

Ich stehe vor der Aufgabe, den Artikelpreis beim Speichern eines Artikels zu überschreiben. Hintergrund ist, dass der Kunde gerne den gewünschten Artikelpreis in ein Freitextfeld eintragen möchte. Wird der Artikel gespeichert, soll im Hintergrund der Preis mit von verschiedenen Faktoren beeinflussten Versandkosten addiert und anschließend in das Preisfeld von Shopware geschrieben werden.

Soweit habe ich das bereits geschafft, jedoch leider mit einem Manko: Ich kann mit folgendem Code das Speichern des Artikels abfangen und den Preis anpassen, doch zu diesem Zeitpunkt wurden anscheinend die neuen Werte in den Freitextfeldern noch nicht gespeichert. Daher muss der Artikel immer 2 Mal gespeichert werden, bis der korrekte Preis hinterlegt ist.

...
'Shopware\Models\Article\Price::preUpdate' => 'onAfterSaveArticleList',
...
public function onAfterSaveArticleList(\Enlight_Event_EventArgs $args)
    {
      $modelManager = $args->getEntityManager();
      $model = $args->getEntity();
      $article = $model->getArticle();
      $articleDetails = $model->getDetail();
      $newPrice = $model->getPrice();
      $priceGroup = $model->getCustomerGroup();
      $priceGroupKey = $priceGroup->getKey();
      $articleId = $article->getId();
      $articleDetailsId = $articleDetails->getId();

      $sql = "SELECT attr15, attr16, attr17, karton1m, karton1m2, preis_endkunde FROM s_articles_attributes WHERE articledetailsID = ?";
      $attributes = Shopware()->Db()->fetchRow($sql, $articleDetailsId);

      ... Versandkosten berechnen und addieren ...

      if($priceGroupKey == 'EK') {
        $priceEK = (floatval(str_replace(',', '.', $attributes['preis_endkunde'])) + $versandaufpreis) / 1.19;
        $sql = "UPDATE s_articles_prices SET price = ? WHERE articleId = ? AND pricegroup = 'EK'";
        Shopware()->Db()->prepare($sql)->execute([$priceEK, $articleId]);
        $newPrice = $priceEK;
        $model->setPrice($priceEK);
      } elseif($priceGroupKey == 'EB') {
        $priceEB = (ceil(floatval(str_replace(',', '.', $attributes['preis_endkunde'])) * 1.1) + $versandaufpreis) / 1.19;
        $sql = "UPDATE s_articles_prices SET price = ? WHERE articleId = ? AND pricegroup = 'EB'";
        Shopware()->Db()->prepare($sql)->execute([$priceEB, $articleId]);
        $model->setPrice($priceEB);
      }

Egal, ob ich mir den Wert aus dem Freitextfeld nun per SQL hole oder aber über das hier hinterlegte ArticleDetail ($articleDetails->getAttribute()->getPreisEndkunde()), ich erhalte immer den „alten“ Wert aus dem Freitextfeld, nicht den Wert, welcher gerade eingegeben wurde und nun gespeichert werden soll.
Ich habe auch bereits versucht, statt auf „Price“ eher auf „Article“ oder „Detail“ zu subscriben, doch das Ergebnis ist immer das Selbe.
Hat jemand von euch eine Idee, wie ich hier vorgehen kann, damit ich den aktuell zu speichernden Wert aus dem Freitextfeld bekomme?

Ich danke euch!

Beim Speichern des Artikels folgt Shopware einer gewissen Reihenfolge der einzelnen Tabellen. Das ist kein ganzheitlicher Datenbank Commit, das erklärt dein beschriebenes Verhalten.
Wenn du nicht an das zu speichernde Objekt kommst und den zukünftigen Inhalt des Freitextfeldes verwenden kannst, dann würde ich den Preis mit einem SQL Script oder einer SQL Prozedur nachträglich updaten. Einen Datenbank Trigger würde ich persönlich nicht verwenden, könnte aber auch eine Lösung sein.

Danke dir für die schnelle Antwort! Ich habe mir sowas gedacht - die Attribute scheinen als letztes gespeichert zu werden.
Ich habe die Hoffnung, dass es ein Event oder einen Hook gibt, den ich nicht kenne, wo ich nach einem Klick auf „Speichern“ im Artikel das gesamte Artikel-Objekt anfangen kann und dort die korrekten Werte drin sind, bevor es in die DB geschrieben wird…