Modifications:
- Remove datetime dependencie
- Raise Error when there is an logic error when updating the csv file
- Fix bug when there is 2 date to update in CSV file
- Append 0 instead of nothing when updating the CSV file
- Update comments
- 🎉 Update the CSV file with the new price when validating a receipt
- `Stats` no longer depend on `Utilisateurs`
This commit is contained in:
parent
2823cb504b
commit
d6c290b30d
1 changed files with 49 additions and 11 deletions
60
stats.py
60
stats.py
|
@ -1,10 +1,10 @@
|
||||||
import csv
|
import csv
|
||||||
|
|
||||||
from datetime import date, timedelta, datetime
|
from datetime import date, timedelta
|
||||||
|
|
||||||
from users import Utilisateurs
|
from users import Utilisateurs
|
||||||
|
|
||||||
class Stats(Utilisateurs):
|
class Stats():
|
||||||
"""Gère les statistiques et son export en format CSV."""
|
"""Gère les statistiques et son export en format CSV."""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.formatDate = "%Y/%m/%d"
|
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
|
Possibilité de forcer la création (càd même si le fichier existe déjà) en renseignant
|
||||||
`force = True`
|
`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:
|
with open("stats.csv", 'w') as f:
|
||||||
fichier = csv.writer(f)
|
fichier = csv.writer(f)
|
||||||
fichier.writerow(["id", "pseudo"] + self.datesDisponibles())
|
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.
|
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`
|
self.miseAJourDatesCSV() # met-à-jour les dates du fichier `CSV`
|
||||||
aujourdHui = date.today().strftime(self.formatDate)
|
|
||||||
|
|
||||||
# Mets-à-jour le `CSV` avec le nouveau prix...
|
# 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):
|
def exporteCSV(self, chemin: str, utilisateurID: int):
|
||||||
"""
|
"""
|
||||||
|
@ -75,14 +109,15 @@ class Stats(Utilisateurs):
|
||||||
besoinDeMofication = False
|
besoinDeMofication = False
|
||||||
with open("stats.csv", 'r') as f:
|
with open("stats.csv", 'r') as f:
|
||||||
fichier = list(csv.reader(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)
|
self.creationCSV(True) # on recréer le fichier dans le doute (avec les bonnes dates)
|
||||||
else:
|
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])
|
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)
|
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)
|
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
|
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
|
mauvaisIndex.append(index) # on ajoute l'index à la liste
|
||||||
besoinDeMofication = True
|
besoinDeMofication = True
|
||||||
else:
|
else:
|
||||||
|
@ -92,14 +127,17 @@ class Stats(Utilisateurs):
|
||||||
if not besoinDeMofication: # vérification si on a besoin de rien faire
|
if not besoinDeMofication: # vérification si on a besoin de rien faire
|
||||||
return # on quitte la fonction
|
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 idx in mauvaisIndex: # pour tous les mauvais index
|
||||||
for numLigne, ligne in enumerate(fichier): # on regarde toutes les lignes du fichier
|
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 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
|
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
|
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
|
fichier[numLigne] = ligne # on applique les changements
|
||||||
if besoinDeMofication: # vérification si on a besoin de faire des changements
|
if besoinDeMofication: # vérification si on a besoin de faire des changements
|
||||||
with open("stats.csv", 'w') as f: # on applique les changements
|
with open("stats.csv", 'w') as f: # on applique les changements
|
||||||
|
|
Reference in a new issue