# -*- coding: utf8 -*- from pyramid.response import Response from pyramid.renderers import render, get_renderer from pyramid.view import ( view_config, forbidden_view_config, ) from pyramid.security import ( authenticated_userid, remember, forget, ) from pyramid.httpexceptions import ( HTTPFound, HTTPNotFound, HTTPForbidden, ) from pyramid_mailer import get_mailer from pyramid_mailer.message import Message, Attachment from datetime import * import hashlib from yahoo_finance import Share, Currency from sqlalchemy.exc import DBAPIError from ..security import groupfinder from ..models.default import * from ..models.actifs import * from ..models.members import ( get_member_by_email, ) from ..views.default import ( to_euro, to_usd, ) import json @view_config(route_name='actifs_list', renderer='../templates/actifs/actifs_list.pt', permission='view') def actifs_list(request): message = '' # lire les actifs items = get_actifs(request, '0') # MAJ du prtefeuille if 'form.submitted' in request.params: # maj des parités des devises d'après Yahoo finance usdeur = Currency('USDEUR') update_actif_devise(request, 'USD', usdeur.get_rate()) for item in items: sym = Share(item.symbole) update_actif_valeur(request, item.symbole, sym.get_price()) # relire les actifs items = get_actifs(request, '0') message = u'Le portefeuille est mis à jour avec succès.' # construire la liste liste=[] for item in items: if item.devise == 'EUR': cours = to_euro(item.cours) else: cours = to_usd(item.cours) d = (item.categorie, item.symbole, item.libelle, str(item.nombre), cours, to_euro(item.pru), to_euro(item.valeur), to_euro(item.plus_value),str(item.no_id)) liste.append(d) return { 'page_title': u"Mes actifs", 'dt_data': json.dumps(liste), 'message': message, } @view_config(route_name='actif_edit', renderer='../templates/actifs/actif_edit.pt', permission='view') def actif_edit(request): no_id = request.matchdict['no_id'] url = request.route_url('actif_edit', no_id=no_id) message = '' categories_list = get_categories(request,'0') if no_id == '0': # nouveau actif = {} actif['no_id'] = '0' actif['symbole'] = '' actif['categorie'] = 'Actions Europe' actif['nombre'] = '0' actif['pru'] = '0' page_title= 'Nouvel actif' else: # lire la fiche du actif actif = get_actifs(request, no_id) 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) if 'form.submitted' in request.params: new_values = {} for param, db_value in actif.items(): if param in request.params and request.params[param] != db_value: new_values[param] = request.params[param] if new_values: # récupérer les infos du symbole de Yahoo finance if 'symbole' in request.params: symbole = request.params['symbole'] else: symbole = actif.symbole sym = Share(symbole) if sym.get_name() <> None: # import pdb;pdb.set_trace() new_values['libelle'] = sym.get_name() new_values['cours'] = sym.get_price() new_values['devise'] = sym.get_currency() update_actif(request, no_id, new_values) request.session.flash(u"La fiche a été mise à jour avec succès.", 'success') return HTTPFound(location=request.route_url('home')) else: message = 'Symbole inconnu. Veuillez ressaisir.' if 'form.deleted' in request.params: delete_actif(request, no_id) request.session.flash(u"La fiche a été supprimée avec succès.", 'success') return HTTPFound(location=request.route_url('home')) return { 'page_title': page_title, 'url': url, 'actif': actif, 'categories_list': categories_list, 'message': message, }