mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			320 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{% extends "base.html" %}
 | 
						|
{% comment %}
 | 
						|
SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
{% endcomment %}
 | 
						|
 | 
						|
{% load i18n static %}
 | 
						|
 | 
						|
{% block content %}
 | 
						|
 | 
						|
    <div class="row">
 | 
						|
        <div class="col-xl-12">
 | 
						|
            <div class="btn-group btn-group-toggle" style="width: 100%; padding: 0 0 2em 0" data-toggle="buttons">
 | 
						|
                <label class="btn btn-sm btn-outline-primary active">
 | 
						|
                    <input type="radio" name="transaction_type" id="type_gift" checked>
 | 
						|
                    Virement
 | 
						|
                </label>
 | 
						|
                <label class="btn btn-sm btn-outline-primary">
 | 
						|
                    <input type="radio" name="transaction_type" id="type_transfer">
 | 
						|
                    Transfert
 | 
						|
                </label>
 | 
						|
                <label class="btn btn-sm btn-outline-primary">
 | 
						|
                    <input type="radio" name="transaction_type" id="type_credit">
 | 
						|
                    Crédit
 | 
						|
                </label>
 | 
						|
                <label class="btn btn-sm btn-outline-primary">
 | 
						|
                    <input type="radio" name="transaction_type" id="type_debit">
 | 
						|
                    Retrait
 | 
						|
                </label>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
 | 
						|
    <div class="row">
 | 
						|
        <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">
 | 
						|
                        Sélection des émetteurs
 | 
						|
                    </p>
 | 
						|
                </div>
 | 
						|
                <ul class="list-group list-group-flush" id="source_note_list">
 | 
						|
                </ul>
 | 
						|
                <div class="card-body">
 | 
						|
                    <input class="form-control mx-auto d-block" type="text" id="source_note" />
 | 
						|
                    <ul class="list-group list-group-flush" id="source_alias_matched">
 | 
						|
                    </ul>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <div class="col-md-6" id="external_div" style="display: none;">
 | 
						|
            <div class="card border-success shadow mb-4">
 | 
						|
                <div class="card-header">
 | 
						|
                    <p class="card-text font-weight-bold">
 | 
						|
                        Paiement externe
 | 
						|
                    </p>
 | 
						|
                </div>
 | 
						|
                <ul class="list-group list-group-flush" id="source_note_list">
 | 
						|
                </ul>
 | 
						|
                <div class="card-body">
 | 
						|
                    <div class="form-row">
 | 
						|
                        <div class="col-md-12">
 | 
						|
                            <label for="credit_type">Type de transfert :</label>
 | 
						|
                            <select id="credit_type" class="custom-select">
 | 
						|
                                {% for special_type in special_types %}
 | 
						|
                                    <option value="{{ special_type.id }}">{{ special_type.special_type }}</option>
 | 
						|
                                {% endfor %}
 | 
						|
                            </select>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                    <div class="form-row">
 | 
						|
                        <div class="col-md-12">
 | 
						|
                            <label for="last_name">Nom :</label>
 | 
						|
                            <input type="text" id="last_name" class="form-control" />
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                    <div class="form-row">
 | 
						|
                        <div class="col-md-12">
 | 
						|
                            <label for="first_name">Prénom :</label>
 | 
						|
                            <input type="text" id="first_name" class="form-control" />
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                    <div class="form-row">
 | 
						|
                        <div class="col-md-12">
 | 
						|
                            <label for="bank">Banque :</label>
 | 
						|
                            <input type="text" id="bank" class="form-control" />
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <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" id="dest_title">
 | 
						|
                        Sélection des destinataires
 | 
						|
                    </p>
 | 
						|
                </div>
 | 
						|
                <ul class="list-group list-group-flush" id="dest_note_list">
 | 
						|
                </ul>
 | 
						|
                <div class="card-body">
 | 
						|
                    <input class="form-control mx-auto d-block" type="text" id="dest_note" />
 | 
						|
                    <ul class="list-group list-group-flush" id="dest_alias_matched">
 | 
						|
                    </ul>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
 | 
						|
 | 
						|
    <div class="form-row">
 | 
						|
        <div class="form-group col-md-6">
 | 
						|
            <label for="amount">{% trans "Amount" %} :</label>
 | 
						|
            <input class="form-control mx-auto d-block" type="number" min="-20" id="amount" />
 | 
						|
        </div>
 | 
						|
 | 
						|
        <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" />
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
 | 
						|
    <div class="form-row">
 | 
						|
        <div class="col-md-12">
 | 
						|
            <button id="transfer" class="form-control btn btn-primary">{% trans 'Transfer' %}</button>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
{% endblock %}
 | 
						|
 | 
						|
{% block extrajavascript %}
 | 
						|
    <script>
 | 
						|
        sources = [];
 | 
						|
        sources_notes_display = [];
 | 
						|
        dests = [];
 | 
						|
        dests_notes_display = [];
 | 
						|
 | 
						|
        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();
 | 
						|
        }
 | 
						|
 | 
						|
        $(document).ready(function() {
 | 
						|
            autoCompleteNote("source_note", "source_alias_matched", "source_note_list", sources, sources_notes_display,
 | 
						|
                "source_alias", "source_note");
 | 
						|
            autoCompleteNote("dest_note", "dest_alias_matched", "dest_note_list", dests, dests_notes_display,
 | 
						|
                "dest_alias", "dest_note", null, null, function() {
 | 
						|
                    let last = dests_notes_display[dests_notes_display.length - 1];
 | 
						|
                    dests_notes_display.length = 0;
 | 
						|
                    dests_notes_display.push(last);
 | 
						|
 | 
						|
                    last[3] = 1;
 | 
						|
 | 
						|
                    $.getJSON("/api/user/" + last[2].user + "/", function(user) {
 | 
						|
                        $("#last_name").val(user.last_name);
 | 
						|
                        $("#first_name").val(user.first_name);
 | 
						|
                    });
 | 
						|
 | 
						|
                    return true;
 | 
						|
               });
 | 
						|
        });
 | 
						|
 | 
						|
        $("#type_gift").click(function() {
 | 
						|
            $("#emitters_div").hide();
 | 
						|
            $("#external_div").hide();
 | 
						|
            $("#dests_div").attr('class', 'col-md-12');
 | 
						|
            $("#dest_title").text("Sélection des destinataires");
 | 
						|
        });
 | 
						|
 | 
						|
        $("#type_transfer").click(function() {
 | 
						|
            $("#emitters_div").show();
 | 
						|
            $("#external_div").hide();
 | 
						|
            $("#dests_div").attr('class', 'col-md-6');
 | 
						|
            $("#dest_title").text("Sélection des destinataires");
 | 
						|
        });
 | 
						|
 | 
						|
        $("#type_credit").click(function() {
 | 
						|
            $("#emitters_div").hide();
 | 
						|
            $("#external_div").show();
 | 
						|
            $("#dests_div").attr('class', 'col-md-6');
 | 
						|
            $("#dest_title").text("Note à créditer");
 | 
						|
        });
 | 
						|
 | 
						|
        $("#type_debit").click(function() {
 | 
						|
            $("#emitters_div").hide();
 | 
						|
            $("#external_div").show();
 | 
						|
            $("#dests_div").attr('class', 'col-md-6');
 | 
						|
            $("#dest_title").text("Note à prélever");
 | 
						|
        });
 | 
						|
 | 
						|
        $("#transfer").click(function() {
 | 
						|
            if ($("#type_gift").is(':checked')) {
 | 
						|
                dests_notes_display.forEach(function (dest) {
 | 
						|
                    $.post("/api/note/transaction/transaction/",
 | 
						|
                        {
 | 
						|
                            "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);
 | 
						|
 | 
						|
                            reset();
 | 
						|
                        }).fail(function (err) {
 | 
						|
                        let msgDiv = $("#messages");
 | 
						|
                        let html = msgDiv.html();
 | 
						|
                        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);
 | 
						|
 | 
						|
                        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[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);
 | 
						|
 | 
						|
                                reset();
 | 
						|
                            }).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);
 | 
						|
 | 
						|
                                reset();
 | 
						|
                        });
 | 
						|
                    });
 | 
						|
                });
 | 
						|
            } else if ($("#type_credit").is(':checked') || $("#type_debit").is(':checked')) {
 | 
						|
                let special_note = $("#credit_type").val();
 | 
						|
                let user_note = dests_notes_display[0][1];
 | 
						|
                let source, dest, reason;
 | 
						|
                if ($("#type_credit").is(':checked')) {
 | 
						|
                    source = special_note;
 | 
						|
                    dest = user_note;
 | 
						|
                    reason = $("#reason").val() + " (Crédit " + $("#credit_type option:selected").text().toLowerCase() + ")";
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    source = user_note;
 | 
						|
                    dest = special_note;
 | 
						|
                    reason = $("#reason").val() + " (Retrait " + $("#credit_type option:selected").text().toLowerCase() + ")";
 | 
						|
                }
 | 
						|
                $.post("/api/note/transaction/transaction/",
 | 
						|
                    {
 | 
						|
                        "csrfmiddlewaretoken": CSRF_TOKEN,
 | 
						|
                        "quantity": dest[3],
 | 
						|
                        "amount": $("#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 () {
 | 
						|
                        let msgDiv = $("#messages");
 | 
						|
                        let html = msgDiv.html();
 | 
						|
                        html += "<div class=\"alert alert-success\">Le crédit/retrait a bien été effectué !</div>\n";
 | 
						|
                        msgDiv.html(html);
 | 
						|
 | 
						|
                        reset();
 | 
						|
                    }).fail(function (err) {
 | 
						|
                    let msgDiv = $("#messages");
 | 
						|
                    let html = msgDiv.html();
 | 
						|
                    html += "<div class=\"alert alert-danger\">Le crédit/transfert a échoué : " + err.responseText + "</div>\n";
 | 
						|
                    msgDiv.html(html);
 | 
						|
 | 
						|
                    reset();
 | 
						|
                });
 | 
						|
            }
 | 
						|
        });
 | 
						|
    </script>
 | 
						|
{% endblock %}
 |