Stiamo passando da un vecchio sistema di punti vendita obsoleto all'utilizzo esclusivo di Magento 1.7 come nostro POS. Non inaspettatamente, una delle sfide che stiamo affrontando è come ottenere quasi 20 anni di registrazioni dal vecchio sistema a Mage senza catastrofe.
Mettendo da parte la sfida della migrazione anche dei record dei clienti, il problema su cui mi sto concentrando in questa domanda è come migrerò i dati storici degli ordini dal vecchio POS a Mage. Non sono sicuro al 100% sui numeri esatti quando parliamo di molti record di ordini, ma direi almeno un milione.
Ecco cosa sto pensando in termini di come affrontare questo:
- Scopri esattamente come i dati devono essere formattati affinché Magento funzioni bene. Se possiamo tirarlo fuori dal vecchio POS in un formato che funziona è discutibile, ma supponiamo per un momento che questo vada bene ...
- Crea un file .CSV con dati storici ben formattati
- Trova un modo per leggere quel. CSV
$order
nell'oggetto Magento riga per riga -> save () - Profitto!
Il mio problema è che sono un po 'confuso su come affrontare i punti 2 e 3, vai a capire. Posso formattare i dati che escono dal vecchio POS di cui ho bisogno, anche se è molto ingombrante e coinvolge Perl, ma una volta che ho il file .CSV (o qualunque tipo di file funzionerebbe effettivamente per questo processo) Non sono abbastanza chiaro come lo darei all'oggetto ordine di Magento.
Ho fatto un po 'di ricerche su Google e ho trovato esempi di persone che usano l'oggetto ordine di Mage per importare gli ordini a livello di codice, ma poca discussione su come stanno collegando origini dati diverse dal carrello front-end a detto oggetto. Ho studiato una versione dell'oggetto ordine:
$id=1; // get Customer Id
$customer = Mage::getModel('customer/customer')->load($id);
$transaction = Mage::getModel('core/resource_transaction');
$storeId = $customer->getStoreId();
$reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);
$order = Mage::getModel('sales/order')
->setIncrementId($reservedOrderId)
->setStoreId($storeId)
->setQuoteId(0)
->setGlobal_currency_code('USD')
->setBase_currency_code('USD')
->setStore_currency_code('USD')
->setOrder_currency_code('USD');
// set Customer data
$order->setCustomer_email($customer->getEmail())
->setCustomerFirstname($customer->getFirstname())
->setCustomerLastname($customer->getLastname())
->setCustomerGroupId($customer->getGroupId())
->setCustomer_is_guest(0)
->setCustomer($customer);
// set Billing Address
$billing = $customer->getDefaultBillingAddress();
$billingAddress = Mage::getModel('sales/order_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
->setCustomerId($customer->getId())
->setCustomerAddressId($customer->getDefaultBilling())
->setCustomer_address_id($billing->getEntityId())
->setPrefix($billing->getPrefix())
->setFirstname($billing->getFirstname())
->setMiddlename($billing->getMiddlename())
->setLastname($billing->getLastname())
->setSuffix($billing->getSuffix())
->setCompany($billing->getCompany())
->setStreet($billing->getStreet())
->setCity($billing->getCity())
->setCountry_id($billing->getCountryId())
->setRegion($billing->getRegion())
->setRegion_id($billing->getRegionId())
->setPostcode($billing->getPostcode())
->setTelephone($billing->getTelephone())
->setFax($billing->getFax());
$order->setBillingAddress($billingAddress);
$shipping = $customer->getDefaultShippingAddress();
$shippingAddress = Mage::getModel('sales/order_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
->setCustomerId($customer->getId())
->setCustomerAddressId($customer->getDefaultShipping())
->setCustomer_address_id($shipping->getEntityId())
->setPrefix($shipping->getPrefix())
->setFirstname($shipping->getFirstname())
->setMiddlename($shipping->getMiddlename())
->setLastname($shipping->getLastname())
->setSuffix($shipping->getSuffix())
->setCompany($shipping->getCompany())
->setStreet($shipping->getStreet())
->setCity($shipping->getCity())
->setCountry_id($shipping->getCountryId())
->setRegion($shipping->getRegion())
->setRegion_id($shipping->getRegionId())
->setPostcode($shipping->getPostcode())
->setTelephone($shipping->getTelephone())
->setFax($shipping->getFax());
$order->setShippingAddress($shippingAddress)
->setShipping_method('flatrate_flatrate')
->setShippingDescription($this->getCarrierName('flatrate'));
$orderPayment = Mage::getModel('sales/order_payment')
->setStoreId($storeId)
->setCustomerPaymentId(0)
->setMethod('purchaseorder')
->setPo_number(' - ');
$order->setPayment($orderPayment);
// let say, we have 2 products
$subTotal = 0;
$products = array(
'1001' => array(
'qty' => 1
),
'1002' ->array(
'qty' => 3
),
);
foreach ($products as $productId=>$product) {
$_product = Mage::getModel('catalog/product')->load($productId);
$rowTotal = $_product->getPrice() * $product['qty'];
$orderItem = Mage::getModel('sales/order_item')
->setStoreId($storeId)
->setQuoteItemId(0)
->setQuoteParentItemId(NULL)
->setProductId($productId)
->setProductType($_product->getTypeId())
->setQtyBackordered(NULL)
->setTotalQtyOrdered($product['rqty'])
->setQtyOrdered($product['qty'])
->setName($_product->getName())
->setSku($_product->getSku())
->setPrice($_product->getPrice())
->setBasePrice($_product->getPrice())
->setOriginalPrice($_product->getPrice())
->setRowTotal($rowTotal)
->setBaseRowTotal($rowTotal);
$subTotal += $rowTotal;
$order->addItem($orderItem);
}
$order->setSubtotal($subTotal)
->setBaseSubtotal($subTotal)
->setGrandTotal($subTotal)
->setBaseGrandTotal($subTotal);
$transaction->addObject($order);
$transaction->addCommitCallback(array($order, 'place'));
$transaction->addCommitCallback(array($order, 'save'));
$transaction->save();
Quindi, ecco le mie domande specifiche:
- Sembra un approccio sensibilmente remoto anche a questo problema? E, in caso contrario, come pensi che potrei affrontare questo problema come meno di un idiota?
- Se questo è un approccio sensato, ho bisogno di un .CSV diverso per ogni modello richiamato dal processo di ordine? cioè Mage :: getModel ('sales / order'), Mage :: getModel ('sales / order_address'), ecc.?
- Un CSV è anche la strada da percorrere?
- Come potrei fornire i miei dati a questo oggetto, sia che siano contenuti in un .CSV o che cosa hai?
- Come faresti a limitare le spese generali?
Anche se ci sto pensando in modo totalmente idiota e tu mi dici altrettanto, apprezzo davvero qualsiasi input.
Grazie, grazie, grazie!