Chúng tôi đang chuyển từ một hệ thống điểm bán cũ, lỗi thời sang sử dụng Magento 1.7 làm POS riêng của chúng tôi. Không có gì bất ngờ, một trong những thách thức chúng tôi gặp phải là làm thế nào để có được gần 20 năm hồ sơ từ hệ thống cũ cho Mage mà không gặp thảm họa.
Đặt thách thức sang một bên là di chuyển hồ sơ khách hàng, vấn đề tôi đang tập trung vào câu hỏi này là làm thế nào tôi sẽ di chuyển dữ liệu đơn hàng lịch sử từ POS cũ sang Pháp sư. Tôi không chắc chắn 100% về con số chính xác khi có nhiều hồ sơ đặt hàng mà chúng tôi đang nói, nhưng tôi sẽ nói ít nhất là một triệu.
Đây là những gì tôi nghĩ về cách tiếp cận này:
- Chỉ ra chính xác làm thế nào dữ liệu cần được định dạng để Magento chơi tốt với nó. Liệu chúng ta có thể lấy nó ra khỏi POS cũ ở định dạng hoạt động hay không, nhưng chúng ta hãy giả sử rằng điều này sẽ ổn ...
- Tạo tệp .CSV với dữ liệu lịch sử được định dạng độc đáo
- Tìm cách đọc .CSV vào
$order
hàng đối tượng của Magento theo hàng -> save () - Lợi nhuận!
Vấn đề của tôi là tôi hơi mơ hồ về cách tiếp cận điểm 2 & 3, hãy tìm hiểu. Tôi có thể định dạng dữ liệu từ POS cũ mà tôi cần, ngay cả khi nó rất cồng kềnh và liên quan đến Perl, nhưng một khi tôi có tệp .CSV (hoặc bất kỳ loại tệp nào thực sự hoạt động cho quy trình này) thì tôi không rõ lắm làm thế nào tôi có thể đưa nó vào đối tượng đặt hàng của Magento.
Tôi đã thực hiện một số Google, và tôi đã đưa ra các ví dụ về những người sử dụng đối tượng đặt hàng của Mage để nhập đơn hàng theo chương trình, nhưng ít thảo luận về cách họ kết nối các nguồn dữ liệu khác với giỏ hàng trước với đối tượng nói trên. Tôi đã nghiên cứu một phiên bản của đối tượng đặt hàng:
$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();
Vì vậy, đây là câu hỏi cụ thể của tôi:
- Điều này có vẻ như là một cách tiếp cận thậm chí từ xa nhạy cảm cho vấn đề này? Và, nếu không, làm thế nào bạn nghĩ rằng tôi có thể tiếp cận vấn đề này như một thằng ngốc?
- Nếu đây là một cách tiếp cận hợp lý, tôi có cần một .CSV khác nhau cho mỗi mô hình được gọi theo quy trình đặt hàng không? tức là Mage :: getModel ('doanh số / đơn hàng'), Mage :: getModel ('sales / order_address'), v.v?
- Là một .CSV thậm chí là con đường để đi?
- Làm cách nào tôi cung cấp dữ liệu của mình cho đối tượng này, cho dù dữ liệu đó có trong .CSV hay bạn có gì?
- Làm thế nào bạn sẽ đi về giới hạn trên không?
Ngay cả khi tôi đang nghĩ về điều này theo một cách hoàn toàn ngu ngốc và bạn nói với tôi rất nhiều, tôi thực sự đánh giá cao bất kỳ đầu vào nào.
Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn!