Compare commits

..

3 Commits

Author SHA1 Message Date
korenstin a5df98224f Merge branch 'migration-django-4-2' into 'main'
Migration django 4 2

See merge request bde/nk20!265
2024-08-29 10:49:44 +02:00
korenstin 2cb9ac8735 replace "…" -> "..." (#130) and disable sorting on certain columns (#129) 2024-08-29 10:19:06 +02:00
korenstin 35d4849a28 fix Oauth 2024-08-29 00:43:33 +02:00
14 changed files with 49 additions and 42 deletions

View File

@ -42,12 +42,12 @@ class UserTable(tables.Table):
"""
alias = tables.Column()
section = tables.Column(accessor='profile__section')
section = tables.Column(accessor='profile__section', orderable=False)
# Override the column to let replace the URL
email = tables.EmailColumn(linkify=lambda record: "mailto:{}".format(record.email))
balance = tables.Column(accessor='note__balance', verbose_name=_("Balance"))
balance = tables.Column(accessor='note__balance', verbose_name=_("Balance"), orderable=False)
def render_email(self, record, value):
# Replace the email by a dash if the user can't see the profile detail

View File

@ -11,7 +11,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
{{ title }}
</h3>
<div class="card-body">
<input id="searchbar" type="text" class="form-control" placeholder="Nom/prénom/note">
<input id="searchbar" type="text" class="form-control" placeholder="Nom/prénom/note...">
<div class="form-check">
<label class="form-check-label" for="only_active">
<input type="checkbox" class="checkboxinput form-check-input" id="only_active"

View File

@ -260,11 +260,13 @@ class ButtonTable(tables.Table):
text=_('edit'),
accessor='pk',
verbose_name=_("Edit"),
orderable=False,
)
hideshow = tables.Column(
verbose_name=_("Hide/Show"),
accessor="pk",
orderable=False,
attrs={
'td': {
'class': 'col-sm-1',
@ -276,7 +278,8 @@ class ButtonTable(tables.Table):
delete_col = tables.TemplateColumn(template_code=DELETE_TEMPLATE,
extra_context={"delete_trans": _('delete')},
attrs={'td': {'class': 'col-sm-1'}},
verbose_name=_("Delete"), )
verbose_name=_("Delete"),
orderable=False, )
def render_amount(self, value):
return pretty_money(value)

View File

@ -135,18 +135,18 @@ class Permission(models.Model):
# A json encoded Q object with the following grammar
# query -> [] | {} (the empty query representing all objects)
# query -> ["AND", query, …] AND multiple queries
# | ["OR", query, …] OR multiple queries
# query -> ["AND", query, ...] AND multiple queries
# | ["OR", query, ...] OR multiple queries
# | ["NOT", query] Opposite of query
# query -> {key: value, …} A list of fields and values of a Q object
# query -> {key: value, ...} A list of fields and values of a Q object
# key -> string A field name
# value -> int | string | bool | null Literal values
# | [parameter, …] A parameter. See compute_param for more details.
# | [parameter, ...] A parameter. See compute_param for more details.
# | {"F": oper} An F object
# oper -> [string, …] A parameter. See compute_param for more details.
# | ["ADD", oper, …] Sum multiple F objects or literal
# oper -> [string, ...] A parameter. See compute_param for more details.
# | ["ADD", oper, ...] Sum multiple F objects or literal
# | ["SUB", oper, oper] Substract two F objects or literal
# | ["MUL", oper, …] Multiply F objects or literals
# | ["MUL", oper, ...] Multiply F objects or literals
# | int | string | bool | null Literal values
# | ["F", string] A field
#

View File

@ -37,6 +37,7 @@ class InvoiceTable(tables.Table):
args=[A('id')],
verbose_name=_("delete"),
text=_("Delete"),
orderable=False,
attrs={
'th': {
'id': 'delete-membership-header'
@ -70,6 +71,7 @@ class RemittanceTable(tables.Table):
verbose_name=_("View"),
args=[A("pk")],
text=_("View"),
orderable=False,
attrs={
'a': {'class': 'btn btn-primary'}
}, )
@ -97,6 +99,7 @@ class SpecialTransactionTable(tables.Table):
verbose_name=_("Remittance"),
args=[A("specialtransactionproxy__pk")],
text=_("Add"),
orderable=False,
attrs={
'a': {'class': 'btn btn-primary'}
}, )
@ -105,6 +108,7 @@ class SpecialTransactionTable(tables.Table):
verbose_name=_("Remittance"),
args=[A("specialtransactionproxy__pk")],
text=_("Remove"),
orderable=False,
attrs={
'a': {'class': 'btn btn-primary btn-danger'}
}, )
@ -130,10 +134,12 @@ class SogeCreditTable(tables.Table):
amount = tables.Column(
verbose_name=_("Amount"),
orderable=False,
)
valid = tables.Column(
verbose_name=_("Valid"),
orderable=False,
)
def render_amount(self, value):

View File

@ -82,7 +82,7 @@ WORDS = {
5: "La quoi ?"
}],
"kokarde": ["Qu'est-ce que le mot Kokarde t'évoque ?", {
1: "Vraiment pas mon truc les soirées",
1: "Vraiment pas mon truc les soirées...",
2: "Bof, je viens pour manger et je repars aussitôt",
3: "Je kiffe, good vibes",
4: "Perso, je ne m'arrêterai pas de danser sur la piste !",
@ -117,15 +117,15 @@ WORDS = {
5: "Je pourrais en faire à n'importe qui. Pourquoi ne pas créer le club Câl[ENS] ?"
}],
"vomi": ["Quel est ton rapport au vomi ?", {
1: "C'est compliqué",
1: "C'est compliqué...",
2: "Jamais je ne vomis mais je nettoie quand mes potes vomissent",
3: "Jamais je ne vomis et jamais je ne nettoie celui de quelqu'un d'autre",
4: "Je vomis quelquefois, ça arrive, faites pas cette tête, mais je fins toujours par nettoyer !",
5: "Je vomis à chaque soirée et ce n'est jamais moi qui nettoie"
}],
"kfet": ["Qu'est ce que la Kfet t'évoque ?", {
1: "La Kfet, quel lieu de dépravé⋅es sérieux",
2: "C'est un endroit à l'hygiène plus que douteuse",
1: "La Kfet, quel lieu de dépravé⋅es sérieux...",
2: "C'est un endroit à l'hygiène plus que douteuse...",
3: "Téma les prix des boissons et des snacks, c'est aberrant !",
4: "En vrai, c'est cool, petit billard, petit canapé, chill !",
5: "Banger, j'y reste jusqu'à la fin de mes jours"
@ -147,7 +147,7 @@ WORDS = {
"scolarite": ["Comment tu vois ton cursus à l'ENS ?", {
1: "La tranquillité et le travail",
2: "On va s'amuser tout en bossant",
3: "Ça va profiter et réviser au dernier moment pour les exams",
3: "Ça va profiter et réviser au dernier moment pour les exams...",
4: "Nous festoierons sans songer aux conséquences",
5: "Je ne vois qu'une seule issue : la débauche"
}]

View File

@ -32,7 +32,7 @@ Applications indispensables
* `Note <note>`_ :
Les notes associées à des utilisateur⋅rices ou des clubs.
* `Activity <activity>`_ :
La gestion des activités (créations, gestion, entrées,)
La gestion des activités (créations, gestion, entrées, ...)
* `Permission <permission>`_ :
Backend de droits, limites les pouvoirs des utilisateur⋅rices
* `API <../api>`_ :
@ -64,9 +64,9 @@ Applications facultatives
* ``cas-server``
Serveur central d'authentification, permet d'utiliser son compte de la NoteKfet2020 pour se connecter à d'autre application ayant intégrer un client.
* `Scripts <https://gitlab.crans.org/bde/nk20-scripts>`_
Ensemble de commande `./manage.py` pour la gestion de la note: import de données, verification d'intégrité, etc
Ensemble de commande `./manage.py` pour la gestion de la note: import de données, verification d'intégrité, etc...
* `Treasury <treasury>`_ :
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>`_ :
Interface de gestion du WEI.

View File

@ -43,7 +43,7 @@ l'utilisateur⋅rice, utiles pour l'adhésion au BDE :
* ``address`` : ``CharField``, adresse physique de l'utilisateur⋅rice
* ``paid`` : ``BooleanField``, indique si l'utilisateur⋅rice normalien⋅ne est rémunéré⋅e ou non (utile pour différencier les montants d'adhésion aux clubs)
* ``phone_number`` : ``CharField``, numéro de téléphone de l'utilisateur⋅rice
* ``section`` : ``CharField``, section de l'ENS à laquelle appartient l'utilisateur⋅rice (exemple : 1A0,)
* ``section`` : ``CharField``, section de l'ENS à laquelle appartient l'utilisateur⋅rice (exemple : 1A0, ...)
Clubs
~~~~~
@ -101,7 +101,7 @@ Adhésions
La Note Kfet offre la possibilité aux clubs de gérer l'adhésion de leurs membres. En plus de réguler les cotisations
des adhérent⋅es, des permissions sont octroyées sur la note en fonction des rôles au sein des clubs. Un rôle est une
fonction occupée au sein d'un club (Trésorièr⋅e de club, président⋅e de club, GC Kfet, Res[pot], respo info,).
fonction occupée au sein d'un club (Trésorièr⋅e de club, président⋅e de club, GC Kfet, Res[pot], respo info, ...).
Une adhésion attribue à un⋅e adhérent⋅e ses rôles. Les rôles fournissent les permissions. Par exemple, læ trésorièr⋅e d'un
club a le droit de faire des transferts de et vers la note du club, tant que la source reste au-dessus de -50 €.
Une adhésion est considérée comme valide si la date du jour est comprise (au sens large) entre les dates de début et

View File

@ -49,7 +49,7 @@ Une fois l'inscription validée, détail de ce qu'il se passe :
lui octroyant un faible nombre de permissions de base, telles que la visualisation de son compte.
* On adhère la personne au club Kfet si cela est demandé, l'adhésion commence aujourd'hui. Iel dispose d'un unique rôle :
« Adhérent⋅e Kfet » , lui octroyant un nombre un peu plus conséquent de permissions basiques, telles que la possibilité de
faire des transactions, d'accéder aux activités, au WEI,
faire des transactions, d'accéder aux activités, au WEI, ...
* Si læ nouvelleau membre a indiqué avoir ouvert un compte à la société générale, alors les transactions sont invalidées,
la note n'est pas débitée (commence alors à 0 €).

View File

@ -3744,8 +3744,8 @@ msgid "FAQ (FR)"
msgstr "FAQ (FR)"
#: note_kfet/templates/base_search.html:15
msgid "Search by attribute such as name"
msgstr "Suche nach Attributen wie Name"
msgid "Search by attribute such as name..."
msgstr "Suche nach Attributen wie Name..."
#: note_kfet/templates/base_search.html:23
msgid "There is no results."

View File

@ -3694,8 +3694,8 @@ msgid "FAQ (FR)"
msgstr "FAQ (FR)"
#: note_kfet/templates/base_search.html:15
msgid "Search by attribute such as name"
msgstr "Buscar con atributo, como el nombre"
msgid "Search by attribute such as name..."
msgstr "Buscar con atributo, como el nombre..."
#: note_kfet/templates/base_search.html:23
msgid "There is no results."

View File

@ -1930,8 +1930,8 @@ msgstr "Consommer"
#: apps/note/templates/note/conso_form.html:43
#: apps/note/templates/note/transaction_form.html:69
#: apps/note/templates/note/transaction_form.html:96
msgid "Name or alias"
msgstr "Pseudo ou alias"
msgid "Name or alias..."
msgstr "Pseudo ou alias..."
#: apps/note/templates/note/conso_form.html:53
msgid "Select consumptions"
@ -2031,8 +2031,8 @@ msgid "Current price"
msgstr "Prix actuel"
#: apps/note/templates/note/transactiontemplate_list.html:13
msgid "Name of the button"
msgstr "Nom du bouton"
msgid "Name of the button..."
msgstr "Nom du bouton..."
#: apps/note/templates/note/transactiontemplate_list.html:15
msgid "New button"
@ -3385,8 +3385,8 @@ msgstr ""
"coût d'adhésion."
#: apps/wei/templates/wei/weimembership_list.html:27
msgid "View unvalidated registrations"
msgstr "Voir les inscriptions non validées"
msgid "View unvalidated registrations..."
msgstr "Voir les inscriptions non validées..."
#: apps/wei/templates/wei/weiregistration_confirm_delete.html:16
msgid "This registration is already validated and can't be deleted."
@ -3406,8 +3406,8 @@ msgid "There is no pre-registration found with this pattern."
msgstr "Il n'y a pas de pré-inscription en attente avec cette entrée."
#: apps/wei/templates/wei/weiregistration_list.html:27
msgid "View validated memberships…"
msgstr "Voir les adhésions validées"
msgid "View validated membershipis..."
msgstr "Voir les adhésions validées..."
#: apps/wei/views.py:58
msgid "Search WEI"
@ -3672,8 +3672,8 @@ msgid "FAQ (FR)"
msgstr "FAQ (FR)"
#: note_kfet/templates/base_search.html:15
msgid "Search by attribute such as name"
msgstr "Chercher par un attribut tel que le nom"
msgid "Search by attribute such as name..."
msgstr "Chercher par un attribut tel que le nom..."
#: note_kfet/templates/base_search.html:23
msgid "There is no results."

View File

@ -265,11 +265,9 @@ OAUTH2_PROVIDER = {
'SCOPES_BACKEND_CLASS': 'permission.scopes.PermissionScopes',
'OAUTH2_VALIDATOR_CLASS': "permission.scopes.PermissionOAuth2Validator",
'REFRESH_TOKEN_EXPIRE_SECONDS': timedelta(days=14),
'PKCE_REQUIRED': False, # PKCE (fix a breaking change of django-oauth-toolkit 2.0.0)
}
# PKCE (fix a breaking change of django-oauth-toolkit 2.0.0)
PKCE_REQUIRED = False
# Take control on how widget templates are sourced
# See https://docs.djangoproject.com/en/2.2/ref/forms/renderers/#templatessetting
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

View File

@ -12,7 +12,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
</h3>
<div class="card-body">
<input id="searchbar" type="text" class="form-control"
placeholder="{% trans "Search by attribute such as name" %}">
placeholder="{% trans "Search by attribute such as name..." %}">
</div>
<div id="dynamic-table">
{% if table.data %}