Pluginerstellung: Erweiterung Bestellungen Positionen zusätzliches Feld

Hallo zusammen,

ich bin gerade dabei im Backend unter Bestellungen die Anzeige der Positionen um ein zusätzliches Feld zu erweitern. Neben “InStock” möchte ich noch ein weiteres Feld anzeigen in dem der tatsächliche Warenbestand laut Lager angezeigt wird. Das Feld in der Tabelle zu erweitern ist mir gelungen in

views/details/position.js und views/list/position.js

Der Warenbestand wird in ein zusätzliches Attribute in s_articles_attributes geschrieben, nennen wir es “storageInStock”. (s_orders_details_attributes reicht mir hierfür nicht, da sich diese attribute nur auf eine Bestellung beziehen - theoretisch kann eine Bestellung ja x viele elemente haben).

Jetzt ist die Frage, gibt es denn eigentlich überhaupt die Möglichkeit einen Wert aus einer “fremden” attributes tabelle in das position model zu bekommen? 

Ich wäre für einen Hinweis sehr dankbar!!

 

VG, klara

 

 

Das hört sich alles ziemlich konfus an.

  1. Im Feld inStock steht doch der tatsächliche Warenbestand laut Lager.

  2. s_order_details_attributes bezieht sich immer auf ein s_orders_details. Ein s_orders_details ist eine Position des Warenkorbs (also in den meisten Fällen eben ein Artikel des Warenkorbs)

  3. Das hört sich nicht so an als ob du den klassischen Weg der Plug-In-Struktur mit Model-View-Controller Komponenten gefolgt wärst. Das hört sich nach nem ganz schönen gebastel an!

  4. Du solltest dringend(!) die Tutorials hier durcharbeiten: Developer Guides

  5. Schau dir mal die Events

    Shopware_Modules_Basket_GetBasket_FilterSQL

und

 Shopware\_Modules\_Basket\_AddArticle\_FilterSql

sowie die Methoden (after-hook)

 sBasket::sAddArticle

an, damit lässt sich das auf jeden Fall lösen.

 

1 Like

Hallo Steinsoftware,

vielen Dank für die Hinweise! ok dann verwerfe ich erstmal meinen Ansatz und schaue mir deine TIpps durch.

VG

Nur als Ergänzung: ja theoretisch steht da der tatsächliche Warenbestand, wir pflegen aber öfter schon neue Waren ein bevor Sie tatsächlich im Lager sind, daher kann es da zu unstimmigkeiten kommen

@Klara schrieb:

Hallo zusammen,

ich bin gerade dabei im Backend unter Bestellungen die Anzeige der Positionen um ein zusätzliches Feld zu erweitern. Neben “InStock” möchte ich noch ein weiteres Feld anzeigen in dem der tatsächliche Warenbestand laut Lager angezeigt wird. Das Feld in der Tabelle zu erweitern ist mir gelungen in

views/details/position.js und views/list/position.js

Der Warenbestand wird in ein zusätzliches Attribute in s_articles_attributes geschrieben, nennen wir es “storageInStock”. (s_orders_details_attributes reicht mir hierfür nicht, da sich diese attribute nur auf eine Bestellung beziehen - theoretisch kann eine Bestellung ja x viele elemente haben).

Jetzt ist die Frage, gibt es denn eigentlich überhaupt die Möglichkeit einen Wert aus einer “fremden” attributes tabelle in das position model zu bekommen? 

Ich wäre für einen Hinweis sehr dankbar!!

 

VG, klara

 

 

Hallo,

du pflegst also das Feld “inStock” und das zusätzliche (Attributs-)Feld “storageInStock” und möchtest jetzt in der Bestellliste bei der Positionsauflistung das Feld “storageInStock” bzw. dessen Inhalt mit angezeigt bekommen? Machbar ist dies auf jeden Fall im Rahmen eines eigenen Backend-Plugins. Soll sich der Wert dann bei einer Bestellung auch verringern oder wird das immer handisch im Backend geändert?

Beste Grüße

Sebastian

Hallo Sebastian,

ja genau das würde ich gerne erreichen. Der Wert des StorageInStock kommt aus einer anderen Datenbank die den Lagerbestand über eine andere Software verwaltet.

Wird aus dem Lager etwas entnommen, so ändert sich in der Lagersoftware die Anzahl vorhandener Posten. Das Plugin schreibt bei verschiedenen Aktionen (z.B. bei Initialiserung des Backends von Shopware)  alle aktuellen Lagerbestände der fremden Datenbank in die s_articles_attributes in ein von mir erstelltes Extraattribute.

Jetzt wäre es schön gewesen den Wert aus s_articles_attributes bei den Bestellpositionen anzuzeigen. Ich glaube aber steinsoftware hat recht. Es ist leichter wenn ich einfach rückwirkend für z.B. alle 30 Tage s_order_detail_attributes den Wert einfüge.

Außer du hättest da jetzt doch noch eine praktikable Idee für mich :wink:

 

VG, Klara

Jetzt wäre es schön gewesen den Wert aus s_articles_attributes bei den Bestellpositionen anzuzeigen. Ich glaube aber steinsoftware hat recht. Es ist leichter wenn ich einfach rückwirkend für z.B. alle 30 Tage s_order_detail_attributes den Wert einfüge.

Kann mich nicht erinnern das so gesagt zu haben :slight_smile:

Der richtige Weg wäre die REST-API zu nutzen und im Wert inStock den tatsächlichen Lagerbestand zu schreiben und keine Tabellen zu erweitern.

Da läuft dann ein Task in der anderen Software der alle halbe Stunde oder so die aktuellen Bestände rüberschickt. Zusätzlich läuft ein Plug-In auf Shopware-Seite welches z.B. einen After-Hook auf sOrder::sSaveOrder hat und dem anderen System mitteilt, dass eine Bestellung im Shop war und das andere System sich über die REST-API die offenen Bestellungen abholen soll. Dann wären die Bestände im anderen System immer aktuell und im Shop immer halbstündig aktuell.

Um die Bestände dann auch in Echtzeit im Shop zu haben kann man ein Plug-In schreiben welches bei einem Artikel-Aufruf (Post-Dispatch von detail) sich die aktuellen Bestände aus dem anderen System zieht und anzeigt (vorsicht Cache beachten - das muss dann mit no-cache-Funktionalitäten versehen sein).

Nein :slight_smile: Aber du hast gesagt ich soll quasi einfach die richtige Tabelle verwenden :wink: Und das klingt vernünftig. In unserem System brauchen wir einen Bestand laut Shopware und einen laut Lager, weil wir über Shopware viele externe Shops mit beständen füttern, die auch vorbestellungen enthalten können. Etwas kompliziert, spielt aber  auch keine Rolle :) 

Aber danke für den Hinweis wie man einen sauberen Weg gehen könnte.

VG