diff --git a/main.py b/main.py index d63f3c1..703fb9b 100644 --- a/main.py +++ b/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) diff --git a/stats.py b/stats.py index 16e191e..5204f76 100644 --- a/stats.py +++ b/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)