From 56a2d482c903c058cdf7b6d601cecaa89b493768 Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <yohann.danello@gmail.com>
Date: Fri, 13 Mar 2020 01:57:32 +0100
Subject: [PATCH] Transfers: switch between transfer and gift

---
 templates/note/transaction_form.html | 152 ++++++++++++++++++++-------
 1 file changed, 115 insertions(+), 37 deletions(-)

diff --git a/templates/note/transaction_form.html b/templates/note/transaction_form.html
index 842d8152..62e7137c 100644
--- a/templates/note/transaction_form.html
+++ b/templates/note/transaction_form.html
@@ -6,8 +6,15 @@ SPDX-License-Identifier: GPL-2.0-or-later
 {% load i18n static %}
 
 {% block content %}
+
+    <div class="row">
+        <div class="col-xl-12">
+            <button id="switch_mode" class="form-control btn btn-secondary">Passer en mode transfert</button>
+        </div>
+    </div>
+
     <div class="row">
-        <div class="col-md-6">
+        <div class="col-md-6" id="emitters_div" style="display: none;">
             <div class="card border-success shadow mb-4">
                 <div class="card-header">
                     <p class="card-text font-weight-bold">
@@ -24,7 +31,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
             </div>
         </div>
 
-        <div class="col-md-6">
+        <div class="col-md-12" id="dests_div">
             <div class="card border-info shadow mb-4">
                 <div class="card-header">
                     <p class="card-text font-weight-bold">
@@ -70,6 +77,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
         var sources_notes_display = [];
         var dests = [];
         var dests_notes_display = [];
+        var transfer_mode = false;
 
         $(document).ready(function() {
            autoCompleteNote("source_note", "source_alias_matched", "source_note_list", sources, sources_notes_display,
@@ -78,40 +86,61 @@ SPDX-License-Identifier: GPL-2.0-or-later
                 "dest_alias", "dest_note");
         });
 
