Estamos cambiando de un sistema de punto de venta antiguo y anticuado a usar Magento 1.7 como nuestro punto de venta exclusivo. Como era de esperar, uno de los desafíos que enfrentamos es cómo obtener casi 20 años de registros del antiguo sistema a Mage sin catástrofe.
Dejando a un lado el desafío de incluso migrar los registros de clientes, el problema en el que me estoy centrando en esta pregunta es cómo voy a migrar los datos de pedidos históricos del antiguo TPV a Mage. No estoy 100% seguro de los números exactos cuando hablamos de muchos registros de pedidos, pero diría que al menos un millón.
Esto es lo que estoy pensando en términos de cómo abordar esto:
- Descubre exactamente cómo se deben formatear los datos para que Magento juegue bien con ellos. Es cuestionable si podemos sacarlo del antiguo TPV en un formato que funcione, pero supongamos por un momento que esto va bien ...
- Cree un archivo .CSV con datos históricos bien formateados
- Encuentre una manera de leer ese .CSV en el
$order
objeto de Magento fila por fila -> save () - ¡Lucro!
Mi problema es que estoy un poco confuso sobre cómo abordar los puntos 2 y 3, imagínense. Puedo formatear los datos que salen del antiguo TPV, sin embargo, lo necesito, incluso si es muy engorroso e involucra a Perl, pero una vez que tengo el archivo .CSV (o el tipo de archivo que realmente funcione para este proceso), no tengo muy claro cómo lo alimentaría al objeto de pedido de Magento
Busqué en Google y encontré ejemplos de personas que usan el objeto de pedido de Mage para importar pedidos mediante programación, pero poca discusión sobre cómo están conectando fuentes de datos distintas del carro frontal a dicho objeto. He estado estudiando una versión del objeto de pedido:
$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();
Así que aquí están mis preguntas específicas:
- ¿Parece esto un enfoque incluso remotamente sensorial para este problema? Y si no, ¿cómo crees que podría abordar este tema como un idiota?
- Si este es un enfoque sensorial, ¿necesito un .CSV diferente para cada modelo invocado por el proceso de pedido? es decir, Mage :: getModel ('ventas / pedido'), Mage :: getModel ('ventas / pedido_dirección'), etc.
- ¿Es un .CSV incluso el camino a seguir?
- ¿Cómo ingresaría mis datos a este objeto, si esos datos están contenidos en un .CSV o qué tiene usted?
- ¿Cómo harías para limitar los gastos generales?
Incluso si estoy pensando en esto de una manera totalmente idiota y me lo dices, realmente agradezco cualquier aporte.
¡Gracias, gracias, gracias!