(Un)validate transactions

This commit is contained in:
Yohann D'ANELLO 2020-03-14 02:08:23 +01:00 committed by Bombar Maxime
parent c43e8c2dc2
commit cc5185b3ed
3 changed files with 47 additions and 11 deletions

View File

@ -1,6 +1,8 @@
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import html
import django_tables2 as tables import django_tables2 as tables
from django.db.models import F from django.db.models import F
from django_tables2.utils import A from django_tables2.utils import A
@ -19,23 +21,38 @@ class HistoryTable(tables.Table):
model = Transaction model = Transaction
exclude = ("id", "polymorphic_ctype", ) exclude = ("id", "polymorphic_ctype", )
template_name = 'django_tables2/bootstrap4.html' template_name = 'django_tables2/bootstrap4.html'
sequence = ('...', 'total', 'valid') sequence = ('...', 'total', 'valid', )
orderable = False
total = tables.Column() # will use Transaction.total() !! total = tables.Column() # will use Transaction.total() !!
valid = tables.Column(attrs={"td": {"id": lambda record: "validate_" + str(record.id),
"class": lambda record: str(record.valid).lower() + ' validate'}})
def order_total(self, queryset, is_descending): def order_total(self, queryset, is_descending):
# needed for rendering # needed for rendering
queryset = queryset.annotate(total=F('amount') * F('quantity')) \ queryset = queryset.annotate(total=F('amount') * F('quantity')) \
.order_by(('-' if is_descending else '') + 'total') .order_by(('-' if is_descending else '') + 'total')
return (queryset, True) return queryset, True
def render_amount(self, value): def render_amount(self, value):
return pretty_money(value) return pretty_money(value)
def render_total(self, value): def render_total(self, value):
return pretty_money(value) return pretty_money(value)
# Django-tables escape strings. That's a wrong thing.
def render_reason(self, value):
return html.unescape(value)
def render_valid(self, value):
return "" if value else ""
class AliasTable(tables.Table): class AliasTable(tables.Table):
class Meta: class Meta:
attrs = { attrs = {

View File

@ -139,7 +139,7 @@ function autoCompleteNote(field_id, alias_matched_id, note_list_id, notes, notes
let pattern = field.val(); let pattern = field.val();
// If the pattern is not modified, we don't query the API // If the pattern is not modified, we don't query the API
if (pattern === old_pattern) if (pattern === old_pattern || pattern === "")
return; return;
old_pattern = pattern; old_pattern = pattern;
@ -150,11 +150,6 @@ function autoCompleteNote(field_id, alias_matched_id, note_list_id, notes, notes
let aliases_matched_obj = $("#" + alias_matched_id); let aliases_matched_obj = $("#" + alias_matched_id);
let aliases_matched_html = ""; let aliases_matched_html = "";
if (pattern === "") {
aliases_matched_obj.html("");
return;
}
// Get matched notes with the given pattern // Get matched notes with the given pattern
getMatchedNotes(pattern, function(aliases) { getMatchedNotes(pattern, function(aliases) {
// The response arrived too late, we stop the request // The response arrived too late, we stop the request

View File

@ -133,9 +133,9 @@
{% block extracss %} {% block extracss %}
<style> <style>
.select2-container{ .validate:hover {
max-width: 100%; cursor: pointer;
min-width: 100%; text-decoration: underline;
} }
</style> </style>
{% endblock %} {% endblock %}
@ -143,6 +143,7 @@
{% block extrajavascript %} {% block extrajavascript %}
<script type="text/javascript" src="/static/js/consos.js"></script> <script type="text/javascript" src="/static/js/consos.js"></script>
<script type="text/javascript"> <script type="text/javascript">
// Switching in double consumptions mode should update the layout
$("#double_conso").click(function() { $("#double_conso").click(function() {
$("#consos_list_div").show(); $("#consos_list_div").show();
$("#infos_div").attr('class', 'col-sm-5 col-xl-6'); $("#infos_div").attr('class', 'col-sm-5 col-xl-6');
@ -190,5 +191,28 @@
}); });
{% endif %} {% endif %}
{% endfor %} {% endfor %}
// When we click on the validate button, the validation status is switched
$(".validate").click(function(e) {
let id = e.target.id.substring(9);
let validated = e.target.classList.contains("true");
// Perform a PATCH request to the API in order to update the transaction
// If the user has insuffisent rights, an error message will appear
// TODO: Add this error message
$.ajax({
"url": "/api/note/transaction/transaction/" + id + "/",
type: "PATCH",
dataType: "json",
headers: {
"X-CSRFTOKEN": CSRF_TOKEN
},
data: {
"resourcetype": "TemplateTransaction",
valid: !validated
},
success: refreshHistory
});
});
</script> </script>
{% endblock %} {% endblock %}