Jump to content

Erreur dans les stats "meilleurs produits/catégories"


Arnaud06

Recommended Posts

Bonjour,

J'ai la sensation qu'il y a un problème dans les stats "meilleurs produits/catégories"
1/ les ventes annulées ne semble pas être déduite des stats
2/ le ca est calculé sans le prix de vente après déduction de la promotion
anecdotique vous me direz, mais bon moi j'ai 90% de mon catalogue en prix réduit, donc c'est tout faux... :-(

Pouvez vous me confirmer ? je en sais pas où sont les formules qui font marcher la bêtes...

Merci,

Arnaud

Link to comment
Share on other sites

Bonjour,

Avez-vous le même problème que moi sur les stats ?
L'équipe Presta peut-elle communiquer sur la "formule" de calcul employée ? je ne sais pas si c'est aussi simple que sur excel, mais il semble qu'il y ait une erreur, ou plutôt l'absence de prise en compte de particularité (commande annulée, promotion)

(non ce n'est pas dans le bug tracker)

Merci pour votre aide,

Arnaud

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

pour ceux qui souhaitent avoir les stats de produits vendus y compris les produits mis en inactifs, voici les modifs à effectuer sur le fichier /modules/statsbestproducts/statsbestproducts.php

public function getTotalCount($dateBetween)
{
$result = Db::getInstance()->GetRow('
SELECT COUNT(DISTINCT p.`id_product`) totalCount
FROM `'._DB_PREFIX_.'product` p
LEFT JOIN '._DB_PREFIX_.'order_detail od ON od.product_id = p.id_product
LEFT JOIN '._DB_PREFIX_.'orders o ON od.id_order = o.id_order
/* WHERE p.active = 1 AND o.valid = 1 */
WHERE o.valid = 1
AND o.invoice_date BETWEEN '.$dateBetween);
return $result['totalCount'];
}


public function getData()
{
$dateBetween = $this->getDate();
$arrayDateBetween = explode(' AND ', $dateBetween);
$this->_totalCount = $this->getTotalCount($dateBetween);

$this->_query = '
SELECT p.reference, p.id_product, pl.name, ROUND(AVG(od.product_price / c.conversion_rate), 2) as avgPriceSold,
(p.quantity + IFNULL((SELECT SUM(pa.quantity) FROM '._DB_PREFIX_.'product_attribute pa WHERE pa.id_product = p.id_product GROUP BY pa.id_product), 0)) as quantity,
IFNULL(SUM(od.product_quantity), 0) AS totalQuantitySold,
ROUND(IFNULL(IFNULL(SUM(od.product_quantity), 0) / (1 + LEAST(TO_DAYS('.$arrayDateBetween[1].'), TO_DAYS(NOW())) - GREATEST(TO_DAYS('.$arrayDateBetween[0].'), TO_DAYS(p.date_add))), 0), 2) as averageQuantitySold,
ROUND(IFNULL(SUM((od.product_price * od.product_quantity) / c.conversion_rate), 0), 2) AS totalPriceSold,
(
SELECT IFNULL(SUM(pv.counter), 0)
FROM '._DB_PREFIX_.'page pa
LEFT JOIN '._DB_PREFIX_.'page_viewed pv ON pa.id_page = pv.id_page
LEFT JOIN '._DB_PREFIX_.'date_range dr ON pv.id_date_range = dr.id_date_range
WHERE pa.id_object = p.id_product AND pa.id_page_type = 1
AND dr.time_start BETWEEN '.$dateBetween.'
AND dr.time_end BETWEEN '.$dateBetween.'
) AS totalPageViewed
FROM '._DB_PREFIX_.'product p
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.intval($this->getLang()).')
LEFT JOIN '._DB_PREFIX_.'order_detail od ON od.product_id = p.id_product
LEFT JOIN '._DB_PREFIX_.'orders o ON od.id_order = o.id_order
LEFT JOIN '._DB_PREFIX_.'currency c ON o.id_currency = c.id_currency
/* WHERE p.active = 1 AND o.valid = 1 */
WHERE o.valid = 1
AND o.invoice_date BETWEEN '.$dateBetween.'
GROUP BY od.product_id';

Link to comment
Share on other sites

Bonjour,

Merci poru ton retour, mais je ne suis pas certain que cela réponde à la question, mais si les modifications sont certainement à faire dans ce fichier... mon problème est :
1/ les commandes annulées ne semble pas être déduites des stats
2/ le CA est calculé avec le prix de vente avant réduction..
=> anecdotique vous me direz, mais bon moi j’ai 90% de mon catalogue en prix réduit avec réduction, donc c’est tout faux… :-(

Merci,

AP

Link to comment
Share on other sites

Bonjour,

Concernant les commandes annulées, normalement elles ne sont pas prises en compte dans les stats. On a bien dans la requête : o.valid = 1 qui signifie que les commandes sont valides.

Pour le CA, celui affiché est issu de ce qui est enregistré dans la commande, donc cela devrait normalement correspondre au prix y compris les remises éventuelles.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...