Pyramid Starter project
+CAO Blog
404 Page Not Found
diff --git a/cao_blogr - Copie.sqlite b/cao_blogr - Copie.sqlite new file mode 100644 index 0000000..5192488 Binary files /dev/null and b/cao_blogr - Copie.sqlite differ diff --git a/cao_blogr.sqlite b/cao_blogr.sqlite index 3dbf1fa..ee68cd8 100644 Binary files a/cao_blogr.sqlite and b/cao_blogr.sqlite differ diff --git a/cao_blogr/alembic/versions/20230123_19d939dbc6d0.py b/cao_blogr/alembic/versions/20230123_19d939dbc6d0.py new file mode 100644 index 0000000..b2e81e2 --- /dev/null +++ b/cao_blogr/alembic/versions/20230123_19d939dbc6d0.py @@ -0,0 +1,81 @@ +"""add portfolio tables + +Revision ID: 19d939dbc6d0 +Revises: 7995372bd306 +Create Date: 2023-01-23 14:49:31.713228 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '19d939dbc6d0' +down_revision = '7995372bd306' +branch_labels = None +depends_on = None + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('actifs', + sa.Column('no_id', sa.Integer(), nullable=False), + sa.Column('symbole', sa.Unicode(length=45), nullable=False), + sa.Column('libelle', sa.Unicode(length=45), nullable=False), + sa.Column('classe', sa.Unicode(length=45), nullable=False), + sa.Column('nombre', sa.Integer(), nullable=True), + sa.Column('cours', sa.Float(), nullable=True), + sa.Column('pru', sa.Float(), nullable=True), + sa.Column('valeur', sa.Float(), nullable=True), + sa.Column('plus_value', sa.Float(), nullable=True), + sa.Column('pc_plusvalue', sa.Float(), nullable=True), + sa.Column('rendement', sa.Float(), nullable=True), + sa.Column('pc_rdt', sa.Float(), nullable=True), + sa.Column('pc_allocation', sa.Float(), nullable=True), + sa.Column('ter', sa.Float(), nullable=True), + sa.Column('ter_pondere', sa.Float(), nullable=True), + sa.Column('devise', sa.Unicode(length=45), nullable=True), + sa.Column('parite', sa.Float(), nullable=True), + sa.Column('website', sa.Unicode(length=100), nullable=True), + sa.Column('modif_le', sa.DateTime(), nullable=True), + sa.PrimaryKeyConstraint('no_id', name=op.f('pk_actifs')), + sa.UniqueConstraint('symbole', name=op.f('uq_actifs_symbole')) + ) + op.create_index('symbole_index', 'actifs', ['symbole'], unique=False) + op.create_table('allocation', + sa.Column('no_cat', sa.Integer(), nullable=False), + sa.Column('classe', sa.Unicode(length=45), nullable=False), + sa.Column('pc_cible', sa.Integer(), nullable=True), + sa.Column('pc_atteint', sa.Float(), nullable=True), + sa.Column('valeur', sa.Float(), nullable=True), + sa.PrimaryKeyConstraint('no_cat', name=op.f('pk_allocation')) + ) + op.create_table('classes', + sa.Column('classe', sa.Unicode(), nullable=False), + sa.Column('type', sa.Unicode(length=45), nullable=True), + sa.Column('ordre', sa.Integer(), nullable=True), + sa.Column('bg_color', sa.Unicode(length=45), nullable=True), + sa.PrimaryKeyConstraint('classe', name=op.f('pk_classes')) + ) + op.create_index('ordre_index', 'classes', ['ordre'], unique=False) + op.create_table('histo', + sa.Column('no_id', sa.Integer(), nullable=False), + sa.Column('date', sa.DateTime(), nullable=True), + sa.Column('mvt_cash', sa.Float(), nullable=True), + sa.Column('valeur_pf', sa.Float(), nullable=True), + sa.Column('nb_part', sa.Float(), nullable=True), + sa.Column('val_part', sa.Float(), nullable=True), + sa.Column('cours_ref', sa.Float(), nullable=True), + sa.Column('val_part_ref', sa.Float(), nullable=True), + sa.PrimaryKeyConstraint('no_id', name=op.f('pk_histo')) + ) + # ### end Alembic commands ### + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('histo') + op.drop_index('ordre_index', table_name='classes') + op.drop_table('classes') + op.drop_table('allocation') + op.drop_index('symbole_index', table_name='actifs') + op.drop_table('actifs') + # ### end Alembic commands ### diff --git a/cao_blogr/alembic/versions/20230123_7995372bd306.py b/cao_blogr/alembic/versions/20230123_7995372bd306.py new file mode 100644 index 0000000..60f88ff --- /dev/null +++ b/cao_blogr/alembic/versions/20230123_7995372bd306.py @@ -0,0 +1,26 @@ +"""add portfolio tables + +Revision ID: 7995372bd306 +Revises: fe8f8a5bfdb5 +Create Date: 2023-01-23 14:43:22.632056 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '7995372bd306' +down_revision = 'fe8f8a5bfdb5' +branch_labels = None +depends_on = None + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/cao_blogr/alembic/versions/20230121_a632e375e7dc.py b/cao_blogr/alembic/versions/20230123_fe8f8a5bfdb5.py similarity index 63% rename from cao_blogr/alembic/versions/20230121_a632e375e7dc.py rename to cao_blogr/alembic/versions/20230123_fe8f8a5bfdb5.py index 4092575..b6cca3a 100644 --- a/cao_blogr/alembic/versions/20230121_a632e375e7dc.py +++ b/cao_blogr/alembic/versions/20230123_fe8f8a5bfdb5.py @@ -1,8 +1,8 @@ -"""init +"""add portfolio tables -Revision ID: a632e375e7dc +Revision ID: fe8f8a5bfdb5 Revises: -Create Date: 2023-01-21 11:25:48.517435 +Create Date: 2023-01-23 14:42:10.171291 """ from alembic import op @@ -10,17 +10,17 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = 'a632e375e7dc' +revision = 'fe8f8a5bfdb5' down_revision = None branch_labels = None depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('entries', 'author') + pass # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### - op.add_column('entries', sa.Column('author', sa.VARCHAR(length=50), nullable=True)) + pass # ### end Alembic commands ### diff --git a/cao_blogr/models/__init__.py b/cao_blogr/models/__init__.py index c61b38d..38a7dc8 100644 --- a/cao_blogr/models/__init__.py +++ b/cao_blogr/models/__init__.py @@ -7,6 +7,7 @@ import zope.sqlalchemy # Base.metadata prior to any initialization routines from .user import User from .blog_record import BlogRecord +from .portfolio import Actifs # run configure_mappers after defining all of the models to ensure # all relationships can be setup diff --git a/cao_blogr/models/portfolio.py b/cao_blogr/models/portfolio.py new file mode 100644 index 0000000..6945c50 --- /dev/null +++ b/cao_blogr/models/portfolio.py @@ -0,0 +1,63 @@ +import datetime #<- will be used to set default dates on models +from cao_blogr.models.meta import Base #<- we need to import our sqlalchemy metadata from which model classes will inherit +from sqlalchemy import ( + Column, + Integer, + Float, + Unicode, #<- will provide Unicode field + UnicodeText, #<- will provide Unicode text field + DateTime, #<- time abstraction field + Index, + ForeignKey, +) + + +class Actifs(Base): + __tablename__ = 'actifs' + no_id = Column(Integer, primary_key=True) + symbole = Column(Unicode(45), unique=True, nullable=False) + libelle = Column(Unicode(45), nullable=False) + classe = Column(Unicode(45), nullable=False) + nombre = Column(Integer) + cours = Column(Float) + pru = Column(Float) + valeur = Column(Float) + plus_value = Column(Float) + pc_plusvalue = Column(Float) + rendement = Column(Float) + pc_rdt = Column(Float) + pc_allocation = Column(Float) + ter = Column(Float) + ter_pondere = Column(Float) + devise = Column(Unicode(45), default='EUR') + parite = Column(Float) + website = Column(Unicode(100)) + modif_le = Column(DateTime, default=datetime.datetime.utcnow) + __table_args__ = (Index('symbole_index', 'symbole'),) + +class Allocation(Base): + __tablename__ = 'allocation' + no_cat = Column(Integer, primary_key=True) + classe = Column(Unicode(45), nullable=False) + pc_cible = Column(Integer) + pc_atteint = Column(Float) + valeur = Column(Float) + +class Classes(Base): + __tablename__ = 'classes' + classe = Column(Unicode, primary_key=True) + type = Column(Unicode(45), default='ACTION') + ordre = Column(Integer) + bg_color = Column(Unicode(45)) + __table_args__ = (Index('ordre_index', 'ordre'),) + +class Histo(Base): + __tablename__ = 'histo' + no_id = Column(Integer, primary_key=True) + date = Column(DateTime, default=datetime.datetime.utcnow) + mvt_cash = Column(Float) + valeur_pf = Column(Float) + nb_part = Column(Float) + val_part = Column(Float) + cours_ref = Column(Float) + val_part_ref = Column(Float) diff --git a/cao_blogr/routes.py b/cao_blogr/routes.py index cf1e8da..54f34cc 100644 --- a/cao_blogr/routes.py +++ b/cao_blogr/routes.py @@ -12,3 +12,10 @@ def includeme(config): config.add_route('users', '/users') config.add_route('user_add', '/user_add/{name}') config.add_route('user_pwd', '/user_pwd/{name}') + # portfolio + config.add_route('actif_edit', '/actif_edit/{no_id}') + config.add_route('actif2_edit', '/actif2_edit/{no_id}') + config.add_route('allocation_edit', '/allocation_edit/{no_cat}') + config.add_route('histo_list', '/histo_list') + config.add_route('histo_edit', '/histo_edit/{no_id}') + config.add_route('portfolio', '/portfolio') diff --git a/cao_blogr/services/portfolio.py b/cao_blogr/services/portfolio.py new file mode 100644 index 0000000..9b18ff3 --- /dev/null +++ b/cao_blogr/services/portfolio.py @@ -0,0 +1,15 @@ +import sqlalchemy as sa +from ..models.portfolio import Histo + + +class PFService(object): + + @classmethod + def get_histo(cls, request, no_id): + if no_id == '0': + items = request.dbsession.query(Histo).order_by(sa.asc(Histo.date)).all() + else: + # lire le histo par le no_id + items = request.dbsession.query(Histo).filter(Histo.id == id).first() + return items + diff --git a/cao_blogr/templates/404.jinja2 b/cao_blogr/templates/404.jinja2 index aaf1241..7cfbc73 100644 --- a/cao_blogr/templates/404.jinja2 +++ b/cao_blogr/templates/404.jinja2 @@ -2,7 +2,7 @@ {% block content %}
404 Page Not Found
| Date | +E/S Cash | +Valeur Pf | +Nb Part | +Valeur Part | +Cours ref | +Valeur Part ref | +No Id | +
|---|---|---|---|---|---|---|---|
| {{ item.date.strftime('%d/%m/%Y') }} | +{{ item.mvt_cash }} € | +{{ item.valeur_pf }} | +{{ item.nb_part }} | +{{ item.val_part }} | +{{ item.nb_part_ref }} | +{{ item.val_part_ref }} | ++ {{ item.no_id }} + | +