added actif2_edit.pt
This commit is contained in:
@@ -17,7 +17,7 @@ from .default import (
|
|||||||
|
|
||||||
def get_actifs(request, no_id):
|
def get_actifs(request, no_id):
|
||||||
if no_id == '0':
|
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()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
else:
|
else:
|
||||||
# lire le actif par son identifiant
|
# lire le actif par son identifiant
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ def includeme(config):
|
|||||||
# actifs
|
# actifs
|
||||||
config.add_route('actifs_list', '/actifs_list')
|
config.add_route('actifs_list', '/actifs_list')
|
||||||
config.add_route('actif_edit', '/actif_edit/{no_id}')
|
config.add_route('actif_edit', '/actif_edit/{no_id}')
|
||||||
|
config.add_route('actif2_edit', '/actif2_edit/{no_id}')
|
||||||
# members
|
# members
|
||||||
config.add_route('changer_mdp', '/changer_mdp')
|
config.add_route('changer_mdp', '/changer_mdp')
|
||||||
config.add_route('envoyer_mdp', '/envoyer_mdp')
|
config.add_route('envoyer_mdp', '/envoyer_mdp')
|
||||||
|
|||||||
@@ -76,6 +76,9 @@
|
|||||||
background-color: #2f2f2f;
|
background-color: #2f2f2f;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
.bg-grey {
|
||||||
|
background-color: #f6f6f6;
|
||||||
|
}
|
||||||
.logo {
|
.logo {
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
}
|
||||||
|
|||||||
84
caotek_mesavoirs/templates/actifs/actif2_edit.pt
Normal file
84
caotek_mesavoirs/templates/actifs/actif2_edit.pt
Normal 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>
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<div metal:fill-slot="content">
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
<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">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<table id="actifs_list" class="table table-striped table-bordered">
|
<table id="actifs_list" class="table table-condensed table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Catégorie</th>
|
<th>Catégorie</th>
|
||||||
@@ -24,9 +24,22 @@
|
|||||||
<th>PRU</th>
|
<th>PRU</th>
|
||||||
<th>Valeur</th>
|
<th>Valeur</th>
|
||||||
<th>Plus-Value</th>
|
<th>Plus-Value</th>
|
||||||
<th>No</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</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>
|
</table>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
@@ -55,30 +68,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</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 -->
|
</div><!-- content -->
|
||||||
</metal:block>
|
</metal:block>
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import json
|
|||||||
|
|
||||||
@view_config(route_name='actifs_list', renderer='../templates/actifs/actifs_list.pt', permission='view')
|
@view_config(route_name='actifs_list', renderer='../templates/actifs/actifs_list.pt', permission='view')
|
||||||
def actifs_list(request):
|
def actifs_list(request):
|
||||||
|
url = request.route_url('actifs_list')
|
||||||
message = ''
|
message = ''
|
||||||
|
|
||||||
# lire les actifs
|
# lire les actifs
|
||||||
@@ -56,19 +57,10 @@ def actifs_list(request):
|
|||||||
items = get_actifs(request, '0')
|
items = get_actifs(request, '0')
|
||||||
message = u'Le portefeuille est mis à jour avec succès.'
|
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 {
|
return {
|
||||||
'page_title': u"Mes actifs",
|
'page_title': u"Mes actifs",
|
||||||
'dt_data': json.dumps(liste),
|
'url': url,
|
||||||
|
'items': items,
|
||||||
'message': message,
|
'message': message,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +72,69 @@ def actif_edit(request):
|
|||||||
message = ''
|
message = ''
|
||||||
categories_list = get_categories(request,'0')
|
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':
|
if no_id == '0':
|
||||||
# nouveau
|
# nouveau
|
||||||
actif = {}
|
actif = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user