mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
			Add_some_p
			...
			cb61c511ce
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					cb61c511ce | ||
| 
						 | 
					25bfa575ed | ||
| 
						 | 
					e21d9fcfbe | ||
| 
						 | 
					b293904525 | ||
| 
						 | 
					bd7e6b8ad4 | ||
| 
						 | 
					a208a4fa25 | ||
| 
						 | 
					4799b2c52d | 
@@ -294,3 +294,10 @@ searchbar.addEventListener("keyup", function (e) {
 | 
				
			|||||||
  if (firstMatch && e.key === "Enter")
 | 
					  if (firstMatch && e.key === "Enter")
 | 
				
			||||||
    firstMatch.click()
 | 
					    firstMatch.click()
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function createshiny() {
 | 
				
			||||||
 | 
					  const list_btn = document.querySelectorAll('.btn-outline-dark')
 | 
				
			||||||
 | 
					  const shiny_class = list_btn[Math.floor(Math.random() * list_btn.length)].classList
 | 
				
			||||||
 | 
					  shiny_class.replace('btn-outline-dark', 'btn-outline-dark-shiny')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					createshiny()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -324,7 +324,7 @@
 | 
				
			|||||||
            "mask": 2,
 | 
					            "mask": 2,
 | 
				
			||||||
            "field": "",
 | 
					            "field": "",
 | 
				
			||||||
            "permanent": false,
 | 
					            "permanent": false,
 | 
				
			||||||
            "description": "Créer une transaction de ou vers la note d'un club tant que la source reste au dessus de -20 €"
 | 
					            "description": "Créer une transaction de ou vers la note d'un club"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -3815,7 +3815,7 @@
 | 
				
			|||||||
            "mask": 2,
 | 
					            "mask": 2,
 | 
				
			||||||
            "field": "",
 | 
					            "field": "",
 | 
				
			||||||
            "permanent": false,
 | 
					            "permanent": false,
 | 
				
			||||||
            "description": "Créer une transaction vers la note d'un club tant que la source reste au dessus de -20 €"
 | 
					            "description": "Créer une transaction vers la note d'un club"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -4186,86 +4186,6 @@
 | 
				
			|||||||
            "description": "Voir la note d'un club enfant"
 | 
					            "description": "Voir la note d'un club enfant"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "model": "permission.permission",
 | 
					 | 
				
			||||||
        "pk": 266,
 | 
					 | 
				
			||||||
        "fields": {
 | 
					 | 
				
			||||||
            "model": [
 | 
					 | 
				
			||||||
                "note",
 | 
					 | 
				
			||||||
                "transaction"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "query": "[\"OR\", {\"source_alias\": \"Carte bancaire\"}, {\"source_alias\": \"Espèces\"}, {\"source_alias\": \"Chèque\"}, {\"source_alias\": \"Virement bancaire\"}]",
 | 
					 | 
				
			||||||
            "type": "view",
 | 
					 | 
				
			||||||
            "mask": 2,
 | 
					 | 
				
			||||||
            "field": "",
 | 
					 | 
				
			||||||
            "permanent": false,
 | 
					 | 
				
			||||||
            "description": "Voir les transactions de rechargement"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "model": "permission.permission",
 | 
					 | 
				
			||||||
        "pk": 267,
 | 
					 | 
				
			||||||
        "fields": {
 | 
					 | 
				
			||||||
            "model": [
 | 
					 | 
				
			||||||
                "note",
 | 
					 | 
				
			||||||
                "transaction"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "query": "[\"OR\", {\"source_alias\": \"Carte bancaire\"}, {\"source_alias\": \"Espèces\"}, {\"source_alias\": \"Chèque\"}, {\"source_alias\": \"Virement bancaire\"}]",
 | 
					 | 
				
			||||||
            "type": "change",
 | 
					 | 
				
			||||||
            "mask": 2,
 | 
					 | 
				
			||||||
            "field": "valid",
 | 
					 | 
				
			||||||
            "permanent": false,
 | 
					 | 
				
			||||||
            "description": "Mettre à jour le statut de validation d'une transaction de rechargement"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "model": "permission.permission",
 | 
					 | 
				
			||||||
        "pk": 268,
 | 
					 | 
				
			||||||
        "fields": {
 | 
					 | 
				
			||||||
            "model": [
 | 
					 | 
				
			||||||
                "note",
 | 
					 | 
				
			||||||
                "transaction"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "query": "[\"OR\", {\"source_alias\": \"Carte bancaire\"}, {\"source_alias\": \"Espèces\"}, {\"source_alias\": \"Chèque\"}, {\"source_alias\": \"Virement bancaire\"}]",
 | 
					 | 
				
			||||||
            "type": "change",
 | 
					 | 
				
			||||||
            "mask": 2,
 | 
					 | 
				
			||||||
            "field": "invalidity_reason",
 | 
					 | 
				
			||||||
            "permanent": false,
 | 
					 | 
				
			||||||
            "description": "Modifier la raison d'invalidité d'une transaction de rechargement"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "model": "permission.permission",
 | 
					 | 
				
			||||||
        "pk": 269,
 | 
					 | 
				
			||||||
        "fields": {
 | 
					 | 
				
			||||||
            "model": [
 | 
					 | 
				
			||||||
                "note",
 | 
					 | 
				
			||||||
                "transaction"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "query": "[\"OR\", {\"source_alias\": \"Carte bancaire\"}, {\"source_alias\": \"Espèces\"}, {\"source_alias\": \"Chèque\"}, {\"source_alias\": \"Virement bancaire\"}]",
 | 
					 | 
				
			||||||
            "type": "add",
 | 
					 | 
				
			||||||
            "mask": 2,
 | 
					 | 
				
			||||||
            "field": "",
 | 
					 | 
				
			||||||
            "permanent": false,
 | 
					 | 
				
			||||||
            "description": "Créer une transaction de rechargement"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "model": "permission.permission",
 | 
					 | 
				
			||||||
        "pk": 270,
 | 
					 | 
				
			||||||
        "fields": {
 | 
					 | 
				
			||||||
            "model": [
 | 
					 | 
				
			||||||
                "note",
 | 
					 | 
				
			||||||
                "transaction"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "query": "[\"AND\", [\"OR\", {\"source\": [\"club\", \"note\"]}, {\"destination\": [\"club\", \"note\"]}], [\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}}, {\"valid\": false}]]",
 | 
					 | 
				
			||||||
            "type": "add",
 | 
					 | 
				
			||||||
            "mask": 2,
 | 
					 | 
				
			||||||
            "field": "",
 | 
					 | 
				
			||||||
            "permanent": false,
 | 
					 | 
				
			||||||
            "description": "Créer une transaction de ou vers la note d'un club tant que la source reste au dessus de -50 €"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        "model": "permission.role",
 | 
					        "model": "permission.role",
 | 
				
			||||||
        "pk": 1,
 | 
					        "pk": 1,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,9 +23,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
 | 
				
			|||||||
		let d1 = document.getElementById("consumer");
 | 
							let d1 = document.getElementById("consumer");
 | 
				
			||||||
		let d2 = document.getElementById("creditor");
 | 
							let d2 = document.getElementById("creditor");
 | 
				
			||||||
		if (con) { d1.textContent = {{ big_consumer | safe }}[0] + " " + gettext("with") + " " + {{ big_consumer | safe}}[1] + "€";}
 | 
							if (con) { d1.textContent = {{ big_consumer | safe }}[0] + " " + gettext("with") + " " + {{ big_consumer | safe}}[1] + "€";}
 | 
				
			||||||
		else { d1.textContent = gettext("Infortunately, you doesn't have consumer this year");};
 | 
							else { d1.textContent = gettext("{% trans "Infortunately, you doesn't have consumer this year" %}");};
 | 
				
			||||||
		if (cre) { d2.textContent = {{ big_creancier | safe}}[0] + " " + gettext("with") + " " + {{ big_creancier | safe}}[1] + "€";}
 | 
							if (cre) { d2.textContent = {{ big_creancier | safe}}[0] + " " + gettext("with") + " " + {{ big_creancier | safe}}[1] + "€";}
 | 
				
			||||||
		else { d2.textContent = gettext("Congratulations you are a real rat !"); };
 | 
							else { d2.textContent = gettext("{% trans "Congratulations you are a real rat !" %}"); };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</script>
 | 
						</script>
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,17 +6,24 @@ SPDX-License-Identifier: GPL-3.0-or-later
 | 
				
			|||||||
{% load i18n %}
 | 
					{% load i18n %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
<div class="row justify-content-center">   
 | 
					<div id="wrapped_tables">
 | 
				
			||||||
    <div class="col-md-10">
 | 
					{% if tables|length > 0 %}
 | 
				
			||||||
        <div class="card card-border shadow">
 | 
					<div class="card bg-light mb-3">
 | 
				
			||||||
            <div class="card-header text-center">
 | 
					    <h3 class="card-header text-center">
 | 
				
			||||||
		    <h5> {{ title }}</h5>
 | 
					        {% trans "My wrapped" %}
 | 
				
			||||||
            </div>
 | 
					    </h3>
 | 
				
			||||||
            <div class="card-body px-0 py-0" id="wrapped_table">
 | 
					    {% render_table tables.1 %}
 | 
				
			||||||
                {% render_table table %}
 | 
					</div>
 | 
				
			||||||
            </div>
 | 
					{% endif %}
 | 
				
			||||||
        </div>
 | 
					
 | 
				
			||||||
    </div>
 | 
					{% if tables|length > 0 %}
 | 
				
			||||||
 | 
					<div class="card bg-light mb-3">
 | 
				
			||||||
 | 
					    <h3 class="card-header text-center">
 | 
				
			||||||
 | 
					        {% trans "Public wrapped" %}
 | 
				
			||||||
 | 
					    </h3>
 | 
				
			||||||
 | 
					    {% render_table tables.0 %}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,7 +32,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
 | 
				
			|||||||
	let club_not_public = {{ club_not_public }};
 | 
						let club_not_public = {{ club_not_public }};
 | 
				
			||||||
	if (club_not_public) { (addMsg("{% trans "Do not forget to ask permission to people who are in your wrapped before to make them public" %}", 'warning'));}
 | 
						if (club_not_public) { (addMsg("{% trans "Do not forget to ask permission to people who are in your wrapped before to make them public" %}", 'warning'));}
 | 
				
			||||||
   function refreshTable() {
 | 
					   function refreshTable() {
 | 
				
			||||||
	$("#wrapped_table").load(location.pathname + " #wrapped_table");
 | 
						$("#wrapped_tables").load(location.pathname + " #wrapped_tables");
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   function copylink(id) {
 | 
					   function copylink(id) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,8 @@ import json
 | 
				
			|||||||
from django.contrib.auth.mixins import LoginRequiredMixin
 | 
					from django.contrib.auth.mixins import LoginRequiredMixin
 | 
				
			||||||
from django.utils.translation import gettext_lazy as _
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
from django.views.generic import DetailView
 | 
					from django.views.generic import DetailView
 | 
				
			||||||
from django_tables2.views import SingleTableView
 | 
					from django.views.generic.list import ListView
 | 
				
			||||||
 | 
					from django_tables2.views import MultiTableMixin
 | 
				
			||||||
from permission.backends import PermissionBackend
 | 
					from permission.backends import PermissionBackend
 | 
				
			||||||
from permission.views import ProtectQuerysetMixin
 | 
					from permission.views import ProtectQuerysetMixin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,21 +15,29 @@ from .models import Wrapped
 | 
				
			|||||||
from .tables import WrappedTable
 | 
					from .tables import WrappedTable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class WrappedListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
 | 
					class WrappedListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin, ListView):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Display all Wrapped, and classify by year
 | 
					    Display all Wrapped, and classify by year
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    model = Wrapped
 | 
					    model = Wrapped
 | 
				
			||||||
    table_class = WrappedTable
 | 
					    tables = [
 | 
				
			||||||
 | 
					        lambda data: WrappedTable(data, prefix="public-"),
 | 
				
			||||||
 | 
					        lambda data: WrappedTable(data, prefix="personnal-"),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
    template_name = 'wrapped/wrapped_list.html'
 | 
					    template_name = 'wrapped/wrapped_list.html'
 | 
				
			||||||
    extra_context = {'title': _("List of wrapped")}
 | 
					    extra_context = {'title': _("List of wrapped")}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_queryset(self, **kwargs):
 | 
					    def get_queryset(self, **kwargs):
 | 
				
			||||||
        return super().get_queryset(**kwargs).distinct()
 | 
					        return super().get_queryset(**kwargs).distinct()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_table_data(self):
 | 
					    def get_tables_data(self):
 | 
				
			||||||
        return Wrapped.objects.filter(PermissionBackend.filter_queryset(
 | 
					        return [
 | 
				
			||||||
            self.request, Wrapped, "change", field='public')).distinct().order_by("-bde__date_start")
 | 
					            Wrapped.objects.filter(public=True),
 | 
				
			||||||
 | 
					            Wrapped.objects
 | 
				
			||||||
 | 
					            .filter(PermissionBackend.filter_queryset(self.request, Wrapped, "change", field='public'))
 | 
				
			||||||
 | 
					            .distinct()
 | 
				
			||||||
 | 
					            .order_by("-bde__date_start")
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_context_data(self, **kwargs):
 | 
					    def get_context_data(self, **kwargs):
 | 
				
			||||||
        context = super().get_context_data(**kwargs)
 | 
					        context = super().get_context_data(**kwargs)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										118
									
								
								docs/_static/img/graphs/wrapped.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								docs/_static/img/graphs/wrapped.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,118 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
				
			||||||
 | 
					<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 | 
				
			||||||
 | 
					 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
				
			||||||
 | 
					<!-- Generated by graphviz version 2.43.0 (0)
 | 
				
			||||||
 | 
					 -->
 | 
				
			||||||
 | 
					<!-- Title: model_graph Pages: 1 -->
 | 
				
			||||||
 | 
					<svg width="319pt" height="245pt"
 | 
				
			||||||
 | 
					 viewBox="0.00 0.00 319.00 245.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 241)">
 | 
				
			||||||
 | 
					<title>model_graph</title>
 | 
				
			||||||
 | 
					<polygon fill="white" stroke="transparent" points="-4,4 -4,-241 315,-241 315,4 -4,4"/>
 | 
				
			||||||
 | 
					<!-- wrapped_models_Bde -->
 | 
				
			||||||
 | 
					<g id="node1" class="node">
 | 
				
			||||||
 | 
					<title>wrapped_models_Bde</title>
 | 
				
			||||||
 | 
					<polygon fill="white" stroke="transparent" points="8,-4 8,-79 158,-79 158,-4 8,-4"/>
 | 
				
			||||||
 | 
					<polygon fill="#1b563f" stroke="transparent" points="9,-56.5 9,-77.5 157,-77.5 157,-56.5 9,-56.5"/>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="52" y="-65.5" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="62" y="-65.5" font-family="Roboto" font-weight="bold" font-size="10.00" fill="white">    Bde    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="11" y="-49.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="21" y="-49.1" font-family="Roboto" font-weight="bold" font-size="8.00">id</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="31" y="-49.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="77" y="-49.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="87" y="-49.1" font-family="Roboto" font-weight="bold" font-size="8.00">AutoField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="131" y="-49.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="11" y="-36.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="21" y="-36.1" font-family="Roboto" font-size="8.00">date_end</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="60" y="-36.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="77" y="-36.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="87" y="-36.1" font-family="Roboto" font-size="8.00">DateTimeField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="145" y="-36.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="11" y="-23.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="21" y="-23.1" font-family="Roboto" font-size="8.00">date_start</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="63" y="-23.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="77" y="-23.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="87" y="-23.1" font-family="Roboto" font-size="8.00">DateTimeField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="145" y="-23.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="11" y="-10.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="21" y="-10.1" font-family="Roboto" font-size="8.00">name</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="45" y="-10.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="77" y="-10.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="87" y="-10.1" font-family="Roboto" font-size="8.00">CharField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="125" y="-10.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<polygon fill="none" stroke="black" points="8,-4 8,-79 158,-79 158,-4 8,-4"/>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					<!-- wrapped_models_Wrapped -->
 | 
				
			||||||
 | 
					<g id="node2" class="node">
 | 
				
			||||||
 | 
					<title>wrapped_models_Wrapped</title>
 | 
				
			||||||
 | 
					<polygon fill="white" stroke="transparent" points="67,-132 67,-233 231,-233 231,-132 67,-132"/>
 | 
				
			||||||
 | 
					<polygon fill="#1b563f" stroke="transparent" points="68,-210.5 68,-231.5 230,-231.5 230,-210.5 68,-210.5"/>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="103" y="-219.5" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="113" y="-219.5" font-family="Roboto" font-weight="bold" font-size="10.00" fill="white">    Wrapped    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="70" y="-203.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="80" y="-203.1" font-family="Roboto" font-weight="bold" font-size="8.00">id</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="90" y="-203.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="137" y="-203.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="147" y="-203.1" font-family="Roboto" font-weight="bold" font-size="8.00">AutoField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="191" y="-203.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="70" y="-190.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="80" y="-190.1" font-family="Roboto" font-weight="bold" font-size="8.00">bde</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="98" y="-190.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="137" y="-190.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="147" y="-190.1" font-family="Roboto" font-weight="bold" font-size="8.00">ForeignKey (id)</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="218" y="-190.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="70" y="-177.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="80" y="-177.1" font-family="Roboto" font-weight="bold" font-size="8.00">note</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="101" y="-177.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="137" y="-177.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="147" y="-177.1" font-family="Roboto" font-weight="bold" font-size="8.00">ForeignKey (id)</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="218" y="-177.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="70" y="-164.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="80" y="-164.1" font-family="Roboto" font-size="8.00">data_json</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="120" y="-164.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="137" y="-164.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="147" y="-164.1" font-family="Roboto" font-size="8.00">TextField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="182" y="-164.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="70" y="-151.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="80" y="-151.1" font-family="Roboto" font-size="8.00">generated</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="123" y="-151.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="137" y="-151.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="147" y="-151.1" font-family="Roboto" font-size="8.00">BooleanField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="200" y="-151.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="70" y="-138.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="80" y="-138.1" font-family="Roboto" font-size="8.00">public</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="105" y="-138.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="137" y="-138.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="147" y="-138.1" font-family="Roboto" font-size="8.00">BooleanField</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="200" y="-138.1" font-family="Roboto" font-size="8.00">    </text>
 | 
				
			||||||
 | 
					<polygon fill="none" stroke="black" points="67,-132 67,-233 231,-233 231,-132 67,-132"/>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					<!-- wrapped_models_Wrapped->wrapped_models_Bde -->
 | 
				
			||||||
 | 
					<g id="edge1" class="edge">
 | 
				
			||||||
 | 
					<title>wrapped_models_Wrapped->wrapped_models_Bde</title>
 | 
				
			||||||
 | 
					<path fill="none" stroke="black" d="M119.99,-120.4C114,-107.79 107.84,-94.82 102.31,-83.16"/>
 | 
				
			||||||
 | 
					<ellipse fill="black" stroke="black" cx="121.77" cy="-124.15" rx="4" ry="4"/>
 | 
				
			||||||
 | 
					<text text-anchor="middle" x="132" y="-103.6" font-family="Roboto" font-size="8.00"> bde (+)</text>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					<!-- note_models_notes_Note -->
 | 
				
			||||||
 | 
					<g id="node3" class="node">
 | 
				
			||||||
 | 
					<title>note_models_notes_Note</title>
 | 
				
			||||||
 | 
					<polygon fill="white" stroke="transparent" points="192,-31 192,-52 240,-52 240,-31 192,-31"/>
 | 
				
			||||||
 | 
					<polygon fill="#1b563f" stroke="transparent" points="192,-30.5 192,-51.5 240,-51.5 240,-30.5 192,-30.5"/>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="196.5" y="-38.9" font-family="Roboto" font-size="8.00">  </text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="201.5" y="-38.9" font-family="Roboto" font-size="12.00" fill="white">Note</text>
 | 
				
			||||||
 | 
					<text text-anchor="start" x="230.5" y="-38.9" font-family="Roboto" font-size="8.00">  </text>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					<!-- wrapped_models_Wrapped->note_models_notes_Note -->
 | 
				
			||||||
 | 
					<g id="edge2" class="edge">
 | 
				
			||||||
 | 
					<title>wrapped_models_Wrapped->note_models_notes_Note</title>
 | 
				
			||||||
 | 
					<path fill="none" stroke="black" d="M178.48,-120.33C189.12,-98.27 200.3,-75.07 207.66,-59.8"/>
 | 
				
			||||||
 | 
					<ellipse fill="black" stroke="black" cx="176.64" cy="-124.16" rx="4" ry="4"/>
 | 
				
			||||||
 | 
					<text text-anchor="middle" x="204.5" y="-103.6" font-family="Roboto" font-size="8.00"> note (+)</text>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					<!-- \n\n\n -->
 | 
				
			||||||
 | 
					<g id="node4" class="node">
 | 
				
			||||||
 | 
					<title>\n\n\n</title>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					</g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 9.7 KiB  | 
@@ -14,6 +14,7 @@ Applications de la Note Kfet 2020
 | 
				
			|||||||
   logs
 | 
					   logs
 | 
				
			||||||
   treasury
 | 
					   treasury
 | 
				
			||||||
   wei
 | 
					   wei
 | 
				
			||||||
 | 
					   wrapped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
La Note Kfet 2020 est un projet Django, décomposé en applications.
 | 
					La Note Kfet 2020 est un projet Django, décomposé en applications.
 | 
				
			||||||
Certaines applications sont développées uniquement pour ce projet, et sont indispensables,
 | 
					Certaines applications sont développées uniquement pour ce projet, et sont indispensables,
 | 
				
			||||||
@@ -69,4 +70,6 @@ Applications facultatives
 | 
				
			|||||||
    Interface de gestion pour les trésorièr⋅es, émission de factures, remises de chèque, statistiques...
 | 
					    Interface de gestion pour les trésorièr⋅es, émission de factures, remises de chèque, statistiques...
 | 
				
			||||||
* `WEI <wei>`_ :
 | 
					* `WEI <wei>`_ :
 | 
				
			||||||
    Interface de gestion du WEI.
 | 
					    Interface de gestion du WEI.
 | 
				
			||||||
 | 
					* `Wrapped <wrapped>`_ :
 | 
				
			||||||
 | 
					    Récapitulatif personnalisé annuel de statitiques globales et personnelles.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										108
									
								
								docs/apps/wrapped.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								docs/apps/wrapped.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
				
			|||||||
 | 
					Wrapped
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cette application montre les statistiques annuelles des utilisateur·ice·s et/ou des clubs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Modèles
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Bde
 | 
				
			||||||
 | 
					~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le modèle ``Bde`` contient des informations relatifs à un BDE :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* ``name`` : ``CharField``, nom du BDE.
 | 
				
			||||||
 | 
					* ``date_start`` : ``DateField``, date de prise de fonction du bureau BDE considéré.
 | 
				
			||||||
 | 
					* ``date_end`` : ``DateField``, date de démission du bureau BDE considéré.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Wrapped
 | 
				
			||||||
 | 
					~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Contient les informations sur un wrapped :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* ``generated`` : ``BooleanField``, indique si le wrapped a été généré ou non.
 | 
				
			||||||
 | 
					* ``public`` : ``BooleanField``, indique si le wrapped est visible de tous les utilisateur·ice·s ou non.
 | 
				
			||||||
 | 
					* ``bde`` : ``ForeignKey(Bde)``, BDE auquel le wrapped correspond.
 | 
				
			||||||
 | 
					* ``note`` : ``ForeignKey(Note)``, note à laquelle le wrapped correspond.
 | 
				
			||||||
 | 
					* ``data_json`` : ``TextField``, diverses statistique concernant les notes durant le mandat BDE
 | 
				
			||||||
 | 
					  considéré ou sur la NoteKfet dans sa globalité.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Graphe des modèles
 | 
				
			||||||
 | 
					~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. image:: ../_static/img/graphs/wrapped.svg
 | 
				
			||||||
 | 
					   :width: 960
 | 
				
			||||||
 | 
					   :alt: Graphe des modèles de l'application Wrapped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fonctionnement
 | 
				
			||||||
 | 
					--------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Création d'un BDE
 | 
				
			||||||
 | 
					~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Seul un⋅e respo info peut créer un BDE. Pour cela, se rendre dans l'onglet « Admin »., puis « BDE » et
 | 
				
			||||||
 | 
					enfin « + Ajouter BDE ». Iel doit renseigner, les dates de début et de fin du bureau BDE ainsi que le
 | 
				
			||||||
 | 
					nom de la liste.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Génération des wrappeds
 | 
				
			||||||
 | 
					~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Seul un·e respo info peut générer des wrappeds. Pour une utilisation annuelle classique, iel exécute la
 | 
				
			||||||
 | 
					commande :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					``./manage.py generate_wrapped -b "bde_name" -u adh -c active``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pour une utilisation plus technique de cette commande se référer à sa documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					``./manage.py help generate_wrapped``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le script prend une dizaine de minutes pour générer tous les wrappeds.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Créer ses propres wrappeds
 | 
				
			||||||
 | 
					--------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cette section est plus technique et s'addresse plutôt à des respos infos en cours de mandat qui voudrai
 | 
				
			||||||
 | 
					faire les wrappeds de leur propre BDE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Contenu
 | 
				
			||||||
 | 
					~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Il est fortement conseillé de bien réfléchir à ce que l'on souhaite mettre sur un wrapped, plusieurs
 | 
				
			||||||
 | 
					critères sont à prendre compte :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* compréhension, est-ce que la donnée fait sens auprès des utilisateur·ice·s.
 | 
				
			||||||
 | 
					* pertinence, est-ce que la donnée fonctionne pour un grand nombre d'utilisateur.
 | 
				
			||||||
 | 
					* faisabilité, est-ce que le temps de calcul est suffisament rapide.
 | 
				
			||||||
 | 
					* complexité, est-ce que c'est trop compliqué à coder.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Script
 | 
				
			||||||
 | 
					~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le script *generate_wrapped* fonctionne de la manière suivante :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* ``convert_to_note`` : en fonction des arguments d'entrée, il récupére toutes les notes dont le·s
 | 
				
			||||||
 | 
					  wrapped·s va/vont être généré·s
 | 
				
			||||||
 | 
					  ou regénéré·s.
 | 
				
			||||||
 | 
					* ``global_data`` : le script génére ensuite des statistiques globales qui concernent pas qu'une seule
 | 
				
			||||||
 | 
					 note (nombre de soirée, classement, etc). 
 | 
				
			||||||
 | 
					* ``unique_data`` : le script génére les statitiques uniques à chaque note, et rajoute des données
 | 
				
			||||||
 | 
					  globales si nécessaire, pour chaque note on souhaite avoir un json avec toutes les données qui
 | 
				
			||||||
 | 
					  seront dans le wrapped.
 | 
				
			||||||
 | 
					* ``make_wrapped`` : enfin, le cas échéant, pour chaque bde, et pour chaque note, le wrapped est crée
 | 
				
			||||||
 | 
					  ou modifié, et enregistré, s'il est crée il est par défault non public.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Seules les fonctions ``global_data`` et ``unique_data`` sont à modifier, pour implementer un nouveau
 | 
				
			||||||
 | 
					BDE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Template
 | 
				
			||||||
 | 
					~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Il y a au moins deux templates a écrire pour chaque bde :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* ``templates/wrapped/{bde_id}/wrapped_view_club.html``: le template pour les wrappeds des clubs
 | 
				
			||||||
 | 
					* ``templates/wrapped/{bde_id}/wrapped_view_user.html``: le template pour les wrappeds des
 | 
				
			||||||
 | 
					  utilisateur·ice·s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Il est conseillé de suivre la même arborescence pour les fichiers statics (fonts personnalisées,
 | 
				
			||||||
 | 
					images, css, etc). De même, il est conseillé de créé un fichier
 | 
				
			||||||
 | 
					``templates/wrapped/{bde_id}/wrapped_base.html`` et d'étendre cette template.
 | 
				
			||||||
@@ -7,7 +7,7 @@ msgid ""
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Project-Id-Version: \n"
 | 
					"Project-Id-Version: \n"
 | 
				
			||||||
"Report-Msgid-Bugs-To: \n"
 | 
					"Report-Msgid-Bugs-To: \n"
 | 
				
			||||||
"POT-Creation-Date: 2025-02-25 13:47+0100\n"
 | 
					"POT-Creation-Date: 2025-03-13 21:08+0100\n"
 | 
				
			||||||
"PO-Revision-Date: 2022-04-11 22:05+0200\n"
 | 
					"PO-Revision-Date: 2022-04-11 22:05+0200\n"
 | 
				
			||||||
"Last-Translator: bleizi <bleizi@crans.org>\n"
 | 
					"Last-Translator: bleizi <bleizi@crans.org>\n"
 | 
				
			||||||
"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
 | 
					"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
 | 
				
			||||||
@@ -865,7 +865,7 @@ msgstr "Taille maximale : 2 Mo"
 | 
				
			|||||||
msgid "This image cannot be loaded."
 | 
					msgid "This image cannot be loaded."
 | 
				
			||||||
msgstr "Cette image ne peut pas être chargée."
 | 
					msgstr "Cette image ne peut pas être chargée."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/forms.py:154 apps/member/views.py:103
 | 
					#: apps/member/forms.py:154 apps/member/views.py:117
 | 
				
			||||||
#: apps/registration/forms.py:33 apps/registration/views.py:282
 | 
					#: apps/registration/forms.py:33 apps/registration/views.py:282
 | 
				
			||||||
msgid "An alias with a similar name already exists."
 | 
					msgid "An alias with a similar name already exists."
 | 
				
			||||||
msgstr "Un alias avec un nom similaire existe déjà."
 | 
					msgstr "Un alias avec un nom similaire existe déjà."
 | 
				
			||||||
@@ -1194,11 +1194,11 @@ msgstr "Adhésion de {user} pour le club {club}"
 | 
				
			|||||||
msgid "The role {role} does not apply to the club {club}."
 | 
					msgid "The role {role} does not apply to the club {club}."
 | 
				
			||||||
msgstr "Le rôle {role} ne s'applique pas au club {club}."
 | 
					msgstr "Le rôle {role} ne s'applique pas au club {club}."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/models.py:388 apps/member/views.py:745
 | 
					#: apps/member/models.py:388 apps/member/views.py:759
 | 
				
			||||||
msgid "User is already a member of the club"
 | 
					msgid "User is already a member of the club"
 | 
				
			||||||
msgstr "L'utilisateur·rice est déjà membre du club"
 | 
					msgstr "L'utilisateur·rice est déjà membre du club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/models.py:400 apps/member/views.py:754
 | 
					#: apps/member/models.py:400 apps/member/views.py:768
 | 
				
			||||||
msgid "User is not a member of the parent club"
 | 
					msgid "User is not a member of the parent club"
 | 
				
			||||||
msgstr "L'utilisateur·rice n'est pas membre du club parent"
 | 
					msgstr "L'utilisateur·rice n'est pas membre du club parent"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1251,7 +1251,7 @@ msgid "Account #"
 | 
				
			|||||||
msgstr "Compte n°"
 | 
					msgstr "Compte n°"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/templates/member/base.html:48
 | 
					#: apps/member/templates/member/base.html:48
 | 
				
			||||||
#: apps/member/templates/member/base.html:62 apps/member/views.py:60
 | 
					#: apps/member/templates/member/base.html:62 apps/member/views.py:61
 | 
				
			||||||
#: apps/registration/templates/registration/future_profile_detail.html:48
 | 
					#: apps/registration/templates/registration/future_profile_detail.html:48
 | 
				
			||||||
#: apps/wei/templates/wei/weimembership_form.html:117
 | 
					#: apps/wei/templates/wei/weimembership_form.html:117
 | 
				
			||||||
msgid "Update Profile"
 | 
					msgid "Update Profile"
 | 
				
			||||||
@@ -1312,8 +1312,8 @@ msgstr ""
 | 
				
			|||||||
"seront à nouveau possible."
 | 
					"seront à nouveau possible."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/templates/member/club_alias.html:10
 | 
					#: apps/member/templates/member/club_alias.html:10
 | 
				
			||||||
#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:304
 | 
					#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:318
 | 
				
			||||||
#: apps/member/views.py:545
 | 
					#: apps/member/views.py:559
 | 
				
			||||||
msgid "Note aliases"
 | 
					msgid "Note aliases"
 | 
				
			||||||
msgstr "Alias de la note"
 | 
					msgstr "Alias de la note"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1505,51 +1505,51 @@ msgstr "Sauvegarder les changements"
 | 
				
			|||||||
msgid "Registrations"
 | 
					msgid "Registrations"
 | 
				
			||||||
msgstr "Inscriptions"
 | 
					msgstr "Inscriptions"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:73 apps/registration/forms.py:23
 | 
					#: apps/member/views.py:74 apps/registration/forms.py:23
 | 
				
			||||||
msgid "This address must be valid."
 | 
					msgid "This address must be valid."
 | 
				
			||||||
msgstr "Cette adresse doit être valide."
 | 
					msgstr "Cette adresse doit être valide."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:140
 | 
					#: apps/member/views.py:154
 | 
				
			||||||
msgid "Profile detail"
 | 
					msgid "Profile detail"
 | 
				
			||||||
msgstr "Détails de l'utilisateur⋅rice"
 | 
					msgstr "Détails de l'utilisateur⋅rice"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:206
 | 
					#: apps/member/views.py:220
 | 
				
			||||||
msgid "Search user"
 | 
					msgid "Search user"
 | 
				
			||||||
msgstr "Chercher un·e utilisateur·rice"
 | 
					msgstr "Chercher un·e utilisateur·rice"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:258
 | 
					#: apps/member/views.py:272
 | 
				
			||||||
msgid "Note friendships"
 | 
					msgid "Note friendships"
 | 
				
			||||||
msgstr "Amitiés note"
 | 
					msgstr "Amitiés note"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:328
 | 
					#: apps/member/views.py:342
 | 
				
			||||||
msgid "Update note picture"
 | 
					msgid "Update note picture"
 | 
				
			||||||
msgstr "Modifier la photo de la note"
 | 
					msgstr "Modifier la photo de la note"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:377
 | 
					#: apps/member/views.py:391
 | 
				
			||||||
msgid "Manage auth token"
 | 
					msgid "Manage auth token"
 | 
				
			||||||
msgstr "Gérer les jetons d'authentification"
 | 
					msgstr "Gérer les jetons d'authentification"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:404
 | 
					#: apps/member/views.py:418
 | 
				
			||||||
msgid "Create new club"
 | 
					msgid "Create new club"
 | 
				
			||||||
msgstr "Créer un nouveau club"
 | 
					msgstr "Créer un nouveau club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:423
 | 
					#: apps/member/views.py:437
 | 
				
			||||||
msgid "Search club"
 | 
					msgid "Search club"
 | 
				
			||||||
msgstr "Chercher un club"
 | 
					msgstr "Chercher un club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:461
 | 
					#: apps/member/views.py:475
 | 
				
			||||||
msgid "Club detail"
 | 
					msgid "Club detail"
 | 
				
			||||||
msgstr "Détails du club"
 | 
					msgstr "Détails du club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:573
 | 
					#: apps/member/views.py:587
 | 
				
			||||||
msgid "Update club"
 | 
					msgid "Update club"
 | 
				
			||||||
msgstr "Modifier le club"
 | 
					msgstr "Modifier le club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:607
 | 
					#: apps/member/views.py:621
 | 
				
			||||||
msgid "Add new member to the club"
 | 
					msgid "Add new member to the club"
 | 
				
			||||||
msgstr "Ajouter un·e nouvelleau membre au club"
 | 
					msgstr "Ajouter un·e nouvelleau membre au club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:736 apps/wei/views.py:991
 | 
					#: apps/member/views.py:750 apps/wei/views.py:991
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"This user don't have enough money to join this club, and can't have a "
 | 
					"This user don't have enough money to join this club, and can't have a "
 | 
				
			||||||
"negative balance."
 | 
					"negative balance."
 | 
				
			||||||
@@ -1557,19 +1557,19 @@ msgstr ""
 | 
				
			|||||||
"Cet⋅te utilisateur⋅rice n'a pas assez d'argent pour rejoindre ce club et ne "
 | 
					"Cet⋅te utilisateur⋅rice n'a pas assez d'argent pour rejoindre ce club et ne "
 | 
				
			||||||
"peut pas avoir un solde négatif."
 | 
					"peut pas avoir un solde négatif."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:758
 | 
					#: apps/member/views.py:772
 | 
				
			||||||
msgid "The membership must start after {:%m-%d-%Y}."
 | 
					msgid "The membership must start after {:%m-%d-%Y}."
 | 
				
			||||||
msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}."
 | 
					msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:763
 | 
					#: apps/member/views.py:777
 | 
				
			||||||
msgid "The membership must begin before {:%m-%d-%Y}."
 | 
					msgid "The membership must begin before {:%m-%d-%Y}."
 | 
				
			||||||
msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
 | 
					msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:913
 | 
					#: apps/member/views.py:927
 | 
				
			||||||
msgid "Manage roles of an user in the club"
 | 
					msgid "Manage roles of an user in the club"
 | 
				
			||||||
msgstr "Gérer les rôles d'un⋅e utilisateur⋅rice dans le club"
 | 
					msgstr "Gérer les rôles d'un⋅e utilisateur⋅rice dans le club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/member/views.py:938
 | 
					#: apps/member/views.py:952
 | 
				
			||||||
msgid "Members of the club"
 | 
					msgid "Members of the club"
 | 
				
			||||||
msgstr "Membres du club"
 | 
					msgstr "Membres du club"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2084,7 +2084,7 @@ msgid "Button displayed"
 | 
				
			|||||||
msgstr "Bouton affiché"
 | 
					msgstr "Bouton affiché"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/note/templates/note/transactiontemplate_list.html:100
 | 
					#: apps/note/templates/note/transactiontemplate_list.html:100
 | 
				
			||||||
#: apps/wrapped/templates/wrapped/wrapped_list.html:63
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:70
 | 
				
			||||||
msgid "An error occured"
 | 
					msgid "An error occured"
 | 
				
			||||||
msgstr "Une erreur s'est produite"
 | 
					msgstr "Une erreur s'est produite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3662,6 +3662,14 @@ msgstr "soirée·s organisée·s"
 | 
				
			|||||||
msgid "distinct members"
 | 
					msgid "distinct members"
 | 
				
			||||||
msgstr "Membres distinct·e·s"
 | 
					msgstr "Membres distinct·e·s"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: apps/wrapped/templates/wrapped/1/wrapped_view_club.html:26
 | 
				
			||||||
 | 
					msgid "Infortunately, you doesn't have consumer this year"
 | 
				
			||||||
 | 
					msgstr "Malheureusement, tu n'as pas de consommateur cette année"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: apps/wrapped/templates/wrapped/1/wrapped_view_club.html:28
 | 
				
			||||||
 | 
					msgid "Congratulations you are a real rat !"
 | 
				
			||||||
 | 
					msgstr "Félicitations, tu es un vrai rat !"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/wrapped/templates/wrapped/1/wrapped_view_user.html:13
 | 
					#: apps/wrapped/templates/wrapped/1/wrapped_view_user.html:13
 | 
				
			||||||
msgid "You participate to the wei: "
 | 
					msgid "You participate to the wei: "
 | 
				
			||||||
msgstr "Tu as participé au wei : "
 | 
					msgstr "Tu as participé au wei : "
 | 
				
			||||||
@@ -3699,7 +3707,15 @@ msgstr "avec"
 | 
				
			|||||||
msgid "Your expenses to BDE: "
 | 
					msgid "Your expenses to BDE: "
 | 
				
			||||||
msgstr "Tes dépenses au BDE : "
 | 
					msgstr "Tes dépenses au BDE : "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/wrapped/templates/wrapped/wrapped_list.html:26
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:13
 | 
				
			||||||
 | 
					msgid "My wrapped"
 | 
				
			||||||
 | 
					msgstr "Mes wrapped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:22
 | 
				
			||||||
 | 
					msgid "Public wrapped"
 | 
				
			||||||
 | 
					msgstr "Wrapped public"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:33
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"Do not forget to ask permission to people who are in your wrapped before to "
 | 
					"Do not forget to ask permission to people who are in your wrapped before to "
 | 
				
			||||||
"make them public"
 | 
					"make them public"
 | 
				
			||||||
@@ -3707,19 +3723,19 @@ msgstr ""
 | 
				
			|||||||
"N'oublies pas de demander la permission des personnes apparaissant dans un "
 | 
					"N'oublies pas de demander la permission des personnes apparaissant dans un "
 | 
				
			||||||
"wrapped avant de le rendre public"
 | 
					"wrapped avant de le rendre public"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/wrapped/templates/wrapped/wrapped_list.html:33
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:40
 | 
				
			||||||
msgid "Link copied"
 | 
					msgid "Link copied"
 | 
				
			||||||
msgstr "Lien copié"
 | 
					msgstr "Lien copié"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/wrapped/templates/wrapped/wrapped_list.html:58
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:65
 | 
				
			||||||
msgid "Wrapped is private"
 | 
					msgid "Wrapped is private"
 | 
				
			||||||
msgstr "Le wrapped est privé"
 | 
					msgstr "Le wrapped est privé"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/wrapped/templates/wrapped/wrapped_list.html:59
 | 
					#: apps/wrapped/templates/wrapped/wrapped_list.html:66
 | 
				
			||||||
msgid "Wrapped is public"
 | 
					msgid "Wrapped is public"
 | 
				
			||||||
msgstr "Le wrapped est public"
 | 
					msgstr "Le wrapped est public"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: apps/wrapped/views.py:24
 | 
					#: apps/wrapped/views.py:28
 | 
				
			||||||
msgid "List of wrapped"
 | 
					msgid "List of wrapped"
 | 
				
			||||||
msgstr "Liste des wrapped"
 | 
					msgstr "Liste des wrapped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,7 @@ mark {
 | 
				
			|||||||
/* MODE VIEUXCON=ON */
 | 
					/* MODE VIEUXCON=ON */
 | 
				
			||||||
/*    background-color: rgb(166, 0, 2) !important; */
 | 
					/*    background-color: rgb(166, 0, 2) !important; */
 | 
				
			||||||
    background-color: rgb(0, 0, 0);
 | 
					    background-color: rgb(0, 0, 0);
 | 
				
			||||||
    background-image: url('/static/wrapped/img/1/bg.png');
 | 
					    background-image: url('/static/img/rp_bg.png');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
html {
 | 
					html {
 | 
				
			||||||
@@ -136,33 +136,32 @@ body {
 | 
				
			|||||||
    border-color: rgb(255, 0, 101);
 | 
					    border-color: rgb(255, 0, 101);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-dark:nth-child(even) {
 | 
					.btn-outline-dark-shiny {
 | 
				
			||||||
    color: rgba(255, 203, 32, 75%);
 | 
					    background-color: #222;
 | 
				
			||||||
 | 
					    border-color: #61605b;
 | 
				
			||||||
 | 
					    color: rgba(255, 0, 101, 75%);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-dark:nth-child(odd) {
 | 
					.btn-outline-dark-shiny:hover,
 | 
				
			||||||
    color: rgba(255, 0, 101, 75%);
 | 
					.btn-outline-dark-shiny:not(:disabled):not(.disabled).active,
 | 
				
			||||||
 | 
					.btn-outline-dark-shiny:not(:disabled):not(.disabled):active {
 | 
				
			||||||
 | 
					    color:  rgb(0, 0, 0);
 | 
				
			||||||
 | 
					    background-color: rgb(255, 203, 32);
 | 
				
			||||||
 | 
					    border-color: rgb(255, 0, 101);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-dark {
 | 
					.btn-outline-dark {
 | 
				
			||||||
    background-color: #222;
 | 
					    background-color: #222;
 | 
				
			||||||
    border-color: #61605b;
 | 
					    border-color: #61605b;
 | 
				
			||||||
 | 
					    color: rgba(255, 203, 32, 75%);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-dark:hover:nth-child(even),
 | 
					.btn-outline-dark:hover,
 | 
				
			||||||
.btn-outline-dark:not(:disabled):not(.disabled).active,
 | 
					.btn-outline-dark:not(:disabled):not(.disabled).active,
 | 
				
			||||||
.btn-outline-dark:not(:disabled):not(.disabled):active {
 | 
					.btn-outline-dark:not(:disabled):not(.disabled):active {
 | 
				
			||||||
    color:  rgb(0, 0, 0);
 | 
					    color:  rgb(0, 0, 0);
 | 
				
			||||||
    background-color: rgb(255, 203, 32);
 | 
					    background-color: rgb(255, 0, 101);
 | 
				
			||||||
    border-color: rgb(255, 0, 101);
 | 
					    border-color: rgb(255, 203, 32);
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.btn-outline-dark:hover:nth-child(odd),
 | 
					 | 
				
			||||||
.btn-outline-dark:not(:disabled):not(.disabled).active,
 | 
					 | 
				
			||||||
.btn-outline-dark:not(:disabled):not(.disabled):active {
 | 
					 | 
				
			||||||
    color: rgb(0, 0, 0);
 | 
					 | 
				
			||||||
    background-color: rgb(255, 203, 32);
 | 
					 | 
				
			||||||
    border-color: rgb(255, 0, 101);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
a {
 | 
					a {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								note_kfet/static/img/rp_bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								note_kfet/static/img/rp_bg.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 82 KiB  | 
@@ -26,7 +26,7 @@ function afterKonami () {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
    rythm.addRythm('d-flex', 'color', 50, 50, {
 | 
					    rythm.addRythm('d-flex', 'color', 50, 50, {
 | 
				
			||||||
      from: [64, 64, 64],
 | 
					      from: [64, 64, 64],
 | 
				
			||||||
      to: [128, 64, 128]
 | 
					      to: [255, 0, 101]
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    rythm.addRythm('nav-link', 'jump', 150, 50, {
 | 
					    rythm.addRythm('nav-link', 'jump', 150, 50, {
 | 
				
			||||||
      min: 0,
 | 
					      min: 0,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user