Question

Je travaille sur une boutique en ligne sur la plateforme Magento et je suis confronté à un obstacle majeur :Pour certaines raisons Je n'arrive pas à comprendre comment exporter les commandes en cours (avec informations d'expédition/type d'expédition/etc). Est-ce que quelqu'un a des suggestions?Il semble que cela devrait être l’une des choses les plus fondamentales pour un système comme celui-ci, mais je n’ai pas réussi à savoir comment.

Merci d'avance pour votre aide,

Andy

Était-ce utile?

La solution

Comme vous le souhaitez pour l’expédition, vous pouvez demander à la personne qui s’occupe de votre envoi si elle a une sorte d’API pour vous permettre de créer / acheter / télécharger un module d’expédition approprié et de vous épargner les tracas de fichiers CSV.

Si vous voulez vraiment un fichier CSV, je peux vous montrer comment le créer. Vous n'avez pas mentionné où ce script sera exécuté, je vais donc supposer qu'il s'agit d'un script externe (ce qui facilitera son utilisation avec un travail cron). Vous souhaitez effectuer les opérations suivantes:

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

Par souci de brièveté (et de raison), je n’ai pas répertorié toutes les informations de commande disponibles. Vous pouvez connaître les champs disponibles en vidant les objets correspondants et en consultant leurs champs.

Par exemple, si vous deviez faire print_r ($ myOrder- > getBillingAddress ()); vous verrez des champs tels que " address_type " et "nom". Vous pouvez les utiliser avec $ myOrder- > getBillingAddress () - > getAddress_type () et $ myOrder- > getBillingAddress () - > getLastname () respectivement.

Modifier : Code modifié en fonction de la réponse de craig.michael.morris

Autres conseils

J'étais en train de mettre en œuvre votre solution et j'ai constaté qu'elle ne renvoyait que les premières valeurs de toutes les clés étrangères telles que l'adresse de facturation, l'adresse de livraison, le paiement, etc. ...

Ceci peut être corrigé en changeant

$ myOrder- > load ($ thisId);

à

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

Vous pouvez également consulter cette extension : http://www.magentocommerce.com/extension/1158/manual-order-export

Vous pouvez également vous connecter via Soap :Cet exemple est configuré pour localhost et suppose que vous avez configuré un utilisateur et un rôle de services Web sous système>> services Web dans l'administrateur.

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

Si cela vous aide, vous pouvez utiliser la table de facturation comme clé. Une facture dans magento avec une configuration de carte de crédit auth + capture signifie que l'argent est entré. Dans notre cas, nous n'avions besoin que d'une requête SQL à exécuter dans phpmyadmin qui exporterait les numéros de commande et les numéros de facture afin que nous puissions procéder à un rapprochement afin de vérifier que la commande exportait. L'extension de xtento fonctionnait. Voici ce que nous avons utilisé:

 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 le système ne prend en charge aucun moyen direct d’exporter des commandes, vous pouvez créer une vue dans la base de données répertoriant les commandes à exporter. Ensuite, utilisez quelque chose comme phpMyAdmin pour exporter les données de la vue au format CSV.

La suggestion de Saho d'utiliser SOAP est excellente, mais cela peut prendre un certain temps (Apache ne peut affecter qu'une ressource CPU limitée à gérer pour traiter cette requête)

Vous suggère d'écrire un script php puis de l'exécuter via le terminal.

Sonam

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top