Risposte:
Se voglio continuare a utilizzare il tipo di incremento predefinito di Magento e voglio solo cambiare il numero di incremento successivo, questo è quello che uso.
Assicurati di utilizzare solo numeri di incremento maggiori di quelli già utilizzati!
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);
Questo SQL dovrebbe occuparsi di non impostare accidentalmente un ID di incremento già utilizzato.
Se è next_increment
già stato utilizzato un incremento maggiore , imposta semplicemente l'ultimo numero di incremento per tutti e tre i tipi di entità in modo che siano uguali.
Non sono sicuro della leva di sicurezza, ma lo sto facendo modificando direttamente i valori nel 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";
Sostituisci il codice del tipo di entità con "fattura" o "spedizione" per fare lo stesso per il resto.
Se si desidera utilizzare intervalli di numeri o formati personalizzati per gli ID di incremento anziché gli incrementi di Magento predefiniti, è anche possibile assegnare un modello di incremento personalizzato.
Per esempio:
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);
}
}
Quindi, aggiornare il modello di incremento per le entità in uno script di installazione:
$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();
Assicurati di non restituire gli ID di incremento già utilizzati in precedenza!
Il modo migliore [più sicuro per magento] per cambiare il numero dell'ordine è quello di cambiare i numeri dell'ordine successivo e non quelli precedenti. Questo può essere fatto con una semplice query di database. Questi sono quelli che ho usato nel mio sito e funziona senza problemi da quasi un anno.
Ordine:
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';
Fattura:
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';
Spedizione:
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';
Queste query modificheranno i successivi ID di incremento per il tuo negozio magento. NOTA: Sostituisci X con l'id successivo che desideri.
Accetta una risposta se funziona.
ID e prefisso dell'incremento dell'ordine
Modifica l'ID dell'incremento dell'ordine su tutti i negozi
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';