Przechodzimy ze starego, przestarzałego systemu punktów sprzedaży na używanie Magento 1.7 wyłącznie jako naszego punktu sprzedaży. Nie jest niespodzianką, że jednym z wyzwań, przed którymi stoimy, jest to, jak uzyskać prawie 20 lat nagrań ze starego systemu do Mage bez katastrofy.
Odkładając na bok wyzwanie nawet migracji danych klientów, problem, na którym koncentruję się w tym pytaniu, polega na tym, w jaki sposób zamierzam migrować historyczne dane zamówienia ze starego punktu sprzedaży do Mage. Nie jestem w 100% pewien dokładnych liczb, kiedy mówimy o wielu rekordach zamówień, ale powiedziałbym, że co najmniej milion.
Oto, co myślę, jeśli chodzi o podejście do tego:
- Dowiedz się dokładnie, jak należy sformatować dane, aby Magento dobrze się z nimi bawił. To, czy uda nam się to zrobić ze starego POS w formacie, który działa, jest wątpliwe, ale załóżmy przez chwilę, że idzie dobrze ...
- Utwórz plik .CSV z ładnie sformatowanymi danymi historycznymi
- Znajdź sposób na odczytanie tego .CSV do
$order
obiektu Magento rząd po rzędzie -> save () - Zysk!
Mój problem polega na tym, że jestem trochę rozmyślny, jak podejść do punktu 2 i 3, idź. Mogę sformatować dane wychodzące ze starego POS, jednak potrzebuję, nawet jeśli jest to bardzo uciążliwe i dotyczy Perla, ale kiedy już mam plik .CSV (lub inny typ pliku, który faktycznie działałby dla tego procesu), jestem dość niejasny jak chciałbym wprowadzić go do obiektu zamówienia Magento.
Zrobiłem trochę googlingu i wymyśliłem przykłady ludzi używających obiektu zamówienia Mage'a do programowego importowania zamówień, ale mało dyskusji na temat tego, w jaki sposób łączą źródła danych inne niż przedni koszyk z tym obiektem. Studiowałem wersję obiektu zamówienia:
$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();
Oto moje szczegółowe pytania:
- Czy to wydaje się być nawet sensownie podejściem do tego problemu? A jeśli nie, jak myślisz, jak mógłbym podejść do tego problemu jak mniej idiota?
- Jeśli jest to sensowne podejście, czy potrzebuję innej .CSV dla każdego modelu wywołanego przez proces zamówienia? tj. Mage :: getModel („sprzedaż / zamówienie”), Mage :: getModel („sprzedaż / adres_ zamówienia”) itp.?
- Czy .CSV jest jeszcze właściwą drogą?
- Jak mam wprowadzić moje dane do tego obiektu, niezależnie od tego, czy dane te są zawarte w .CSV, czy co masz?
- Jak byś zajął się ograniczaniem kosztów ogólnych?
Nawet jeśli myślę o tym w całkowicie idiotyczny sposób, a ty mi to mówisz, naprawdę doceniam każdy wkład.
Dziekuję Dziekuję Dziękuję!