Réponses:
Si je veux continuer à utiliser le type d'incrémentation par défaut de Magento et que je veux juste changer le numéro d'incrément suivant, c'est ce que j'utilise.
Assurez-vous de n'utiliser que des nombres incrémentiels plus grands que ceux déjà utilisés!
SET @next_increment='310000000';
SELECT @entity_types:=GROUP_CONCAT(`entity_type_id`) FROM `eav_entity_type`
WHERE `entity_type_code` IN ('order', 'invoice', 'shipment');
SELECT @new_last_increment:=GREATEST((@next_increment -1),
(SELECT MAX(`increment_last_id`) FROM `eav_entity_store`
WHERE FIND_IN_SET(`entity_type_id`, @entity_types)));
UPDATE `eav_entity_store` SET `increment_last_id`=@new_last_increment
WHERE FIND_IN_SET(`entity_type_id`, @entity_types);
Ce SQL doit éviter de définir accidentellement un ID d'incrément déjà utilisé.
Si un incrément plus grand next_increment
était déjà utilisé, il définit simplement le dernier numéro d'incrément pour que les trois types d'entités soient identiques.
Je ne suis pas sûr du levier de sécurité mais je le fais en modifiant directement les valeurs dans DB:
UPDATE `eav_entity_store` s
INNER JOIN `eav_entity_type` t ON t.`entity_type_id` = s.`entity_type_id`
SET s.`increment_last_id` = 'your_increment_here'
WHERE t.entity_type_code = "order";
Remplacez le code de type d'entité par «facture» ou «expédition» pour faire de même pour le reste.
Si vous souhaitez utiliser des plages de numéros ou des formats personnalisés pour les ID d'incrément au lieu des incréments Magento par défaut, vous pouvez également attribuer un modèle d'incrément personnalisé.
Par exemple:
class My_Shop_Model_Entity_Increment_Erp
extends Mage_Eav_Model_Entity_Increment_Abstract
{
public function getNextId()
{
$last = $this->getLastId();
$entity = $this->getEntityTypeId();
$store = $this->getStoreId()
$next = Mage::helper('my_shop/api')->getNextIncrementFromErp($last, $entity, $store);
// If you want to apply pad char and length, otherwise simply return $next
return $this->format($next);
}
}
Ensuite, mettez à jour le modèle d'incrémentation pour les entités dans un script de configuration:
$installer = Mage::getModel('eav/entity_setup', 'core_setup');
$installer->startSetup();
$installer->updateEntityType('order', 'increment_model', 'my_shop/entity_increment_erp');
$installer->updateEntityType('invoice', 'increment_model', 'my_shop/entity_increment_erp');
$installer->updateEntityType('shipment', 'increment_model', 'my_shop/entity_increment_erp');
$installer->endSetup();
Assurez-vous de ne pas renvoyer les ID d'incrément qui étaient déjà utilisés précédemment!
La meilleure façon [la plus sûre pour magento] de changer le numéro de commande est de changer les prochains numéros de commande et non les précédents. Cela peut être fait avec une simple requête de base de données. Ce sont celles que j'ai utilisées sur mon site et cela fonctionne sans problème depuis presque un an maintenant.
Ordre:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='order';
Facture d'achat:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='invoice';
Expédition:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='shipment';
Ces requêtes changeront les prochains identifiants d'incrémentation pour votre boutique magento. REMARQUE: remplacez X par l'ID suivant que vous souhaitez.
Acceptez une réponse si cela fonctionne.
ID d'incrément de commande et préfixe
Modifier votre ID d'incrément de commande sur tous les magasins
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='order';
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='invoice';