From 6c002aacaa1d85f08107bbb232c6db989da81131 Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <yohann.danello@gmail.com>
Date: Tue, 17 Mar 2020 18:47:16 +0100
Subject: [PATCH] JS from transfer page is now externalized

---
 static/js/transfer.js                | 157 +++++++++++++++++++++++++
 templates/note/transaction_form.html | 164 +--------------------------
 2 files changed, 162 insertions(+), 159 deletions(-)
 create mode 100644 static/js/transfer.js

diff --git a/static/js/transfer.js b/static/js/transfer.js
new file mode 100644
index 00000000..a0c2d88a
--- /dev/null
+++ b/static/js/transfer.js
@@ -0,0 +1,157 @@
+sources = [];
+sources_notes_display = [];
+dests = [];
+dests_notes_display = [];
+
+function refreshHistory() {
+    $("#history").load("/note/transfer/ #history");
+}
+
+function reset() {
+    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("");
+    $("#last_name").val("");
+    $("#first_name").val("");
+    $("#bank").val("");
+    refreshBalance();
+    refreshHistory();
+}
+
+$(document).ready(function() {
+    autoCompleteNote("source_note", "source_alias_matched", "source_note_list", sources, sources_notes_display,
+        "source_alias", "source_note", "user_note", "profile_pic");
+    autoCompleteNote("dest_note", "dest_alias_matched", "dest_note_list", dests, dests_notes_display,
+        "dest_alias", "dest_note", "user_note", "profile_pic", function() {
+            let last = dests_notes_display[dests_notes_display.length - 1];
+            dests_notes_display.length = 0;
+            dests_notes_display.push(last);
+
+            last.quantity = 1;
+
+            $.getJSON("/api/user/" + last.note.user + "/", function(user) {
+                $("#last_name").val(user.last_name);
+                $("#first_name").val(user.first_name);
+            });
+
+            return true;
+       });
+
+
+    // Ensure we begin in gift mode. Removing these lines may cause problems when reloading.
+    $("#type_gift").prop('checked', 'true');
+    $("#type_transfer").removeAttr('checked');
+    $("#type_credit").removeAttr('checked');
+    $("#type_debit").removeAttr('checked');
+    $("label[for='type_transfer']").attr('class', 'btn btn-sm btn-outline-primary');
+    $("label[for='type_credit']").attr('class', 'btn btn-sm btn-outline-primary');
+    $("label[for='type_debit']").attr('class', 'btn btn-sm btn-outline-primary');
+});
+
+$("#transfer").click(function() {
+    if ($("#type_gift").is(':checked')) {
+        dests_notes_display.forEach(function (dest) {
+            $.post("/api/note/transaction/transaction/",
+                {
+                    "csrfmiddlewaretoken": CSRF_TOKEN,
+                    "quantity": dest.quantity,
+                    "amount": 100 * $("#amount").val(),
+                    "reason": $("#reason").val(),
+                    "valid": true,
+                    "polymorphic_ctype": TRANSFER_POLYMORPHIC_CTYPE,
+                    "resourcetype": "Transaction",
+                    "source": user_id,
+                    "destination": dest.id
+                }, function () {
+                    addMsg("Le transfert de "
+                        + pretty_money(dest.quantity * 100 * $("#amount").val()) + " de votre note "
+                        + " vers la note " + dest.name + " a été fait avec succès !", "success");
+
+                    reset();
+                }).fail(function (err) {
+                    addMsg("Le transfert de "
+                        + pretty_money(dest.quantity * 100 * $("#amount").val()) + " de votre note "
+                        + " vers la note " + dest.name + " a échoué : " + err.responseText, "danger");
+
+                reset();
+            });
+        });
+    }
+    else if ($("#type_transfer").is(':checked')) {
+        sources_notes_display.forEach(function (source) {
+            dests_notes_display.forEach(function (dest) {
+                $.post("/api/note/transaction/transaction/",
+                    {
+                        "csrfmiddlewaretoken": CSRF_TOKEN,
+                        "quantity": source.quantity * dest.quantity,
+                        "amount": 100 * $("#amount").val(),
+                        "reason": $("#reason").val(),
+                        "valid": true,
+                        "polymorphic_ctype": TRANSFER_POLYMORPHIC_CTYPE,
+                        "resourcetype": "Transaction",
+                        "source": source.id,
+                        "destination": dest.id
+                    }, function () {
+                        addMsg("Le transfert de "
+                            + pretty_money(source.quantity * dest.quantity * 100 * $("#amount").val()) + " de la note " + source.name
+                            + " vers la note " + dest.name + " a été fait avec succès !", "success");
+
+                        reset();
+                    }).fail(function (err) {
+                        addMsg("Le transfert de "
+                            + pretty_money(source.quantity * dest.quantity * 100 * $("#amount").val()) + " de la note " + source.name
+                            + " vers la note " + dest.name + " a échoué : " + err.responseText, "danger");
+
+                        reset();
+                });
+            });
+        });
+    } else if ($("#type_credit").is(':checked') || $("#type_debit").is(':checked')) {
+        let special_note = $("#credit_type").val();
+        let user_note = dests_notes_display[0].id;
+        let given_reason = $("#reason").val();
+        let source, dest, reason;
+        if ($("#type_credit").is(':checked')) {
+            source = special_note;
+            dest = user_note;
+            reason = "Crédit " + $("#credit_type option:selected").text().toLowerCase();
+            if (given_reason.length > 0)
+                reason += " (" + given_reason + ")";
+        }
+        else {
+            source = user_note;
+            dest = special_note;
+            reason = "Retrait " + $("#credit_type option:selected").text().toLowerCase();
+            if (given_reason.length > 0)
+                reason += " (" + given_reason + ")";
+        }
+        $.post("/api/note/transaction/transaction/",
+            {
+                "csrfmiddlewaretoken": CSRF_TOKEN,
+                "quantity": 1,
+                "amount": 100 * $("#amount").val(),
+                "reason": reason,
+                "valid": true,
+                "polymorphic_ctype": SPECIAL_TRANSFER_POLYMORPHIC_CTYPE,
+                "resourcetype": "SpecialTransaction",
+                "source": source,
+                "destination": dest,
+                "last_name": $("#last_name").val(),
+                "first_name": $("#first_name").val(),
+                "bank": $("#bank").val()
+            }, function () {
+                addMsg("Le crédit/retrait a bien été effectué !", "success");
+                reset();
+            }).fail(function (err) {
+                addMsg("Le crédit/transfert a échoué : " + err.responseText, "danger");
+                reset();
+        });
+    }
+});
\ No newline at end of file
diff --git a/templates/note/transaction_form.html b/templates/note/transaction_form.html
index b75ad7c6..f320083e 100644
--- a/templates/note/transaction_form.html
+++ b/templates/note/transaction_form.html
@@ -132,7 +132,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
 
         <div class="form-group col-md-6">
             <label for="reason">{% trans "Reason" %} :</label>
