[ Virtuemart ] Recevoir un mail lorsque qu’un produit devient épuisé

Si vous souhaitez recevoir un e-mail lorsque un produit n’est plus en stock sur votre boutique, il faut ajouter un petit bout de code dans le fichier « /administrator/components/com_virtuemart/classes/ps_checkout.php »

J’ai trouvé le bout de code sur le forum de Joomla mais comme d’habitude cela ne m’a pas trop convenu… En fait si le code est bien mais sa position c’est carrément n’importe quoi ! En fait si on fait ce qui est dit le code sera exécuté très très souvent et même plusieurs fois sur la même page ! Il ne faut en fait l’atteindre que lorqu’on valide le panier, ça me parait évident !

Donc dans le fameux fichier « /administrator/components/com_virtuemart/classes/ps_checkout.php » chercher la fonction add() (environ ligne 880)

Après :

    // Update stock of parent product, if all child products are sold, thanks Ragnar Brynjulfsson
    if ($dboi->f("product_parent_id") != 0) {
        $q = "SELECT COUNT(product_id) ";
        $q .= "FROM #__{vm}_product ";
        $q .= "WHERE product_parent_id = ".$dboi->f("product_parent_id");
        $q .= " AND product_in_stock > 0";
        $db->query($q);
        $db->next_record();
        if (!$db->f("COUNT(product_id)")) {
            $q = "UPDATE #__{vm}_product ";
            $q .= "SET product_in_stock = 0 ";
            $q .= "WHERE product_id = ".$dboi->f("product_parent_id")." LIMIT 1";
            $db->query($q);
        }
    }
}

Mettre ça :

// ALERTE RUPTURE DE STOCK
$dbv = new ps_DB;
$q = "SELECT vendor_name,contact_email FROM #__{vm}_vendor ";
$q .= "WHERE vendor_id=$ps_vendor_id";
$dbv->query($q);
$dbv->next_record();
$dbs = new ps_DB;
$q = "SELECT product_name FROM #__{vm}_product, #__{vm}_order_item";
$q .= " WHERE #__{vm}_order_item.product_id = #__{vm}_product.product_id ";
$q .= "AND #__{vm}_product.product_in_stock < '1'";        
$q .= "AND #__{vm}_order_item.order_id='" . $order_id . "'";       
$dbs->query( $q );
// Now update each ordered product
while( $dbs->next_record() ) {
    $product_name = $dbs->f("product_name");
    $objet = "Rupture de stock suite à la commande " . $order_id;
    $message = "Produit : " . $product_name;
    vmMail( $dbv->f("contact_email"),  "ALERTE STOCK", $dbv->f("contact_email"), $objet , $message, '' );
}

// FIN ALERTE RUPTURE DE STOCK

Normalement juste après le code ajouté il y a

######## BEGIN DOWNLOAD MOD ###############

Et le tour est joué !