Commit b075c542 authored by Vincent Le gallic's avatar Vincent Le gallic

Implémentation des transferts.

  Il y a des subtilités pour le mode single_stack
parent 6381abce
......@@ -681,7 +681,6 @@ def do_transfert(request):
return HttpResponse(json.dumps({"retcode" : 1113, "msg" : None, "errmsg" : "Transfert impossible : pas de destinataires."}))
montant = int(montant * 100)
paquet = ["transferts", [emetteurs, destinataires, montant, motif]]
print "%r" % json.dumps(paquet)
sock.write(json.dumps(paquet))
out = full_read(sock)
return HttpResponse(json.dumps(out))
......
......@@ -102,6 +102,25 @@ function put_note(itself, affiche, idbde, nom, prenom, secondstack) {
idbde_field = document.getElementById("id_" + target + "_form-idbde");
idbde_field.value = idbde;
}
/* Si on est en mode single_stack,
on recopie le nom de note dans l'onglet de transfert
et on peuple les variables transfert_from et transfert_to */
if (!double_stack_mode) {
//On remplit d'abord le FROM si il est vide
if (transfert_from == null) {
var note_emetteur = document.getElementById("transfert_emetteur");
note_emetteur.replaceChild(itself.cloneNode(true), note_emetteur.firstChild);
transfert_from = idbde;
}
else {
//Si il contient déjà quelque chose, alors on remplit le TO
if ((transfert_to == null) && (transfert_from != idbde)) {
var note_destinataire = document.getElementById("transfert_destinataire");
note_destinataire.replaceChild(itself.cloneNode(true), note_destinataire.firstChild);
transfert_to = idbde;
}
}
}
}
/* fonction appelée quand on clique sur une note déjà dans le stack */
......@@ -120,6 +139,16 @@ function remove_note(affiche, idbde, secondstack) {
if (stack_used[idbde] == 0) //il faut alors s'en débarasser
{
delete stack_used[idbde];
//Si la note qu'on vient de faire disparaître correspond à transfert_from ou transfert_to,
//il faut le remettre à null
if (!double_stack_mode) {
if (transfert_to == idbde) {
erase_transfert_note(false);
}
if (transfert_from == idbde) {
erase_transfert_note(true);
}
}
}
if (display_stack_used[affiche]["nb"] == 0) //il faut alors l'effacer
{
......@@ -264,6 +293,11 @@ function cleanForms() {
field = document.getElementById(id);
field.value = null;
}
/* On efface le contenu de "Transfert de * à *" si on est en single stack mode */
if (!double_stack_mode) {
erase_transfert_note(true);
erase_transfert_note(false);
}
}
/*** Faisage des consos ***/
......@@ -547,11 +581,17 @@ function crediter_ou_retirer(credit) {
function transferer() {
var montant_field = document.getElementById("id_transfert_form-montant");
var motif_field = document.getElementById("id_transfert_form-motif");
var emetteurs, destinataires, temp;
var ok, emetteurs, destinataires, temp;
//On fait appel à la fonction qui récupère émetteurs et destinataires différemment selon le stack_mode
temp = transfert_get_people();
emetteurs = temp[0];
destinataires = temp[1];
ok = temp[0]
//En mode single stack, on doit vérifier avant qu'on a bien un émetteur et un destinataire.
if (!ok) {
display_error(temp[1]);
return;
}
emetteurs = temp[1];
destinataires = temp[2];
//On se prépare à poster une requête
var xhr = getXMLHttpRequest();
......@@ -600,8 +640,12 @@ function transferer() {
// On vide tous les stacks, parce que garder des transactions échouées n'aurait pas de sens ici
//stack
emptyStack(false);
//stack_2
emptyStack(true);
refreshStack();
//stack_2, seulement si il existe
if (double_stack_mode) {
emptyStack(true);
refreshStack(true);
}
if (errorhappened) {
display_error("Transaction(s) échouée(s) :", errlist);
}
......@@ -609,10 +653,7 @@ function transferer() {
// si rien n'a échoué, on vide les formulaires
cleanForms();
}
//et on rafraîchit les stacks
refreshStack();
refreshStack(true);
//et l'historique
// on met à jour l'historique
refreshHistorique();
}
};
......
......@@ -29,5 +29,5 @@ function transfert_get_people() {
destinataires.push(parseInt(i_dest));
}
}
return [emetteurs, destinataires];
return [true, emetteurs, destinataires];
}
......@@ -8,5 +8,52 @@ var stack = Array();
var display_stack = Array();
var stack_button = Array();
var transfert_from, transfert_to;
/* Pour inverser les deux noms de note dans l'onglet transfert
(ainsi que les variables conrrespondantes */
function transfert_switch_notes() {
var temp = transfert_from;
transfert_from = transfert_to;
transfert_to = temp;
var note_emetteur = document.getElementById("transfert_emetteur");
var emet_affiche = note_emetteur.firstChild;
note_emetteur.removeChild(note_emetteur.firstChild);
var note_destinataire = document.getElementById("transfert_destinataire");
var dest_affiche = note_destinataire.firstChild;
note_destinataire.removeChild(note_destinataire.firstChild);
note_emetteur.appendChild(dest_affiche);
note_destinataire.appendChild(emet_affiche);
}
function transfert_get_people() {
var errlist = [];
if (transfert_from == null) {
errlist.push("Pas d'émetteur.");
}
if (transfert_to == null) {
errlist.push("Pas de destinataire.");
}
if (errlist.length == 0) {
return [true, [transfert_from], [transfert_to]];
}
else {
return [false, "Transfert échoué : " + errlist.join(" ")]
}
}
/* Fonction permettant d'effacer le nom de note de l'emetteur ou du destinataire dans l'onglet transfert */
function erase_transfert_note(isItDestinataire) {
if (isItDestinataire) {
ident = "transfert_destinataire";
transfert_to = null;
}
else {
ident = "transfert_emetteur";
transfert_from = null;
}
var elemt = document.getElementById(ident);
elemt.replaceChild(document.createTextNode("#??#"), elemt.firstChild);
}
\ No newline at end of file
......@@ -60,7 +60,14 @@
<div class="tab-content">
<div class="tab-pane active" id="transfert">
<p>Transfert...</p>
<div class="row">
<button class="btn span2" onClick="transfert_switch_notes();">Inverser</button>
</div>
<form onsubmit="transferer(); return false;">
<legend>Transfert d'argent de <span id="transfert_emetteur">#??#</span> à <span id="transfert_destinataire">#??#</span>:</legend>
{{ transfert_form.as_p }}
<input type="submit" class="btn btn-primary" value="Transférer"/>
</form>
</div>
<div class="tab-pane" id="credit">
<form onsubmit="crediter_ou_retirer(true); return false;"> {# true = crédit #}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment