2011-11-08 9 views
5

Parece que no hay un consenso sólido sobre este tema. Hay un hilo on the Magento message board que ofrece todo tipo de variaciones y enfoques, ninguno funciona y ninguno explica qué se debe hacer en este proceso.¿Cómo puedo importar pedidos en Magento mediante programación?

Por lo que puedo decir, debe simular los pasos de un pedido creado en el sitio web, es decir, agregar productos a un 'carro', agregar una dirección de envío y facturación, agregar un método de envío, agregar un método de pago y 'pago y envío'.

¿Puede alguien explicar exactamente estos pasos y mostrar las líneas de código que son responsables de ejecutar los pasos.

Además, he visto ejemplos en el código del tablero de mensajes de un 'carro' y una 'cita'. Explique la diferencia (o similitudes) entre 2.

+0

He hecho una pregunta válida. ¿Por qué te molestaría perder el tiempo publicando esto? ¿Y quién diablos votó mi pregunta ??? – Billy

+0

Mi punto era que alguien tendría que escribir el equivalente de un artículo de blog para responder de manera suficiente todo lo que solicitó en su pregunta. Además, escribir una sola oración realmente no ocupa mucho de mi tiempo. En este sitio, una pregunta en general no debería requerir una respuesta que demore más de 30 minutos en escribirse. –

+0

Respondí la mitad de mi pregunta en 10 minutos de tiempo de tipeo. – Billy

Respuesta

6

He resuelto la tarea de programación. Resulta que no tiene que simular 'agregar al carrito', como sugieren otras publicaciones en otros lugares. Puede crear el objeto de pedido y los objetos relacionados y rellenar con datos, simplemente no es tan sencillo como me gustaría que fuera.

La mejor manera de crear un pedido es this blog post.

He copiado el código aquí:

$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(); 

todavía no han conseguido una comprensión de la diferencia entre un carro y la cita es.

Cuestiones relacionadas