diff --git a/example/compte.csv b/example/compte.csv new file mode 100755 index 0000000..7515032 --- /dev/null +++ b/example/compte.csv @@ -0,0 +1,5 @@ +nom,montant,parts +pipo, 20 + 3, 3 +hiphop, 40, 4 +chic, 0, 4 +Couette,50, 1 diff --git a/example/multicompte/courses.csv b/example/multicompte/courses.csv new file mode 100755 index 0000000..433d6c0 --- /dev/null +++ b/example/multicompte/courses.csv @@ -0,0 +1,5 @@ +nom,montant, parts +Pipo, 20 + 3, 3 +Hiphop, 40, 4 +Chic, 0, 4 +Couette,50, 1 diff --git a/example/multicompte/logement.csv b/example/multicompte/logement.csv new file mode 100755 index 0000000..92ac484 --- /dev/null +++ b/example/multicompte/logement.csv @@ -0,0 +1,4 @@ +nom,montant, parts +Pipo, 0, 1 +Chic, 10, 1 +Couette,20, 1 diff --git a/example/multicompte/transport.csv b/example/multicompte/transport.csv new file mode 100755 index 0000000..9622939 --- /dev/null +++ b/example/multicompte/transport.csv @@ -0,0 +1,4 @@ +nom,montant, parts +chic, 0, 2 +Couette,30, 1 +Plop, 10, 2 diff --git a/pralo.py b/pralo.py index 58fc151..35bfa27 100755 --- a/pralo.py +++ b/pralo.py @@ -19,19 +19,12 @@ from pathlib import Path from account import Account -# ------------------------------ -# Classes -# ------------------------------ - -# ------------------------------ -# Fonctions -# ------------------------------ def extrait_from_file(file_name): """ Extrait les informations à partir d'un fichier :param file_name: nom du fichier avec les comptes - :return: liste [[nom,montant,jours],...] + :return: liste [[nom,montant,parts],...] """ file = open(file_name, "r") try: @@ -48,37 +41,35 @@ def extrait_from_file(file_name): compte["nom"] = c[i] if "montant" in h.lower(): compte["montant"] = eval(c[i]) - if "jour" in h.lower(): - compte["jours"] = int(c[i]) + if "part" in h.lower(): + compte["parts"] = int(c[i]) comptes += [compte] return comptes finally: file.close() - - def forfait(compte, output = print): """ - Gère le nombre de jours resté à Pralo et affiche quelques stats + Gère le nombre de parts et affiche quelques stats - :param compte: comptes de ce que chacun a payé [[nom, montant,jours],...] + :param compte: comptes de ce que chacun a payé [[nom, montant,parts],...] :return: Comptes des crédits de chacun envers la communauté """ cout_total = sum([c["montant"] for c in compte]) - output("Cout total de Pralo: {cout_tot}".format(cout_tot = cout_total)) + output("Cout total: {cout_tot}".format(cout_tot = cout_total)) - nbr_jour = sum([c["jours"] for c in compte]) - output("Le nombre de jour passé {njour}".format(njour = nbr_jour)) + nbr_jour = sum([c["parts"] for c in compte]) + output("Nombre de parts {njour}".format(njour = nbr_jour)) cout_jour = cout_total / nbr_jour - output("Cout au jour: {cout}".format(cout = round(cout_jour,2))) + output("Cout de la part: {cout}".format(cout = round(cout_jour,2))) output("\n") new_compte = [] for pers in compte: - new_compte += [[pers["nom"], (pers["montant"] - pers["jours"] * cout_jour)]] + new_compte += [[pers["nom"], (pers["montant"] - pers["parts"] * cout_jour)]] return new_compte @@ -92,7 +83,6 @@ def normalise(compte): return compte_normalise - def affiche_final(donRec, output = print): """ Affiche qui donne quoi à qui à partir de la liste @@ -115,52 +105,39 @@ def join_comptes(compte1, compte2): joined = {k: c_dict1.get(k, 0) + c_dict2.get(k, 0) for k in set(c_dict1) | set(c_dict2)} return [(k, v) for k,v in joined.items()] -# ------------------------------ -# Bloc principal -# ------------------------------ - if __name__ == '__main__': # Pour analyser les options qu'on lui demande parser = optparse.OptionParser() # options proposée - parser.add_option("-f","--file",action="store", type = "string", dest="file_name", help="Analyse les comptes à partir du fichier donné en argument") - parser.add_option("-p","--path",action="store", type = "string", dest="pathname", help="Analyse les comptes à partir de tous les fichiers csv du repertoir (multicompte)") + parser.add_option("-f","--file",action="store", type = "string", dest="file_name", help="Analyse les comptes à partir du fichier donné en argument ou des fichiers du repertoire") + #parser.add_option("-p","--path",action="store", type = "string", dest="pathname", help="Analyse les comptes à partir de tous les fichiers csv du repertoir (multicompte)") parser.add_option("-e","--seuil",action="store", type = "int", dest="seuil",default=0, help="Seuil à partir duquel on concidère qu'il n'est plus nécessaire de payer.") # Digestion (options, args) = parser.parse_args() if options.file_name: - compte = extrait_from_file(options.file_name) - # compte_normalise = normalise(compte) - compte_normalise = forfait(compte) - #final = echange(compte_normalise, options.seuil) - account = Account(compte_normalise) - final = account.tribut(options.seuil) - affiche_final(final) - - if options.pathname: - path = Path(options.pathname) + path = Path(options.file_name) assert path.exists() - god = [] - for f in path.glob('*.csv'): - print(f"Compte: {f.name}") - compte = extrait_from_file(f) - compte_normalise = forfait(compte) - print(compte_normalise) - god = join_comptes(god, compte_normalise) + if path.is_dir(): + god = [] + for f in path.glob('*.csv'): + print(f"Compte: {f.name}") + compte = extrait_from_file(f) + compte_normalise = forfait(compte) + god = join_comptes(god, compte_normalise) + account = Account(god) + else: + compte = extrait_from_file(options.file_name) + # compte_normalise = normalise(compte) + cred_dept = forfait(compte) + #final = echange(compte_normalise, options.seuil) + account = Account(cred_dept) - print("") - print(god) - account = Account(god) final = account.tribut(options.seuil) affiche_final(final) -# ------------------------------ -# Fin du programme -# ------------------------------ - # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: