2009-03-06 19 views
9

Estoy trabajando en una tienda en línea en la plataforma Magento y he golpeado una barricada importante: Por alguna razón No puedo entender cómo exportar pedidos actuales (con información de envío/tipo de envío/etc.) . ¿Alguien tiene alguna sugerencia? Parece que debería ser una de las cosas más básicas para un sistema como este, pero no he podido averiguar cómo.Órdenes de exportación de Magento para envío

Gracias de antemano por su ayuda,

Andy

+1

No estoy seguro de lo que está tratando de hacer exactamente ... exportar el pedido actual o todas las órdenes pendientes? ¿Exportarlos a dónde y con qué propósito? ¿Esto tiene lugar en alguna página en particular o cuando sucede algo (como cuando se crea la orden)? –

+0

Necesito obtener una hoja de cálculo (es decir, CSV) de pedidos completados de Magento para que pueda usarla con un programa UPS/USPS dedicado o enviarla a nuestro proveedor de cumplimiento para que puedan enviar los artículos por nosotros. – theandym

Respuesta

24

Como quiera que esto sea para el envío, puede preguntarle a quien maneja su envío si tienen algún tipo de API para que pueda construir/comprar/descargar un módulo de envío adecuado y ahorrarse la molestia de perder con archivos CSV .

Si realmente quieres un archivo CSV, sin embargo, puedo mostrarte cómo crearlo. No mencionó dónde se ejecutará este script, así que supongo que es un script externo (que lo hará más fácil de usar con un trabajo cron). Usted quiere hacer lo siguiente:

//External script - Load magento framework 
require_once("C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\magento\app\Mage.php"); 
Mage::app('default'); 

$myOrder=Mage::getModel('sales/order'); 
$orders=Mage::getModel('sales/mysql4_order_collection'); 

//Optional filters you might want to use - more available operations in method _getConditionSql in Varien_Data_Collection_Db. 
$orders->addFieldToFilter('total_paid',Array('gt'=>0)); //Amount paid larger than 0 
$orders->addFieldToFilter('status',Array('eq'=>"processing")); //Status is "processing" 

$allIds=$orders->getAllIds(); 
foreach($allIds as $thisId) { 
    $myOrder->reset()->load($thisId); 
    //echo "<pre>"; 
    //print_r($myOrder); 
    //echo "</pre>"; 

    //Some random fields 
    echo "'" . $myOrder->getBillingAddress()->getLastname() . "',"; 
    echo "'" . $myOrder->getTotal_paid() . "',"; 
    echo "'" . $myOrder->getShippingAddress()->getTelephone() . "',"; 
    echo "'" . $myOrder->getPayment()->getCc_type() . "',"; 
    echo "'" . $myOrder->getStatus() . "',"; 
    echo "\r\n"; 
} 

En aras de la brevedad (y la cordura) No he enumerado todos los datos de pedidos. Puede averiguar qué campos están disponibles al descargar los objetos relevantes y echar un vistazo a sus campos.

Por ejemplo, si tuviera que imprimir_r ($ myOrder-> getBillingAddress()); Vería campos como "tipo de dirección" y "apellido". Puede usarlos con $ myOrder-> getBillingAddress() -> getAddress_type() y $ myOrder-> getBillingAddress() -> getLastname() respectivamente.

Editar: código modificado de acuerdo a la respuesta del craig.michael.morris

0

Si el sistema no admite ninguna forma directa para exportar pedidos, se puede crear una vista en la base de datos que enumera las órdenes que necesita exportar. Luego use algo como phpMyAdmin para exportar los datos de la vista como CSV.

4

yo estaba en el proceso de implementación de su solución y se dio cuenta de que sólo estaba regresando los primeros valores para todas las claves externas tales como facturación dirección, dirección de envío, pago, etc ...

Esto se puede solucionar cambiando

$ myOrder-> carga ($ thisId);

a

$ myOrder-> reset() -> carga ($ thisId);

4

También es posible que desee ver en esta extensión: http://www.magentocommerce.com/extension/1158/manual-order-export

también se puede conectar a través de jabón: Este ejemplo está configurado para localhost y asume que ha configurado un usuario de servicios web y el papel bajo el sistema web >> servicios en el administrador.

<?php 
$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$begintime = $time; 
?> 
<?php 
ini_set('error_reporting', E_ALL); 
ini_set('display_errors', 1); 
// hostname 
$host= '127.0.0.1'; 
// if store in /magento change /shop, if store in root remove /shop 
$client= new SoapClient('http://'.$host.'/magento/index.php/api/soap/?wsdl'); 

// Can be added in Magento-Admin -> Web Services with role set to admin 
$apiuser= 'soap'; 
// API key is password 
$apikey = '******'; 
$sess_id= $client->login($apiuser, $apikey); 
echo "<html>"; 
echo "<head>"; 
echo "<LINK REL=StyleSheet HREF=\"style.css\" TYPE=\"text/css\" MEDIA=screen>"; 
echo "</head>"; 
echo "<body>"; 

$result= $client->call($sess_id, 'sales_order.list', array(array('status'=>array('='=>'Pending')))); 
echo '<pre>'; 
print_r($result); 
echo '<pre>'; 


?> 
<?php 
// Let's see how long this took… 
$time = microtime(); 
$time = explode(" ", $time); 
$time = $time[1] + $time[0]; 
$endtime = $time; 
$totaltime = ($endtime - $begintime); 
echo '<br /><br /><em>This Magento SOAP API script took ' .$totaltime. ' seconds, precisely.</em>'; 
// ...and close the HTML document 
echo "</body>"; 
echo "</html>"; 
?> 
2

En caso de que esto ayuda a cualquiera, puede utilizar la tabla de la factura como una clave. Una factura en magento con una configuración de tarjeta de crédito auth + capture significa que ha ingresado el dinero.En nuestro caso, solo necesitábamos una consulta sql para ejecutar en phpmyadmin que exportaría los números de orden y los números de factura para que nos reconciliéramos y comprobar que la extensión de exportación de pedidos de xtento funcionaba. Esto es lo que hemos utilizado:

SELECT sales_flat_order.increment_id AS 'order', sales_flat_invoice.increment_id AS 'invoice' 
    FROM sales_flat_order 
    RIGHT JOIN sales_flat_invoice ON sales_flat_invoice.order_id = sales_flat_order.entity_id 
    WHERE sales_flat_invoice.updated_at >= "2011-07-01 00:00:00" 
    ORDER BY sales_flat_order.increment_id DESC 
0

sugerencia de Saho para el uso de SOAP es grande, pero puede tomar mucho tiempo (Apache sólo puede asignar un recurso de CPU limitada a pisar para manejar esa petición)

sugieres para escribir un script php y luego ejecutarlo a través de la terminal.

Sonam

Cuestiones relacionadas