added portfolio view

This commit is contained in:
2023-01-26 16:22:58 +01:00
parent 060b796636
commit 4a55f94551
16 changed files with 750 additions and 87 deletions

View File

@@ -1,15 +1,90 @@
import sqlalchemy as sa
from ..models.portfolio import Histo
from sqlalchemy import func
from ..models.portfolio import Actifs, Allocation, Classes, Histo
class PFService(object):
@classmethod
def get_actifs(cls, request, no_id):
if no_id == '0':
items = request.dbsession.query(Actifs).order_by(Actifs.classe, Actifs.libelle).all()
else:
# lire une allocation par le no_id
items = request.dbsession.query(Actifs).filter(Actifs.no_id == no_id).first()
return items
@classmethod
def get_allocation(cls, request, no_cat):
if no_cat == '0':
query = request.dbsession.query(Allocation).join(Classes).filter(Classes.classe == Allocation.classe_id)
query = query.order_by(sa.asc(Allocation.classe_id)).all()
else:
# lire une allocation par le no_id
query = request.dbsession.query(Allocation).filter(Allocation.no_cat == no_cat).first()
return query
@classmethod
def get_classes(cls, request, classe):
if classe == '0':
items = request.dbsession.query(Classes).order_by(sa.asc(Classes.ordre)).all()
else:
# lire une allocation par le no_id
items = request.dbsession.query(Classes).filter(Classes.classe == classe).first()
return items
@classmethod
def get_histo(cls, request, no_id):
if no_id == '0':
items = request.dbsession.query(Histo).order_by(sa.asc(Histo.date)).all()
items = request.dbsession.query(Histo).order_by(sa.desc(Histo.date)).all()
else:
# lire le histo par le no_id
items = request.dbsession.query(Histo).filter(Histo.id == id).first()
items = request.dbsession.query(Histo).filter(Histo.no_id == no_id).first()
return items
@classmethod
def delete_allocation(cls, request, no_id):
request.dbsession.query(Allocation).filter(Histo.no_ == no_id).delete(synchronize_session=False)
return
@classmethod
def delete_histo(cls, request, no_id):
request.dbsession.query(Histo).filter(Histo.no_id == no_id).delete(synchronize_session=False)
return
@classmethod
def update_actif_devise(request, devise, taux):
request.dbsession.query(Actifs).filter(Actifs.devise == devise).update({'parite': taux})
request.dbsession.commit()
return
def update_actif_valeur(request, symbole, cours, dividends):
request.dbsession.query(Actifs).filter(Actifs.symbole == symbole).update({'symbole': symbole, 'cours': cours, 'dividends': dividends})
request.dbsession.commit()
return
def update_portefeuille(request):
TotalValue = request.dbsession.query(Actifs, func.sum(Actifs.valeur).label("TotalValue")).first()
# maj du pourcentage d'allocation des lignes du portefeuille
request.dbsession.query(Actifs).update({'pc_allocation': Actifs.valeur / TotalValue * 100})
request.dbsession.commit()
# maj des allocations
items = PFService.get_allocation(request, '0')
for item in items:
TotalClasse = request.dbsession.query(Actifs, func.sum(Actifs.valeur).label("TotalValue")
).filter(Actifs.classe == item.classe).first()
item.valeur = TotalClasse,
item.pc_atteint = item.valeur / TotalValue * 100;
request.dbsession.commit()
return
def delete_actif(request, no_id):
request.dbsession.query(Actifs).filter(Actifs.no_id == no_id).delete(synchronize_session=False)
request.dbsession.commit()
return