Magento peut-il être configuré de manière à ce que plusieurs vues de magasin du même site Web puissent partager la mêmeincrement_id
plage de numéros de commande ? Et si oui, comment?
Par exemple, avec une configuration à plusieurs magasins comme celle-ci dans 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
Maintenant, une nouvelle vue de magasin delta
est ajoutée:
store_id code website_id group_id
4 delta 1 1
En supposant que alpha
le dernier ID d'incrément de commande est actuellement 1000123, comment atteindre:
next sell order number
alpha 1000124
delta 1000125
delta 1000126
alpha 1000127
La même question se pose pour plusieurs vues de magasin partageant la même increment_id
plage de numéros de facture et / ou partageant la même plage de increment_id
numéros de crédit .
Est-ce que Magento prend en charge ce prêt à l'emploi?
configuration
magento-1
multistore
Jürgen Thelen
la source
la source
Réponses:
J'imagine que ce serait assez difficile. Les identifiants d'incrément sont stockés dans le
eav_entity_store
tableau et sans surprise, chaque magasin a sa propre entrée qui est mise à jour lorsqu'une commande (et devis, facture, etc.) est créée. Pour que tous les magasins utilisent le même incrémenteur, vous devez en quelque sorte réécrire cette logique afin qu'elle utilise la même ligne dans la base de données. L'impact que cela peut avoir sur d'autres zones du site est quelque chose d'autre qui devrait être pris en considération.la source
Mage::getModel('eav/entity_type')->loadByCode('invoice')->setIncrementPerStore(false)->save()
Vous pouvez remplacer les commandes, les envois, les factures et le modèle d'incrémentation des avoirs en réécrivant la classe "eav / entity_increment_numeric" fournissant une logique personnalisée dans un de vos modèles.
Jetez un œil aux classes ancêtres (Mage_Eav_Model_Entity_Increment_Numeric et Mage_Eav_Model_Entity_Increment_Abstract) afin de comprendre comment fournir votre propre logique.
Vous pouvez différencier la logique entre différentes entités en vérifiant le paramètre $ entityTypeCode de la fonction getNextId () que vous allez remplacer.
Une autre méthode (plus invasive) consiste à spécifier un modèle d'incrémentation différent pour chaque type d'entité en écrasant (via le script d'installation) la valeur de la colonne "increment_model" de la table "eav_entity_type". Personnellement, je préfère la solution de "réécriture" mentionnée ci-dessus.
Faites attention: les identifiants d'incrémentation ont une contrainte d'unicité dans les dernières versions de Magento, vous ne pouvez donc pas stocker le même identifiant d'incrémentation pour deux entités différentes du même type. En d'autres termes, vous ne pouvez pas avoir deux factures différentes avec le même identifiant d'incrément.
J'espère que cela aide.
la source
getLastId()
dansMage_Eav_Model_Entity_Increment_Numeric
ou dans une autre classe ou interface dans la hiérarchie. Btw, cela devrait être la réponse acceptée.Varien_Object
deMage_Eav_Model_Entity_Type
En creusant plus profondément, j'ai réalisé que cela
eav_entity_type.increment_per_store
pourrait être utile.Il est. Mais seulement dans le cas où vous souhaitez que toutes les vues de magasin (globalement, quel que soit le site Web dans lequel elles sont définies) de votre installation Magento partagent la même
increment_id
plage de numéros de commande .Cela ne résout pas mon problème spécifique, mais peut-être que cela est utile à d'autres, alors c'est parti:
Pour activer le partage global de vos numéros de commande, définissez
eav_entity_type.increment_per_store
l'entité de commande sur0
,Cela conduit à
Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
utiliserstore_id = 0
lors du chargement de l'eav_entity_store
enregistrement de l'entité de commande, quelle que soit la vue de magasin à laquelle il appartient vraiment.Si un tel enregistrement n'existe pas, Magento en crée un, à l'aide de
store_id
etincrement_prefix
de0
.Cela devrait fonctionner pour tout type d'entité à l' aide du
eav/entity_increment_numeric
modèle, commeorder
,invoice
,shipment
etcreditmemo
.Sachez cependant que je n'ai pas encore trouvé de documentation officielle
increment_per_store
. Et qu'il n'y a aucune option dans le backend Magento vous permettant de configurer cela.Cela peut ou non signifier qu'il n'est pas censé être utilisé officiellement.
À utiliser à vos risques et périls. Si vos changements font des ravages, ne me blâmez pas. Vous avez été prévenu ^^
la source
Il n'est pas pris en charge prêt à l'emploi. Je voulais également le faire une fois pour avoir une deuxième vue de magasin pour un test A / B partager le même increment_id du magasin d'origine.
J'ai essayé de faire correspondre ces 2 chiffres de la manière la plus simple quand il
checkout_submit_all_after
est renvoyé, mais je me sentais très mal à l'aise, alors je l'ai laissé tomber. Je suppose qu'avec plus de vues de magasins et beaucoup de trafic, cela peut entraîner un véritable gâchis, vous devez donc approfondir la logique de Magentos.la source
Solution:
Avoir une gamme de numéros de commande / facture / crédit, etc. différente est assez agréable, pour différents pays, ce qui signifie le plus souvent au niveau d'un groupe de magasins.
Mais avoir des plages de numéros différentes au niveau de la vue du magasin est une mauvaise chose si vous utilisez des vues du magasin pour différentes langues, ce qui pourrait être fait dans 90% des cas.
Heureusement, ce n'est pas si difficile comme proposé dans ce fil:
Ce que nous allons faire, c'est récupérer l' ID de vue de magasin par défaut au lieu d'utiliser l'ID de vue de magasin avec lequel la méthode est appelée . Nous le faisons en résolvant le groupe de magasins pour la vue de magasin actuelle et en récupérant son ID de vue de magasin par défaut. Ensuite, chaque vue de magasin d'un groupe de magasins spécifique utilise le même format de plage de numéros (celui de la vue de magasin par défaut).
Créez cette classe:
Ajoutez cette réécriture dans config.xml de votre module:
Si vous avez une meilleure façon, sans avoir à réécrire, diffusez les connaissances. S'amuser. Ne piratez pas le noyau.
la source
Utiliser sur magento2 ... SELECT * FROM
sales_sequence_meta
Toutes les lignes sequence_table sont utilisées sur la même table d'incrément Exemple 'séquence_order_1' exemple: UPDATE
sales_sequence_meta
SETsequence_table
= 'sequence_order_1'. où meta_id = ?? ()Remarque: videz toutes les lignes liées au devis et à la facture précédentes OU utilisez-les sur la table sequence_value la plus élevée de ces tables (sequence_order_1, sequence_order_0, sequence_order_2)
la source