From 91e82c483179adc46c69e49a70f45d453e5a259b Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Sun, 30 Jul 2017 22:07:50 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20histo=5Fedit.pt=20et=20calcul=20de=20l'?= =?UTF-8?q?=C3=A9volution=20de=20la=20valeur=20de=20la=20part?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- caotek_mesavoirs/models/actifs.py | 31 +++++++-- caotek_mesavoirs/routes.py | 1 + .../templates/actifs/actif2_edit.pt | 4 +- .../templates/actifs/actif_edit.pt | 4 +- .../templates/actifs/allocation_list.pt | 10 +-- .../templates/actifs/histo_edit.pt | 67 +++++++++++++++++++ .../templates/actifs/histo_list.pt | 14 +++- caotek_mesavoirs/templates/home.pt | 34 +++++++++- caotek_mesavoirs/views/actifs.py | 64 ++++++++++++++++-- caotek_mesavoirs/views/default.py | 12 ++-- production.ini | 8 +-- 11 files changed, 218 insertions(+), 31 deletions(-) create mode 100644 caotek_mesavoirs/templates/actifs/histo_edit.pt diff --git a/caotek_mesavoirs/models/actifs.py b/caotek_mesavoirs/models/actifs.py index 687fd0e..d94673a 100644 --- a/caotek_mesavoirs/models/actifs.py +++ b/caotek_mesavoirs/models/actifs.py @@ -109,12 +109,33 @@ def get_classes(request, classe): results = request.dbsession.execute(query, {'classe': classe}).first() return results -def get_histo_by_date(request, date): - if date == '0': +def get_histo(request, no_id): + if no_id == '0': query = "SELECT * FROM histo ORDER BY date" results = request.dbsession.execute(query).fetchall() else: - # lire le histo par la date - query = """SELECT * FROM histo WHERE date=:date;""" - results = request.dbsession.execute(query, {'date': date}).first() + # lire le histo par le no_id + query = """SELECT * FROM histo WHERE no_id=:no_id;""" + results = request.dbsession.execute(query, {'no_id': no_id}).first() return results + +def update_histo(request, no_id, new_values): + # formater les champs + s = '' + for param in new_values.keys(): + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if no_id == '0': + query = "INSERT INTO histo SET date=CURRENT_DATE(), %s" % s + else: + new_values['no_id'] = no_id + query = "UPDATE histo SET %s WHERE no_id = :no_id;" % s + execute_query(request, query, new_values) + +def delete_histo(request, no_id): + query = "DELETE FROM histo WHERE no_id = :no_id ;" + execute_query(request, query, {'no_id': no_id}) + diff --git a/caotek_mesavoirs/routes.py b/caotek_mesavoirs/routes.py index cdadfd6..48f402b 100644 --- a/caotek_mesavoirs/routes.py +++ b/caotek_mesavoirs/routes.py @@ -11,6 +11,7 @@ def includeme(config): config.add_route('allocation_list', '/allocation_list') 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}') # members config.add_route('changer_mdp', '/changer_mdp') config.add_route('envoyer_mdp', '/envoyer_mdp') diff --git a/caotek_mesavoirs/templates/actifs/actif2_edit.pt b/caotek_mesavoirs/templates/actifs/actif2_edit.pt index 34b88df..cdade9c 100644 --- a/caotek_mesavoirs/templates/actifs/actif2_edit.pt +++ b/caotek_mesavoirs/templates/actifs/actif2_edit.pt @@ -89,11 +89,11 @@
- +
%
-
diff --git a/caotek_mesavoirs/templates/actifs/actif_edit.pt b/caotek_mesavoirs/templates/actifs/actif_edit.pt index ec85b11..b21689c 100644 --- a/caotek_mesavoirs/templates/actifs/actif_edit.pt +++ b/caotek_mesavoirs/templates/actifs/actif_edit.pt @@ -63,11 +63,11 @@
- +
%
-
diff --git a/caotek_mesavoirs/templates/actifs/allocation_list.pt b/caotek_mesavoirs/templates/actifs/allocation_list.pt index 1708ce5..3ebbca9 100644 --- a/caotek_mesavoirs/templates/actifs/allocation_list.pt +++ b/caotek_mesavoirs/templates/actifs/allocation_list.pt @@ -3,12 +3,14 @@
+

+ + Retour + + Nouvelle classe +

-

- - Nouvelle classe -

