Nach eMail-Versand (in sOrder) wird Main-Shop dupliziert ...

Hallo! Und zwar verschicke ich über ein Plugin Status-Mails. Ich habe mich da da an Funktionalitäten aus der sOrder gehalten und konnte mittlerweile nachvollziehen, dass wenn ich mehrere Status-eMails von verschiedenen Bestellungen hintereinander verschicke, für jeden eMail Versand ein Shop unter Einstellungen > Grundeinstellungen > Shops angelegt wird, um genauer zu sein - quasi eine Kopie des Haupt-Shops, nur ohne Währung und mit Eintrag des virtuellen Pfades. Das hat mich jetzt soweit verwirrt, dass das ich den Versand komplett nur noch über die sOrder testweise mache, mit … Shopware()-\>Modules()-\>Order()-\>setOrderStatus($orderId, $statusIs, true); Wenn ich wie gesagt genau das mehrfach aufrufe (mit verschiedenen Bestell-IDs), wird für jeden Versand (außer beim ersten) ein Shop erstellt. Ich habe mich da mal durchgeklickt durch die Core-Funktionalitäten, und Frage mich immer noch, was das auslösen kann. z.B. in der setOrderStatus wird folgendes aufgerufen $mail = $this-\>createStatusMail($orderStatusId, $comment, $orderId); Wenn ich mir die createStatusMail anschaue, passt die Parameter-Reihenfolge eigentlich gar nicht, die in der setOrderStatus reinkommen. createStatusMail verlangt nämlich: orderId, statusId und dann ein template. Nicht orderStatus, comment und dann orderId. Weiter komme ich zur createStatusMail … Darin wird der Shop geholt, für den Mail-Versand: $repository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Shop\Shop'); $shopId = is\_numeric($order['language']) ? $order['language'] : $order['subshopID']; $shop = $repository-\>getActiveById($shopId); $shop-\>registerResources(Shopware()-\>Bootstrap()); Die getActiveById löst offensichtlich die Duplikation auf, so wie ich das sehe: $builder = $this-\>getActiveQueryBuilder(); $builder-\>andWhere('shop.id=:shopId'); $builder-\>setParameter('shopId', $id); $shop = $builder-\>getQuery()-\>getOneOrNullResult(); if ($shop !== null) { $this-\>fixActive($shop); } Das fixActive beinhaltet Code, der dem sehr nahe kommt was ja beim kopieren passiert. Und das wird immer ausgelöst, sobald der $shop !== null ist - also wenn einer gefunden wurde? … Das passiert ebenfalls in der getActiveByRequest. Kann das wer verstehen, bzw. hat Lösungen bezüglich des Mail-Versandes? Wenn ich eine Bestell-Status-Mail verschicke macht sich das bemerkbar, nur wenn ich mehrere hintereinander ine iner Sitzung verschicke passiert das … Ich freue mich über Ideen! Schöne Grüße, Niklas

Das ist ein bekannter Bug - sobald du anschließend ein Shopware()->Models()->flush() nutzt, wird der Shop gespeichert. Lösche einfach die nicht persistenten models mit Shopware()->Models()->clear() direkt nach dem Mail Versand und der Shop wird nicht mehr dupliziert. Viele Grüße

1 „Gefällt mir“

AquaTuning :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: Vielen Dank für Deine Hilfe und das schnelle Feedback, das hat geholfen! Egal in welcher Kombination der Versand angestoßen wird - mit dem zurücksetzen der Models klappt das jetzt wunderbar. VIELEN Dank! :thumbup: Schöne Grüße, Niklas

Hallo! Kann jemand einmal den fertigen Code hier posten? Muss das Shopware()->Models()->clear() vor dem $this->fixActive($shop) stehen? Und wenn das fixActive() das Problem ist, könnte man es dann nicht einfach auskommentieren? LG BJunk

Nein nein, das oben von mir war nur ein Versuch der Fehleranalyse. Du musst einfach nur nach dem Versand das clear() verwenden. $result = Shopware()-\>Modules()-\>Order()-\>sendStatusMail($foo); ... try { Shopware()-\>Models()-\>clear(); } catch ... Ohne das clear() werden die Shops kopiert, mit dem clear in Verbindung (wichtig - nach jedem einzelnen Versand!) passiert das nicht mehr. Schöne Grüße, Niklas