ajout actif_list.pt et actif_edit.pt

This commit is contained in:
CAO Thien-An
2017-07-23 15:43:34 +02:00
parent 56605c5166
commit a538f252cb
8 changed files with 234 additions and 10 deletions

View File

@@ -17,6 +17,7 @@ caotek_mesavoirs.egg-info/not-zip-safe
caotek_mesavoirs.egg-info/requires.txt
caotek_mesavoirs.egg-info/top_level.txt
caotek_mesavoirs/models/__init__.py
caotek_mesavoirs/models/default.py
caotek_mesavoirs/models/members.py
caotek_mesavoirs/scripts/__init__.py
caotek_mesavoirs/views/__init__.py

View File

@@ -44,4 +44,45 @@ def delete_doc(request, doc_id):
query = "delete from docs where doc_id = :doc_id;"
results = request.dbsession.execute(query, {'doc_id': doc_id})
def get_actifs(request, no_id):
if no_id == '0':
query = "SELECT * FROM actifs ORDER BY symbole"
results = request.dbsession.execute(query).fetchall()
else:
# lire le actif par son identifiant
query = """SELECT * FROM actifs WHERE no_id=:no_id;"""
results = request.dbsession.execute(query, {'no_id': no_id}).first()
return results
def get_categories(request, cat_id):
if cat_id == '0':
query = "SELECT * FROM categories ORDER BY categorie"
results = request.dbsession.execute(query).fetchall()
else:
# lire le actif par son identifiant
query = """SELECT * FROM categories WHERE cat_id=:cat_id;"""
results = request.dbsession.execute(query, {'cat_id': cat_id}).first()
return results
def update_actif(request, no_id, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'symbole':
new_values['symbole'] = new_values['symbole'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if no_id == '0':
query = "INSERT INTO actifs SET %s" % s
else:
new_values['no_id'] = no_id
query = "UPDATE actifs SET %s WHERE no_id = :no_id;" % s
execute_query(request, query, new_values)
def delete_actif(request, no_id):
query = "DELETE FROM actifs WHERE no_id = :no_id ;"
execute_query(request, query, {'no_id': no_id})

View File

@@ -4,6 +4,7 @@ def includeme(config):
config.add_route('doc_edit', '/doc_edit/{doc_id}')
config.add_route('doc_list', '/doc_list')
config.add_route('doc_view', '/doc_view/{doc_id}')
config.add_route('actif_edit', '/actif_edit/{no_id}')
# members
config.add_route('changer_mdp', '/changer_mdp')
config.add_route('envoyer_mdp', '/envoyer_mdp')

View File

@@ -2,7 +2,7 @@
<div metal:fill-slot="content">
<div class="content text-center">
<img src="${request.static_url('mondumas:static/img/globe.png')}" width="90" />
<img src="${request.static_url('caotek_mesavoirs:static/img/globe.png')}" width="90" />
<br />
<br />
<p class="lead"><span class="font-semi-bold">404</span> Page non trouvée</p>

View File

@@ -0,0 +1,83 @@
<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}/home"><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

@@ -1,11 +1,52 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="container-fluid text-center">
<p>
<a href="${request.application_url}/actif_edit/0" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span> Nouvel actif</a>
</p>
<table id="actifs_list" class="table table-striped table-bordered">
<thead>
<tr>
<th>No</th>
<th>Symbole</th>
<th>Libellé</th>
<th>Catégorie</th>
<th>Nombre</th>
<th>Cours</th>
<th>PRU</th>
<th>Valeur</th>
<th>Plus-Value</th>
</tr>
</thead>
</table>
<br />
<br />
<br />
</div>
<br />
<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": [4,5,6,7,8] },
{ "targets": 0,
"render": function (data, type, full, meta) {
// ajouter un link vers le formulaire
return '<a href="/actif_edit/' + data + '">' + data + '</a>';
},
},
]
});
});
</script>
</div><!-- content -->
</metal:block>

View File

@@ -63,8 +63,18 @@ def home(request):
request.session.flash(u"Utilisateur non trouvé : %s" % logged_in, 'warning')
return HTTPFound(location=request.route_url('/home'))
# lire les actifs
items = get_actifs(request, '0')
# construire la liste
liste=[]
for item in items:
d = (str(item.no_id), item.symbole, item.libelle, item.categorie, str(item.nombre), to_euro(item.cours), to_euro(item.pru), to_euro(item.valeur), to_euro(item.plus_value))
liste.append(d)
return {
'page_title': u"%s %s" % (membre.prenom, membre.nom),
'dt_data': json.dumps(liste),
}
@view_config(route_name='doc_list', renderer='../templates/doc_list.pt', permission='view')
@@ -103,7 +113,7 @@ def doc_edit(request):
if len(intitule) > 0 and len(texte) > 0:
update_doc(request, doc_id, intitule, texte, theme)
return HTTPFound(location=request.route_url('doc_list')
return HTTPFound(location=request.route_url('doc_list'))
else:
message = "Veuillez saisir un intitule et un texte."
@@ -111,7 +121,7 @@ def doc_edit(request):
if doc_id <> '0':
delete_doc(request, doc_id)
request.session.flash(u"<%s> est supprimée avec succès." % intitule, 'success')
return HTTPFound(location=request.route_url('doc_list')
return HTTPFound(location=request.route_url('doc_list'))
return {
'page_title': titre,
@@ -153,7 +163,7 @@ gestion.entreprise-dumas.com
""" % (corps)
message = Message(subject=u"[Ent. Dumas] %s" % objet,
message = Message(subject=u"[Mes Avoirs] %s" % objet,
sender=request.registry.settings['mondumas.admin_email'],
body=body)
message.add_recipient(destinataire)
@@ -161,3 +171,50 @@ gestion.entreprise-dumas.com
mailer.send_immediately(message)
@view_config(route_name='actif_edit', renderer='../templates/actif_edit.pt', permission='view')
def actif_edit(request):
no_id = request.matchdict['no_id']
url = request.route_url('actif_edit', no_id=no_id)
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'
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"Fiche de %s" % (actif.symbole)
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:
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'))
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 File

@@ -18,7 +18,7 @@ pyramid.includes =
pyramid_mailer
pyramid_tm
sqlalchemy.url = mysql://root:phuoc@localhost/bd_mesavoirs?charset=utf8
sqlalchemy.url = mysql://root:phuoc@192.168.1.98/bd_mesavoirs?charset=utf8
caotek_mesavoirs.admin_email = ctphuoc@bbox.fr