-            <input class="form-control mx-auto d-block" type="text" id="reason" />
+            <input class="form-control mx-auto d-block" type="text" id="reason" required />
         </div>
     </div>
 
@@ -154,62 +154,9 @@ SPDX-License-Identifier: GPL-2.0-or-later
 
 {% block extrajavascript %}
     <script>
-        sources = [];
-        sources_notes_display = [];
-        dests = [];
-        dests_notes_display = [];
-
-        function refreshHistory() {
-            $("#history").load("/note/transfer/ #history");
-        }
-
-        function reset() {
-            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("");
-            $("#last_name").val("");
-            $("#first_name").val("");
-            $("#bank").val("");
-            refreshBalance();
-            refreshHistory();
-        }
-
-        $(document).ready(function() {
-            autoCompleteNote("source_note", "source_alias_matched", "source_note_list", sources, sources_notes_display,
-                "source_alias", "source_note", "user_note", "profile_pic");
-            autoCompleteNote("dest_note", "dest_alias_matched", "dest_note_list", dests, dests_notes_display,
-                "dest_alias", "dest_note", "user_note", "profile_pic", function() {
-                    let last = dests_notes_display[dests_notes_display.length - 1];
-                    dests_notes_display.length = 0;
-                    dests_notes_display.push(last);
-
-                    last.quantity = 1;
-
-                    $.getJSON("/api/user/" + last.note.user + "/", function(user) {
-                        $("#last_name").val(user.last_name);
-                        $("#first_name").val(user.first_name);
-                    });
-
-                    return true;
-               });
-
-
-            // Ensure we begin in gift mode. Removing these lines may cause problems when reloading.
-            $("#type_gift").prop('checked', 'true');
-            $("#type_transfer").removeAttr('checked');
-            $("#type_credit").removeAttr('checked');
-            $("#type_debit").removeAttr('checked');
-            $("label[for='type_transfer']").attr('class', 'btn btn-sm btn-outline-primary');
-            $("label[for='type_credit']").attr('class', 'btn btn-sm btn-outline-primary');
-            $("label[for='type_debit']").attr('class', 'btn btn-sm btn-outline-primary');
-        });
+        TRANSFER_POLYMORPHIC_CTYPE = {{ polymorphic_ctype }};
+        SPECIAL_TRANSFER_POLYMORPHIC_CTYPE = {{ special_polymorphic_ctype }};
+        user_id = {{ user.note.pk }};
 
         $("#type_gift").click(function() {
             $("#emitters_div").hide();
@@ -238,107 +185,6 @@ SPDX-License-Identifier: GPL-2.0-or-later
             $("#dests_div").attr('class', 'col-md-4');
             $("#dest_title").text("{% trans "Debit note" %}");
         });
