mirror of
https://gitlab.crans.org/bde/nk20
synced 2024-12-24 00:12:23 +00:00
302 lines
12 KiB
JavaScript
302 lines
12 KiB
JavaScript
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("");
|
|
$("#amount").val("");
|
|
$("#reason").val("");
|
|
$("#last_name").val("");
|
|
$("#first_name").val("");
|
|
$("#bank").val("");
|
|
$("#user_note").val("");
|
|
$("#profile_pic").attr("src", "/media/pic/default.png");
|
|
refreshBalance();
|
|
refreshHistory();
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
/**
|
|
* If we are in credit/debit mode, check that only one note is entered.
|
|
* More over, get first name and last name to autocomplete fields.
|
|
*/
|
|
function checkUniqueNote() {
|
|
if ($("#type_credit").is(":checked") || $("#type_debit").is(":checked")) {
|
|
let arr = $("#type_credit").is(":checked") ? dests_notes_display : sources_notes_display;
|
|
|
|
if (arr.length === 0)
|
|
return;
|
|
|
|
let last = arr[arr.length - 1];
|
|
arr.length = 0;
|
|
arr.push(last);
|
|
|
|
last.quantity = 1;
|
|
|
|
if (!last.note.user) {
|
|
$.getJSON("/api/note/note/" + last.note.id + "/?format=json", function(note) {
|
|
last.note.user = note.user;
|
|
$.getJSON("/api/user/" + last.note.user + "/", function(user) {
|
|
$("#last_name").val(user.last_name);
|
|
$("#first_name").val(user.first_name);
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
$.getJSON("/api/user/" + last.note.user + "/", function(user) {
|
|
$("#last_name").val(user.last_name);
|
|
$("#first_name").val(user.first_name);
|
|
});
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
autoCompleteNote("source_note", "source_note_list", sources, sources_notes_display,
|
|
"source_alias", "source_note", "user_note", "profile_pic", checkUniqueNote);
|
|
autoCompleteNote("dest_note", "dest_note_list", dests, dests_notes_display,
|
|
"dest_alias", "dest_note", "user_note", "profile_pic", checkUniqueNote);
|
|
|
|
let source = $("#source_note");
|
|
let dest = $("#dest_note");
|
|
|
|
$("#type_gift").click(function() {
|
|
$("#special_transaction_div").addClass('d-none');
|
|
source.attr('disabled', true);
|
|
source.val(username);
|
|
source.tooltip('hide');
|
|
$("#source_note_list").addClass('d-none');
|
|
dest.attr('disabled', false);
|
|
$("#dest_note_list").removeClass('d-none');
|
|
});
|
|
|
|
$("#type_transfer").click(function() {
|
|
$("#special_transaction_div").addClass('d-none');
|
|
source.attr('disabled', false);
|
|
$("#source_note_list").removeClass('d-none');
|
|
dest.attr('disabled', false);
|
|
$("#dest_note_list").removeClass('d-none');
|
|
});
|
|
|
|
$("#type_credit").click(function() {
|
|
$("#special_transaction_div").removeClass('d-none');
|
|
$("#source_note_list").addClass('d-none');
|
|
$("#dest_note_list").removeClass('d-none');
|
|
source.attr('disabled', true);
|
|
source.val($("#credit_type option:selected").text());
|
|
source.tooltip('hide');
|
|
dest.attr('disabled', false);
|
|
dest.val('');
|
|
dest.tooltip('hide');
|
|
|
|
if (dests_notes_display.length > 1) {
|
|
$("#dest_note_list").html('');
|
|
dests_notes_display.length = 0;
|
|
}
|
|
});
|
|
|
|
$("#type_debit").click(function() {
|
|
$("#special_transaction_div").removeClass('d-none');
|
|
$("#source_note_list").removeClass('d-none');
|
|
$("#dest_note_list").addClass('d-none');
|
|
source.attr('disabled', false);
|
|
source.val('');
|
|
source.tooltip('hide');
|
|
dest.attr('disabled', true);
|
|
dest.val($("#credit_type option:selected").text());
|
|
dest.tooltip('hide');
|
|
|
|
if (sources_notes_display.length > 1) {
|
|
$("#source_note_list").html('');
|
|
sources_notes_display.length = 0;
|
|
}
|
|
});
|
|
|
|
$("#credit_type").change(function() {
|
|
let type = $("#credit_type option:selected").text();
|
|
if ($("#type_credit").is(":checked"))
|
|
source.val(type);
|
|
else
|
|
dest.val(type);
|
|
});
|
|
|
|
// Ensure we begin in gift mode. Removing these lines may cause problems when reloading.
|
|
let type_gift = $("#type_gift"); // Default mode
|
|
type_gift.removeAttr('checked');
|
|
$("#type_transfer").removeAttr('checked');
|
|
$("#type_credit").removeAttr('checked');
|
|
$("#type_debit").removeAttr('checked');
|
|
$("label[for='type_gift']").attr('class', 'btn btn-sm btn-outline-primary');
|
|
$("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');
|
|
|
|
if (location.hash)
|
|
$("#type_" + location.hash.substr(1)).click();
|
|
else
|
|
type_gift.click();
|
|
location.hash = "";
|
|
});
|
|
|
|
$("#btn_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.note.id,
|
|
"destination_alias": dest.name
|
|
}).done(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 () { // do it again but valid = false
|
|
$.post("/api/note/transaction/transaction/",
|
|
{
|
|
"csrfmiddlewaretoken": CSRF_TOKEN,
|
|
"quantity": dest.quantity,
|
|
"amount": 100 * $("#amount").val(),
|
|
"reason": $("#reason").val(),
|
|
"valid": false,
|
|
"invalidity_reason": "Solde insuffisant",
|
|
"polymorphic_ctype": TRANSFER_POLYMORPHIC_CTYPE,
|
|
"resourcetype": "Transaction",
|
|
"source": user_id,
|
|
"destination": dest.note.id,
|
|
"destination_alias": dest.name
|
|
}).done(function () {
|
|
addMsg("Le transfert de "
|
|
+ pretty_money(dest.quantity * 100 * $("#amount").val()) + " de votre note "
|
|
+ " vers la note " + dest.name + " a échoué : Solde insuffisant", "danger");
|
|
|
|
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.note.id,
|
|
"source_alias": source.name,
|
|
"destination": dest.note.id,
|
|
"destination_alias": dest.name
|
|
}).done(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) { // do it again but valid = false
|
|
$.post("/api/note/transaction/transaction/",
|
|
{
|
|
"csrfmiddlewaretoken": CSRF_TOKEN,
|
|
"quantity": source.quantity * dest.quantity,
|
|
"amount": 100 * $("#amount").val(),
|
|
"reason": $("#reason").val(),
|
|
"valid": false,
|
|
"invalidity_reason": "Solde insuffisant",
|
|
"polymorphic_ctype": TRANSFER_POLYMORPHIC_CTYPE,
|
|
"resourcetype": "Transaction",
|
|
"source": source.note.id,
|
|
"source_alias": source.name,
|
|
"destination": dest.note.id,
|
|
"destination_alias": dest.name
|
|
}).done(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 échoué : Solde insuffisant", "danger");
|
|
|
|
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;
|
|
let given_reason = $("#reason").val();
|
|
let source, dest, reason;
|
|
if ($("#type_credit").is(':checked')) {
|
|
user_note = dests_notes_display[0].note.id;
|
|
source = special_note;
|
|
dest = user_note;
|
|
reason = "Crédit " + $("#credit_type option:selected").text().toLowerCase();
|
|
if (given_reason.length > 0)
|
|
reason += " (" + given_reason + ")";
|
|
}
|
|
else {
|
|
user_note = sources_notes_display[0].note.id;
|
|
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,
|
|
"source_alias": source.name,
|
|
"destination": dest,
|
|
"destination_alias": dest.name,
|
|
"last_name": $("#last_name").val(),
|
|
"first_name": $("#first_name").val(),
|
|
"bank": $("#bank").val()
|
|
}).done(function () {
|
|
addMsg("Le crédit/retrait a bien été effectué !", "success");
|
|
reset();
|
|
}).fail(function (err) {
|
|
addMsg("Le crédit/retrait a échoué : " + err.responseText, "danger");
|
|
reset();
|
|
});
|
|
}
|
|
});
|