added actif2_edit.pt

This commit is contained in:
2017-07-24 12:54:24 +02:00
parent a2c5ac2cfe
commit 4c76a07a58
6 changed files with 171 additions and 39 deletions

View File

@@ -17,7 +17,7 @@ from .default import (
def get_actifs(request, no_id):
if no_id == '0':
query = "SELECT * FROM actifs ORDER BY symbole"
query = "SELECT * FROM actifs ORDER BY categorie, symbole"
results = request.dbsession.execute(query).fetchall()
else:
# lire le actif par son identifiant

View File

@@ -7,6 +7,7 @@ def includeme(config):
# actifs
config.add_route('actifs_list', '/actifs_list')
config.add_route('actif_edit', '/actif_edit/{no_id}')
config.add_route('actif2_edit', '/actif2_edit/{no_id}')
# members
config.add_route('changer_mdp', '/changer_mdp')
config.add_route('envoyer_mdp', '/envoyer_mdp')

View File

@@ -76,6 +76,9 @@
background-color: #2f2f2f;
color: #ffffff;
}
.bg-grey {
background-color: #f6f6f6;
}
.logo {
height: 60px;
}

View File

@@ -0,0 +1,84 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
<br />
<div class="row">
<form id="actif_edit-form" class="form-horizontal" action="${url}" method="post" tal:condition="actif"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<div class="form-group">
<label class="col-xs-2 control-label">Symbole</label>
<div class="col-xs-3">
<input class="form-control" type="text" name="symbole"
value="${actif.symbole}" placeholder="15 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="Le symbole est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="15"
data-fv-stringlength-message="15 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="categorie">Catégorie</label>
<div class="col-xs-3">
<select class="form-control" id="categorie" name="categorie">
<div tal:repeat="item categories_list">
<option value="${item.categorie}" tal:attributes="selected actif.categorie==item.categorie and 'selected' or None">${item.categorie}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="nombre">Nombre</label>
<div class="col-xs-2">
<input class="form-control" type="text" id="nombre" name="nombre" value="${actif.nombre}"
data-fv-digits="true"
data-fv-digits-message="Le nombre doit être composé que de chiffres" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="pru">PRU</label>
<div class="col-xs-2">
<div class="input-group">
<div class="input-group-addon">€</div>
<input class="form-control" type="text" id="pru" name="pru" value="${actif.pru}"
data-fv-numeric="true"
data-fv-numeric-message="Le nombre doit être composé de chiffres et/ou de ." />
</div>
</div>
</div>
<br />
<div class="form-group">
<div class="col-xs-offset-2 col-xs-10">
<div class="form-group">
<a class="btn btn-default" href="${request.application_url}/actifs_list">
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
<button class="btn btn-warning" type="submit" name="form.deleted"
tal:condition="actif.no_id <> 0">
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
</div>
</div>
</div>
</form>
<br />
<br />
</div> <!-- row -->
<script>
$(document).ready(function() {
$('#actif_edit-form').formValidation();
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</metal:block>

View File

@@ -2,7 +2,7 @@
<div metal:fill-slot="content">
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
<form id="actif_list-form" action="${request.application_url}" method="post">
<form id="actif_list-form" action="${url}" method="post">
<div class="form-group">
<div class="form-group">
<button class="btn btn-primary" type="submit" name="form.submitted">
@@ -13,7 +13,7 @@
</div>
</form>
<table id="actifs_list" class="table table-striped table-bordered">
<table id="actifs_list" class="table table-condensed table-bordered">
<thead>
<tr>
<th>Catégorie</th>
@@ -24,9 +24,22 @@
<th>PRU</th>
<th>Valeur</th>
<th>Plus-Value</th>
<th>No</th>
</tr>
</thead>
<tbody>
<tr tal:repeat="ligne items">
<td class="${ligne.bg}">${ligne.categorie}</td>
<td>${ligne.symbole}</td>
<td tal:condition="ligne.categorie[:6]=='Action'"><a href="actif_edit/${ligne.no_id}">${ligne.libelle}</a></td>
<td tal:condition="ligne.categorie[:6]<>'Action'"><a href="actif2_edit/${ligne.no_id}">${ligne.libelle}</a></td>
<td class="text-right">${ligne.nombre}</td>
<td class="text-right">${ligne.cours}</td>
<td class="text-right">${layout.to_euro(ligne.pru)}</td>
<td class="text-right">${layout.to_euro(ligne.valeur)}</td>
<td tal:condition="ligne.plus_value>=0" class="text-right" style="color: green;">${layout.to_euro(ligne.plus_value)}</td>
<td tal:condition="ligne.plus_value <0" class="text-right" style="color: red;">${layout.to_euro(ligne.plus_value)}</td>
</tr>
</tbody>
</table>
<br />
@@ -55,30 +68,6 @@
</div>
</div>
<script type="text/javascript">
var dataSet = ${dt_data};
$(document).ready(function() {
$.fn.dataTable.moment('DD/MM/YYYY - HH:mm');
$('#actifs_list').DataTable({
data: dataSet,
pageLength: 50,
bLengthChange: false,
columnDefs: [
{ className: "text-right", "targets": [3,4,5,6,7] },
{ "targets": 8,
"render": function (data, type, full, meta) {
// ajouter un link vers le formulaire
return '<a class="btn btn-primary btn-sm" role="button" href="/actif_edit/' + data +
'"><span class="glyphicon glyphicon-pencil"></span> </a>';
},
},
]
});
});
</script>
</div><!-- content -->
</metal:block>

View File

@@ -38,6 +38,7 @@ import json
@view_config(route_name='actifs_list', renderer='../templates/actifs/actifs_list.pt', permission='view')
def actifs_list(request):
url = request.route_url('actifs_list')
message = ''
# lire les actifs
@@ -56,19 +57,10 @@ def actifs_list(request):
items = get_actifs(request, '0')
message = u'Le portefeuille est mis à jour avec succès.'
# construire la liste
liste=[]
for item in items:
if item.devise == 'EUR':
cours = to_euro(item.cours)
else:
cours = to_usd(item.cours)
d = (item.categorie, item.symbole, item.libelle, str(item.nombre), cours, to_euro(item.pru), to_euro(item.valeur), to_euro(item.plus_value),str(item.no_id))
liste.append(d)
return {
'page_title': u"Mes actifs",
'dt_data': json.dumps(liste),
'url': url,
'items': items,
'message': message,
}
@@ -80,6 +72,69 @@ def actif_edit(request):
message = ''
categories_list = get_categories(request,'0')
if no_id == '0':
# nouveau
actif = {}
actif['no_id'] = '0'
actif['symbole'] = ''
actif['categorie'] = 'Actions Europe'
actif['nombre'] = '0'
actif['pru'] = '0'
page_title= 'Nouvel actif ACTION'
else:
# lire la fiche du actif
actif = get_actifs(request, no_id)
if not actif:
request.session.flash(u"Actif non trouvé : %s" % no_id, 'warning')
return HTTPFound(location=request.route_url('home'))
page_title= u"Actif : %s" % (actif.libelle)
if 'form.submitted' in request.params:
new_values = {}
for param, db_value in actif.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
# récupérer les infos du symbole de Yahoo finance
if 'symbole' in request.params:
symbole = request.params['symbole']
else:
symbole = actif.symbole
sym = Share(symbole)
if sym.get_name() <> None:
# import pdb;pdb.set_trace()
new_values['libelle'] = sym.get_name()
new_values['cours'] = sym.get_price()
new_values['devise'] = sym.get_currency()
update_actif(request, no_id, new_values)
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('home'))
else:
message = 'Symbole inconnu. Veuillez ressaisir.'
if 'form.deleted' in request.params:
delete_actif(request, no_id)
request.session.flash(u"La fiche a été supprimée avec succès.", 'success')
return HTTPFound(location=request.route_url('home'))
return {
'page_title': page_title,
'url': url,
'actif': actif,
'categories_list': categories_list,
'message': message,
}
@view_config(route_name='actif2_edit', renderer='../templates/actifs/actif2_edit.pt', permission='view')
def actif2_edit(request):
no_id = request.matchdict['no_id']
url = request.route_url('actif2_edit', no_id=no_id)
message = ''
categories_list = get_categories(request,'0')
if no_id == '0':
# nouveau
actif = {}