Wir wechseln von einem veralteten Point-of-Sale-System zu Magento 1.7 ausschließlich als POS. Es ist nicht unerwartet, dass wir vor der Herausforderung stehen, fast 20 Jahre Rekorde vom alten System ohne Katastrophe an Mage zu bringen.
Abgesehen von der Herausforderung, sogar Kundendatensätze zu migrieren, besteht das Problem, auf das ich mich in dieser Frage konzentriere, darin, wie ich historische Auftragsdaten vom alten POS zu Mage migrieren werde. Ich bin mir nicht hundertprozentig sicher, ob es sich um genaue Zahlen handelt, wenn es um viele Bestellaufzeichnungen geht, aber ich würde sagen, mindestens eine Million.
Ich überlege, wie ich das angehen soll:
- Finde heraus, wie genau die Daten formatiert werden müssen, damit Magento gut damit umgehen kann. Ob wir es aus dem alten POS in einem funktionierenden Format herausholen können, ist fraglich, aber nehmen wir für einen Moment an, dass dies gut geht ...
- Erstellen Sie eine CSV-Datei mit gut formatierten Verlaufsdaten
- Finde einen Weg, um das .CSV zeilenweise in Magentos
$order
Objekt einzulesen -> save () - Profitieren!
Mein Problem ist, dass ich ein bisschen unklar bin, wie ich mich Punkt 2 und 3 nähere. Ich kann die Daten aus dem alten POS formatieren, wie ich es brauche, auch wenn es sehr umständlich ist und Perl involviert, aber sobald ich die CSV-Datei habe (oder welcher Dateityp auch immer für diesen Prozess funktionieren würde), bin ich mir ziemlich unklar wie ich es in Magentos Bestellobjekt einspeisen würde.
Ich habe ein bisschen gegoogelt und mir Beispiele ausgedacht, bei denen Benutzer das Bestellobjekt von Mage zum programmgesteuerten Importieren von Bestellungen verwenden, aber nur wenig darüber, wie sie andere Datenquellen als den Front-End-Wagen mit dem Objekt verbinden. Ich habe eine Version des Bestellobjekts untersucht:
$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();
Also hier sind meine spezifischen Fragen:
- Scheint dies eine sogar annähernd sinnliche Annäherung an dieses Problem zu sein? Und wenn nicht, wie könnte ich mich dieser Angelegenheit weniger idiotisch nähern?
- Wenn dies ein sinnvoller Ansatz ist, benötige ich für jedes Modell, das vom Bestellvorgang aufgerufen wird, eine andere CSV-Datei? zB Mage :: getModel ('sales / order'), Mage :: getModel ('sales / order_address'), etc?
- Ist eine .CSV überhaupt der richtige Weg?
- Wie würde ich meine Daten in dieses Objekt einspeisen, ob diese Daten in einer CSV-Datei enthalten sind oder was haben Sie?
- Wie würden Sie den Overhead begrenzen?
Auch wenn ich total idiotisch darüber nachdenke und du mir das erzählst, schätze ich jeden Input wirklich.
Danke danke danke!