ciboulette.net / blog / Déployé : corrections dans les calculs de totaux

Déployé : corrections dans les calculs de totaux

On m'a averti il y a 3 jours de petites différences de quelques centimes entre le montant des factures/tickets de caisse et les montants affichés dans les listes (commandes, paiements ..).

Il s'avère que le calcul du total de facture est fait à deux endroits différents dans le code.

Historiquement (jusqu'en mars 2021) tout les calculs étaient fait coté serveur (en JavaScript). Mais c'était un peu lent. Si un prix de produit changeait par exemple, il fallait recalculer les totaux des commandes contenant le produit. Comme c'était lent, j'essayais de le faire le moins souvent possible, avec parfois des bugs ou un total aurait du changer mais restait à son ancienne valeur.

En mars, j'ai introduit une nouvelle manière de calculer ces totaux, directement en base de donnée (mongodb). C'est beaucoup plus rapide (de l'ordre de 50x plus rapide). L’inconvénient, c'est que la base de donnée à des différences subtile dans sa manière de faire les arrondis.

J'ai continué d'utiliser les deux méthodes en parallèle, mais le résultat était parfois différent.

Cette partie est corrigée, j'ai rétabli le fonctionnement historique et mongoDB imite maintenant les arrondis fait par JavaScript.

J'ai voulu vérifier que les totaux correspondaient bien pour toutes les commandes enregistrées, et c'est la que j'ai découvert plusieurs bugs

  • les produits commandés, puis supprimés de la liste de produit par le maraîcher étaient "remplacés" par le dernier produit de la liste au moment du calcul dans mongodb
  • les frais de livraison étaient ignorés complètement dans le total calculé par mongdb
  • les frais de livraison étaient appliqués pour une commande vide dans le calcul javascript ..
  • les prix comme 0.000000000001 étaient replacés par 0.10€ dans le calcul JavaScript

Bref, pas mal de points à corriger.

J'ai fait en sorte de sauvegarder le total existant, appliquer les corrections, et ensuite voir ou est ce qu'il y a une différence entre les deux.

Je suis donc en mesure de vous fournir un fichier Excel listant les commandes ayant "bougé"

Puisque l'idée principale est de retrouver les même totaux qu'avant mars, vous devriez pouvoir ignorer les changements listés pour les semaines d'avant mars 2021.

Je vais envoyer individuellement le fichier par mail  aux 7 maraîchers touchés par le problème

J'ai aussi livré deux nouvelles petites fonctions en passant :

  • Case a cocher pour afficher les commandes vides dans l'onglet commande, décochée par défaut
  • Autorisation de prix nul pour les produits (entrer 0). Le produit sera affiché comme "gratuit" et les clients pourront le commander. Le comportement s'il ne commande que des produits gratuits n'est pas encore clair, mais au moins ça devrais pouvoir éviter les hacks du type "0.000000000001 €/kg "