เราเปลี่ยนจากระบบจุดขายเก่าที่ล้าสมัยไปเป็นการใช้ Magento 1.7 เป็น POS ของเราโดยเฉพาะ ไม่คาดคิดหนึ่งในความท้าทายที่เราเผชิญคือการบันทึกเกือบ 20 ปีจากระบบเก่าสู่ Mage โดยไม่ต้องเกิดภัยพิบัติ
นอกเหนือจากความท้าทายในการโยกย้ายบันทึกลูกค้าปัญหาที่ฉันมุ่งเน้นในคำถามนี้ก็คือฉันจะย้ายข้อมูลคำสั่งซื้อในอดีตจาก POS เก่าไปยัง Mage ได้อย่างไร ฉันไม่แน่ใจ 100% เกี่ยวกับตัวเลขที่แน่นอนเมื่อมีการสั่งซื้อจำนวนมากที่เรากำลังพูดถึง แต่ฉันจะบอกว่าอย่างน้อยหนึ่งล้าน
นี่คือสิ่งที่ฉันคิดในแง่ของวิธีการนี้:
- คิดออกว่าข้อมูลจะต้องมีการจัดรูปแบบสำหรับวีโอไอพีเพื่อเล่นกับมัน ไม่ว่าเราจะนำออกมาจาก POS เก่าในรูปแบบที่ใช้งานได้หรือไม่ แต่ลองคิดดูสักครู่ว่ามันจะไปได้ดีหรือไม่
- สร้างไฟล์. CSV ด้วยข้อมูลประวัติที่มีการจัดรูปแบบเป็นอย่างดี
- ค้นหาวิธีการอ่าน. CSV ให้เป็นวีโอไอพี
$order
วัตถุในแต่ละแถว -> save () - กำไร!
ปัญหาของฉันคือฉันสับสนเล็กน้อยเกี่ยวกับวิธีเข้าใกล้จุดที่ 2 และ 3 ไปคิด ฉันสามารถจัดรูปแบบข้อมูลที่ออกมาจาก POS เก่า แต่ฉันต้องการแม้ว่ามันจะยุ่งยากและเกี่ยวข้องกับ Perl แต่เมื่อฉันมีไฟล์. CSV (หรือไฟล์ประเภทใดก็ตามที่ใช้งานได้จริงสำหรับกระบวนการนี้) ฉันค่อนข้างชัดเจน ฉันจะป้อนเข้าวัตถุคำสั่งของวีโอไอพีได้อย่างไร
ฉันได้ทำ Googling มาแล้วและฉันก็ได้ตัวอย่างของคนที่ใช้วัตถุคำสั่งของ Mage เพื่อนำเข้าคำสั่งซื้อแบบเป็นโปรแกรม แต่มีการพูดคุยกันเล็กน้อยเกี่ยวกับวิธีที่พวกเขาเชื่อมต่อแหล่งข้อมูลอื่นนอกเหนือจากตะกร้าสินค้าด้านหน้าเพื่อวัตถุดังกล่าว ฉันศึกษารุ่นของวัตถุสั่งซื้อแล้ว:
$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();
ดังนั้นนี่คือคำถามเฉพาะของฉัน:
- ดูเหมือนว่าวิธีนี้จะทำให้ปัญหานี้หมดไปหรือไม่? และถ้าไม่คุณคิดว่าฉันจะจัดการกับปัญหานี้เหมือนคนโง่น้อยลงได้อย่างไร
- หากนี่เป็นวิธีการที่ละเอียดอ่อนฉันต้องมี. CSV ที่แตกต่างกันสำหรับแต่ละรุ่นที่เรียกใช้โดยกระบวนการสั่งซื้อหรือไม่ เช่น Mage :: getModel ('sales / order'), Mage :: getModel ('sales / order_address') เป็นต้น?
- เป็น. CSV แม้แต่วิธีที่จะไป?
- ฉันจะป้อนข้อมูลของฉันในวัตถุนี้ได้อย่างไรไม่ว่าข้อมูลนั้นจะอยู่ใน. CSV หรือคุณมีอะไรบ้าง
- คุณจะ จำกัด เรื่องค่าใช้จ่ายอย่างไร
แม้ว่าฉันจะคิดถึงสิ่งนี้ในลักษณะที่งี่เง่า แต่คุณบอกฉันได้มาก
ขอบคุณขอบคุณขอบคุณ!