From 15914cf9dc6032fd72b2ecf3b54f67be24d22541 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de>
Date: Sat, 20 Apr 2024 18:55:58 +0200
Subject: [PATCH] Count only non-resolved CVs in scheduler and CV overview

This implements #201
---
 .../AKScheduling/constraint_violations.html   | 19 +++++++++++-------
 .../admin/AKScheduling/scheduling.html        | 20 +++++++++++--------
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/AKScheduling/templates/admin/AKScheduling/constraint_violations.html b/AKScheduling/templates/admin/AKScheduling/constraint_violations.html
index 6a71f9b4..e8454247 100644
--- a/AKScheduling/templates/admin/AKScheduling/constraint_violations.html
+++ b/AKScheduling/templates/admin/AKScheduling/constraint_violations.html
@@ -23,26 +23,31 @@
             const callback_success = function(response) {
                let table_html = '';
 
+               let unresolved_constraint_violations = 0;
+
                if(response.length > 0) {
-                   // Update violation count badge
-                   $('#violationCountBadge').html(response.length).removeClass('bg-success').addClass('bg-warning');
 
                    // Update violations table
                    for(let i=0;i<response.length;i++) {
-                       if(response[i].manually_resolved)
+                       if(response[i].manually_resolved) {
                            table_html += '<tr class="text-muted"><td class="nowrap">{% fa6_icon "check" "fas" %}</td>';
-                       else
+                       }
+                       else {
                            table_html += '<tr><td></td>';
+                           unresolved_constraint_violations++;
+                       }
                        table_html += "<td>" + response[i].level_display + "</td><td>" + response[i].type_display + "</td><td>" + response[i].details + "</td><td class='nowrap'>" + response[i].timestamp_display + "</td><td><a href='" + response[i].edit_url + "'><i class='btn btn-primary fa fa-pen'></i></a></td></tr>";
                    }
                }
                else {
-                   // Update violation count badge
-                   $('#violationCountBadge').html(0).removeClass('bg-warning').addClass('bg-success');
-
                    // Update violations table
                    table_html ='<tr class="text-muted"><td colspan="5" class="text-center">{% trans "No violations" %}</td></tr>'
                }
+               // Update violation count badge
+               if(unresolved_constraint_violations > 0)
+                   $('#violationCountBadge').html(unresolved_constraint_violations).removeClass('bg-success').addClass('bg-warning');
+               else
+                   $('#violationCountBadge').html(0).removeClass('bg-warning').addClass('bg-success');
 
                // Show violation list (potentially empty) in violations table
                $('#violationsTableBody').html(table_html);
diff --git a/AKScheduling/templates/admin/AKScheduling/scheduling.html b/AKScheduling/templates/admin/AKScheduling/scheduling.html
index 1be3071c..8d592aec 100644
--- a/AKScheduling/templates/admin/AKScheduling/scheduling.html
+++ b/AKScheduling/templates/admin/AKScheduling/scheduling.html
@@ -215,20 +215,24 @@
                if(response.length > 0) {
                    // Update violations table
                    for(let i=0;i<response.length;i++) {
-                       if(response[i].manually_resolved)
-                           table_html += '<tr class="text-muted"><td class="nowrap">{% fa6_icon "check" "fas" %} ';
+                       let icon_html = '';
+                       let muted_html = '';
+                       if(response[i].manually_resolved) {
+                            icon_html = '{% fa6_icon "check" "fas" %} ';
+                            muted_html = 'text-muted';
+                          }
                        else {
-                           table_html += '<tr><td>';
                            unresolved_violations_count++;
                        }
 
                        if(response[i].level_display==='{% trans "Violation" %}')
-                           table_html += '{% fa6_icon "exclamation-triangle" "fas" %}';
+                           icon_html += '{% fa6_icon "exclamation-triangle" "fas" %}';
                        else
-                           table_html += '{% fa6_icon "info-circle" "fas" %}';
+                           icon_html += '{% fa6_icon "info-circle" "fas" %}';
 
+                       table_html += '<tr class="'+ muted_html+ '"><td class="nowrap">' + icon_html;
                        table_html += "</td><td class='small'>" + response[i].type_display + "</td></tr>";
-                       table_html += "<tr><td colspan='2' class='small'>" + response[i].details + "</td></tr>"
+                       table_html += "<tr class='" + muted_html + "'><td colspan='2' class='small'>" + response[i].details + "</td></tr>"
                    }
                }
                else {
@@ -238,7 +242,7 @@
 
                // Update violation count badge
                 if(unresolved_violations_count > 0)
-                    $('#violationCountBadge').html(response.length).removeClass('bg-success').addClass('bg-warning');
+                    $('#violationCountBadge').html(unresolved_violations_count).removeClass('bg-success').addClass('bg-warning');
                 else
                     $('#violationCountBadge').html(0).removeClass('bg-warning').addClass('bg-success');
 
@@ -358,7 +362,7 @@
                 {% endfor %}
               </div>
               <div class="tab-pane fade" id="violations">
-                  <table class="table table-striped mt-4 mb-4">
+                  <table class="table mt-4 mb-4">
                     <thead>
                         <tr>
                             <th>{% trans "Level" %}</th>
-- 
GitLab