2009-03-06 10 views
9

Ich arbeite an einem Online-Shop auf der Magento-Plattform und habe einen großen Roadblock getroffen: Aus irgendeinem Grund kann ich nicht herausfinden, wie Sie aktuelle Bestellungen exportieren (mit Versandinformationen/Versandart/etc) . Hat jemand irgendwelche Vorschläge? Es scheint, als ob es eines der grundlegendsten Dinge für ein System wie dieses sein sollte, aber ich konnte nicht herausfinden, wie.Exportieren von Bestellungen aus Magento für den Versand

Vielen Dank im Voraus für Ihre Hilfe,

Andy

+1

Ich bin mir nicht sicher, was Sie gerade tun möchten ... den aktuellen Auftrag oder alle ausstehenden Aufträge exportieren? Exportieren sie wo und zu welchem ​​Zweck? Soll dies auf einer bestimmten Seite geschehen oder wenn etwas passiert (wie wenn die Bestellung erstellt wird)? –

+0

Ich muss eine Tabelle (d. H. CSV) abgeschlossener Aufträge aus Magento herausholen, damit ich sie entweder mit einem dedizierten UPS/USPS-Programm verwenden oder sie an unseren Fulfillment-Anbieter senden kann, damit sie die Artikel für uns versenden können. – theandym

Antwort

24

Wenn Sie dies für den Versand wünschen, können Sie fragen, wer mit Ihrem Versand handelt, ob sie eine API haben, so dass Sie ein entsprechendes Versandmodul erstellen/kaufen/herunterladen können und sich den Ärger mit CSV-Dateien ersparen .

Wenn Sie wirklich eine CSV-Datei möchten, kann ich Ihnen jedoch zeigen, wie Sie sie erstellen können. Sie haben nicht erwähnt, wo dieses Skript läuft, also nehme ich an, dass es ein externes Skript ist (was die Verwendung mit einem Cron-Job erleichtert). Sie möchten folgendes tun:

//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"; 
} 

Aus Gründen der Kürze (und geistige Gesundheit) ich alle nicht zur Verfügung, um Informationen aufgelistet haben. Sie können herausfinden, welche Felder verfügbar sind, indem Sie die relevanten Objekte löschen und deren Felder betrachten.

Zum Beispiel, wenn Sie print_r ($ myOrder-> getBillingAddress()); Sie sehen Felder wie "Adressart" und "Nachname". Sie können diese mit $ myOrder-> getBillingAddress() -> getAddress_type() und $ myOrder-> getBillingAddress() -> getLastname() verwenden.

bearbeiten: Geänderte Code nach craig.michael.morris Antwort

0

Wenn das System keine direkte Art und Weise unterstützt Aufträge zu exportieren, können Sie eine Ansicht in der Datenbank erstellen können, die die Befehle aufführt müssen Export. Verwenden Sie dann so etwas wie phpMyAdmin, um die Daten aus der Ansicht als CSV zu exportieren.

4

ich im Begriff war Ihre Lösung zu implementieren und bemerkte, dass es wurde nur die ersten Werte für alle Fremdschlüssel wie Abrechnung Rückkehr Adresse, Lieferadresse, Zahlungs etc ...

Dies kann durch Änderung

$ myOrder-> load ($ thisId) festgelegt werden;

zu

$ myOrder-> Reset() -> Last ($ thisId);

4

Sie können sich auch bei dieser Erweiterung aussehen soll: http://www.magentocommerce.com/extension/1158/manual-order-export

Sie können auch über Seife verbinden: In diesem Beispiel gesetzt für localhost und vorausgesetzt, dass Sie eine Web-Services für Benutzer und Rollen unter System einrichten >> Web Dienste im Admin.

<?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

Falls dies einem hilft, können Sie die Rechnungstabelle als Schlüssel verwenden. Eine Rechnung in Magento mit einer Authentifizierungskarten-Einrichtung bedeutet, dass das Geld eingegangen ist.In unserem Fall benötigten wir nur eine SQL-Abfrage in phpmyadmin, die Bestellnummern und Rechnungsnummern exportiert, die wir abstimmen mussten, um zu überprüfen, ob die Auftragsexport-Erweiterung von Xtento funktionierte. Dies ist, was wir gebraucht:

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

Saho Vorschlag für SOAP ist groß, aber es kann sehr lange dauern (Apache kann nur eine begrenzte CPU-Ressourcen zuweisen zu treten, dass die Anfrage bearbeiten)

vorschlagen Sie um ein PHP-Skript zu schreiben und es dann durch Terminal laufen zu lassen.

Sonam