Kami beralih dari sistem point-of-sale lama, usang ke menggunakan Magento 1.7 sebagai POS kami secara eksklusif. Tidak disangka, salah satu tantangan yang kami hadapi adalah bagaimana mendapatkan hampir 20 tahun catatan dari sistem lama ke Mage tanpa bencana.
Mengesampingkan tantangan bahkan memigrasi catatan pelanggan, masalah yang saya fokuskan dalam pertanyaan ini adalah bagaimana saya akan memigrasi data pesanan historis dari POS lama ke Mage. Saya tidak 100% yakin pada angka pasti ketika banyak catatan pesanan kita bicarakan, tapi saya akan mengatakan setidaknya satu juta.
Inilah yang saya pikirkan dalam hal bagaimana mendekati ini:
- Cari tahu persis bagaimana data perlu diformat agar Magento bisa bermain bagus dengannya. Apakah kita dapat mengeluarkannya dari POS lama dalam format yang berfungsi patut dipertanyakan, tetapi mari kita asumsikan sejenak bahwa ini berjalan dengan baik ...
- Buat file .CSV dengan data historis yang diformat dengan baik
- Temukan cara untuk membaca .CSV ke objek Magento
$order
baris demi baris -> save () - Keuntungan!
Masalah saya adalah bahwa saya agak kabur tentang bagaimana mendekati titik 2 & 3, lanjutkan angka. Saya dapat memformat data yang keluar dari POS lama namun saya butuhkan, bahkan jika itu sangat rumit dan melibatkan Perl, tetapi begitu saya memiliki file .CSV (atau tipe file apa pun yang benar-benar berfungsi untuk proses ini) saya cukup tidak jelas tentang bagaimana saya akan memasukkannya ke objek pesanan Magento.
Saya telah melakukan beberapa Googling, dan saya telah menemukan contoh orang yang menggunakan objek pesanan Mage untuk mengimpor pesanan secara terprogram, tetapi sedikit diskusi tentang bagaimana mereka menghubungkan sumber data selain gerobak ujung depan ke objek tersebut. Saya telah mempelajari versi objek pesanan:
$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();
Jadi, inilah pertanyaan spesifik saya:
- Apakah ini tampak seperti pendekatan sensoris yang jauh dari masalah ini? Dan, jika tidak, bagaimana menurut Anda saya bisa mendekati masalah ini seperti orang bodoh?
- Jika ini adalah pendekatan yang sensis, apakah saya memerlukan .CSV yang berbeda untuk setiap model yang dipanggil oleh proses pemesanan? yaitu Mage :: getModel ('sales / order'), Mage :: getModel ('sales / order_address'), dll?
- Apakah .CSV bahkan cara untuk pergi?
- Bagaimana saya memberi makan data saya ke objek ini, apakah data itu terkandung dalam .CSV atau apa yang Anda miliki?
- Bagaimana Anda membatasi pengeluaran overhead?
Bahkan jika saya memikirkan hal ini dengan cara yang benar-benar bodoh dan Anda banyak memberi tahu saya, saya sangat menghargai masukan apa pun.
Terima kasih terima kasih terima kasih!