Encore un article sur Prestashop. Pour faciliter la préparation des commandes et ne pas avoir à regarder chaque commande une à une pour lister les produits à préparer (ce qui est le cas pour mon entreprise artisanale), j'ai crée une page web qui va lister les commandes et la quantité de produits dans les commandes en cours. C'est ce qu'on appelle la fonction de picking.
De nombreux modules existent mais ils sont tous payants, du coup j'ai résolu le problème autrement en faisant une page web indépendante de prestashop et qui va interroger la base de données pour récupérer les données et les afficher joliment, voilà ce que ça donne:
Dans le premier tableau, on a les différentes commandes avec une ligne par type de produit commandé. Dans le second tableau, on liste les différents produits et le nombre de commande. Voilà j'espère que ça rendra service à quelqu'un, le code ci-dessous, il fonctionne sous Prestashop 1.7. Il suffit de créer un fichier PHP avec ce code et de la placer à la racine du site via FTP.
C'est pas ultra sécurisé, il serait donc bien de rajouter un mot de passe pour accéder à cette page.
<style>
td,th{
border: 1px solid black;
padding: 5px
}
table{
border-collapse: collapse;
}
*{
font-family: Calibri;
}
</style>
<head>
<title>Commandes en cours</title>
<link rel="shortcut icon" type="image/png" href="/img/favicon.ico"/>
<meta name="robots" content="index, nofollow">
</head>
<?php$date = date("d-m-Y");
$heure = date("H:i");?>
<h2>Commandes à livrer au <?php echo $date." ".$heure; ?></h2>
<table>
<tr><th>Date commande</th><th>Nom Client</th><th>Produit</th><th>Qté</th><th>ID Cmd</th></tr>
<?php
try
{
$bdd = new PDO('mysql:host=serveur;dbname=basededonnees;charset=utf8', 'user', 'password');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}$reponse = $bdd->query('SELECT a.`id_order`, c.`firstname`, c.`lastname`, od.`product_id`,od.`product_reference`, od.`product_name`,od.`product_quantity`, a.`date_add`
FROM `ps_orders` a , `ps_customer` c , `ps_order_detail` od , `ps_order_state` os
WHERE 1 AND c.`id_customer` = a.`id_customer` and od.`id_order`=a.`id_order`
AND os.`id_order_state` IN (2,3)
AND os.`id_order_state` = a.`current_state`
ORDER BY a.`id_order` ASC');while ($donnees = $reponse->fetch())
{
?>
<?php
echo '<tr>';
$date = strtotime($donnees['date_add']);
$date= date('d-m-Y H:i', $date);
echo '<td>'.$date."</td><td>".$donnees['lastname']." ".$donnees['firstname']."</td><td>".$donnees['product_name']."</td><td align='center'>".$donnees['product_quantity']."</td><td>".$donnees['id_order']."</td>";
?></tr><?php
}
?>
</table>
<h2>Récapitulatif produits</h2>
<table><tr><th >Id produit</th><th >Ref produit</th><th>Produit</th><th>Quantité</th></tr>
<?$reponse = $bdd->query('SELECT od.`product_id`,od.`product_reference`, od.`product_name`,sum(od.`product_quantity`) as res
FROM `ps_orders` a , `ps_customer` c , `ps_order_detail` od , `ps_order_state` os
WHERE 1 AND c.`id_customer` = a.`id_customer` and od.`id_order`=a.`id_order` AND os.`id_order_state` IN (2,3) AND os.`id_order_state` = a.`current_state`
group by od.`product_name`
order by od.`product_name`');// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<?php
echo '<tr>';
echo "<td>".$donnees['product_id']."</td><td>".$donnees['product_reference']."</td><td>".$donnees['product_name']."</td><td align='center'>".$donnees['res']."</td>";
?></tr><?php
}
?>
</table>
<?php
$reponse->closeCursor(); // Termine le traitement de la requête?>