Kann Magento so konfiguriert werden, dass mehrere Store-Ansichten derselben Website denselben Bestellnummernbereich teilenincrement_id
können? Und wenn ja, wie?
Zum Beispiel mit einem Multistore-Setup wie diesem in core_store
:
store_id code website_id group_id
0 admin 0 0
1 alpha 1 1
2 bravo 2 2
3 charlie 2 2
Nun wird eine neue Geschäftsansicht delta
hinzugefügt:
store_id code website_id group_id
4 delta 1 1
Unter alpha
der Annahme , dass die Inkrement-ID der letzten Bestellung derzeit 1000123 lautet, kann Folgendes erreicht werden:
next sell order number
alpha 1000124
delta 1000125
delta 1000126
alpha 1000127
Dieselbe Frage gilt für mehrere Geschäftsansichten, die denselben Rechnungsnummernbereich increment_id
und / oder denselben Kreditmemo- increment_id
Nummernbereich verwenden.
Unterstützt Magento dieses Out-of-the-Box?
configuration
magento-1
multistore
Jürgen Thelen
quelle
quelle
Antworten:
Ich würde mir vorstellen, dass dies ziemlich schwierig sein würde. Inkrementelle IDs werden in der
eav_entity_store
Tabelle gespeichert, und es überrascht nicht, dass jedes Geschäft einen eigenen Eintrag hat, der aktualisiert wird, wenn eine Bestellung (und ein Angebot, eine Rechnung usw.) erstellt wird. Um alle Stores dazu zu bringen, denselben Inkrementierer zu verwenden, müssten Sie diese Logik irgendwie neu schreiben, damit sie dieselbe Zeile in der DB verwendet. Welche Auswirkungen dies auf andere Bereiche der Website haben könnte, muss noch geprüft werden.quelle
Mage::getModel('eav/entity_type')->loadByCode('invoice')->setIncrementPerStore(false)->save()
Sie können das Inkrementmodell für Bestellungen, Lieferungen, Rechnungen und Gutschriften überschreiben, indem Sie die Klasse "eav / entity_increment_numeric" mit benutzerdefinierter Logik in einem Modell von Ihnen umschreiben.
Schauen Sie sich die Vorfahrklassen (Mage_Eav_Model_Entity_Increment_Numeric und Mage_Eav_Model_Entity_Increment_Abstract) an, um zu verstehen, wie Sie Ihre eigene Logik bereitstellen.
Sie können die Logik zwischen verschiedenen Entitäten unterscheiden, indem Sie den Parameter $ entityTypeCode der zu überschreibenden Funktion getNextId () überprüfen.
Eine andere (invasivere) Möglichkeit besteht darin, für jeden Entitätstyp ein anderes Inkrementmodell anzugeben, indem der Wert der Spalte "increment_model" der Tabelle "eav_entity_type" (über ein Installationsskript) überschrieben wird. Persönlich bevorzuge ich die oben erwähnte "Rewrite" -Lösung.
Beachten Sie: Inkrement-IDs unterliegen in den neuesten Magento-Versionen einer Eindeutigkeitsbeschränkung, sodass Sie nicht dieselbe Inkrement-ID für zwei verschiedene Entitäten desselben Typs speichern können. Mit anderen Worten, Sie können nicht zwei verschiedene Rechnungen mit derselben Inkrement-ID haben.
Ich hoffe es hilft.
quelle
getLastId()
inMage_Eav_Model_Entity_Increment_Numeric
oder in jeder anderen Klasse oder in der Hierarchie verbinden. Übrigens sollte dies die akzeptierte Antwort sein.Varien_Object
vonMage_Eav_Model_Entity_Type
Beim tieferen Graben wurde mir klar, dass
eav_entity_type.increment_per_store
dies hilfreich sein kann.Es ist. Aber nur für den Fall, dass Sie möchten, dass alle Store-Ansichten (global, unabhängig von der Website, auf der sie definiert sind) Ihrer Magento-Installation denselben Bestellnummernbereich haben
increment_id
.Dies löst mein spezifisches Problem nicht, aber vielleicht ist es für einige andere hilfreich.
Um die globale Freigabe Ihrer Bestellnummern zu aktivieren, setzen Sie
eav_entity_type.increment_per_store
die Bestellentität auf0
,Dies führt dazu
Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
, dassstore_id = 0
beim Laden deseav_entity_store
Datensatzes die Entität der Bestellung verwendet wird, unabhängig davon, zu welcher Geschäftsansicht sie wirklich gehört.Wenn kein solcher Datensatz vorhanden ist, erstellt Magento einen mit
store_id
undincrement_prefix
von0
.Dies sollte für jeden Entitätstyp arbeiten , um die Verwendung von
eav/entity_increment_numeric
Modell, wieorder
,invoice
,shipment
undcreditmemo
.Beachten Sie jedoch, dass ich noch keine offizielle Dokumentation finden konnte
increment_per_store
. Und dass es im Magento-Backend keine Option gibt, mit der Sie dies konfigurieren können.Dies kann bedeuten oder auch nicht, dass davon ausgegangen wird, dass es nicht offiziell verwendet wird.
Benutzung auf eigene Gefahr. Wenn Ihre Änderungen Chaos anrichten, beschuldigen Sie mich nicht. Du wurdest gewarnt ^^
quelle
Es wird nicht sofort unterstützt. Ich wollte dies auch einmal tun, damit eine zweite Storeview für einen A / B-Test dieselbe increment_id aus dem ursprünglichen Store verwendet.
Ich habe versucht, diese beiden Zahlen auf einfache Weise
checkout_submit_all_after
zuzuordnen, als sie abgefeuert wurden, fühlte mich aber sehr unwohl und ließ sie fallen. Ich denke, mit mehr Storeviews und viel Verkehr kann dies zu einem echten Durcheinander führen, so dass Sie tiefer in die Magentos-Logik eintauchen müssen.quelle
Lösung:
Unterschiedliche Bestell- / Rechnungs- / Gutschriftsnummern usw. sind für verschiedene Länder sehr nützlich, was meistens auf der Ebene einer Filialgruppe bedeutet.
Es ist jedoch eine schlechte Sache, unterschiedliche Nummernkreise auf der Ebene der Geschäftsansichten zu haben, wenn Sie Geschäftsansichten für verschiedene Sprachen verwenden, was in 90% aller Fälle der Fall sein kann.
Zum Glück ist es nicht so schwierig, wie in diesem Thread vorgeschlagen:
Wir werden die Standard-Geschäftsansichts-ID abrufen, anstatt die Geschäftsansichts-ID zu verwenden, mit der die Methode aufgerufen wird . Dazu wird die Geschäftsgruppe für die aktuelle Geschäftsansicht aufgelöst und die Standardgeschäftsansicht-ID abgerufen. Dann verwendet jede Geschäftsansicht einer bestimmten Geschäftsgruppe dasselbe Nummernkreisformat (das aus der Standardgeschäftsansicht).
Erstelle diese Klasse:
Fügen Sie diese Änderung zu config.xml Ihres Moduls hinzu:
Wenn Sie einen schöneren Weg haben, ohne das Wissen umschreiben zu müssen, verbreiten Sie es. Habe Spaß. Hacke nicht den Kern.
quelle