import sqlalchemy as sa from sqlalchemy import func from ..models.portfolio import Actifs, Allocation, Histo class PFService(object): @classmethod def get_actifs(cls, request, no_id): if no_id == '0': items = request.dbsession.query(Actifs, Allocation).join(Allocation).order_by(Allocation.ordre, 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) query = query.order_by(sa.asc(Allocation.ordre)).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_histo(cls, request, no_id): if no_id == '0': 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.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