-
-        $("#transfer").click(function() {
-            if ($("#type_gift").is(':checked')) {
-                dests_notes_display.forEach(function (dest) {
-                    $.post("/api/note/transaction/transaction/",
-                        {
-                            "csrfmiddlewaretoken": CSRF_TOKEN,
-                            "quantity": dest.quantity,
-                            "amount": 100 * $("#amount").val(),
-                            "reason": $("#reason").val(),
-                            "valid": true,
-                            "polymorphic_ctype": {{ polymorphic_ctype }},
-                            "resourcetype": "Transaction",
-                            "source": {{ user.note.id }},
-                            "destination": dest.id
-                        }, function () {
-                            addMsg("Le transfert de "
-                                + pretty_money(dest.quantity * 100 * $("#amount").val()) + " de votre note "
-                                + " vers la note " + dest.name + " a été fait avec succès !", "success");
-
-                            reset();
-                        }).fail(function (err) {
-                            addMsg("Le transfert de "
-                                + pretty_money(dest.quantity * 100 * $("#amount").val()) + " de votre note "
-                                + " vers la note " + dest.name + " a échoué : " + err.responseText, "danger");
-
-                        reset();
-                    });
-                });
-            }
-            else if ($("#type_transfer").is(':checked')) {
-                sources_notes_display.forEach(function (source) {
-                    dests_notes_display.forEach(function (dest) {
-                        $.post("/api/note/transaction/transaction/",
-                            {
-                                "csrfmiddlewaretoken": CSRF_TOKEN,
-                                "quantity": source.quantity * dest.quantity,
-                                "amount": 100 * $("#amount").val(),
-                                "reason": $("#reason").val(),
-                                "valid": true,
-                                "polymorphic_ctype": {{ polymorphic_ctype }},
-                                "resourcetype": "Transaction",
-                                "source": source.id,
-                                "destination": dest.id
-                            }, function () {
-                                addMsg("Le transfert de "
-                                    + pretty_money(source.quantity * dest.quantity * 100 * $("#amount").val()) + " de la note " + source.name
-                                    + " vers la note " + dest.name + " a été fait avec succès !", "success");
-
-                                reset();
-                            }).fail(function (err) {
-                                addMsg("Le transfert de "
-                                    + pretty_money(source.quantity * dest.quantity * 100 * $("#amount").val()) + " de la note " + source.name
-                                    + " vers la note " + dest.name + " a échoué : " + err.responseText, "danger");
-
-                                reset();
-                        });
-                    });
-                });
-            } else if ($("#type_credit").is(':checked') || $("#type_debit").is(':checked')) {
-                let special_note = $("#credit_type").val();
-                let user_note = dests_notes_display[0].id;
-                let given_reason = $("#reason").val();
-                let source, dest, reason;
-                if ($("#type_credit").is(':checked')) {
-                    source = special_note;
-                    dest = user_note;
-                    reason = "Crédit " + $("#credit_type option:selected").text().toLowerCase();
-                    if (given_reason.length > 0)
-                        reason += " (" + given_reason + ")";
-                }
-                else {
-                    source = user_note;
-                    dest = special_note;
-                    type = "debit";
-                    reason = "Retrait " + $("#credit_type option:selected").text().toLowerCase();
-                    if (given_reason.length > 0)
-                        reason += " (" + given_reason + ")";
-                }
-                $.post("/api/note/transaction/transaction/",
-                    {
-                        "csrfmiddlewaretoken": CSRF_TOKEN,
-                        "quantity": 1,
-                        "amount": 100 * $("#amount").val(),
-                        "reason": reason,
-                        "valid": true,
-                        "polymorphic_ctype": {{ special_polymorphic_ctype }},
-                        "resourcetype": "SpecialTransaction",
-                        "source": source,
-                        "destination": dest,
-                        "last_name": $("#last_name").val(),
-                        "first_name": $("#first_name").val(),
-                        "bank": $("#bank").val()
-                    }, function () {
-                        addMsg("Le crédit/retrait a bien été effectué !", "success");
-                        reset();
-                    }).fail(function (err) {
-                        addMsg("Le crédit/transfert a échoué : " + err.responseText, "danger");
-                        reset();
-                });
-            }
-        });
     </script>
+    <script src="/static/js/transfer.js"></script>
 {% endblock %}
-- 
GitLab