Eski ve modası geçmiş bir satış noktası sisteminden Magento 1.7'yi yalnızca POS olarak kullanmaya geçiyoruz. Beklenmedik bir şekilde, karşılaştığımız zorluklardan biri, eski sistemden Mage'ye felaket olmadan neredeyse 20 yıllık kayıtların nasıl alınacağıdır.
Müşteri kayıtlarını taşımanın zorluğunu bir kenara bırakarak, bu soruya odaklandığım sorun, tarihsel sipariş verilerini eski POS'tan Mage'ye nasıl taşıyacağım. Konuştuğumuz birçok sipariş kaydı olduğunda kesin rakamlardan% 100 emin değilim, ama en az bir milyon diyebilirim.
İşte buna nasıl yaklaşacağım hakkında düşünüyorum:
- Magento'nun onunla iyi oynaması için verilerin nasıl biçimlendirilmesi gerektiğini tam olarak anlayın. Eski POS'tan işe yarayan bir formatta çıkıp çıkamayacağımız sorgulanabilir, ancak bir an için bunun iyi gittiğini varsayalım ...
- Güzel biçimlendirilmiş geçmiş verileri içeren bir .CSV dosyası oluşturun
- Bu .CSV'yi Magento'nun
$order
nesnesine satır satır okumanın bir yolunu bulun -> save () - Kar!
Benim sorunum nokta 2 & 3, gitmek şekil nasıl biraz bulanık olmasıdır. Oldukça hantal ve Perl içerir bile, ancak ben ihtiyacım, eski POS çıkan verileri biçimlendirebilirsiniz, ama bir kez .CSV dosyası (veya bu işlem için aslında ne tür bir dosya işe yarayacaksa) oldukça net değilim Magento'nun sipariş nesnesine nasıl besleyeceğim.
Bazı Google'ları yaptım ve siparişleri programlı olarak içe aktarmak için Mage'nin sipariş nesnesini kullanan kişilerin örneklerini buldum, ancak ön uç sepeti dışındaki veri kaynaklarını söz konusu nesneye nasıl bağladıkları hakkında çok az tartışma yaptım. Sipariş nesnesinin bir sürümünü inceledim:
$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();
İşte benim özel sorularım:
- Bu, bu soruna uzaktan bile duygusal bir yaklaşım gibi görünüyor mu? Ve değilse, bu konuya daha az salak gibi nasıl yaklaşabileceğimi düşünüyorsun?
- Bu mantıklı bir yaklaşımsa, sipariş süreci tarafından çağrılan her model için farklı bir .CSV'ye ihtiyacım var mı? yani Mage :: getModel ('satış / sipariş'), Mage :: getModel ('satış / sipariş_adresi'), vb?
- Bir .CSV yolu bile var mı?
- Veriler bir .CSV'de bulunuyorsa veya sizde ne varsa, bu nesneyi nasıl beslerim?
- Tepegözü nasıl sınırlarsınız?
Bunu tamamen aptalca bir şekilde düşünüyorum ve bana çok şey söyleseniz bile, herhangi bir girdiyi gerçekten takdir ediyorum.
Teşekkürler teşekkürler teşekkürler!