# -*- 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): url = request.route_url('actifs_list') 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: if item.type == 'ACTION': sym = Share(item.symbole) # import pdb;pdb.set_trace() 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.' # update du portefeuille update_portefeuille(request) total_valeur = 0 total_pv = 0 for item in items: total_valeur += item.valeur total_pv += item.plus_value total_pc_value = total_pv / total_valeur * 100 return { 'page_title': u"Mes actifs", 'url': url, 'items': items, 'message': message, 'total_valeur': total_valeur, 'total_pv': total_pv, 'total_pc_value': total_pc_value, } @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_bytype(request,'ACTION') 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 ACTION' 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('actifs_list')) page_title= u"Actif ACTION : %s" % (actif.libelle) 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('actifs_list')) 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('actifs_list')) return { 'page_title': page_title, 'url': url, 'actif': actif, 'categories_list': categories_list, 'message': message, } @view_config(route_name='actif2_edit', renderer='../templates/actifs/actif2_edit.pt', permission='view') def actif2_edit(request): no_id = request.matchdict['no_id'] url = request.route_url('actif2_edit', no_id=no_id) message = '' categories_list = get_categories_bytype(request,'AUTRE') if no_id == '0': # nouveau actif = {} actif['no_id'] = '0' actif['symbole'] = '' actif['categorie'] = 'Obligations' actif['libelle'] = '' actif['pru'] = '0' actif['cours'] = '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('actifs_list')) 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: new_values['nombre'] = 1000 new_values['devise'] = 'EUR' 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('actifs_list')) 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('actifs_list')) return { 'page_title': page_title, 'url': url, 'actif': actif, 'categories_list': categories_list, 'message': message, } @view_config(route_name='allocation_list', renderer='../templates/actifs/allocation_list.pt', permission='view') def allocation_list(request): message = '' # lire les categories items = get_categories(request, '0') # calculer % total total = 0 for item in items: total += item.pc_cible if total <> 100: message = u'Attention, le total de votre répartition cible ne fait pas 100%.' return { 'page_title': u"Allocation d'actifs", 'message': message, 'items': items, 'total': total, } @view_config(route_name='allocation_edit', renderer='../templates/actifs/allocation_edit.pt', permission='view') def allocation_edit(request): no_cat = request.matchdict['no_cat'] url = request.route_url('allocation_edit', no_cat=no_cat) message = '' # lire les classes classes_list = get_classes(request, '0') if no_cat == '0': # nouveau categorie = {} categorie['no_cat'] = '0' categorie['categorie'] = '' categorie['type'] = 'ACTION' categorie['pc_cible'] = '0' page_title= u'Nouvelle catégorie' else: # lire la fiche de la categorie categorie = get_categories(request, no_cat) if not categorie: request.session.flash(u"Catégorie non trouvé : %s" % no_cat, 'warning') return HTTPFound(location=request.route_url('allocation_list')) page_title= u"Catégorie : %s" % (categorie.categorie) if 'form.submitted' in request.params: new_values = {} for param, db_value in categorie.items(): if param in request.params and request.params[param] != db_value: new_values[param] = request.params[param] if new_values: update_categorie(request, no_cat, new_values) request.session.flash(u"La fiche a été mise à jour avec succès.", 'success') return HTTPFound(location=request.route_url('allocation_list')) if 'form.deleted' in request.params: delete_categorie(request, no_cat) request.session.flash(u"La fiche a été supprimée avec succès.", 'success') return HTTPFound(location=request.route_url('allocation_list')) return { 'page_title': page_title, 'url': url, 'categorie': categorie, 'classes_list': classes_list, 'message': message, }