Files
caotek_monaa/caotek_mesavoirs/models/actifs.py
2018-10-01 09:20:25 +02:00

174 lines
6.0 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 bs4 import BeautifulSoup
import urllib2
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):
query = "UPDATE actifs SET cours = :cours WHERE symbole = :symbole;"
execute_query(request, query, {'symbole': symbole, 'cours': cours})
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 getCurrencyRate(currency):
# specify the url
quote_page = 'http://www.finances.net/devises/courseuro'
# query & parse the html using beautiful soap and store in variable `soup`
soup = BeautifulSoup(urllib2.urlopen(quote_page), 'html.parser')
# get the history table
rows = soup.find('table', attrs={'class': 'news_table'}).tbody.findAll('tr')
divs = rows[1].findAll('td')
rate = divs[1].span.text
return float(rate.replace(',','.'))
def getFTQuote(ticker):
# specify the url of The Financial Times
quote_page = 'https://markets.ft.com/data/funds/tearsheet/historical?s=%s' % ticker
# query & parse the html using beautiful soap and store in variable `soup`
soup = BeautifulSoup(urllib2.urlopen(quote_page), 'html.parser')
data = []
# get the quote price
rows = soup.findAll('table')[0].tbody.findAll('tr')
for each_row in rows:
divs = each_row.findAll('td')
#I'm only interested in 'Close' price;
quote_price = float(divs[4].text.replace(',',''))
break
# retourne la prière ligne
return quote_price