mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	(Un)validate transactions
This commit is contained in:
		
				
					committed by
					
						
						Bombar Maxime
					
				
			
			
				
	
			
			
			
						parent
						
							c43e8c2dc2
						
					
				
				
					commit
					cc5185b3ed
				
			@@ -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 = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 %}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user