1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-08-10 00:10:42 +02:00

Visual improvement on manage page

This commit is contained in:
Ehouarn
2025-08-09 15:38:02 +02:00
parent b10b2fb3b6
commit 74f9c53c18
4 changed files with 66 additions and 25 deletions

View File

@@ -57,7 +57,6 @@ function addChallenge (id, name, amount) {
/** Ajout de 1 à chaque clic d'un bouton déjà choisi */
buttons.forEach(function (b) {
if (b.id === id) {
b.quantity += 1
challenge = b
}
})
@@ -65,8 +64,6 @@ function addChallenge (id, name, amount) {
challenge = {
id: id,
name: name,
quantity: 1,
amount: amount,
}
buttons.push(challenge)
}
@@ -76,8 +73,7 @@ function addChallenge (id, name, amount) {
const list = 'consos_list'
let html = ''
buttons.forEach(function (challenge) {
html += li('conso_button_' + challenge.id, challenge.name +
'<span class="badge badge-dark badge-pill">' + challenge.quantity + '</span>')
html += li('conso_button_' + challenge.id, challenge.name)
})
document.getElementById(list).innerHTML = html
@@ -94,7 +90,6 @@ function addChallenge (id, name, amount) {
* Reset the page as its initial state.
*/
function reset () {
console.log("reset lancée")
notes_display.length = 0
notes.length = 0
buttons.length = 0
@@ -113,7 +108,6 @@ function reset () {
* Apply all transactions: all notes in `notes` buy each item in `buttons`
*/
function consumeAll () {
console.log("test");
if (LOCK) { return }
LOCK = true
@@ -131,13 +125,10 @@ function consumeAll () {
LOCK = false
return
}
console.log("couocu")
// Récupérer les IDs des familles et des challenges
const family_ids = notes_display.map(fam => fam.id)
const challenge_ids = buttons.map(chal => chal.id)
console.log(family_ids)
console.log(challenge_ids)
$.ajax({
url: '/family/api/family/achievements/batch/',
type: 'POST',
@@ -318,7 +309,6 @@ function autoCompleteFamily(field_id, family_list_id, families, families_display
var disp = null
families_display.forEach(function (d) {
if (d.id === family.id) {
d.quantity += 1
disp = d
}
})
@@ -327,7 +317,6 @@ function autoCompleteFamily(field_id, family_list_id, families, families_display
name: family.name,
id: family.id,
family: family,
quantity: 1
}
families_display.push(disp)
}
@@ -338,9 +327,7 @@ function autoCompleteFamily(field_id, family_list_id, families, families_display
let html = ''
families_display.forEach(function (disp) {
html += li(family_prefix + '_' + disp.id,
disp.name +
'<span class="badge badge-dark badge-pill">' +
disp.quantity + '</span>',
disp.name,
'')
})
@@ -398,12 +385,6 @@ function removeFamily(d, family_prefix, families_display, family_list_id, user_f
const new_families_display = []
let html = ''
families_display.forEach(function (disp) {
if (disp.quantity > 1 || disp.id !== d.id) {
disp.quantity -= disp.id === d.id ? 1 : 0
new_families_display.push(disp)
html += li(family_prefix + '_' + disp.id, disp.name +
'<span class="badge badge-dark badge-pill">' + disp.quantity + '</span>')
}
})
families_display.length = 0

View File

@@ -5,14 +5,13 @@ import django_tables2 as tables
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from django_tables2 import A
from django.urls import reverse, reverse_lazy
from note_kfet.middlewares import get_current_request
from permission.backends import PermissionBackend
from .models import Achievement, Challenge, Family, FamilyMembership
class FamilyTable(tables.Table):
"""
List all families

View File

@@ -52,7 +52,12 @@ SPDX-License-Identifier: GPL-3.0-or-later
</div>
{# User search with autocompletion #}
<div class="card-footer">
<input class="form-control mx-auto d-block" placeholder="{% trans "Name" %}" type="text" id="note" autofocus />
<input class="form-control mx-auto d-block mb-2" placeholder="{% trans "Name" %}" type="text" id="note" autofocus />
{% if user_family %}
<button class="btn btn-sm btn-secondary btn-block" id="select_my_family">
{% trans "Select my family" %} ({{ user_family.name }})
</button>
{% endif %}
</div>
</div>
</div>
@@ -210,6 +215,55 @@ SPDX-License-Identifier: GPL-3.0-or-later
document.getElementById("consume_all").addEventListener("click", function () {
$('#validationModal').modal('show');
});
{% if user_family %}
document.getElementById("select_my_family").addEventListener("click", function () {
// Simulate selecting the user's family
var userFamily = {
id: {{ user_family.id }},
name: "{{ user_family.name|escapejs }}",
display_image: "{{ user_family.display_image.url|default:'/static/member/img/default_picture.png'|escapejs }}"
};
// Check if family is already selected
var alreadySelected = false;
notes_display.forEach(function (d) {
if (d.id === userFamily.id) {
alreadySelected = true;
}
});
if (!alreadySelected) {
// Add the family to the selected families
var disp = {
name: userFamily.name,
id: userFamily.id,
family: userFamily,
};
notes_display.push(disp);
// Update the display
const family_list = $('#note_list');
let html = '';
notes_display.forEach(function (disp) {
html += li('note_' + disp.id, disp.name, '');
});
family_list.html(html);
// Add click handlers for removal
notes_display.forEach(function (disp) {
const line_obj = $('#note_' + disp.id);
line_obj.hover(function () {
displayFamily(disp.family, disp.name, 'user_note', 'profile_pic');
});
line_obj.click(removeFamily(disp, 'note', notes_display, 'note_list', 'user_note', 'profile_pic'));
});
// Display the family info
displayFamily(userFamily, userFamily.name, 'user_note', 'profile_pic');
}
});
{% endif %}
</script>
</script>
{% endblock %}

View File

@@ -301,6 +301,13 @@ class FamilyManageView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView
context["can_add_family"] = PermissionBackend.check_perm(self.request, "family.family_create")
context["can_add_challenge"] = PermissionBackend.check_perm(self.request, "family.challenge_create")
# Get the user's family if they have one
try:
user_family_membership = FamilyMembership.objects.get(user=self.request.user)
context["user_family"] = user_family_membership.family
except FamilyMembership.DoesNotExist:
context["user_family"] = None
return context
def get_table(self, **kwargs):