Pregunta

Estoy trabajando en una tienda en línea en la plataforma Magento y han afectado a un gran obstáculo:Por alguna razón No puedo averiguar cómo exportar pedidos actual (con información de envío/tipo de envío/etc). ¿Alguien tiene alguna sugerencia?Esto parece como si se debe a una de las cosas más básicas para un sistema como este para hacer, pero no he sido capaz de averiguar cómo.

Gracias de antemano por su ayuda,

Andy

¿Fue útil?

Solución

Al ver cómo lo desea para el envío, es posible que desee preguntarle a quienquiera que se encargue de su envío si tiene algún tipo de API para poder construir / comprar / descargar un módulo de envío adecuado y ahorrarse la molestia de meterse con los archivos CSV.

Si realmente quieres un archivo CSV, puedo mostrarte cómo crearlo. No mencionó dónde se ejecutará este script, por lo que asumiré que es un script externo (lo que facilitará su uso con un trabajo cron). Quieres 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 toda la información de pedido disponible. Puede averiguar qué campos están disponibles descargando los objetos relevantes y observando sus campos.

Por ejemplo, si tuviera que hacer print_r ($ myOrder- > getBillingAddress ()); verías campos como " address_type " y " apellido " ;. Puedes usar estos con $ myOrder- > getBillingAddress () - > getAddress_type () y $ myOrder- > getBillingAddress () - > getLastname () respectivamente.

Editar : Se cambió el código de acuerdo con la respuesta de craig.michael.morris

Otros consejos

Estaba implementando su solución y noté que solo estaba devolviendo los primeros valores de todas las claves externas, como la dirección de facturación, la dirección de envío, el pago, etc. ...

Esto se puede arreglar cambiando

$ myOrder- > load ($ thisId);

a

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

Quizás también quieras ver esta extensión: http://www.magentocommerce.com/extension/1158/manual-order-export

También puedes conectarte a través de jabón:Este ejemplo está configurado para localhost y supone que ha configurado un usuario y una función de servicios web en sistema>>servicios web 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>"; 
?>

En caso de que esto ayude a cualquiera, puede usar la tabla de facturas como clave. Una factura en Magento con una configuración de tarjeta de crédito auth + capture significa que ha llegado el dinero. En nuestro caso, solo necesitábamos una consulta SQL para ejecutar en phpmyadmin que exportaría números de pedido y números de factura para que nos reconciliéramos para verificar que el pedido de exportación La extensión de xtento estaba funcionando. Esto es lo que usamos:

 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 

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

La sugerencia de Saho para usar SOAP es excelente, pero puede llevar mucho tiempo (Apache solo puede asignar un recurso de CPU limitado a la banda de rodadura para manejar esa solicitud)

Te sugiero que escribas un script php y luego lo ejecutas a través de la terminal.

Sonam

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top