gringo1er Posted October 19 Share Posted October 19 (edited) Bonjour J'ai parcouru le forum, je n'ai pas trouvé la réponse, du coup je me lance: Sur le dashboard de prestashop, les statistiques affichent une rubrique "Ventes". Je souhaiterais que cela affiche le véritable montant des ventes, sans considérer les frais associés potentiels liés aux transports ou commissions des méthodes de paiement. J'ai donc tout mis à zéro dans les paramètres du tableau de bord. Mais le constat est là: le nombre de commandes sur la période de requête est bonne, mais le montant HT des commandes ne l'est pas. Je ne sais pas comment faire afficher le véritable montant des ventes, en HT si je n'ai pas le choix, en TTC serait un plus. Pour illustrer, ci jointe une copie d'écran, deux commandes et un montant réel de 45,73 € HT, mais 34,58 € HT affichés. Je suis preneur de toute solution Merci! Edited October 20 by gringo1er (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 19 Share Posted October 19 Normalement, le chiffres de "Ventes" correspond au total HT des ventes validées (Frais de port inclus), pour la période sélectionnée. Le chiffre pour chaque vente est le total HT. Les paramètres ne servent qu'à calculer le bénéfice estimé. Dans PhenixSuite j'ai corrigé plusieurs fonctions liées à ces modules du dashboard qui faisaient un peut n'importe quoi. Link to comment Share on other sites More sharing options...
gringo1er Posted October 19 Author Share Posted October 19 (edited) 33 minutes ago, Eolia said: Normalement, le chiffres de "Ventes" correspond au total HT des ventes validées (Frais de port inclus), pour la période sélectionnée. Le chiffre pour chaque vente est le total HT. Les paramètres ne servent qu'à calculer le bénéfice estimé. Oui, et c'est le cas de l'état "paiement accepté", la commande est considérée comme validée. D'où l'incompréhension du résultat actuel. Je me demande si ça ne prend pas en compte les coûts de la matière première. Edited October 19 by gringo1er (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 19 Share Posted October 19 Le prix d'achat (ce que vous appelez "matière première" ?) est déduit dans l'onglet des meilleures ventes pour obtenir un "Bénéfice net" Link to comment Share on other sites More sharing options...
gringo1er Posted October 19 Author Share Posted October 19 En fait, je me suis mal exprimé dans la demande. Le montant "ventes" est faux et ne correspond à rien, et le module dashboard trends ne fait que l'afficher. Je cherche à trouver la source de l'erreur. Link to comment Share on other sites More sharing options...
Eolia Posted October 19 Share Posted October 19 le module récupère les données dans AdminStatsController.php, fonction getTotalSales() Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 14 hours ago, Eolia said: le module récupère les données dans AdminStatsController.php, fonction getTotalSales() Bonjour. Merci. Pourriez-vous indiquer où trouver ce fichier php? Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 en 1.6 dans /controllers/admin/ Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 17 hours ago, Eolia said: le module récupère les données dans AdminStatsController.php, fonction getTotalSales() 30 minutes ago, Eolia said: en 1.6 dans /controllers/admin/ Merci beaucoup, c'est pareil en 8.1.x. Voici le calcul SELECT LEFT(`invoice_date`, 10) AS date, SUM((total_paid_tax_excl - total_shipping_tax_excl) / o.conversion_rate) AS sales Et je l'ai remplacé par SELECT LEFT(`invoice_date`, 10) AS date, SUM((total_paid_tax_incl)) AS sales Et du coup, on voit d'une part la nature du calcul (retirant les frais de port HT et divisant par un taux de conversion sorti de nulle part. Mais après manip, c'est le montant TTc qui apparait. C'est donc réglé! Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 Faites un override de la fonction sinon vous perdrez vos modifications à la prochaine maj. Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 Le taux de conversion n'est pas sorti de nulle part si vous avez différentes devises^^ Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 9 minutes ago, Eolia said: Faites un override de la fonction sinon vous perdrez vos modifications à la prochaine maj. Un override de controlers / admin ? Je n'ai jamais fait cela, je suppose que le fichier modifié est à mettre dans /override / classes / controlers / admin ? Merci pour vos conseils Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 8 minutes ago, Eolia said: Le taux de conversion n'est pas sorti de nulle part si vous avez différentes devises^^ Le site est en euros uniquement. Donc j'imagine que c'est divisé par 1 alors Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 Oui, c'est bien dans /overrides/controllers/admin/ qu'il faut rajouter un fichier avec le même nom (AdminStatsController.php) qui contient: <?php class AdminStatsController extends AdminStatsControllerCore { // La fonction modifiée en entier } il y a 16 minutes, gringo1er a dit : Le site est en euros uniquement. Donc j'imagine que c'est divisé par 1 alors Dans votre cas, oui. Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 1 hour ago, Eolia said: Oui, c'est bien dans /overrides/controllers/admin/ qu'il faut rajouter un fichier avec le même nom (AdminStatsController.php) qui contient: <?php class AdminStatsController extends AdminStatsControllerCore { // La fonction modifiée en entier } J'ai pris tout le fichier, mis le class ...... en tête sous le php, et mis tout le contenu suivant du fichier entre accolades. Cela ne fonctionne pas, le montant revient faux comme avant. Dans le contenu il y a aussi un class AdminStatsControllerCore extends AdminStatsTabController avec des accolades aussi. Peut-être y a-t-il un conflit? Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 il y a 6 minutes, gringo1er a dit : J'ai pris tout le fichier, mis le class ...... en tête sous le php, et mis tout le contenu suivant du fichier entre accolades. Ben ça c'est n'importe quoi... Vous prenez mon modèle et vous n'y mettez QUE la fonction modifiée. Ensuite vous videz le cache de votre Prestashop. Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 Je débute dans les override. Ca donne ceci: <?php class AdminStatsController extends AdminStatsControllerCore { public static function getTotalSales($date_from, $date_to, $granularity = false) { if ($granularity == 'day') { $sales = []; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( ' SELECT LEFT(`invoice_date`, 10) AS date, SUM((total_paid_tax_incl)) AS sales FROM `' . _DB_PREFIX_ . 'orders` o LEFT JOIN `' . _DB_PREFIX_ . 'order_state` os ON o.current_state = os.id_order_state WHERE `invoice_date` BETWEEN "' . pSQL($date_from) . ' 00:00:00" AND "' . pSQL($date_to) . ' 23:59:59" AND os.logable = 1 ' . Shop::addSqlRestriction(false, 'o') . ' GROUP BY LEFT(`invoice_date`, 10)' ); foreach ($result as $row) { $sales[strtotime($row['date'])] = $row['sales']; } return $sales; } elseif ($granularity == 'month') { $sales = []; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( ' SELECT LEFT(`invoice_date`, 7) AS date, SUM((total_paid_tax_incl)) AS sales FROM `' . _DB_PREFIX_ . 'orders` o LEFT JOIN `' . _DB_PREFIX_ . 'order_state` os ON o.current_state = os.id_order_state WHERE `invoice_date` BETWEEN "' . pSQL($date_from) . ' 00:00:00" AND "' . pSQL($date_to) . ' 23:59:59" AND os.logable = 1 ' . Shop::addSqlRestriction(false, 'o') . ' GROUP BY LEFT(`invoice_date`, 7)' ); foreach ($result as $row) { $sales[strtotime($row['date'] . '-01')] = $row['sales']; } return $sales; } else { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( ' SELECT SUM((total_paid_tax_incl)) FROM `' . _DB_PREFIX_ . 'orders` o LEFT JOIN `' . _DB_PREFIX_ . 'order_state` os ON o.current_state = os.id_order_state WHERE `invoice_date` BETWEEN "' . pSQL($date_from) . ' 00:00:00" AND "' . pSQL($date_to) . ' 23:59:59" AND os.logable = 1 ' . Shop::addSqlRestriction(false, 'o') ); } } } Mais cela ne marche pas plus (la modif est appliquée pour le jour, le mois, et au choix). Mais cela ne fonctionne pas... J'ai scrupuleusement suivi le modèle. Je pense avoir bien respecté les ouvertures et fermetures de parenthèse. Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 Donc le code est ok. - Les overrides ne sont pas désactivés dans les paramètres de performance de votre boutique ? - Le cache a bien été vidé ? Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 Une fois le cache vidé, le fichier /var/cache/prod/class_index.php (qui contient l'index des classes et des overrides) doit avoir été regénéré. Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 5 minutes ago, Eolia said: Une fois le cache vidé, le fichier /var/cache/prod/class_index.php (qui contient l'index des classes et des overrides) doit avoir été regénéré. Effectivement, cache nettoyé, et ça fonctionne! Merci beaucoup pour l'aide! le post est vraiment clos maintenant. Et re merci! Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 Et maintenant vous savez écrire un override Link to comment Share on other sites More sharing options...
gringo1er Posted October 20 Author Share Posted October 20 Le prochain que j'avais en tête, c'était une modif du pdf des factures, mais je crains que PS ne le permette pas.... Mais on en apprend à tout âge! et je vous en remercie pour ça.. Link to comment Share on other sites More sharing options...
Eolia Posted October 20 Share Posted October 20 pour les pdf pas besoin d'override, vous avez un répertoire /pdf/ dans votre thème (s'il n'y est pas, ajoutez-le et mettez-y la copie intégrale modifiée des templates natifs contenus dans le répertoire /pdf à la racine. Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted October 21 Share Posted October 21 Si vous voulez vous simplifier la vie, mon module de stats (Op'art Stat) va vous donner ce genre d'informations et bien plus 🙂 https://addons.prestashop.com/fr/analyses-statistiques/90621-opart-stat-statistiques-ecommerce-utiles-et-fiables.html Link to comment Share on other sites More sharing options...
gringo1er Posted October 21 Author Share Posted October 21 13 minutes ago, Olivier CLEMENCE said: Si vous voulez vous simplifier la vie, mon module de stats (Op'art Stat) va vous donner ce genre d'informations et bien plus 🙂 https://addons.prestashop.com/fr/analyses-statistiques/90621-opart-stat-statistiques-ecommerce-utiles-et-fiables.html Merci pour la proposition. En fait la valeur Sales est reprise par un autre module qui synchronise la gestion par téléphone, avec notifications tout ça. Quand on veut savoir combien la boutique a rapporté le jour ou le mois en cours, en un coup d'œil avec son tel, autant porter la vraie valeur. Pour les statistiques plus approfondies nous avons ce qu'il faut, indispensable par exemple pour la compta. Mais c'est sympa de proposer Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now