+        $("#switch_mode").click(function () {
+            transfer_mode ^= true;
+            if (transfer_mode) {
+                $("#switch_mode").text("Passer en mode virement");
+                $("#emitters_div").show();
+                $("#dests_div").attr('class', 'col-md-6');
+            }
+            else {
+                $("#switch_mode").text("Passer en mode transfert");
+                $("#emitters_div").hide();
+                $("#dests_div").attr('class', 'col-md-12');
+            }
+        });
+
         $("#transfer").click(function() {
-            sources_notes_display.forEach(function(source) {
-                dests_notes_display.forEach(function(dest) {
+            if (sources.length === 0) {
+                dests_notes_display.forEach(function (dest) {
                     $.post("/api/note/transaction/transaction/",
-                    {
-                        "csrfmiddlewaretoken": CSRF_TOKEN,
-                        "quantity": source[3] * dest[3],
-                        "amount": $("#amount").val(),
-                        "reason": $("#reason").val() + " (Transfert)",
-                        "valid": true,
-                        "polymorphic_ctype": {{ polymorphic_ctype }},
-                        "resourcetype": "Transaction",
-                        "source": source[1],
-                        "destination": dest[1]
-                    }, function() {
-                        sources_notes_display.length = 0;
-                        sources.length = 0;
-                        dests_notes_display.length = 0;
-                        dests.length = 0;
-                        $("#source_note_list").html("");
-                        $("#dest_note_list").html("");
-                        $("#source_alias_matched").html("");
-                        $("#dest_alias_matched").html("");
-                        $("#amount").val("");
-                        $("#reason").val("");
-                        refreshBalance();
+                        {
+                            "csrfmiddlewaretoken": CSRF_TOKEN,
+                            "quantity": dest[3],
+                            "amount": $("#amount").val(),
+                            "reason": $("#reason").val() + " (Don)",
+                            "valid": true,
+                            "polymorphic_ctype": {{ polymorphic_ctype }},
+                            "resourcetype": "Transaction",
+                            "source": {{ user.note.id }},
+                            "destination": dest[1]
+                        }, function () {
+                            let msgDiv = $("#messages");
+                            let html = msgDiv.html();
+                            html += "<div class=\"alert alert-success\">Le transfert de "
+                                + pretty_money(dest[3] * $("#amount").val()) + " de votre note "
+                                + " vers la note " + dest[0] + " a été fait avec succès !</div>\n";
+                            msgDiv.html(html);
 
+                            sources_notes_display.length = 0;
+                            sources.length = 0;
+                            dests_notes_display.length = 0;
+                            dests.length = 0;
+                            $("#source_note_list").html("");
+                            $("#dest_note_list").html("");
+                            $("#source_alias_matched").html("");
+                            $("#dest_alias_matched").html("");
+                            $("#amount").val("");
+                            $("#reason").val("");
+                            refreshBalance();
+                        }).fail(function (err) {
                         let msgDiv = $("#messages");
                         let html = msgDiv.html();
-                        html += "<div class=\"alert alert-success\">Le transfert de "
-                            + pretty_money(source[3] * dest[3] * $("#amount").val()) + " de la note " + source[0]
-                            + " vers la note " + dest[0] + " a été fait avec succès !</div>\n";
+                        html += "<div class=\"alert alert-danger\">Le transfert de "
+                            + pretty_money(dest[3] * $("#amount").val()) + " de votre note "
+                            + " vers la note " + dest[0] + " a échoué : " + err.responseText + "</div>\n";
                         msgDiv.html(html);
-                    }).fail(function (err) {
+
                         sources_notes_display.length = 0;
                         sources.length = 0;
                         dests_notes_display.length = 0;
@@ -123,16 +152,65 @@ SPDX-License-Identifier: GPL-2.0-or-later
                         $("#amount").val("");
                         $("#reason").val("");
                         refreshBalance();
+                    });
+                });
+            }
+            else {
+                sources_notes_display.forEach(function (source) {
+                    dests_notes_display.forEach(function (dest) {
+                        $.post("/api/note/transaction/transaction/",
+                            {
+                                "csrfmiddlewaretoken": CSRF_TOKEN,
+                                "quantity": source[3] * dest[3],
+                                "amount": $("#amount").val(),
+                                "reason": $("#reason").val() + " (Transfert)",
+                                "valid": true,
+                                "polymorphic_ctype": {{ polymorphic_ctype }},
+                                "resourcetype": "Transaction",
+                                "source": source[1],
+                                "destination": dest[1]
+                            }, function () {
+                                let msgDiv = $("#messages");
+                                let html = msgDiv.html();
+                                html += "<div class=\"alert alert-success\">Le transfert de "
+                                    + pretty_money(source[3] * dest[3] * $("#amount").val()) + " de la note " + source[0]
+                                    + " vers la note " + dest[0] + " a été fait avec succès !</div>\n";
+                                msgDiv.html(html);
 
-                        let msgDiv = $("#messages");
-                        let html = msgDiv.html();
-                        html += "<div class=\"alert alert-danger\">Le transfert de "
-                            + pretty_money(source[3] * dest[3] * $("#amount").val()) + " de la note " + source[0]
-                            + " vers la note " + dest[0] + " a échoué : " + err.responseText + "</div>\n";
-                        msgDiv.html(html);
+                                sources_notes_display.length = 0;
+                                sources.length = 0;
+                                dests_notes_display.length = 0;
+                                dests.length = 0;
+                                $("#source_note_list").html("");
+                                $("#dest_note_list").html("");
+                                $("#source_alias_matched").html("");
+                                $("#dest_alias_matched").html("");
+                                $("#amount").val("");
+                                $("#reason").val("");
+                                refreshBalance();
+                            }).fail(function (err) {
+                                let msgDiv = $("#messages");
+                                let html = msgDiv.html();
+                                html += "<div class=\"alert alert-danger\">Le transfert de "
+                                    + pretty_money(source[3] * dest[3] * $("#amount").val()) + " de la note " + source[0]
+                                    + " vers la note " + dest[0] + " a échoué : " + err.responseText + "</div>\n";
+                                msgDiv.html(html);
+
+                                sources_notes_display.length = 0;
+                                sources.length = 0;
+                                dests_notes_display.length = 0;
+                                dests.length = 0;
+                                $("#source_note_list").html("");
+                                $("#dest_note_list").html("");
+                                $("#source_alias_matched").html("");
+                                $("#dest_alias_matched").html("");
+                                $("#amount").val("");
+                                $("#reason").val("");
+                                refreshBalance();
+                        });
                     });
                 });
-            });
+            }
         });
     </script>
 {% endblock %}
-- 
GitLab