import csv from datetime import date, timedelta from users import Utilisateurs class Stats(Utilisateurs): """Gère les statistiques et son export en format CSV.""" def creationCSV(self, force: bool = False): """ Créer le fichier `CSV` qui stockera les statistiques pour tous les 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: 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) def miseAJourStatsUtilisateur(self, utilisateurID: int, prix: float): """ Récupère le prix d'une transaction et l'ajoute au total d'un utilisateur. - si aucune date n'est précisé dans la base de donnée d'un utilisateur, alors il n'a jamais enregistré de statistiques et on procède normalement - si une date est déjà renseigné : - si la date correspond à la date d'aujourd'hui, on procède normalement - si la date ne correspond pas, on enregistre ce qu'il y a dans la base de donnée dans un fichier `CSV`, ensuite on écrase l'ancien prix par `0` et la date par celle d'aujourd'hui, ensuite on procède normalement 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") print(prix) pass def exporteCSV(self, chemin: str, utilisateurID: int): """ Exporte les statistiques d'un utilisateur dans un fichier `CSV`. - N'exporte que les statistiques du jour. """ donnees = self.recuperationDonneesCSV(utilisateurID) aujourdHui = date.today().strftime("%Y/%m/%d") with open(chemin, 'w') as f: fichier = csv.writer(f) fichier.writerow(["ID Utilisateur", f"Totales des ventes du jour ({aujourdHui})"]) if len(donnees) > 0: # si il y a des données enregistrées fichier.writerow([utilisateurID, donnees[aujourdHui]]) else: fichier.writerow([utilisateurID, "Aucune ventes enregistrée"]) def recuperationDonneesCSV(self, utilisateurID: int) -> dict: """Renvoie les informations contenu dans le fichier `CSV` globale.""" with open("stats.csv", 'r') as f: return list(csv.DictReader(f)) def miseAJourDatesCSV(self): """Mets-à-jour les dates trop anciennes du fichier globales `CSV`.""" 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