2012-07-22 17:44:44 +00:00
#! /usr/bin/env python
2012-07-21 14:36:17 +00:00
#
# ------------------------------
#
# La grosse fleme de faire les comptes à chaque fois
# Maintenant c'est toi qui les fait pour moi :D
#
# ------------------------------
# ------------------------------
# Imports
# ------------------------------
2012-07-22 17:44:44 +00:00
import csv
import os
import optparse
2012-07-21 14:36:17 +00:00
2013-09-01 18:28:26 +00:00
from account import Account
2012-07-21 14:36:17 +00:00
# ------------------------------
# Classes
# ------------------------------
# ------------------------------
# Fonctions
# ------------------------------
2012-07-22 17:44:44 +00:00
def extrait_from_file ( file_name ) :
2013-04-22 14:59:40 +00:00
"""
Extrait les informations à partir d ' un fichier
: param file_name : nom du fichier avec les comptes
: return : liste [ [ nom , montant , jours ] , . . . ]
"""
2012-07-22 17:44:44 +00:00
file = open ( file_name , " r " )
try :
reader = csv . reader ( file , delimiter = " , " )
2013-05-12 19:24:52 +00:00
r_comptes = list ( reader )
header = r_comptes . pop ( 0 ) # On récupère le premier élément (les headers)
comptes = [ ]
for c in r_comptes : # On parcourt les lignes pour typer les éléments correctement
compte = { }
for ( i , h ) in enumerate ( header ) :
if " nom " in h . lower ( ) :
compte [ " nom " ] = c [ i ]
if " montant " in h . lower ( ) :
compte [ " montant " ] = eval ( c [ i ] )
if " jour " in h . lower ( ) :
compte [ " jours " ] = int ( c [ i ] )
comptes + = [ compte ]
return comptes
2012-07-22 17:44:44 +00:00
finally :
file . close ( )
2012-07-21 14:36:17 +00:00
2013-09-03 08:04:55 +00:00
def forfait ( compte , output = print ) :
2013-04-22 14:59:40 +00:00
"""
2013-09-03 08:04:55 +00:00
Gère le nombre de jours resté à Pralo et affiche quelques stats
2013-04-22 14:59:40 +00:00
: param compte : comptes de ce que chacun a payé [ [ nom , montant , jours ] , . . . ]
: return : Comptes des crédits de chacun envers la communauté
"""
2013-05-12 19:24:52 +00:00
cout_total = sum ( [ c [ " montant " ] for c in compte ] )
2013-09-03 08:04:55 +00:00
output ( " Cout total de Pralo: {cout_tot} " . format ( cout_tot = cout_total ) )
2012-08-14 16:30:46 +00:00
2013-05-12 19:24:52 +00:00
nbr_jour = sum ( [ c [ " jours " ] for c in compte ] )
2013-09-03 08:04:55 +00:00
output ( " Le nombre de jour passé {njour} " . format ( njour = nbr_jour ) )
2012-08-14 16:30:46 +00:00
cout_jour = cout_total / nbr_jour
2013-09-03 08:04:55 +00:00
output ( " Cout au jour: {cout} " . format ( cout = round ( cout_jour , 2 ) ) )
2012-08-14 16:30:46 +00:00
2013-09-03 08:04:55 +00:00
output ( " \n " )
2012-08-14 16:30:46 +00:00
new_compte = [ ]
for pers in compte :
2013-05-12 19:24:52 +00:00
new_compte + = [ [ pers [ " nom " ] , ( pers [ " montant " ] - pers [ " jours " ] * cout_jour ) ] ]
2013-09-01 17:59:45 +00:00
2012-08-14 16:30:46 +00:00
return new_compte
2012-07-21 15:31:30 +00:00
def normalise ( compte ) :
""" Centre en 0 les comptes """
2013-05-12 19:24:52 +00:00
moyenne = sum ( [ c [ " montant " ] for c in compte ] ) / len ( compte )
2012-07-21 15:31:30 +00:00
compte_normalise = compte
2012-07-22 17:44:44 +00:00
2012-07-21 15:31:30 +00:00
for ( i , n ) in enumerate ( compte ) :
2013-05-12 19:24:52 +00:00
compte_normalise [ i ] [ " montant " ] = compte [ i ] [ " montant " ] - moyenne
2012-07-22 17:44:44 +00:00
2012-07-21 15:31:30 +00:00
return compte_normalise
2012-07-22 17:44:44 +00:00
2013-09-03 08:04:55 +00:00
def affiche_final ( donRec , output = print ) :
2013-04-22 14:59:40 +00:00
"""
Affiche qui donne quoi à qui à partir de la liste
: param donRec : liste avec qui doit quoi à qui [ [ qui , àqui , quoi ] . . . ]
"""
2012-07-21 16:04:15 +00:00
for g in donRec :
2013-09-03 08:04:55 +00:00
output ( " {don} donne {montant} à {rec} " . format ( don = g [ 0 ] , rec = g [ 1 ] , montant = round ( g [ 2 ] , 2 ) ) )
2012-07-21 16:04:15 +00:00
2012-07-21 15:31:30 +00:00
2012-07-21 14:36:17 +00:00
# ------------------------------
# Bloc principal
# ------------------------------
if __name__ == ' __main__ ' :
2012-07-22 17:44:44 +00:00
# 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 " )
2013-04-22 15:24:59 +00:00
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. " )
2012-07-22 17:44:44 +00:00
# Digestion
( options , args ) = parser . parse_args ( )
if options . file_name :
2013-09-01 17:59:45 +00:00
compte = extrait_from_file ( options . file_name )
2012-08-14 16:30:46 +00:00
# compte_normalise = normalise(compte)
compte_normalise = forfait ( compte )
2013-09-01 18:28:26 +00:00
#final = echange(compte_normalise, options.seuil)
account = Account ( compte_normalise )
final = account . tribut ( options . seuil )
2012-07-22 17:44:44 +00:00
affiche_final ( final )
2012-07-21 14:36:17 +00:00
# ------------------------------
# Fin du programme
# ------------------------------
# -----------------------------
# Reglages pour 'vim'
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
# cursor: 16 del