diff --git a/caotek_mesavoirs/templates/actifs/histo_edit.pt b/caotek_mesavoirs/templates/actifs/histo_edit.pt new file mode 100644 index 0000000..9f1be2d --- /dev/null +++ b/caotek_mesavoirs/templates/actifs/histo_edit.pt @@ -0,0 +1,67 @@ + +
+ +
+
+
+
+ +
+ +
+

${item.date.strftime('%d-%m-%Y')}

+
+
+
+ +
+
+
+ +
+
+
+
+ +
+

${item.nb_part}

+
+
+ +
+
+
+
+ + Retour + + +
+
+
+ + +
+
+
+ + + +
+ diff --git a/caotek_mesavoirs/templates/actifs/histo_list.pt b/caotek_mesavoirs/templates/actifs/histo_list.pt index f1ec282..de9a0bd 100644 --- a/caotek_mesavoirs/templates/actifs/histo_list.pt +++ b/caotek_mesavoirs/templates/actifs/histo_list.pt @@ -4,6 +4,8 @@

Retour + + Ajout/retrait de cash

@@ -14,8 +16,9 @@ - + +
Valeur Pf Nb Part Valeur PartNb Part refCours ref Valeur Part refNo Id
@@ -33,7 +36,14 @@ pageLength: 50, bLengthChange: false, columnDefs: [ - {className:"text-right", "targets": [1,2,3,4,5,6]} + {className:"text-right", "targets": [1,2,3,4,5,6]}, + {className:"text-center", "targets": [7]}, + { "targets": 7, + "render": function (data, type, full, meta) { + // ajouter un link vers le formulaire + return '' + data + ''; + }, + }, ] }); diff --git a/caotek_mesavoirs/templates/home.pt b/caotek_mesavoirs/templates/home.pt index 11ac9a5..0ecec31 100644 --- a/caotek_mesavoirs/templates/home.pt +++ b/caotek_mesavoirs/templates/home.pt @@ -28,6 +28,34 @@
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
PorteffeuilleMontant%
Valorisation${layout.to_euro(member.pf_valeur)}
Plus value${layout.to_euro(member.pf_plusvalue)}${layout.to_percent(member.pf_plusvalue_pc, 1)}
Rendemant brut${layout.to_euro(member.pf_rendement)}${layout.to_percent(member.pf_rdt_pc, 1)}
+
@@ -55,8 +83,8 @@ % de +/- % PF TER - % Rdt Rdt brut + % Rdt @@ -70,8 +98,8 @@ ${layout.to_percent(ligne.pc_plusvalue,1)} ${ligne.pc_allocation} % ${layout.to_percent(ligne.ter,2)} - ${layout.to_percent(ligne.rdt,1)} - ${u'%.0f €' % (ligne.valeur * ligne.rdt / 100)} + ${u'%.0f €' % (ligne.rendement)} + ${layout.to_percent(ligne.pc_rdt,1)} Total diff --git a/caotek_mesavoirs/views/actifs.py b/caotek_mesavoirs/views/actifs.py index 92d6aa2..88d422a 100644 --- a/caotek_mesavoirs/views/actifs.py +++ b/caotek_mesavoirs/views/actifs.py @@ -97,7 +97,7 @@ def actif_edit(request): actif['nombre'] = '0' actif['pru'] = '0' actif['ter'] = '0' - actif['rdt'] = '0' + actif['pc_rdt'] = '0' page_title= 'Nouvel actif ACTION' else: # lire la fiche du actif @@ -163,7 +163,7 @@ def actif2_edit(request): actif['pru'] = '0' actif['cours'] = '0' actif['ter'] = '0' - actif['rdt'] = '0' + actif['pc_rdt'] = '0' page_title= 'Nouvel actif' else: # lire la fiche du actif @@ -254,7 +254,7 @@ def allocation_edit(request): if 'form.submitted' in request.params: new_values = {} - for param, db_value in categorie.items(): + for param, db_value in allocation.items(): if param in request.params and request.params[param] != db_value: new_values[param] = request.params[param] @@ -280,15 +280,69 @@ def allocation_edit(request): @view_config(route_name='histo_list', renderer='../templates/actifs/histo_list.pt', permission='manage') def histo_list(request): # lire l historique - items = get_histo_by_date(request, '0') + items = get_histo(request, '0') liste=[] for item in items: # construire la liste pour datatable - d = (item.date.strftime('%d/%m/%Y'), to_euro(item.mvt_cash), to_euro(item.valeur_pf), to_euro(item.nb_part), to_euro(item.val_part), to_euro(item.nb_part_ref), to_euro(item.val_part_ref)) + d = (item.date.strftime('%d/%m/%Y'), to_euro(item.mvt_cash), to_euro(item.valeur_pf), to_euro(item.nb_part), + to_euro(item.val_part), to_euro(item.cours_ref), to_euro(item.val_part_ref), str(item.no_id).zfill(4)) liste.append(d) return { 'page_title': u'Historique', 'dt_data': json.dumps(liste), } + +@view_config(route_name='histo_edit', renderer='../templates/actifs/histo_edit.pt', permission='view') +def histo_edit(request): + no_id = request.matchdict['no_id'] + url = request.route_url('histo_edit', no_id=no_id) + message = '' + today = datetime.today() + + if no_id == '0': + # nouveau + item = {} + item['no_id'] = 0 + item['date'] = today + item['mvt_cash'] = 0.0 + item['nb_part'] = 0.0 + page_title= u'Nouveau mouvement' + else: + # lire la fiche de la categorie + item = get_histo(request, no_id) + if not item: + request.session.flash(u"Histo non trouvé : %s" % no_id, 'warning') + return HTTPFound(location=request.route_url('histo_list')) + page_title= u"Mouvement %s du %s" % (item.no_id, item.date.strftime('%d/%m/%Y')) + + if 'form.submitted' in request.params: + new_values = {} + for param, db_value in item.items(): + if param in request.params and request.params[param] != db_value: + new_values[param] = request.params[param] + + if new_values: + # lire le cours de l'indice de réfence : Carmignac Investissement A EUR Acc + sym = Share('FR0010148981.PA') + new_values['cours_ref'] = sym.get_price() + + update_histo(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('histo_list')) + + + if 'form.deleted' in request.params: + delete_histo(request, no_id) + request.session.flash(u"La fiche a été supprimée avec succès.", 'success') + return HTTPFound(location=request.route_url('histo_list')) + + return { + 'page_title': page_title, + 'url': url, + 'item': item, + 'today': today, + 'message': message, + } + diff --git a/caotek_mesavoirs/views/default.py b/caotek_mesavoirs/views/default.py index e647343..032538d 100644 --- a/caotek_mesavoirs/views/default.py +++ b/caotek_mesavoirs/views/default.py @@ -29,7 +29,7 @@ from ..models.default import * from ..models.actifs import ( get_actifs, get_allocation, - get_histo_by_date, + get_histo, ) from ..models.members import ( get_member_by_email, @@ -80,6 +80,9 @@ def to_percent(x, d): @view_config(route_name='home', renderer='../templates/home.pt', permission='view') def home(request): + logged_in = authenticated_userid(request) + member = get_member_by_email(request, logged_in) + message = '' # lire les categories @@ -108,10 +111,10 @@ def home(request): total_valeur += item.valeur total_pv += item.plus_value total_pc_value = total_pv / total_valeur * 100 - total_rdt += item.valeur * item.rdt / 100 + total_rdt += item.rendement # lire l'historique - histos = get_histo_by_date(request,'0') + histos = get_histo(request,'0') courbe_evoln=[] courbe_evoln.append(('Date', 'Valeur part PF', 'Valeur part Indice')) @@ -124,6 +127,7 @@ def home(request): 'page_title': u"Allocation d'actifs", 'message': message, 'items': items, + 'member': member, 'donut_cible': json.dumps(donut_cible), 'donut_actuel': json.dumps(donut_actuel), 'courbe_evoln': json.dumps(courbe_evoln), @@ -131,7 +135,7 @@ def home(request): 'total_valeur': total_valeur, 'total_pv': total_pv, 'total_pc_value': total_pc_value, - 'total_rdt': int(total_rdt) + 'total_rdt': total_rdt } @view_config(route_name='doc_list', renderer='../templates/doc_list.pt', permission='view') diff --git a/production.ini b/production.ini index e1d605f..6331b54 100644 --- a/production.ini +++ b/production.ini @@ -15,9 +15,9 @@ pyramid.includes = pyramid_chameleon pyramid_layout pyramid_mailer - pyramid_tm + pyramid_tmq -sqlalchemy.url = mysql://root:phuoc/@srvbd/bd_mesavoirs?charset=utf8 +sqlalchemy.url = mysql://root:phuoc@srvbd/bd_mesavoirs?charset=utf8 caotek_mesavoirs.admin_email = phuoc@caotek.fr @@ -28,8 +28,8 @@ mail.port = 25 [server:main] use = egg:waitress#main host = 0.0.0.0 -port = 6543 -#url_scheme = https +port = 9280 +url_scheme = https ### # logging configuration