diff --git a/caotek_mesavoirs/layout.py b/caotek_mesavoirs/layout.py index d0db947..b783146 100644 --- a/caotek_mesavoirs/layout.py +++ b/caotek_mesavoirs/layout.py @@ -10,7 +10,7 @@ from .views.default import ( @layout_config(template='templates/layouts/global_layout.pt') class GlobalLayout(object): - # page_title = u"Pagode Tinh-Do" + # page_title = "Pagode Tinh-Do" def __init__(self, context, request): self.context = context diff --git a/caotek_mesavoirs/models/actifs.py b/caotek_mesavoirs/models/actifs.py index e6763c2..3c0473f 100644 --- a/caotek_mesavoirs/models/actifs.py +++ b/caotek_mesavoirs/models/actifs.py @@ -49,9 +49,9 @@ def update_actif_devise(request, devise, taux): query = "UPDATE actifs SET parite = :taux WHERE devise = :devise;" execute_query(request, query, {'taux': taux, 'devise': devise}) -def update_actif_valeur(request, symbole, cours): - query = "UPDATE actifs SET cours = :cours WHERE symbole = :symbole;" - execute_query(request, query, {'symbole': symbole, 'cours': cours}) +def update_actif_valeur(request, symbole, cours, dividends): + query = "UPDATE actifs SET cours = :cours, rendement = :dividends * nombre WHERE symbole = :symbole;" + execute_query(request, query, {'symbole': symbole, 'cours': cours, 'dividends': dividends}) def update_portefeuille(request, logged_in): query = "CALL spUPD_PORTEFEUILLE(:logged_in);" diff --git a/caotek_mesavoirs/views/actifs.py b/caotek_mesavoirs/views/actifs.py index a18ff99..d2e0bd3 100644 --- a/caotek_mesavoirs/views/actifs.py +++ b/caotek_mesavoirs/views/actifs.py @@ -62,7 +62,7 @@ def actif_edit(request): if not actif: request.session.flash(u"Actif non trouvé : %s" % no_id, 'warning') return HTTPFound(location=request.route_url('home')) - page_title= u"Actif ACTION : %s" % (actif.libelle) + page_title= "Actif ACTION : %s" % (actif.libelle) if 'form.submitted' in request.params: new_values = {} @@ -123,7 +123,7 @@ def actif2_edit(request): if not actif: request.session.flash(u"Actif non trouvé : %s" % no_id, 'warning') return HTTPFound(location=request.route_url('home')) - page_title= u"Actif : %s" % (actif.symbole) + page_title= "Actif : %s" % (actif.symbole) if 'form.submitted' in request.params: new_values = {} @@ -166,14 +166,14 @@ def allocation_edit(request): allocation['classe'] = '' allocation['type'] = 'ACTION' allocation['pc_cible'] = '0' - page_title= u'Nouvelle classe' + page_title= 'Nouvelle classe' else: # lire la fiche de la categorie allocation = get_allocation(request, no_cat) if not allocation: request.session.flash(u"Classe non trouvé : %s" % no_cat, 'warning') return HTTPFound(location=request.route_url('home')) - page_title= u"Classe : %s" % (allocation.classe) + page_title= "Classe : %s" % (allocation.classe) if 'form.submitted' in request.params: new_values = {} @@ -212,7 +212,7 @@ def histo_list(request): liste.append(d) return { - 'page_title': u'Historique', + 'page_title': 'Historique', 'dt_data': json.dumps(liste), } @@ -230,14 +230,14 @@ def histo_edit(request): item['date'] = today item['mvt_cash'] = 0.0 item['nb_part'] = 0.0 - page_title= u'Nouvelle valeur part' + page_title= 'Nouvelle valeur part' else: # lire la fiche de la categorie item = get_histo(request, no_id) if not item: request.session.flash(u"Histo non trouvé : %s" % no_id, 'warning') return HTTPFound(location=request.route_url('histo_list')) - page_title= u"Valeur part au %s" % (item.date.strftime('%d/%m/%Y')) + page_title= "Valeur part au %s" % (item.date.strftime('%d/%m/%Y')) if 'form.submitted' in request.params: new_values = {} diff --git a/caotek_mesavoirs/views/default.py b/caotek_mesavoirs/views/default.py index 3648540..8e1511a 100644 --- a/caotek_mesavoirs/views/default.py +++ b/caotek_mesavoirs/views/default.py @@ -38,7 +38,7 @@ def to_euro(x): #if x == 0: # return "" #else: - return (u"{:,.2f}".format(x).replace(',', ' ').replace('.', ',') + u" €") + return (u"{:,.2f}".format(x).replace(',', ' ').replace('.', ',') + " €") def to_usd(x): """Takes a float and returns a string""" @@ -60,11 +60,11 @@ def to_percent(x, d): if x == 0: pc = '' elif d == 2: - pc = u"%.2f " % x + pc = "%.2f " % x elif d == 3: - pc = u"%.3f " % x + pc = "%.3f " % x else: - pc = u"%.1f " % x + pc = "%.1f " % x if len(pc) > 0: pc += "%" return pc.replace('.', ',') @@ -115,7 +115,9 @@ def home(request): if item.type == 'ACTION': # lire le cours de l'action ticker = yf.Ticker(item.symbole) - update_actif_valeur(request, item.symbole, ticker.info.get('regularMarketPrice')) + # caluler son rendement + dividends = get_dividends(ticker) + update_actif_valeur(request, item.symbole, ticker.info.get('regularMarketPrice'), dividends) time.sleep(1) # attendre 2 secondes # update du portefeuille @@ -144,7 +146,7 @@ def home(request): courbe_evoln.append(d) return { - 'page_title': u"Allocation d'actifs", + 'page_title': "Allocation d'actifs", 'message': message, 'url': url, 'items': items, @@ -168,7 +170,7 @@ def doc_list(request): docs_voiture = get_docs_bytheme(request, 'VOITURE') return { - 'page_title': u"Documents", + 'page_title': "Documents", 'docs_finance': docs_finance, 'docs_maison': docs_maison, 'docs_voiture': docs_voiture, @@ -179,12 +181,12 @@ def doc_edit(request): doc_id = request.matchdict['doc_id'] url = request.route_url('doc_edit',doc_id=doc_id) - message = u"" + message = "" if doc_id == '0': titre = "Nouveau doc" - intitule = u"" - texte = u"" - theme = u"" + intitule = "" + texte = "" + theme = "" else: titre = "Modifier : %s" % str(doc_id) doc = get_docs(request, doc_id) @@ -243,7 +245,7 @@ def doc_view(request): } def envoyerMail(request, destinataire, objet, corps): - body = u""" + body = """ %s @@ -261,3 +263,14 @@ monaa.caotek.fr mailer.send_immediately(message) +def get_dividends(ticker): + d = 0 + # le ticker a des dividendes ? + if len(ticker.dividends) > 0: + # oui, cumuler les dividendes sur un an + h = ticker.history(period="1y") + nb = len(ticker.dividends) + for i in range(nb): + d += ticker.dividends[nb - 1 - i] + return d + diff --git a/caotek_mesavoirs/views/members.py b/caotek_mesavoirs/views/members.py index fd7c7e0..fce66bf 100644 --- a/caotek_mesavoirs/views/members.py +++ b/caotek_mesavoirs/views/members.py @@ -35,7 +35,7 @@ def to_sha1(message): @view_config(route_name='envoyer_mdp', renderer='../templates/members/envoyer_mdp.pt') def envoyer_mdp(request): url = request.route_url('envoyer_mdp') - message = u'' + message = '' if 'form.submitted' in request.params: login = request.params['login'] @@ -43,7 +43,7 @@ def envoyer_mdp(request): if member: # Fabrication du corps du email_passwordMessage lien = update_membre_mdp_oublie(request, login) - body = u""" + body = """ Le lien suivant vous dirigera vers une page où vous pourrez ré-initialiser votre mot de passe d'accès à « monaa.caotek.fr » : @@ -54,13 +54,13 @@ Le lien suivant vous dirigera vers une page où vous pourrez ré-initialiser vot """ % (request.route_url('redefinir_mdp', lien=lien)) - envoyerMail(request, member.email, u"Demande de ré-initialisation du mot de passe", body) + envoyerMail(request, member.email, "Demande de ré-initialisation du mot de passe", body) request.session.flash(u"Votre demande de ré-initialisation de mot de passe vous a été envoyée à %s." % member.email) return HTTPFound(location=request.route_url('login')) else: - message = u"Le mot de passe fourni est incorrect." + message = "Le mot de passe fourni est incorrect." return { - 'page_title': u"Changer mon mot de passe", + 'page_title': "Changer mon mot de passe", 'url': url, 'message': message, } @@ -82,10 +82,10 @@ def changer_mdp(request): request.session.flash(u"Votre mot de passe a été mis à jour avec succès.") return HTTPFound(location=request.route_url('home')) else: - message = u"Le mot de passe actuel n'est pas correct." + message = "Le mot de passe actuel n'est pas correct." return { - 'page_title': u"Changer mon mot de passe", + 'page_title': "Changer mon mot de passe", 'url': url, 'member': member, 'message': message, @@ -113,7 +113,7 @@ def redefinir_mdp(request): request.session.flash(u"Le lien n'est plus valable.", 'warning') return HTTPFound(location=request.route_url('login')) return { - 'page_title': u"Définissez votre mot de passe", + 'page_title': "Définissez votre mot de passe", 'url': url, } @@ -131,8 +131,8 @@ def login(request): referrer = '/' # never use the login form itself as came_from came_from = request.params.get('came_from', referrer) - password = u'' - message = u'' + password = '' + message = '' if 'form.submitted' in request.params: login = request.params['login'] password = request.params['password'] @@ -147,10 +147,10 @@ def login(request): headers = remember(request, login) return HTTPFound(location=came_from, headers=headers) - message = u"Email et mot de passe invalides. La connexion a échoué." + message = "Email et mot de passe invalides. La connexion a échoué." return { - 'page_title': u"", + 'page_title': "", 'url': login_url, 'came_from': came_from, 'login': login, @@ -180,7 +180,7 @@ def users_list(request): liste.append(d) return { - 'page_title': u'Liste des utilisateurs', + 'page_title': 'Liste des utilisateurs', 'dt_data': json.dumps(liste), } @@ -219,7 +219,7 @@ def user_edit(request): if not membre: request.session.flash(u"Utilisateur non trouvé : %s" % email, 'warning') return HTTPFound(location=request.route_url('users_list')) - page_title= u"Membre : %s" %(membre.nom) + page_title= "Membre : %s" %(membre.nom) if 'form.submitted' in request.params: new_values = {}