mirror of https://gitlab.crans.org/bde/nk20
💄 Warn users when a note balance is bellow 0 or -50 €
This commit is contained in:
parent
82aa0182e3
commit
59bfdbbfc7
|
@ -156,7 +156,7 @@ function reset() {
|
||||||
function consumeAll() {
|
function consumeAll() {
|
||||||
notes_display.forEach(function(note_display) {
|
notes_display.forEach(function(note_display) {
|
||||||
buttons.forEach(function(button) {
|
buttons.forEach(function(button) {
|
||||||
consume(note_display.note.id, note_display.name, button.dest, button.quantity * note_display.quantity, button.amount,
|
consume(note_display.note, note_display.name, button.dest, button.quantity * note_display.quantity, button.amount,
|
||||||
button.name + " (" + button.category_name + ")", button.type, button.category_id, button.id);
|
button.name + " (" + button.category_name + ")", button.type, button.category_id, button.id);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -164,7 +164,7 @@ function consumeAll() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new transaction from a button through the API.
|
* Create a new transaction from a button through the API.
|
||||||
* @param source The note that paid the item (type: int)
|
* @param source The note that paid the item (type: note)
|
||||||
* @param source_alias The alias used for the source (type: str)
|
* @param source_alias The alias used for the source (type: str)
|
||||||
* @param dest The note that sold the item (type: int)
|
* @param dest The note that sold the item (type: int)
|
||||||
* @param quantity The quantity sold (type: int)
|
* @param quantity The quantity sold (type: int)
|
||||||
|
@ -184,12 +184,24 @@ function consume(source, source_alias, dest, quantity, amount, reason, type, cat
|
||||||
"valid": true,
|
"valid": true,
|
||||||
"polymorphic_ctype": type,
|
"polymorphic_ctype": type,
|
||||||
"resourcetype": "RecurrentTransaction",
|
"resourcetype": "RecurrentTransaction",
|
||||||
"source": source,
|
"source": source.id,
|
||||||
"source_alias": source_alias,
|
"source_alias": source_alias,
|
||||||
"destination": dest,
|
"destination": dest,
|
||||||
"category": category,
|
"category": category,
|
||||||
"template": template
|
"template": template
|
||||||
}, reset).fail(function (e) {
|
})
|
||||||
|
.done(function () {
|
||||||
|
if (!isNaN(source.balance)) {
|
||||||
|
let newBalance = source.balance - quantity * amount;
|
||||||
|
if (newBalance <= -5000)
|
||||||
|
addMsg("Attention, la note émettrice " + source_alias + " passe en négatif sévère.",
|
||||||
|
"danger", 10000);
|
||||||
|
else if (newBalance < 0)
|
||||||
|
addMsg("Attention, la note émettrice " + source_alias + " passe en négatif.",
|
||||||
|
"warning", 10000);
|
||||||
|
}
|
||||||
|
reset();
|
||||||
|
}).fail(function (e) {
|
||||||
$.post("/api/note/transaction/transaction/",
|
$.post("/api/note/transaction/transaction/",
|
||||||
{
|
{
|
||||||
"csrfmiddlewaretoken": CSRF_TOKEN,
|
"csrfmiddlewaretoken": CSRF_TOKEN,
|
||||||
|
|
|
@ -14,6 +14,14 @@ function reset(refresh=true) {
|
||||||
dests.length = 0;
|
dests.length = 0;
|
||||||
$("#source_note_list").html("");
|
$("#source_note_list").html("");
|
||||||
$("#dest_note_list").html("");
|
$("#dest_note_list").html("");
|
||||||
|
let source_field = $("#source_note");
|
||||||
|
source_field.val("");
|
||||||
|
source_field.trigger("keyup");
|
||||||
|
source_field.removeClass('is-invalid');
|
||||||
|
let dest_field = $("#dest_note");
|
||||||
|
dest_field.val("");
|
||||||
|
dest_field.trigger("keyup");
|
||||||
|
dest_field.removeClass('is-invalid');
|
||||||
let amount_field = $("#amount");
|
let amount_field = $("#amount");
|
||||||
amount_field.val("");
|
amount_field.val("");
|
||||||
amount_field.removeClass('is-invalid');
|
amount_field.removeClass('is-invalid');
|
||||||
|
@ -81,6 +89,8 @@ $(document).ready(function() {
|
||||||
|
|
||||||
$("#type_transfer").click(function() {
|
$("#type_transfer").click(function() {
|
||||||
$("#source_me_div").removeClass('d-none');
|
$("#source_me_div").removeClass('d-none');
|
||||||
|
$("#source_note").removeClass('is-invalid');
|
||||||
|
$("#dest_note").removeClass('is-invalid');
|
||||||
$("#special_transaction_div").addClass('d-none');
|
$("#special_transaction_div").addClass('d-none');
|
||||||
source.attr('disabled', false);
|
source.attr('disabled', false);
|
||||||
$("#source_note_list").removeClass('d-none');
|
$("#source_note_list").removeClass('d-none');
|
||||||
|
@ -90,6 +100,8 @@ $(document).ready(function() {
|
||||||
|
|
||||||
$("#type_credit").click(function() {
|
$("#type_credit").click(function() {
|
||||||
$("#source_me_div").addClass('d-none');
|
$("#source_me_div").addClass('d-none');
|
||||||
|
$("#source_note").removeClass('is-invalid');
|
||||||
|
$("#dest_note").removeClass('is-invalid');
|
||||||
$("#special_transaction_div").removeClass('d-none');
|
$("#special_transaction_div").removeClass('d-none');
|
||||||
$("#source_note_list").addClass('d-none');
|
$("#source_note_list").addClass('d-none');
|
||||||
$("#dest_note_list").removeClass('d-none');
|
$("#dest_note_list").removeClass('d-none');
|
||||||
|
@ -108,6 +120,8 @@ $(document).ready(function() {
|
||||||
|
|
||||||
$("#type_debit").click(function() {
|
$("#type_debit").click(function() {
|
||||||
$("#source_me_div").addClass('d-none');
|
$("#source_me_div").addClass('d-none');
|
||||||
|
$("#source_note").removeClass('is-invalid');
|
||||||
|
$("#dest_note").removeClass('is-invalid');
|
||||||
$("#special_transaction_div").removeClass('d-none');
|
$("#special_transaction_div").removeClass('d-none');
|
||||||
$("#source_note_list").removeClass('d-none');
|
$("#source_note_list").removeClass('d-none');
|
||||||
$("#dest_note_list").addClass('d-none');
|
$("#dest_note_list").addClass('d-none');
|
||||||
|
@ -210,7 +224,6 @@ $("#btn_transfer").click(function() {
|
||||||
let reason = reason_field.val();
|
let reason = reason_field.val();
|
||||||
|
|
||||||
if ($("#type_transfer").is(':checked')) {
|
if ($("#type_transfer").is(':checked')) {
|
||||||
|
|
||||||
// We copy the arrays to ensure that transactions are well-processed even if the form is reset
|
// We copy the arrays to ensure that transactions are well-processed even if the form is reset
|
||||||
[...sources_notes_display].forEach(function (source) {
|
[...sources_notes_display].forEach(function (source) {
|
||||||
[...dests_notes_display].forEach(function (dest) {
|
[...dests_notes_display].forEach(function (dest) {
|
||||||
|
@ -228,12 +241,31 @@ $("#btn_transfer").click(function() {
|
||||||
"destination": dest.note.id,
|
"destination": dest.note.id,
|
||||||
"destination_alias": dest.name
|
"destination_alias": dest.name
|
||||||
}).done(function () {
|
}).done(function () {
|
||||||
|
if (!isNaN(source.note.balance)) {
|
||||||
|
let newBalance = source.note.balance - source.quantity * dest.quantity * amount;
|
||||||
|
if (newBalance <= -5000) {
|
||||||
|
addMsg("Le transfert de "
|
||||||
|
+ pretty_money(source.quantity * dest.quantity * amount) + " de la note "
|
||||||
|
+ source.name + " vers la note " + dest.name + " a été fait avec succès, " +
|
||||||
|
"mais la note émettrice passe en négatif sévère.", "danger", 10000);
|
||||||
|
reset();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (newBalance < 0) {
|
||||||
|
addMsg("Le transfert de "
|
||||||
|
+ pretty_money(source.quantity * dest.quantity * amount) + " de la note "
|
||||||
|
+ source.name + " vers la note " + dest.name + " a été fait avec succès, " +
|
||||||
|
"mais la note émettrice passe en négatif.", "warning", 10000);
|
||||||
|
reset();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
addMsg("Le transfert de "
|
addMsg("Le transfert de "
|
||||||
+ pretty_money(source.quantity * dest.quantity * amount) + " de la note " + source.name
|
+ pretty_money(source.quantity * dest.quantity * amount) + " de la note " + source.name
|
||||||
+ " vers la note " + dest.name + " a été fait avec succès !", "success", 10000);
|
+ " vers la note " + dest.name + " a été fait avec succès !", "success", 10000);
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
}).fail(function (err) { // do it again but valid = false
|
}).fail(function () { // do it again but valid = false
|
||||||
$.post("/api/note/transaction/transaction/",
|
$.post("/api/note/transaction/transaction/",
|
||||||
{
|
{
|
||||||
"csrfmiddlewaretoken": CSRF_TOKEN,
|
"csrfmiddlewaretoken": CSRF_TOKEN,
|
||||||
|
@ -264,19 +296,29 @@ $("#btn_transfer").click(function() {
|
||||||
let special_note = $("#credit_type").val();
|
let special_note = $("#credit_type").val();
|
||||||
let user_note;
|
let user_note;
|
||||||
let given_reason = reason;
|
let given_reason = reason;
|
||||||
let source, dest, reason;
|
let source_id, dest_id;
|
||||||
if ($("#type_credit").is(':checked')) {
|
if ($("#type_credit").is(':checked')) {
|
||||||
|
if (!dests_notes_display.length) {
|
||||||
|
$("#dest_note").addClass('is-invalid');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
user_note = dests_notes_display[0].note.id;
|
user_note = dests_notes_display[0].note.id;
|
||||||
source = special_note;
|
source_id = special_note;
|
||||||
dest = user_note;
|
dest_id = user_note;
|
||||||
reason = "Crédit " + $("#credit_type option:selected").text().toLowerCase();
|
reason = "Crédit " + $("#credit_type option:selected").text().toLowerCase();
|
||||||
if (given_reason.length > 0)
|
if (given_reason.length > 0)
|
||||||
reason += " (" + given_reason + ")";
|
reason += " (" + given_reason + ")";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
if (!sources_notes_display.length) {
|
||||||
|
$("#source_note").addClass('is-invalid');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
user_note = sources_notes_display[0].note.id;
|
user_note = sources_notes_display[0].note.id;
|
||||||
source = user_note;
|
source_id = user_note;
|
||||||
dest = special_note;
|
dest_id = special_note;
|
||||||
reason = "Retrait " + $("#credit_type option:selected").text().toLowerCase();
|
reason = "Retrait " + $("#credit_type option:selected").text().toLowerCase();
|
||||||
if (given_reason.length > 0)
|
if (given_reason.length > 0)
|
||||||
reason += " (" + given_reason + ")";
|
reason += " (" + given_reason + ")";
|
||||||
|
@ -290,10 +332,10 @@ $("#btn_transfer").click(function() {
|
||||||
"valid": true,
|
"valid": true,
|
||||||
"polymorphic_ctype": SPECIAL_TRANSFER_POLYMORPHIC_CTYPE,
|
"polymorphic_ctype": SPECIAL_TRANSFER_POLYMORPHIC_CTYPE,
|
||||||
"resourcetype": "SpecialTransaction",
|
"resourcetype": "SpecialTransaction",
|
||||||
"source": source,
|
"source": source_id,
|
||||||
"source_alias": source.name,
|
"source_alias": sources_notes_display[0].name,
|
||||||
"destination": dest,
|
"destination": dest_id,
|
||||||
"destination_alias": dest.name,
|
"destination_alias": dests_notes_display[0].name,
|
||||||
"last_name": $("#last_name").val(),
|
"last_name": $("#last_name").val(),
|
||||||
"first_name": $("#first_name").val(),
|
"first_name": $("#first_name").val(),
|
||||||
"bank": $("#bank").val()
|
"bank": $("#bank").val()
|
||||||
|
@ -301,7 +343,8 @@ $("#btn_transfer").click(function() {
|
||||||
addMsg("Le crédit/retrait a bien été effectué !", "success", 10000);
|
addMsg("Le crédit/retrait a bien été effectué !", "success", 10000);
|
||||||
reset();
|
reset();
|
||||||
}).fail(function (err) {
|
}).fail(function (err) {
|
||||||
addMsg("Le crédit/retrait a échoué : " + JSON.parse(err.responseText)["detail"], "danger", 10000);
|
addMsg("Le crédit/retrait a échoué : " + JSON.parse(err.responseText)["detail"],
|
||||||
|
"danger", 10000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue