Jump to content

[Solved] Tableau de bord: affichage véritable montant des ventes


Recommended Posts

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!

dashboard.jpg

Edited by gringo1er (see edit history)
Link to comment
Share on other sites

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.

image.thumb.png.32cd56620fda97599fb0cce0f01352d1.png

Link to comment
Share on other sites

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 by gringo1er (see edit history)
Link to comment
Share on other sites

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

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

  • gringo1er changed the title to [Solved] Tableau de bord: affichage véritable montant des ventes
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

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

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

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

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

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

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

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

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...