161 lines
5.4 KiB
Python
161 lines
5.4 KiB
Python
# -*- coding: utf8 -*-
|
|
from sqlalchemy import text
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import (
|
|
scoped_session,
|
|
sessionmaker,
|
|
)
|
|
|
|
from zope.sqlalchemy import ZopeTransactionExtension, mark_changed
|
|
|
|
from datetime import *
|
|
import transaction
|
|
from urllib.request import urlopen
|
|
|
|
from .default import (
|
|
execute_query,
|
|
)
|
|
|
|
def get_actifs(request, no_id):
|
|
if no_id == '0':
|
|
query = "SELECT actifs.*, classes.* FROM actifs INNER JOIN classes ON actifs.classe = classes.classe ORDER BY ordre, libelle"
|
|
results = request.dbsession.execute(query).fetchall()
|
|
else:
|
|
# lire le actif par son identifiant
|
|
query = """SELECT * FROM actifs WHERE no_id=:no_id;"""
|
|
results = request.dbsession.execute(query, {'no_id': no_id}).first()
|
|
return results
|
|
|
|
def update_actif(request, no_id, new_values):
|
|
# formater les champs
|
|
s = ''
|
|
for param in new_values.keys():
|
|
if param == 'symbole':
|
|
new_values['symbole'] = new_values['symbole'].upper()
|
|
|
|
if s:
|
|
s += ",%s=:%s" % (param, param)
|
|
else:
|
|
s = "%s=:%s" % (param, param)
|
|
|
|
if no_id == '0':
|
|
query = "INSERT INTO actifs SET %s" % s
|
|
else:
|
|
new_values['no_id'] = no_id
|
|
query = "UPDATE actifs SET %s WHERE no_id = :no_id;" % s
|
|
execute_query(request, query, new_values)
|
|
|
|
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, 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);"
|
|
execute_query(request, query, {'logged_in': logged_in})
|
|
|
|
def delete_actif(request, no_id):
|
|
query = "DELETE FROM actifs WHERE no_id = :no_id ;"
|
|
execute_query(request, query, {'no_id': no_id})
|
|
|
|
def get_allocation(request, no_cat):
|
|
if no_cat == '0':
|
|
query = """
|
|
SELECT allocation.*, classes.* FROM allocation INNER JOIN classes ON allocation.classe = classes.classe
|
|
ORDER BY ordre"""
|
|
results = request.dbsession.execute(query).fetchall()
|
|
else:
|
|
# lire le actif par son identifiant
|
|
query = """SELECT * FROM allocation WHERE no_cat=:no_cat;"""
|
|
results = request.dbsession.execute(query, {'no_cat': no_cat}).first()
|
|
return results
|
|
|
|
def get_allocation_bytype(request, type):
|
|
# lire le actif par son identifiant
|
|
query = """SELECT allocation.*, classes.* FROM allocation INNER JOIN classes ON allocation.classe = classes.classe
|
|
WHERE type=:type ORDER by ordre;"""
|
|
results = request.dbsession.execute(query, {'type': type}).fetchall()
|
|
return results
|
|
|
|
def update_allocation(request, no_cat, new_values):
|
|
# formater les champs
|
|
s = ''
|
|
for param in new_values.keys():
|
|
if s:
|
|
s += ",%s=:%s" % (param, param)
|
|
else:
|
|
s = "%s=:%s" % (param, param)
|
|
|
|
if no_cat == '0':
|
|
query = "INSERT INTO allocation SET %s" % s
|
|
else:
|
|
new_values['no_cat'] = no_cat
|
|
query = "UPDATE allocation SET %s WHERE no_cat = :no_cat;" % s
|
|
execute_query(request, query, new_values)
|
|
|
|
def delete_allocation(request, no_cat):
|
|
query = "DELETE FROM allocation WHERE no_cat = :no_cat ;"
|
|
execute_query(request, query, {'no_cat': no_cat})
|
|
|
|
def get_classes(request, classe):
|
|
if classe == '0':
|
|
query = """SELECT * FROM classes ORDER BY ordre"""
|
|
results = request.dbsession.execute(query).fetchall()
|
|
else:
|
|
# lire la classe par son identifiant
|
|
query = """SELECT * FROM classes WHERE classe=:classe;"""
|
|
results = request.dbsession.execute(query, {'classe': classe}).first()
|
|
return results
|
|
|
|
def get_histo(request, no_id):
|
|
if no_id == '0':
|
|
query = "SELECT * FROM histo ORDER BY date"
|
|
results = request.dbsession.execute(query).fetchall()
|
|
else:
|
|
# lire le histo par le no_id
|
|
query = """SELECT * FROM histo WHERE no_id=:no_id;"""
|
|
results = request.dbsession.execute(query, {'no_id': no_id}).first()
|
|
return results
|
|
|
|
def update_histo(request, no_id, new_values):
|
|
# formater les champs
|
|
s = ''
|
|
for param in new_values.keys():
|
|
if s:
|
|
s += ",%s=:%s" % (param, param)
|
|
else:
|
|
s = "%s=:%s" % (param, param)
|
|
|
|
if no_id == '0':
|
|
query = "INSERT INTO histo SET date=CURRENT_DATE(), %s" % s
|
|
else:
|
|
new_values['no_id'] = no_id
|
|
query = "UPDATE histo SET %s WHERE no_id = :no_id;" % s
|
|
execute_query(request, query, new_values)
|
|
|
|
def delete_histo(request, no_id):
|
|
query = "DELETE FROM histo WHERE no_id = :no_id ;"
|
|
execute_query(request, query, {'no_id': no_id})
|
|
|
|
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]
|
|
# cas particulier
|
|
elif ticker.info.get('symbol') == 'VUSA.AS':
|
|
d = 0.889311 / 1.1 # convertir en EUR
|
|
elif ticker.info.get('symbol') == 'VJPN.AS':
|
|
d = 0.56836 / 1.1
|
|
return d
|
|
|
|
|
|
|