From d6c290b30d200c91a3e347d25444b47e05c5a639 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Tue, 30 Nov 2021 10:38:03 +0100 Subject: [PATCH] =?UTF-8?q?Modifications:=20-=20Remove=20datetime=20depend?= =?UTF-8?q?encie=20-=20Raise=20Error=20when=20there=20is=20an=20logic=20er?= =?UTF-8?q?ror=20when=20updating=20the=20csv=20file=20-=20Fix=20bug=20when?= =?UTF-8?q?=20there=20is=202=20date=20to=20update=20in=20CSV=20file=20-=20?= =?UTF-8?q?Append=200=20instead=20of=20nothing=20when=20updating=20the=20C?= =?UTF-8?q?SV=20file=20-=20Update=20comments=20-=20=F0=9F=8E=89=20Update?= =?UTF-8?q?=20the=20CSV=20file=20with=20the=20new=20price=20when=20validat?= =?UTF-8?q?ing=20a=20receipt=20-=20`Stats`=20no=20longer=20depend=20on=20`?= =?UTF-8?q?Utilisateurs`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stats.py | 60 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/stats.py b/stats.py index 5204f76..bdcc365 100644 --- a/stats.py +++ b/stats.py @@ -1,10 +1,10 @@ import csv -from datetime import date, timedelta, datetime +from datetime import date, timedelta from users import Utilisateurs -class Stats(Utilisateurs): +class Stats(): """Gère les statistiques et son export en format CSV.""" def __init__(self): self.formatDate = "%Y/%m/%d" @@ -25,7 +25,7 @@ class Stats(Utilisateurs): Possibilité de forcer la création (càd même si le fichier existe déjà) en renseignant `force = True` """ - if not self.fichierExiste("stats.csv") or force: + if not Utilisateurs().fichierExiste("stats.csv") or force: with open("stats.csv", 'w') as f: fichier = csv.writer(f) fichier.writerow(["id", "pseudo"] + self.datesDisponibles()) @@ -44,11 +44,45 @@ class Stats(Utilisateurs): Procéder normalement consiste à ajouter le prix au prix totale stocké dans la base de donnée. """ - self.miseAJourDatesCSV() # met à jour les dates du fichier `CSV` - aujourdHui = date.today().strftime(self.formatDate) + self.miseAJourDatesCSV() # met-à-jour les dates du fichier `CSV` # Mets-à-jour le `CSV` avec le nouveau prix... - # TODO + aujourdHui = date.today().strftime(self.formatDate) + with open("stats.csv", 'r') as f: + fichier = list(csv.reader(f)) + # On récupère la colonne pour aujourd'hui + index = 0 + locationDate = None # note l'index de la colonne de la date dans le fichier + for nomColonne in fichier[0]: # on regarde l'entente + if nomColonne == aujourdHui: # on regarde si la colonne correspond à la date du jour + locationDate = index # on note l'entête + index += 1 + if locationDate == None: # ne devrait pas arrivé car on mets à jour les dates du `CSV` avant de lire le fichier + raise IndexError("Date du jour non trouvé dans le fichier csv.") + + utilisateur = Utilisateurs().recuperationUtilisateur(utilisateurID) # on récupère les infos de l'utilisateur + # Vérification si l'utilisateur est déjà présent dans le fichier `CSV` + locationUtilisateur = None # note l'index de la ligne de l'utilisateur dans le fichier + for idx, location in enumerate(fichier): + if location[0] == str(utilisateurID): + locationUtilisateur = idx + if locationUtilisateur == None: # si l'utilisateur n'est pas présent dans le fichier + # on rajoute la ligne + fichier += [[utilisateurID, utilisateur["pseudo"]] + ['0' for _ in range(0, locationDate - 2)] + [prix]] + else: # si déjà présent dans le fichier + try: + ancienPrix = float(fichier[locationUtilisateur][locationDate]) # on récupère l'ancien prix + except IndexError: # si il n'y avait pas de prix définie avant + ancienPrix = 0 + # On rajoute la case + fichier[locationUtilisateur] += ['0' for _ in range(0, locationDate - 1)] + ancienPrix += prix # on y ajoute le nouveaux prix + fichier[locationUtilisateur][locationDate] = ancienPrix # on met à jour le fichier + + with open("stats.csv", 'w') as f: # on applique les changements + ecriture = csv.writer(f) + ecriture.writerows(fichier) + def exporteCSV(self, chemin: str, utilisateurID: int): """ @@ -75,14 +109,15 @@ class Stats(Utilisateurs): besoinDeMofication = False with open("stats.csv", 'r') as f: fichier = list(csv.reader(f)) - if len(fichier) == 1: # si fichier vide (que l'entête) + if len(fichier) == 1: # si fichier ne contient 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) + datesDisponibles = self.datesDisponibles() # liste des bonnes dates 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 + if dateFichier not in datesDisponibles: # si trop vieux mauvaisIndex.append(index) # on ajoute l'index à la liste besoinDeMofication = True else: @@ -92,14 +127,17 @@ class Stats(Utilisateurs): 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 + datesARajouter = [date for date in datesDisponibles if date not in datesPresentes] # liste des dates à rajouter + if len(datesARajouter) != len(mauvaisIndex): # ne devrais pas arrivé mais on sait jamais + raise IndexError("Problème, pas autant de dates à rajouter que de de dates périmés dans le fichier.") 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 + ligne[idx] = datesARajouter[0] # on change la ligne avec la nouvelle date + datesARajouter.pop(0) else: # si c'est une ligne de donnée - ligne[idx] = '' # on change la ligne avec une valeur vide + ligne[idx] = '0' # 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