Modifications:
- Add a function who return all the date for today and the last week - Use the new function when creating the CSV - global format for the date - Addings TODOs - Auto-Update the CSV file when date in it are too old (update values in it too)
This commit is contained in:
parent
64202b1332
commit
f203fb6a24
2 changed files with 60 additions and 16 deletions
9
main.py
9
main.py
|
@ -434,6 +434,9 @@ class GesMag:
|
|||
for element in self.panier:
|
||||
Stock().reduitQuantiteStock(element[0]["id"], element[1])
|
||||
|
||||
# On ajoute aux statistiques de l'utilisateur le total de la vente de ce panier
|
||||
# TODO
|
||||
|
||||
# Remet le panier à 0
|
||||
self.panier = []
|
||||
|
||||
|
@ -794,6 +797,12 @@ class GesMag:
|
|||
frameSuivi = LabelFrame(enfant, text="Suivi des ventes", font=self.font)
|
||||
frameSuivi.grid(column=1, row=0, sticky='n', padx=5)
|
||||
Label(frameSuivi, text="Aucun résultat récemment enrengistré").grid()
|
||||
# TODO
|
||||
"""
|
||||
Probablement un canvas ?
|
||||
|
||||
Attention, après une actualisation, les dates dans le fichier CSV ne seront plus rangés dans l'ordre.
|
||||
"""
|
||||
|
||||
Button(enfant, text="Quitter", command=enfant.destroy).grid(column=0, row=1, columnspan=2)
|
||||
|
||||
|
|
67
stats.py
67
stats.py
|
@ -1,11 +1,23 @@
|
|||
import csv
|
||||
|
||||
from datetime import date, timedelta
|
||||
from datetime import date, timedelta, datetime
|
||||
|
||||
from users import Utilisateurs
|
||||
|
||||
class Stats(Utilisateurs):
|
||||
"""Gère les statistiques et son export en format CSV."""
|
||||
def __init__(self):
|
||||
self.formatDate = "%Y/%m/%d"
|
||||
|
||||
def datesDisponibles(self) -> list:
|
||||
"""Renvoie les dates disponibles pour l'entête du fichier `CSV`."""
|
||||
datesPossibles = []
|
||||
dateAujourdHui = date.today() - timedelta(days=7)
|
||||
for _ in range(0, 8):
|
||||
datesPossibles.append(dateAujourdHui.strftime(self.formatDate))
|
||||
dateAujourdHui = dateAujourdHui + timedelta(days=1)
|
||||
return datesPossibles
|
||||
|
||||
def creationCSV(self, force: bool = False):
|
||||
"""
|
||||
Créer le fichier `CSV` qui stockera les statistiques pour tous les utilisateurs.
|
||||
|
@ -14,15 +26,9 @@ class Stats(Utilisateurs):
|
|||
`force = True`
|
||||
"""
|
||||
if not self.fichierExiste("stats.csv") or force:
|
||||
entete = ["id", "pseudo"]
|
||||
dateAujourdHui = date.today() - timedelta(days=7)
|
||||
for _ in range(0, 8):
|
||||
entete.append(dateAujourdHui.strftime("%Y/%m/%d"))
|
||||
dateAujourdHui = dateAujourdHui + timedelta(days=1)
|
||||
|
||||
with open("stats.csv", 'w') as f:
|
||||
fichier = csv.writer(f)
|
||||
fichier.writerow(entete)
|
||||
fichier.writerow(["id", "pseudo"] + self.datesDisponibles())
|
||||
|
||||
def miseAJourStatsUtilisateur(self, utilisateurID: int, prix: float):
|
||||
"""
|
||||
|
@ -38,11 +44,11 @@ class Stats(Utilisateurs):
|
|||
|
||||
Procéder normalement consiste à ajouter le prix au prix totale stocké dans la base de donnée.
|
||||
"""
|
||||
self.miseAJourDatesCSV()
|
||||
aujourdHui = date.today().strftime("%Y/%m/%d")
|
||||
self.miseAJourDatesCSV() # met à jour les dates du fichier `CSV`
|
||||
aujourdHui = date.today().strftime(self.formatDate)
|
||||
|
||||
print(prix)
|
||||
pass
|
||||
# Mets-à-jour le `CSV` avec le nouveau prix...
|
||||
# TODO
|
||||
|
||||
def exporteCSV(self, chemin: str, utilisateurID: int):
|
||||
"""
|
||||
|
@ -50,7 +56,7 @@ class Stats(Utilisateurs):
|
|||
- N'exporte que les statistiques du jour.
|
||||
"""
|
||||
donnees = self.recuperationDonneesCSV(utilisateurID)
|
||||
aujourdHui = date.today().strftime("%Y/%m/%d")
|
||||
aujourdHui = date.today().strftime(self.formatDate)
|
||||
with open(chemin, 'w') as f:
|
||||
fichier = csv.writer(f)
|
||||
fichier.writerow(["ID Utilisateur", f"Totales des ventes du jour ({aujourdHui})"])
|
||||
|
@ -66,7 +72,36 @@ class Stats(Utilisateurs):
|
|||
|
||||
def miseAJourDatesCSV(self):
|
||||
"""Mets-à-jour les dates trop anciennes du fichier globales `CSV`."""
|
||||
besoinDeMofication = False
|
||||
with open("stats.csv", 'r') as f:
|
||||
fichier = list(csv.DictReader(f))
|
||||
if fichier == []: # si fichier vide
|
||||
self.creationCSV(True) # on recréer le fichier dans le doute
|
||||
fichier = list(csv.reader(f))
|
||||
if len(fichier) == 1: # si fichier vide (que l'entête)
|
||||
self.creationCSV(True) # on recréer le fichier dans le doute (avec les bonnes dates)
|
||||
else:
|
||||
index = 2 # variable qui permet de savoir quel index on regarde (on commence à 2 car on ignore les 2 premières valeurs [id et pseudo])
|
||||
mauvaisIndex = [] # liste qui va stocker les index trop vieux (> 1 semaine)
|
||||
datesPresentes = [] # liste qui stock les dates valides présentes dans le fichier (< 1 semaine)
|
||||
for dateFichier in fichier[0][index:]: # on regarde toutes les dates du fichier
|
||||
if (date.today() - datetime.strptime(dateFichier, self.formatDate).date()).days > 7: # si trop vieux
|
||||
mauvaisIndex.append(index) # on ajoute l'index à la liste
|
||||
besoinDeMofication = True
|
||||
else:
|
||||
datesPresentes.append(dateFichier) # on ajoute la date à la liste
|
||||
index += 1
|
||||
|
||||
if not besoinDeMofication: # vérification si on a besoin de rien faire
|
||||
return # on quitte la fonction
|
||||
|
||||
datesPossible = [date for date in self.datesDisponibles() if date not in datesPresentes] # liste des dates possibles à rajouter
|
||||
for idx in mauvaisIndex: # pour tous les mauvais index
|
||||
for numLigne, ligne in enumerate(fichier): # on regarde toutes les lignes du fichier
|
||||
if idx < len(ligne): # s'il y a un élément dans la ligne à l'index donnée ou si elle est vide de toute façon
|
||||
if numLigne == 0: # si c'est la ligne d'entête
|
||||
ligne[idx] = datesPossible[0] # on change la ligne avec la nouvelle date
|
||||
else: # si c'est une ligne de donnée
|
||||
ligne[idx] = '' # on change la ligne avec une valeur vide
|
||||
fichier[numLigne] = ligne # on applique les changements
|
||||
if besoinDeMofication: # vérification si on a besoin de faire des changements
|
||||
with open("stats.csv", 'w') as f: # on applique les changements
|
||||
ecriture = csv.writer(f)
|
||||
ecriture.writerows(fichier)
|
||||
|
|
Reference in a new issue