1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-06-23 19:06:37 +02:00

Compare commits

..

2 Commits

Author SHA1 Message Date
9d81be65db Merge branch 'Fix_time_zone_calendar.ics' into 'main'
Update views.py - Fix calendar.ics

See merge request bde/nk20!237
2024-03-29 16:57:08 +01:00
6c61daf1c5 Update views.py
Passage à la time zone Europe/Paris
2024-03-11 10:25:48 +01:00
29 changed files with 208 additions and 224 deletions

View File

@ -7,10 +7,25 @@ stages:
variables: variables:
GIT_SUBMODULE_STRATEGY: recursive GIT_SUBMODULE_STRATEGY: recursive
# Ubuntu 22.04 # Debian Buster
py310-django50: py37-django22:
stage: test stage: test
image: ubuntu:22.04 image: debian:buster-backports
before_script:
- >
apt-get update &&
apt-get install --no-install-recommends -t buster-backports -y
python3-django python3-django-crispy-forms
python3-django-extensions python3-django-filters python3-django-polymorphic
python3-djangorestframework python3-django-oauth-toolkit python3-psycopg2 python3-pil
python3-babel python3-lockfile python3-pip python3-phonenumbers python3-memcache
python3-bs4 python3-setuptools tox texlive-xetex
script: tox -e py37-django22
# Ubuntu 20.04
py38-django22:
stage: test
image: ubuntu:20.04
before_script: before_script:
# Fix tzdata prompt # Fix tzdata prompt
- ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo Europe/Paris > /etc/timezone - ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo Europe/Paris > /etc/timezone
@ -22,12 +37,12 @@ py310-django50:
python3-djangorestframework python3-django-oauth-toolkit python3-psycopg2 python3-pil python3-djangorestframework python3-django-oauth-toolkit python3-psycopg2 python3-pil
python3-babel python3-lockfile python3-pip python3-phonenumbers python3-memcache python3-babel python3-lockfile python3-pip python3-phonenumbers python3-memcache
python3-bs4 python3-setuptools tox texlive-xetex python3-bs4 python3-setuptools tox texlive-xetex
script: tox -e py310-django50 script: tox -e py38-django22
# Debian Bookworm # Debian Bullseye
py311-django50: py39-django22:
stage: test stage: test
image: debian:bookworm image: debian:bullseye
before_script: before_script:
- > - >
apt-get update && apt-get update &&
@ -37,11 +52,11 @@ py311-django50:
python3-djangorestframework python3-django-oauth-toolkit python3-psycopg2 python3-pil python3-djangorestframework python3-django-oauth-toolkit python3-psycopg2 python3-pil
python3-babel python3-lockfile python3-pip python3-phonenumbers python3-memcache python3-babel python3-lockfile python3-pip python3-phonenumbers python3-memcache
python3-bs4 python3-setuptools tox texlive-xetex python3-bs4 python3-setuptools tox texlive-xetex
script: tox -e py311-django50 script: tox -e py39-django22
linters: linters:
stage: quality-assurance stage: quality-assurance
image: debian:bullseye image: debian:buster-backports
before_script: before_script:
- apt-get update && apt-get install -y tox - apt-get update && apt-get install -y tox
script: tox -e linters script: tox -e linters

View File

@ -1,8 +1,6 @@
# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay # Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from bootstrap_datepicker_plus.widgets import DateTimePickerInput
from datetime import timedelta from datetime import timedelta
from random import shuffle from random import shuffle
@ -12,7 +10,7 @@ from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from member.models import Club from member.models import Club
from note.models import Note, NoteUser from note.models import Note, NoteUser
from note_kfet.inputs import Autocomplete from note_kfet.inputs import Autocomplete, DateTimePickerInput
from note_kfet.middlewares import get_current_request from note_kfet.middlewares import get_current_request
from permission.backends import PermissionBackend from permission.backends import PermissionBackend

View File

@ -17,9 +17,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
</form> </form>
</div> </div>
</div> </div>
{% endblock %}
{% block extrajavascript %}
<script> <script>
var date_end = document.getElementById("id_date_end"); var date_end = document.getElementById("id_date_end");
var date_start = document.getElementById("id_date_start"); var date_start = document.getElementById("id_date_start");

View File

@ -316,8 +316,8 @@ X-WR-CALNAME:Kfet Calendar
NAME:Kfet Calendar NAME:Kfet Calendar
CALSCALE:GREGORIAN CALSCALE:GREGORIAN
BEGIN:VTIMEZONE BEGIN:VTIMEZONE
TZID:Europe/Berlin TZID:Europe/Paris
X-LIC-LOCATION:Europe/Berlin X-LIC-LOCATION:Europe/Paris
BEGIN:DAYLIGHT BEGIN:DAYLIGHT
TZOFFSETFROM:+0100 TZOFFSETFROM:+0100
TZOFFSETTO:+0200 TZOFFSETTO:+0200

View File

@ -2,7 +2,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from django.conf import settings from django.conf import settings
from django.urls import include, re_path from django.conf.urls import url, include
from rest_framework import routers from rest_framework import routers
from .views import UserInformationView from .views import UserInformationView
@ -47,7 +47,7 @@ app_name = 'api'
# Wire up our API using automatic URL routing. # Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API. # Additionally, we include login URLs for the browsable API.
urlpatterns = [ urlpatterns = [
re_path('^', include(router.urls)), url('^', include(router.urls)),
re_path('^me/', UserInformationView.as_view()), url('^me/', UserInformationView.as_view()),
re_path('^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url('^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
] ]

View File

@ -3,7 +3,6 @@
import io import io
from bootstrap_datepicker_plus.widgets import DatePickerInput
from PIL import Image, ImageSequence from PIL import Image, ImageSequence
from django import forms from django import forms
from django.conf import settings from django.conf import settings
@ -14,7 +13,7 @@ from django.forms import CheckboxSelectMultiple
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from note.models import NoteSpecial, Alias from note.models import NoteSpecial, Alias
from note_kfet.inputs import Autocomplete, AmountInput from note_kfet.inputs import Autocomplete, AmountInput, DatePickerInput
from permission.models import PermissionMask, Role from permission.models import PermissionMask, Role
from .models import Profile, Club, Membership from .models import Profile, Club, Membership
@ -33,7 +32,7 @@ class UserForm(forms.ModelForm):
# Django usernames can only contain letters, numbers, @, ., +, - and _. # Django usernames can only contain letters, numbers, @, ., +, - and _.
# We want to allow users to have uncommon and unpractical usernames: # We want to allow users to have uncommon and unpractical usernames:
# That is their problem, and we have normalized aliases for us. # That is their problem, and we have normalized aliases for us.
return super()._get_validation_exclusions() | {"username"} return super()._get_validation_exclusions() + ["username"]
class Meta: class Meta:
model = User model = User

View File

@ -44,7 +44,7 @@ class TemplateLoggedInTests(TestCase):
self.assertRedirects(response, settings.LOGIN_REDIRECT_URL, 302, 302) self.assertRedirects(response, settings.LOGIN_REDIRECT_URL, 302, 302)
def test_logout(self): def test_logout(self):
response = self.client.post(reverse("logout")) response = self.client.get(reverse("logout"))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_admin_index(self): def test_admin_index(self):

View File

@ -26,7 +26,7 @@ from permission.backends import PermissionBackend
from permission.models import Role from permission.models import Role
from permission.views import ProtectQuerysetMixin, ProtectedCreateView from permission.views import ProtectQuerysetMixin, ProtectedCreateView
from .forms import UserForm, ProfileForm, ImageForm, ClubForm, MembershipForm, \ from .forms import UserForm, ProfileForm, ImageForm, ClubForm, MembershipForm,\
CustomAuthenticationForm, MembershipRolesForm CustomAuthenticationForm, MembershipRolesForm
from .models import Club, Membership from .models import Club, Membership
from .tables import ClubTable, UserTable, MembershipTable, ClubManagerTable from .tables import ClubTable, UserTable, MembershipTable, ClubManagerTable

View File

@ -13,7 +13,7 @@ def register_note_urls(router, path):
router.register(path + '/note', NotePolymorphicViewSet) router.register(path + '/note', NotePolymorphicViewSet)
router.register(path + '/alias', AliasViewSet) router.register(path + '/alias', AliasViewSet)
router.register(path + '/trust', TrustViewSet) router.register(path + '/trust', TrustViewSet)
router.register(path + '/consumer', ConsumerViewSet, basename="consumer") router.register(path + '/consumer', ConsumerViewSet)
router.register(path + '/transaction/category', TemplateCategoryViewSet) router.register(path + '/transaction/category', TemplateCategoryViewSet)
router.register(path + '/transaction/transaction', TransactionViewSet) router.register(path + '/transaction/transaction', TransactionViewSet)

View File

@ -13,7 +13,7 @@ from rest_framework import status
from api.viewsets import ReadProtectedModelViewSet, ReadOnlyProtectedModelViewSet from api.viewsets import ReadProtectedModelViewSet, ReadOnlyProtectedModelViewSet
from permission.backends import PermissionBackend from permission.backends import PermissionBackend
from .serializers import NotePolymorphicSerializer, AliasSerializer, ConsumerSerializer, \ from .serializers import NotePolymorphicSerializer, AliasSerializer, ConsumerSerializer,\
TemplateCategorySerializer, TransactionTemplateSerializer, TransactionPolymorphicSerializer, \ TemplateCategorySerializer, TransactionTemplateSerializer, TransactionPolymorphicSerializer, \
TrustSerializer TrustSerializer
from ..models.notes import Note, Alias, NoteUser, NoteClub, NoteSpecial, Trust from ..models.notes import Note, Alias, NoteUser, NoteClub, NoteSpecial, Trust
@ -179,10 +179,19 @@ class ConsumerViewSet(ReadOnlyProtectedModelViewSet):
# We match first an alias if it is matched without normalization, # We match first an alias if it is matched without normalization,
# then if the normalized pattern matches a normalized alias. # then if the normalized pattern matches a normalized alias.
queryset = queryset.filter( queryset = queryset.filter(
Q(**{f'name{suffix}': alias_prefix + alias}) **{f'name{suffix}': alias_prefix + alias}
| Q(**{f'normalized_name{suffix}': alias_prefix + Alias.normalize(alias)}) ).union(
| Q(**{f'normalized_name{suffix}': alias_prefix + alias.lower()}) queryset.filter(
) Q(**{f'normalized_name{suffix}': alias_prefix + Alias.normalize(alias)})
& ~Q(**{f'name{suffix}': alias_prefix + alias})
),
all=True).union(
queryset.filter(
Q(**{f'normalized_name{suffix}': alias_prefix + alias.lower()})
& ~Q(**{f'normalized_name{suffix}': alias_prefix + Alias.normalize(alias)})
& ~Q(**{f'name{suffix}': alias_prefix + alias})
),
all=True)
queryset = queryset if settings.DATABASES[queryset.db]["ENGINE"] == 'django.db.backends.postgresql' \ queryset = queryset if settings.DATABASES[queryset.db]["ENGINE"] == 'django.db.backends.postgresql' \
else queryset.order_by("name") else queryset.order_by("name")

View File

@ -1,15 +1,13 @@
# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay # Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from datetime import datetime from datetime import datetime
from bootstrap_datepicker_plus.widgets import DateTimePickerInput
from django import forms from django import forms
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.forms import CheckboxSelectMultiple from django.forms import CheckboxSelectMultiple
from django.utils.timezone import make_aware from django.utils.timezone import make_aware
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from note_kfet.inputs import Autocomplete, AmountInput from note_kfet.inputs import Autocomplete, AmountInput, DateTimePickerInput
from .models import TransactionTemplate, NoteClub, Alias from .models import TransactionTemplate, NoteClub, Alias

View File

@ -18,7 +18,6 @@ def create_special_notes(apps, schema_editor):
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('note', '0001_initial'), ('note', '0001_initial'),
('logs', '0001_initial'),
] ]
operations = [ operations = [

View File

@ -1,25 +0,0 @@
# Generated by Django 5.0.7 on 2024-07-11 09:24
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('note', '0006_trust'),
]
operations = [
migrations.AlterField(
model_name='note',
name='polymorphic_ctype',
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype'),
),
migrations.AlterField(
model_name='transaction',
name='polymorphic_ctype',
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype'),
),
]

View File

@ -9,7 +9,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
name="{{ widget.name }}" name="{{ widget.name }}"
{# Other attributes are loaded #} {# Other attributes are loaded #}
{% for name, value in widget.attrs.items %} {% for name, value in widget.attrs.items %}
{% if value != False %}{{ name }}{% if value != True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %} {% ifnotequal value False %}{{ name }}{% ifnotequal value True %}="{{ value|stringformat:'s' }}"{% endifnotequal %}{% endifnotequal %}
{% endfor %}> {% endfor %}>
<div class="input-group-append"> <div class="input-group-append">
<span class="input-group-text"></span> <span class="input-group-text"></span>

View File

@ -10,7 +10,7 @@ from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from permission.models import Role from permission.models import Role
from ..api.views import AliasViewSet, ConsumerViewSet, NotePolymorphicViewSet, TemplateCategoryViewSet, \ from ..api.views import AliasViewSet, ConsumerViewSet, NotePolymorphicViewSet, TemplateCategoryViewSet,\
TransactionTemplateViewSet, TransactionViewSet TransactionTemplateViewSet, TransactionViewSet
from ..models import NoteUser, Transaction, TemplateCategory, TransactionTemplate, RecurrentTransaction, \ from ..models import NoteUser, Transaction, TemplateCategory, TransactionTemplate, RecurrentTransaction, \
MembershipTransaction, SpecialTransaction, NoteSpecial, Alias, Note MembershipTransaction, SpecialTransaction, NoteSpecial, Alias, Note

View File

@ -5,7 +5,7 @@ from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter from rest_framework.filters import SearchFilter
from api.viewsets import ReadProtectedModelViewSet from api.viewsets import ReadProtectedModelViewSet
from .serializers import InvoiceSerializer, ProductSerializer, RemittanceTypeSerializer, RemittanceSerializer, \ from .serializers import InvoiceSerializer, ProductSerializer, RemittanceTypeSerializer, RemittanceSerializer,\
SogeCreditSerializer SogeCreditSerializer
from ..models import Invoice, Product, RemittanceType, Remittance, SogeCredit from ..models import Invoice, Product, RemittanceType, Remittance, SogeCredit

View File

@ -1,19 +0,0 @@
# Generated by Django 5.0.7 on 2024-07-11 09:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('note', '0007_alter_note_polymorphic_ctype_and_more'),
('treasury', '0008_auto_20240322_0045'),
]
operations = [
migrations.AlterField(
model_name='sogecredit',
name='transactions',
field=models.ManyToManyField(blank=True, related_name='+', to='note.membershiptransaction', verbose_name='membership transactions'),
),
]

View File

@ -3,8 +3,8 @@
from django.urls import path from django.urls import path
from .views import InvoiceCreateView, InvoiceListView, InvoiceUpdateView, InvoiceDeleteView, InvoiceRenderView, \ from .views import InvoiceCreateView, InvoiceListView, InvoiceUpdateView, InvoiceDeleteView, InvoiceRenderView,\
RemittanceListView, RemittanceCreateView, RemittanceUpdateView, LinkTransactionToRemittanceView, \ RemittanceListView, RemittanceCreateView, RemittanceUpdateView, LinkTransactionToRemittanceView,\
UnlinkTransactionToRemittanceView, SogeCreditListView, SogeCreditManageView UnlinkTransactionToRemittanceView, SogeCreditListView, SogeCreditManageView
app_name = 'treasury' app_name = 'treasury'

View File

@ -1,14 +1,13 @@
# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay # Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from bootstrap_datepicker_plus.widgets import DatePickerInput
from django import forms from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models import Q from django.db.models import Q
from django.forms import CheckboxSelectMultiple from django.forms import CheckboxSelectMultiple
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from note.models import NoteSpecial, NoteUser from note.models import NoteSpecial, NoteUser
from note_kfet.inputs import AmountInput, Autocomplete, ColorWidget from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget
from ..models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole from ..models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole

View File

@ -439,7 +439,7 @@ class TestWEIRegistration(TestCase):
emergency_contact_phone='+33123456789', emergency_contact_phone='+33123456789',
)) ))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertTrue("This user can&#x27;t be in her/his first year since he/she has already participated to a WEI." self.assertTrue("This user can&#39;t be in her/his first year since he/she has already participated to a WEI."
in str(response.context["form"].errors)) in str(response.context["form"].errors))
# Check that if the WEI is started, we can't register anyone # Check that if the WEI is started, we can't register anyone
@ -635,7 +635,7 @@ class TestWEIRegistration(TestCase):
)) ))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertFalse(response.context["form"].is_valid()) self.assertFalse(response.context["form"].is_valid())
self.assertTrue("This team doesn&#x27;t belong to the given bus." in str(response.context["form"].errors)) self.assertTrue("This team doesn&#39;t belong to the given bus." in str(response.context["form"].errors))
response = self.client.post(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)), dict( response = self.client.post(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)), dict(
roles=[WEIRole.objects.get(name="GC WEI").id], roles=[WEIRole.objects.get(name="GC WEI").id],

View File

@ -82,7 +82,7 @@ msgstr "peut inviter"
#: apps/activity/models.py:44 #: apps/activity/models.py:44
#: apps/activity/templates/activity/includes/activity_info.html:46 #: apps/activity/templates/activity/includes/activity_info.html:46
msgid "guest entry fee" msgid "guest entry fee"
msgstr "cotisation de l'entrée invitée" msgstr "cotisation de l'entrée invité"
#: apps/activity/models.py:49 #: apps/activity/models.py:49
msgid "activity type" msgid "activity type"
@ -119,12 +119,12 @@ msgstr "type"
#: apps/wei/models.py:171 apps/wei/templates/wei/attribute_bus_1A.html:13 #: apps/wei/models.py:171 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15 #: apps/wei/templates/wei/survey.html:15
msgid "user" msgid "user"
msgstr "utilisateur·ice" msgstr "utilisateur"
#: apps/activity/models.py:96 #: apps/activity/models.py:96
#: apps/activity/templates/activity/includes/activity_info.html:36 #: apps/activity/templates/activity/includes/activity_info.html:36
msgid "organizer" msgid "organizer"
msgstr "organisateur·ice" msgstr "organisateur"
#: apps/activity/models.py:97 #: apps/activity/models.py:97
msgid "Club that organizes the activity. The entry fees will go to this club." msgid "Club that organizes the activity. The entry fees will go to this club."
@ -188,7 +188,7 @@ msgstr "entrées"
#: apps/activity/models.py:193 #: apps/activity/models.py:193
#, python-brace-format #, python-brace-format
msgid "Entry for {guest}, invited by {note} to the activity {activity}" msgid "Entry for {guest}, invited by {note} to the activity {activity}"
msgstr "Entrée pour {guest}, invité·e par {note} à l'activité {activity}" msgstr "Entrée pour {guest}, invité par {note} à l'activité {activity}"
#: apps/activity/models.py:195 #: apps/activity/models.py:195
#, python-brace-format #, python-brace-format
@ -197,7 +197,7 @@ msgstr "Entrée de la note {note} pour l'activité « {activity} »"
#: apps/activity/models.py:202 #: apps/activity/models.py:202
msgid "Already entered on " msgid "Already entered on "
msgstr "Déjà rentré·e le " msgstr "Déjà rentré le "
#: apps/activity/models.py:202 apps/activity/tables.py:56 #: apps/activity/models.py:202 apps/activity/tables.py:56
msgid "{:%Y-%m-%d %H:%M:%S}" msgid "{:%Y-%m-%d %H:%M:%S}"
@ -228,11 +228,11 @@ msgstr "hôte"
#: apps/activity/models.py:256 #: apps/activity/models.py:256
msgid "guest" msgid "guest"
msgstr "invité·e" msgstr "invité"
#: apps/activity/models.py:257 #: apps/activity/models.py:257
msgid "guests" msgid "guests"
msgstr "invité·e·s" msgstr "invités"
#: apps/activity/models.py:310 #: apps/activity/models.py:310
msgid "Invitation" msgid "Invitation"
@ -252,7 +252,7 @@ msgstr "Supprimer"
#: apps/activity/tables.py:56 #: apps/activity/tables.py:56
msgid "Entered on " msgid "Entered on "
msgstr "Entré·e le " msgstr "Entré le "
#: apps/activity/tables.py:58 #: apps/activity/tables.py:58
msgid "remove" msgid "remove"
@ -285,11 +285,11 @@ msgstr "Solde du compte"
#: apps/activity/templates/activity/activity_detail.html:15 #: apps/activity/templates/activity/activity_detail.html:15
msgid "Guests list" msgid "Guests list"
msgstr "Liste des invité·e·s" msgstr "Liste des invités"
#: apps/activity/templates/activity/activity_detail.html:33 #: apps/activity/templates/activity/activity_detail.html:33
msgid "Guest deleted" msgid "Guest deleted"
msgstr "Invité·e supprimé·e" msgstr "Invité supprimé"
#: apps/activity/templates/activity/activity_entry.html:14 #: apps/activity/templates/activity/activity_entry.html:14
#: apps/note/models/transactions.py:261 #: apps/note/models/transactions.py:261
@ -324,7 +324,7 @@ msgstr "Retour à la page de l'activité"
#: apps/activity/templates/activity/activity_entry.html:129 #: apps/activity/templates/activity/activity_entry.html:129
msgid "Entry done, but caution: the user is not a Kfet member." msgid "Entry done, but caution: the user is not a Kfet member."
msgstr "" msgstr ""
"Entrée effectuée, mais attention : la personne n'est pas un·e adhérent·e Kfet." "Entrée effectuée, mais attention : la personne n'est pas un adhérent Kfet."
#: apps/activity/templates/activity/activity_entry.html:132 #: apps/activity/templates/activity/activity_entry.html:132
msgid "Entry done!" msgid "Entry done!"
@ -365,7 +365,7 @@ msgstr "Toutes les activités"
#: apps/activity/templates/activity/includes/activity_info.html:32 #: apps/activity/templates/activity/includes/activity_info.html:32
msgid "creater" msgid "creater"
msgstr "créateur·ice" msgstr "créateur"
#: apps/activity/templates/activity/includes/activity_info.html:53 #: apps/activity/templates/activity/includes/activity_info.html:53
msgid "opened" msgid "opened"
@ -419,7 +419,7 @@ msgstr "Invitation pour l'activité « {} »"
#: apps/activity/views.py:178 #: apps/activity/views.py:178
msgid "You are not allowed to display the entry interface for this activity." msgid "You are not allowed to display the entry interface for this activity."
msgstr "" msgstr ""
"Vous n'êtes pas autorisé·e à afficher l'interface des entrées pour cette " "Vous n'êtes pas autorisé à afficher l'interface des entrées pour cette "
"activité." "activité."
#: apps/activity/views.py:181 #: apps/activity/views.py:181
@ -500,12 +500,12 @@ msgstr "Les logs ne peuvent pas être détruits."
#: apps/member/admin.py:50 apps/member/models.py:232 #: apps/member/admin.py:50 apps/member/models.py:232
#: apps/member/templates/member/includes/club_info.html:34 #: apps/member/templates/member/includes/club_info.html:34
msgid "membership fee (paid students)" msgid "membership fee (paid students)"
msgstr "cotisation pour adhérer (normalien·ne élève)" msgstr "cotisation pour adhérer (normalien élève)"
#: apps/member/admin.py:51 apps/member/models.py:237 #: apps/member/admin.py:51 apps/member/models.py:237
#: apps/member/templates/member/includes/club_info.html:37 #: apps/member/templates/member/includes/club_info.html:37
msgid "membership fee (unpaid students)" msgid "membership fee (unpaid students)"
msgstr "cotisation pour adhérer (normalien·ne étudiant·e)" msgstr "cotisation pour adhérer (normalien étudiant)"
#: apps/member/admin.py:65 apps/member/models.py:325 #: apps/member/admin.py:65 apps/member/models.py:325
msgid "roles" msgid "roles"
@ -517,7 +517,7 @@ msgstr "cotisation"
#: apps/member/apps.py:14 apps/wei/tables.py:226 apps/wei/tables.py:257 #: apps/member/apps.py:14 apps/wei/tables.py:226 apps/wei/tables.py:257
msgid "member" msgid "member"
msgstr "adhérent·e" msgstr "adhérent"
#: apps/member/forms.py:24 #: apps/member/forms.py:24
msgid "Permission mask" msgid "Permission mask"
@ -542,7 +542,7 @@ msgid ""
"href=https://perso.crans.org/club-bde/Charte-anti-VSS.pdf target=_blank> " "href=https://perso.crans.org/club-bde/Charte-anti-VSS.pdf target=_blank> "
"available here in pdf</a>" "available here in pdf</a>"
msgstr "" msgstr ""
"Cochez après avoir lu la charte anti-VSS <a href=https://perso." "Cochez après avoir lu la chartre anti-VSS <a href=https://perso."
"crans.org/club-bde/Charte-anti-VSS.pdf target=_blank> disponible en pdf ici</" "crans.org/club-bde/Charte-anti-VSS.pdf target=_blank> disponible en pdf ici</"
"a>" "a>"
@ -587,7 +587,7 @@ msgstr "Pas de rechargement"
#: apps/member/forms.py:182 #: apps/member/forms.py:182
msgid "You can credit the note of the user." msgid "You can credit the note of the user."
msgstr "Vous pouvez créditer la note de l'utilisateur·ice avant l'adhésion." msgstr "Vous pouvez créditer la note de l'utilisateur avant l'adhésion."
#: apps/member/forms.py:186 apps/registration/forms.py:85 #: apps/member/forms.py:186 apps/registration/forms.py:85
#: apps/wei/forms/registration.py:97 #: apps/wei/forms/registration.py:97
@ -602,7 +602,7 @@ msgstr "Banque"
#: apps/member/forms.py:230 #: apps/member/forms.py:230
msgid "User" msgid "User"
msgstr "Utilisateur·ice" msgstr "Utilisateur"
#: apps/member/forms.py:244 #: apps/member/forms.py:244
msgid "Roles" msgid "Roles"
@ -731,11 +731,11 @@ msgstr "adresse"
#: apps/registration/templates/registration/future_profile_detail.html:43 #: apps/registration/templates/registration/future_profile_detail.html:43
#: apps/wei/templates/wei/weimembership_form.html:47 #: apps/wei/templates/wei/weimembership_form.html:47
msgid "paid" msgid "paid"
msgstr "payé·e" msgstr "payé"
#: apps/member/models.py:90 #: apps/member/models.py:90
msgid "Tells if the user receive a salary." msgid "Tells if the user receive a salary."
msgstr "Indique si l'utilisateur·ice perçoit un salaire." msgstr "Indique si l'utilisateur perçoit un salaire."
#: apps/member/models.py:99 apps/treasury/tables.py:143 #: apps/member/models.py:99 apps/treasury/tables.py:143
msgid "No" msgid "No"
@ -754,7 +754,7 @@ msgid ""
"Register on the mailing list to stay informed of the events of the campus (1 " "Register on the mailing list to stay informed of the events of the campus (1 "
"mail/week)" "mail/week)"
msgstr "" msgstr ""
"S'inscrire sur la liste de diffusion pour rester informé·e des événements sur " "S'inscrire sur la liste de diffusion pour rester informé des événements sur "
"le campus (1 mail par semaine)" "le campus (1 mail par semaine)"
#: apps/member/models.py:108 #: apps/member/models.py:108
@ -762,7 +762,7 @@ msgid ""
"Register on the mailing list to stay informed of the sport events of the " "Register on the mailing list to stay informed of the sport events of the "
"campus (1 mail/week)" "campus (1 mail/week)"
msgstr "" msgstr ""
"S'inscrire sur la liste de diffusion pour rester informé·e des actualités " "S'inscrire sur la liste de diffusion pour rester informé des actualités "
"sportives sur le campus (1 mail par semaine)" "sportives sur le campus (1 mail par semaine)"
#: apps/member/models.py:113 #: apps/member/models.py:113
@ -770,7 +770,7 @@ msgid ""
"Register on the mailing list to stay informed of the art events of the " "Register on the mailing list to stay informed of the art events of the "
"campus (1 mail/week)" "campus (1 mail/week)"
msgstr "" msgstr ""
"S'inscrire sur la liste de diffusion pour rester informé·e des actualités " "S'inscrire sur la liste de diffusion pour rester informé des actualités "
"artistiques sur le campus (1 mail par semaine)" "artistiques sur le campus (1 mail par semaine)"
#: apps/member/models.py:117 #: apps/member/models.py:117
@ -795,7 +795,7 @@ msgstr "Charte VSS lue"
#: apps/member/models.py:142 apps/member/models.py:143 #: apps/member/models.py:142 apps/member/models.py:143
msgid "user profile" msgid "user profile"
msgstr "profil utilisateur·ice" msgstr "profil utilisateur"
#: apps/member/models.py:177 #: apps/member/models.py:177
msgid "Activate your Note Kfet account" msgid "Activate your Note Kfet account"
@ -839,7 +839,7 @@ msgstr "début de l'adhésion"
#: apps/member/models.py:252 #: apps/member/models.py:252
msgid "Date from which the members can renew their membership." msgid "Date from which the members can renew their membership."
msgstr "" msgstr ""
"Date à partir de laquelle les adhérent·e·s peuvent renouveler leur adhésion." "Date à partir de laquelle les adhérents peuvent renouveler leur adhésion."
#: apps/member/models.py:258 #: apps/member/models.py:258
#: apps/member/templates/member/includes/club_info.html:21 #: apps/member/templates/member/includes/club_info.html:21
@ -849,7 +849,7 @@ msgstr "fin de l'adhésion"
#: apps/member/models.py:259 #: apps/member/models.py:259
msgid "Maximal date of a membership, after which members must renew it." msgid "Maximal date of a membership, after which members must renew it."
msgstr "" msgstr ""
"Date maximale d'une fin d'adhésion, après laquelle les adhérent·e·s doivent la " "Date maximale d'une fin d'adhésion, après laquelle les adhérents doivent la "
"renouveler." "renouveler."
#: apps/member/models.py:263 apps/member/models.py:319 #: apps/member/models.py:263 apps/member/models.py:319
@ -889,11 +889,11 @@ msgstr "Le rôle {role} ne s'applique pas au club {club}."
#: apps/member/models.py:376 apps/member/views.py:712 #: apps/member/models.py:376 apps/member/views.py:712
msgid "User is already a member of the club" msgid "User is already a member of the club"
msgstr "L'utilisateur·ice est déjà membre du club" msgstr "L'utilisateur est déjà membre du club"
#: apps/member/models.py:388 apps/member/views.py:721 #: apps/member/models.py:388 apps/member/views.py:721
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "L'utilisateur·ice n'est pas membre du club parent" msgstr "L'utilisateur n'est pas membre du club parent"
#: apps/member/tables.py:139 #: apps/member/tables.py:139
msgid "Renew" msgid "Renew"
@ -906,7 +906,7 @@ msgid ""
"%(pretty_fee)s will be charged to renew automatically the membership in this/" "%(pretty_fee)s will be charged to renew automatically the membership in this/"
"these club·s." "these club·s."
msgstr "" msgstr ""
"Cet·te utilisateur·ice n'est pas membre du/des club·s parent·s %(clubs)s. Un " "Cet utilisateur n'est pas membre du/des club·s parent·s %(clubs)s. Un "
"montant supplémentaire de %(pretty_fee)s sera débité afin de renouveler " "montant supplémentaire de %(pretty_fee)s sera débité afin de renouveler "
"automatiquement l'adhésion dans ce·s club·s." "automatiquement l'adhésion dans ce·s club·s."
@ -916,7 +916,7 @@ msgid ""
"The user is not a member of the club·s %(clubs)s. Please create the required " "The user is not a member of the club·s %(clubs)s. Please create the required "
"memberships, otherwise it will fail." "memberships, otherwise it will fail."
msgstr "" msgstr ""
"Cet·te utilisateur·ice n'est pas membre du/des club·s parent·s %(clubs)s. Merci de " "Cet utilisateur n'est pas membre du/des club·s parent·s %(clubs)s. Merci de "
"d'abord créer l'adhésion requise, sinon cette adhésion va échouer." "d'abord créer l'adhésion requise, sinon cette adhésion va échouer."
#: apps/member/templates/member/add_members.html:29 #: apps/member/templates/member/add_members.html:29
@ -934,7 +934,7 @@ msgid ""
"This club has parents %(clubs)s. Please make sure that the user is a member " "This club has parents %(clubs)s. Please make sure that the user is a member "
"of this or these club·s, otherwise the creation of this membership will fail." "of this or these club·s, otherwise the creation of this membership will fail."
msgstr "" msgstr ""
"Ce club a pour parents %(clubs)s. Merci de vous assurer que l'utilisateur·ice " "Ce club a pour parents %(clubs)s. Merci de vous assurer que l'utilisateur "
"est membre de ce·s club·s, sinon la création de cette adhésion va échouer." "est membre de ce·s club·s, sinon la création de cette adhésion va échouer."
#: apps/member/templates/member/base.html:17 #: apps/member/templates/member/base.html:17
@ -956,7 +956,7 @@ msgstr "Voir le profil"
#: apps/member/templates/member/base.html:57 #: apps/member/templates/member/base.html:57
msgid "Add member" msgid "Add member"
msgstr "Ajouter un·e membre" msgstr "Ajouter un membre"
#: apps/member/templates/member/base.html:72 #: apps/member/templates/member/base.html:72
#: apps/member/templates/member/base.html:93 #: apps/member/templates/member/base.html:93
@ -983,8 +983,8 @@ msgid ""
"If you use the force mode, the user won't be able to unlock the note by " "If you use the force mode, the user won't be able to unlock the note by "
"itself." "itself."
msgstr "" msgstr ""
"Si vous verrouillez la note de force, l'utilisateur·ice ne pourra plus la " "Si vous verrouillez la note de force, l'utilisateur ne pourra plus la "
"déverrouiller soi-même." "déverrouiller lui-même."
#: apps/member/templates/member/base.html:110 #: apps/member/templates/member/base.html:110
#: apps/member/templates/member/base.html:137 apps/treasury/forms.py:91 #: apps/member/templates/member/base.html:137 apps/treasury/forms.py:91
@ -1165,7 +1165,7 @@ msgstr "Recadrer et envoyer"
#: apps/registration/templates/registration/future_profile_detail.html:28 #: apps/registration/templates/registration/future_profile_detail.html:28
#: apps/wei/templates/wei/weimembership_form.html:26 #: apps/wei/templates/wei/weimembership_form.html:26
msgid "This user doesn't have confirmed his/her e-mail address." msgid "This user doesn't have confirmed his/her e-mail address."
msgstr "Cet·te utilisateur·ice n'a pas encore confirmé son adresse e-mail." msgstr "Cet utilisateur n'a pas encore confirmé son adresse e-mail."
#: apps/member/templates/member/profile_detail.html:13 #: apps/member/templates/member/profile_detail.html:13
#: apps/registration/templates/registration/future_profile_detail.html:29 #: apps/registration/templates/registration/future_profile_detail.html:29
@ -1179,7 +1179,7 @@ msgstr "Voir mes adhésions"
#: apps/member/templates/member/profile_trust.html:10 #: apps/member/templates/member/profile_trust.html:10
msgid "Add friends" msgid "Add friends"
msgstr "Ajouter des ami·e·s" msgstr "Ajouter des amis"
#: apps/member/templates/member/profile_trust.html:28 #: apps/member/templates/member/profile_trust.html:28
msgid "" msgid ""
@ -1191,12 +1191,12 @@ msgid ""
msgstr "" msgstr ""
"Ajouter quelqu'un⋅e en ami⋅e lui permet de me prélever de l'argent (tant que " "Ajouter quelqu'un⋅e en ami⋅e lui permet de me prélever de l'argent (tant que "
"ma note reste positive). Ceci sert à simplifier les remboursements entre " "ma note reste positive). Ceci sert à simplifier les remboursements entre "
"ami⋅e·s via note. En effet, une personne peut effectuer tous les transferts " "ami⋅es via note. En effet, une personne peut effectuer tous les transferts "
"sans posséder de droits supplémentaires." "sans posséder de droits supplémentaires."
#: apps/member/templates/member/profile_trust.html:39 #: apps/member/templates/member/profile_trust.html:39
msgid "People having you as a friend" msgid "People having you as a friend"
msgstr "Personnes vous ayant ajouté·e" msgstr "Personnes vous ayant ajouté"
#: apps/member/templates/member/profile_update.html:18 #: apps/member/templates/member/profile_update.html:18
msgid "Save Changes" msgid "Save Changes"
@ -1212,11 +1212,11 @@ msgstr "Cette adresse doit être valide."
#: apps/member/views.py:139 #: apps/member/views.py:139
msgid "Profile detail" msgid "Profile detail"
msgstr "Détails de l'utilisateur·ice" msgstr "Détails de l'utilisateur"
#: apps/member/views.py:205 #: apps/member/views.py:205
msgid "Search user" msgid "Search user"
msgstr "Chercher un·e utilisateur·ice" msgstr "Chercher un utilisateur"
#: apps/member/views.py:253 #: apps/member/views.py:253
msgid "Note friendships" msgid "Note friendships"
@ -1248,14 +1248,14 @@ msgstr "Modifier le club"
#: apps/member/views.py:574 #: apps/member/views.py:574
msgid "Add new member to the club" msgid "Add new member to the club"
msgstr "Ajouter un·e nouvelle·au membre au club" msgstr "Ajouter un nouveau membre au club"
#: apps/member/views.py:703 apps/wei/views.py:973 #: apps/member/views.py:703 apps/wei/views.py:973
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."
msgstr "" msgstr ""
"Cet·te utilisateur·ice n'a pas assez d'argent pour rejoindre ce club et ne peut pas " "Cet utilisateur n'a pas assez d'argent pour rejoindre ce club et ne peut pas "
"avoir un solde négatif." "avoir un solde négatif."
#: apps/member/views.py:725 #: apps/member/views.py:725
@ -1268,7 +1268,7 @@ msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
#: apps/member/views.py:880 #: apps/member/views.py:880
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·ice dans le club" msgstr "Gérer les rôles d'un utilisateur dans le club"
#: apps/member/views.py:905 #: apps/member/views.py:905
msgid "Members of the club" msgid "Members of the club"
@ -1343,7 +1343,7 @@ msgstr "en centimes, argent crédité pour cette instance"
#: apps/note/models/notes.py:37 #: apps/note/models/notes.py:37
msgid "last negative date" msgid "last negative date"
msgstr "dernière date de négatif" msgstr "dernier date de négatif"
#: apps/note/models/notes.py:38 #: apps/note/models/notes.py:38
msgid "last time the balance was negative" msgid "last time the balance was negative"
@ -1359,7 +1359,7 @@ msgstr "créée le"
#: apps/note/models/notes.py:58 #: apps/note/models/notes.py:58
msgid "active" msgid "active"
msgstr "actif·ve" msgstr "actif"
#: apps/note/models/notes.py:61 #: apps/note/models/notes.py:61
msgid "" msgid ""
@ -1379,8 +1379,8 @@ msgstr ""
#: apps/note/models/notes.py:70 #: apps/note/models/notes.py:70
msgid "The note is blocked by the the BDE and can't be manually reactivated." msgid "The note is blocked by the the BDE and can't be manually reactivated."
msgstr "" msgstr ""
"La note est bloquée de force par le BDE et ne peut pas être débloquée par le·a " "La note est bloquée de force par le BDE et ne peut pas être débloquée par le "
"possesseur·ice de la note." "possesseur de la note."
#: apps/note/models/notes.py:78 #: apps/note/models/notes.py:78
msgid "notes" msgid "notes"
@ -1392,11 +1392,11 @@ msgstr "Cet alias est déjà pris."
#: apps/note/models/notes.py:152 #: apps/note/models/notes.py:152
msgid "one's note" msgid "one's note"
msgstr "note d'un·e utilisateur·ice" msgstr "note d'un utilisateur"
#: apps/note/models/notes.py:153 #: apps/note/models/notes.py:153
msgid "users note" msgid "users note"
msgstr "notes des utilisateur·ice·s" msgstr "notes des utilisateurs"
#: apps/note/models/notes.py:159 #: apps/note/models/notes.py:159
#, python-format #, python-format
@ -1430,7 +1430,7 @@ msgstr "note"
#: apps/note/models/notes.py:239 #: apps/note/models/notes.py:239
msgid "trusted" msgid "trusted"
msgstr "ami·e" msgstr "ami"
#: apps/note/models/notes.py:243 #: apps/note/models/notes.py:243
msgid "frienship" msgid "frienship"
@ -1553,7 +1553,7 @@ msgid ""
"The destination of this transaction must equal to the destination of the " "The destination of this transaction must equal to the destination of the "
"template." "template."
msgstr "" msgstr ""
"Le·a destinataire de cette transaction doit être identique à celui du bouton " "Le destinataire de cette transaction doit être identique à celui du bouton "
"utilisé." "utilisé."
#: apps/note/models/transactions.py:290 #: apps/note/models/transactions.py:290
@ -1582,7 +1582,7 @@ msgid ""
"payment method and a User or a Club" "payment method and a User or a Club"
msgstr "" msgstr ""
"Une transaction spéciale n'est possible que entre une note associée à un " "Une transaction spéciale n'est possible que entre une note associée à un "
"mode de paiement et un·e utilisateur·ice ou un club" "mode de paiement et un utilisateur ou un club"
#: apps/note/models/transactions.py:357 apps/note/models/transactions.py:360 #: apps/note/models/transactions.py:357 apps/note/models/transactions.py:360
#: apps/note/models/transactions.py:363 apps/wei/views.py:978 #: apps/note/models/transactions.py:363 apps/wei/views.py:978
@ -1624,7 +1624,7 @@ msgstr "Supprimer"
#: apps/note/tables.py:191 #: apps/note/tables.py:191
msgid "Trust back" msgid "Trust back"
msgstr "Ajouter en ami·e" msgstr "Ajouter en ami"
#: apps/note/tables.py:211 #: apps/note/tables.py:211
msgid "Add back" msgid "Add back"
@ -1706,11 +1706,11 @@ msgstr "Mail généré par la Note Kfet le"
#: apps/note/templates/note/transaction_form.html:58 #: apps/note/templates/note/transaction_form.html:58
#: apps/note/templates/note/transaction_form.html:178 #: apps/note/templates/note/transaction_form.html:178
msgid "Select emitters" msgid "Select emitters"
msgstr "Sélection des émetteur·ice·s" msgstr "Sélection des émetteurs"
#: apps/note/templates/note/transaction_form.html:73 #: apps/note/templates/note/transaction_form.html:73
msgid "I am the emitter" msgid "I am the emitter"
msgstr "Je suis l'émetteur·ice" msgstr "Je suis l'émetteur"
#: apps/note/templates/note/transaction_form.html:85 #: apps/note/templates/note/transaction_form.html:85
#: apps/note/templates/note/transaction_form.html:180 #: apps/note/templates/note/transaction_form.html:180
@ -1735,7 +1735,7 @@ msgstr "Nom"
#: apps/note/templates/note/transaction_form.html:177 #: apps/note/templates/note/transaction_form.html:177
msgid "Select emitter" msgid "Select emitter"
msgstr "Sélection de l'émetteur·ice" msgstr "Sélection de l'émetteur"
#: apps/note/templates/note/transaction_form.html:179 #: apps/note/templates/note/transaction_form.html:179
msgid "Select receiver" msgid "Select receiver"
@ -1873,7 +1873,7 @@ msgid ""
"is expired." "is expired."
msgstr "" msgstr ""
"Indique si la permission doit être attribuée même si l'adhésion de " "Indique si la permission doit être attribuée même si l'adhésion de "
"l'utilisateur·ice est expirée." "l'utilisateur est expirée."
#: apps/permission/models.py:182 #: apps/permission/models.py:182
#: apps/permission/templates/permission/all_rights.html:89 #: apps/permission/templates/permission/all_rights.html:89
@ -1931,16 +1931,16 @@ msgstr ""
#: apps/permission/templates/permission/all_rights.html:12 #: apps/permission/templates/permission/all_rights.html:12
msgid "Users that have surnormal rights" msgid "Users that have surnormal rights"
msgstr "Liste des utilisateur·ice·s ayant des droits surnormaux" msgstr "Liste des utilisateurs ayant des droits surnormaux"
#: apps/permission/templates/permission/all_rights.html:16 #: apps/permission/templates/permission/all_rights.html:16
msgid "Superusers have all rights on everything, to manage the website." msgid "Superusers have all rights on everything, to manage the website."
msgstr "" msgstr ""
"Les super-utilisateur·ice·s ont tous les droits sur tout, afin de gérer le site." "Les super-utilisateurs ont tous les droits sur tout, afin de gérer le site."
#: apps/permission/templates/permission/all_rights.html:21 #: apps/permission/templates/permission/all_rights.html:21
msgid "Superusers" msgid "Superusers"
msgstr "Super-utilisateur·ice·s" msgstr "Super-utilisateurs"
#: apps/permission/templates/permission/all_rights.html:45 #: apps/permission/templates/permission/all_rights.html:45
msgid "Roles description" msgid "Roles description"
@ -2095,7 +2095,7 @@ msgstr "Valider le compte"
#: apps/registration/templates/registration/future_profile_detail.html:63 #: apps/registration/templates/registration/future_profile_detail.html:63
msgid "" msgid ""
"The user declared that he/she opened a bank account in the Société générale." "The user declared that he/she opened a bank account in the Société générale."
msgstr "L'utilisateur·ice a déclaré avoir ouvert un compte à la société générale." msgstr "L'utilisateur a déclaré avoir ouvert un compte à la société générale."
#: apps/registration/templates/registration/future_profile_detail.html:73 #: apps/registration/templates/registration/future_profile_detail.html:73
#: apps/wei/templates/wei/weimembership_form.html:127 #: apps/wei/templates/wei/weimembership_form.html:127
@ -2105,7 +2105,7 @@ msgstr "Valider l'inscription"
#: apps/registration/templates/registration/future_user_list.html:9 #: apps/registration/templates/registration/future_user_list.html:9
msgid "New user" msgid "New user"
msgstr "Nouvel·le utilisateur·ice" msgstr "Nouvel utilisateur"
#: apps/registration/templates/registration/mails/email_validation_email.html:12 #: apps/registration/templates/registration/mails/email_validation_email.html:12
#: apps/registration/templates/registration/mails/email_validation_email.txt:3 #: apps/registration/templates/registration/mails/email_validation_email.txt:3
@ -2149,7 +2149,7 @@ msgstr "L'équipe de la Note Kfet."
#: apps/registration/views.py:41 #: apps/registration/views.py:41
msgid "Register new user" msgid "Register new user"
msgstr "Enregistrer un·e nouvel·le utilisateur·ice" msgstr "Enregistrer un nouvel utilisateur"
#: apps/registration/views.py:99 #: apps/registration/views.py:99
msgid "Email validation" msgid "Email validation"
@ -2173,11 +2173,11 @@ msgstr "Renvoyer le lien de validation"
#: apps/registration/views.py:182 #: apps/registration/views.py:182
msgid "Pre-registered users list" msgid "Pre-registered users list"
msgstr "Liste des utilisateur·ice·s en attente d'inscription" msgstr "Liste des utilisateurs en attente d'inscription"
#: apps/registration/views.py:206 #: apps/registration/views.py:206
msgid "Unregistered users" msgid "Unregistered users"
msgstr "Utilisateur·ice·s en attente d'inscription" msgstr "Utilisateurs en attente d'inscription"
#: apps/registration/views.py:219 #: apps/registration/views.py:219
msgid "Registration detail" msgid "Registration detail"
@ -2360,14 +2360,14 @@ msgstr "Crédits de la Société générale"
#: apps/treasury/models.py:315 #: apps/treasury/models.py:315
#, python-brace-format #, python-brace-format
msgid "Soge credit for {user}" msgid "Soge credit for {user}"
msgstr "Crédit de la société générale pour l'utilisateur·ice {user}" msgstr "Crédit de la société générale pour l'utilisateur {user}"
#: apps/treasury/models.py:445 #: apps/treasury/models.py:445
msgid "" msgid ""
"This user doesn't have enough money to pay the memberships with its note. " "This user doesn't have enough money to pay the memberships with its note. "
"Please ask her/him to credit the note before invalidating this credit." "Please ask her/him to credit the note before invalidating this credit."
msgstr "" msgstr ""
"Cet·te utilisateur·ice n'a pas assez d'argent pour payer les adhésions avec sa " "Cet utilisateur n'a pas assez d'argent pour payer les adhésions avec sa "
"note. Merci de lui demander de recharger sa note avant d'invalider ce crédit." "note. Merci de lui demander de recharger sa note avant d'invalider ce crédit."
#: apps/treasury/tables.py:20 #: apps/treasury/tables.py:20
@ -2519,12 +2519,12 @@ msgid ""
"If this credit is validated, then the user won't be able to ask for a credit " "If this credit is validated, then the user won't be able to ask for a credit "
"from the Société générale." "from the Société générale."
msgstr "" msgstr ""
"Si ce crédit est validé, alors l'utilisateur·ice ne pourra plus demander d'être " "Si ce crédit est validé, alors l'utilisateur ne pourra plus demander d'être "
"crédité·e par la Société générale à l'avenir." "crédité par la Société générale à l'avenir."
#: apps/treasury/templates/treasury/sogecredit_detail.html:44 #: apps/treasury/templates/treasury/sogecredit_detail.html:44
msgid "If you think there is an error, please contact the \"respos info\"." msgid "If you think there is an error, please contact the \"respos info\"."
msgstr "Si vous pensez qu'il y a une erreur, merci de contacter un·e respo info." msgstr "Si vous pensez qu'il y a une erreur, merci de contacter un respo info."
#: apps/treasury/templates/treasury/sogecredit_detail.html:50 #: apps/treasury/templates/treasury/sogecredit_detail.html:50
msgid "This credit is already validated." msgid "This credit is already validated."
@ -2535,13 +2535,13 @@ msgid ""
"Warning: if you don't validate this credit, the note of the user doesn't " "Warning: if you don't validate this credit, the note of the user doesn't "
"have enough money to pay its memberships." "have enough money to pay its memberships."
msgstr "" msgstr ""
"Attention : si vous ne validez pas ce crédit, la note de l'utilisateur·ice n'a " "Attention : si vous ne validez pas ce crédit, la note de l'utilisateur n'a "
"pas assez d'argent pour payer les adhésions." "pas assez d'argent pour payer les adhésions."
#: apps/treasury/templates/treasury/sogecredit_detail.html:56 #: apps/treasury/templates/treasury/sogecredit_detail.html:56
msgid "Please ask the user to credit its note before deleting this credit." msgid "Please ask the user to credit its note before deleting this credit."
msgstr "" msgstr ""
"Merci de demander à l'utilisateur·ice de recharger sa note avant de supprimer la " "Merci de demander à l'utilisateur de recharger sa note avant de supprimer la "
"demande de crédit." "demande de crédit."
#: apps/treasury/templates/treasury/sogecredit_detail.html:63 #: apps/treasury/templates/treasury/sogecredit_detail.html:63
@ -2560,7 +2560,7 @@ msgstr "Filtrer avec uniquement les crédits non valides"
#: apps/treasury/templates/treasury/sogecredit_list.html:50 #: apps/treasury/templates/treasury/sogecredit_list.html:50
msgid "There is no matched user that have asked for a Société générale credit." msgid "There is no matched user that have asked for a Société générale credit."
msgstr "" msgstr ""
"Il n'y a pas d'utilisateur·ice trouvé·e ayant demandé un crédit de la Société " "Il n'y a pas d'utilisateur trouvé ayant demandé un crédit de la Société "
"générale." "générale."
#: apps/treasury/templates/treasury/sogecredit_list.html:63 #: apps/treasury/templates/treasury/sogecredit_list.html:63
@ -2582,7 +2582,7 @@ msgstr "Liste des factures"
#: apps/treasury/views.py:105 apps/treasury/views.py:275 #: apps/treasury/views.py:105 apps/treasury/views.py:275
#: apps/treasury/views.py:401 #: apps/treasury/views.py:401
msgid "You are not able to see the treasury interface." msgid "You are not able to see the treasury interface."
msgstr "Vous n'êtes pas autorisé·e à voir l'interface de trésorerie." msgstr "Vous n'êtes pas autorisé à voir l'interface de trésorerie."
#: apps/treasury/views.py:115 #: apps/treasury/views.py:115
msgid "Update an invoice" msgid "Update an invoice"
@ -2621,7 +2621,7 @@ msgstr "WEI"
#: apps/wei/forms/registration.py:35 #: apps/wei/forms/registration.py:35
msgid "The selected user is not validated. Please validate its account first" msgid "The selected user is not validated. Please validate its account first"
msgstr "" msgstr ""
"L'utilisateur·ice sélectionné·e n'est pas validé·e. Merci de d'abord valider son " "L'utilisateur sélectionné n'est pas validé. Merci de d'abord valider son "
"compte" "compte"
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126 #: apps/wei/forms/registration.py:59 apps/wei/models.py:126
@ -2634,8 +2634,8 @@ msgid ""
"This choice is not definitive. The WEI organizers are free to attribute for " "This choice is not definitive. The WEI organizers are free to attribute for "
"you a bus and a team, in particular if you are a free eletron." "you a bus and a team, in particular if you are a free eletron."
msgstr "" msgstr ""
"Ce choix n'est pas définitif. Les organisateur·ice·s du WEI sont libres de vous " "Ce choix n'est pas définitif. Les organisateurs du WEI sont libres de vous "
"attribuer un bus et une équipe, en particulier si vous êtes un·e électron " "attribuer un bus et une équipe, en particulier si vous êtes un électron "
"libre." "libre."
#: apps/wei/forms/registration.py:67 #: apps/wei/forms/registration.py:67
@ -2787,7 +2787,7 @@ msgstr "première année"
#: apps/wei/models.py:249 #: apps/wei/models.py:249
msgid "Tells if the user is new in the school." msgid "Tells if the user is new in the school."
msgstr "Indique si l'utilisateur·ice est nouveau dans l'école." msgstr "Indique si l'utilisateur est nouveau dans l'école."
#: apps/wei/models.py:254 #: apps/wei/models.py:254
msgid "registration information" msgid "registration information"
@ -2803,11 +2803,11 @@ msgstr ""
#: apps/wei/models.py:261 #: apps/wei/models.py:261
msgid "WEI User" msgid "WEI User"
msgstr "Participant·e au WEI" msgstr "Participant au WEI"
#: apps/wei/models.py:262 #: apps/wei/models.py:262
msgid "WEI Users" msgid "WEI Users"
msgstr "Participant·e·s au WEI" msgstr "Participants au WEI"
#: apps/wei/models.py:334 #: apps/wei/models.py:334
msgid "team" msgid "team"
@ -2827,19 +2827,19 @@ msgstr "Adhésions au WEI"
#: apps/wei/tables.py:105 #: apps/wei/tables.py:105
msgid "The user does not have enough money." msgid "The user does not have enough money."
msgstr "L'utilisateur·ice n'a pas assez d'argent." msgstr "L'utilisateur n'a pas assez d'argent."
#: apps/wei/tables.py:108 #: apps/wei/tables.py:108
msgid "" msgid ""
"The user is in first year. You may validate the credit, the algorithm will " "The user is in first year. You may validate the credit, the algorithm will "
"run later." "run later."
msgstr "" msgstr ""
"L'utilisateur·ice est en première année, vous pouvez valider le crédit, " "L'utilisateur est en première année, vous pouvez valider le crédit, "
"l'algorithme tournera plus tard." "l'algorithme tournera plus tard."
#: apps/wei/tables.py:111 #: apps/wei/tables.py:111
msgid "The user has enough money, you can validate the registration." msgid "The user has enough money, you can validate the registration."
msgstr "L'utilisateur·ice a assez d'argent, l'inscription est possible." msgstr "L'utilisateur a assez d'argent, l'inscription est possible."
#: apps/wei/tables.py:143 #: apps/wei/tables.py:143
msgid "Year" msgid "Year"
@ -2860,19 +2860,19 @@ msgstr "Nombre de membres"
#: apps/wei/tables.py:226 apps/wei/tables.py:257 #: apps/wei/tables.py:226 apps/wei/tables.py:257
msgid "members" msgid "members"
msgstr "adhérent·e·s" msgstr "adhérents"
#: apps/wei/tables.py:287 #: apps/wei/tables.py:287
msgid "suggested first year" msgid "suggested first year"
msgstr "1A suggéré·e·s" msgstr "1A suggérés"
#: apps/wei/tables.py:293 #: apps/wei/tables.py:293
msgid "validated first year" msgid "validated first year"
msgstr "1A validé·e·s" msgstr "1A validés"
#: apps/wei/tables.py:299 #: apps/wei/tables.py:299
msgid "validated staff" msgid "validated staff"
msgstr "2A+ validé·e·s" msgstr "2A+ validés"
#: apps/wei/tables.py:310 #: apps/wei/tables.py:310
msgid "free seats" msgid "free seats"
@ -3052,7 +3052,7 @@ msgstr "L'inscription a déjà été validée et ne peut pas être dévalidée."
#: apps/wei/templates/wei/weimembership_form.html:132 #: apps/wei/templates/wei/weimembership_form.html:132
msgid "The user joined the bus" msgid "The user joined the bus"
msgstr "L'utilisateur·ice a rejoint le bus" msgstr "L'utilisateur a rejoint le bus"
#: apps/wei/templates/wei/weimembership_form.html:133 #: apps/wei/templates/wei/weimembership_form.html:133
msgid "in the team" msgid "in the team"
@ -3097,7 +3097,7 @@ msgstr ""
#: apps/wei/templates/wei/weimembership_form.html:166 #: apps/wei/templates/wei/weimembership_form.html:166
msgid "The user didn't give her/his caution check." msgid "The user didn't give her/his caution check."
msgstr "L'utilisateur·ice n'a pas donné son chèque de caution." msgstr "L'utilisateur n'a pas donné son chèque de caution."
#: apps/wei/templates/wei/weimembership_form.html:174 #: apps/wei/templates/wei/weimembership_form.html:174
msgid "" msgid ""
@ -3105,7 +3105,7 @@ msgid ""
"membership will be processed automatically, the WEI registration includes " "membership will be processed automatically, the WEI registration includes "
"the membership fee." "the membership fee."
msgstr "" msgstr ""
"Cet·te utilisateur·ice n'est pas membre du club Kfet pour l'année à venir. " "Cet utilisateur n'est pas membre du club Kfet pour l'année à venir. "
"L'adhésion va être faite automatiquement, l'inscription au WEI inclut le " "L'adhésion va être faite automatiquement, l'inscription au WEI inclut le "
"coût d'adhésion." "coût d'adhésion."
@ -3199,7 +3199,7 @@ msgid ""
"This user can't be in her/his first year since he/she has already " "This user can't be in her/his first year since he/she has already "
"participated to a WEI." "participated to a WEI."
msgstr "" msgstr ""
"Cet·te utilisateur·ice ne peut pas être en première année puisqu'iel a déjà " "Cet utilisateur ne peut pas être en première année puisqu'il a déjà "
"participé à un WEI." "participé à un WEI."
#: apps/wei/views.py:578 #: apps/wei/views.py:578
@ -3313,7 +3313,7 @@ msgstr "La note du BDE de l'ENS Paris-Saclay."
#: note_kfet/templates/base.html:78 #: note_kfet/templates/base.html:78
msgid "Users" msgid "Users"
msgstr "Utilisateur·ice·s" msgstr "Utilisateurs"
#: note_kfet/templates/base.html:84 #: note_kfet/templates/base.html:84
msgid "Clubs" msgid "Clubs"
@ -3351,7 +3351,7 @@ msgid ""
"You are not a BDE member anymore. Please renew your membership if you want " "You are not a BDE member anymore. Please renew your membership if you want "
"to use the note." "to use the note."
msgstr "" msgstr ""
"Vous n'êtes plus adhérent·e BDE. Merci de réadhérer si vous voulez profiter de " "Vous n'êtes plus adhérent BDE. Merci de réadhérer si vous voulez profiter de "
"la note." "la note."
#: note_kfet/templates/base.html:165 #: note_kfet/templates/base.html:165
@ -3370,7 +3370,7 @@ msgid ""
"last a few days. Please make sure that you go to the end of the account " "last a few days. Please make sure that you go to the end of the account "
"creation." "creation."
msgstr "" msgstr ""
"Vous avez déclaré·e que vous avez ouvert un compte bancaire à la société " "Vous avez déclaré que vous avez ouvert un compte bancaire à la société "
"générale. La banque n'a pas encore validé la création du compte auprès du " "générale. La banque n'a pas encore validé la création du compte auprès du "
"BDE, l'adhésion et le WEI ne sont donc pas encore payés. Cette procédure de " "BDE, l'adhésion et le WEI ne sont donc pas encore payés. Cette procédure de "
"vérification peut durer quelques jours. Merci de vous assurer de bien aller " "vérification peut durer quelques jours. Merci de vous assurer de bien aller "
@ -3388,10 +3388,6 @@ msgstr "Support technique"
msgid "FAQ (FR)" msgid "FAQ (FR)"
msgstr "FAQ (FR)" msgstr "FAQ (FR)"
#: note_kfet/templates/base.html:200
msgid "Charte Info (FR)"
msgstr "Charte Info (FR)"
#: note_kfet/templates/base_search.html:15 #: note_kfet/templates/base_search.html:15
msgid "Search by attribute such as name…" msgid "Search by attribute such as name…"
msgstr "Chercher par un attribut tel que le nom …" msgstr "Chercher par un attribut tel que le nom …"
@ -3593,7 +3589,7 @@ msgid ""
"you registered with, and check your spam folder." "you registered with, and check your spam folder."
msgstr "" msgstr ""
"Si vous ne recevez pas d'email, vérifiez que vous avez bien utilisé " "Si vous ne recevez pas d'email, vérifiez que vous avez bien utilisé "
"l'adresse associée à votre compte, et regarder également le dossier spam." "l'adresse associé à votre compte, et regarder également le dossier spam."
#: note_kfet/templates/registration/password_reset_form.html:13 #: note_kfet/templates/registration/password_reset_form.html:13
msgid "" msgid ""
@ -3614,7 +3610,7 @@ msgid ""
"Kfet and pay the registration fee. You must also validate your email address " "Kfet and pay the registration fee. You must also validate your email address "
"by following the link you received." "by following the link you received."
msgstr "" msgstr ""
"Si vous vous êtes déjà inscrit·e·s, votre inscription a bien été prise en " "Si vous vous êtes déjà inscrits, votre inscription a bien été prise en "
"compte. Le BDE doit d'abord valider votre compte avant que vous puissiez " "compte. Le BDE doit d'abord valider votre compte avant que vous puissiez "
"vous connecter. Vous devez vous rendre à la Kfet et payer les frais " "vous connecter. Vous devez vous rendre à la Kfet et payer les frais "
"d'adhésion. Vous devez également valider votre adresse email en suivant le " "d'adhésion. Vous devez également valider votre adresse email en suivant le "
@ -3626,7 +3622,7 @@ msgstr ""
#, fuzzy #, fuzzy
#~| msgid "People having you as a friend" #~| msgid "People having you as a friend"
#~ msgid "You already have that person as a friend" #~ msgid "You already have that person as a friend"
#~ msgstr "Personnes vous ayant ajouté·e" #~ msgstr "Personnes vous ayant ajouté"
#~ msgid "" #~ msgid ""
#~ "I declare that I opened or I will open soon a bank account in the Société " #~ "I declare that I opened or I will open soon a bank account in the Société "

View File

@ -25,13 +25,19 @@ admin_site.register(Site, SiteAdmin)
# Add external apps model # Add external apps model
if "oauth2_provider" in settings.INSTALLED_APPS: if "oauth2_provider" in settings.INSTALLED_APPS:
from oauth2_provider.admin import ApplicationAdmin, GrantAdmin, AccessTokenAdmin, RefreshTokenAdmin from oauth2_provider.admin import Application, ApplicationAdmin, Grant, \
from oauth2_provider.models import Application, Grant, AccessToken, RefreshToken GrantAdmin, AccessToken, AccessTokenAdmin, RefreshToken, RefreshTokenAdmin
admin_site.register(Application, ApplicationAdmin) admin_site.register(Application, ApplicationAdmin)
admin_site.register(Grant, GrantAdmin) admin_site.register(Grant, GrantAdmin)
admin_site.register(AccessToken, AccessTokenAdmin) admin_site.register(AccessToken, AccessTokenAdmin)
admin_site.register(RefreshToken, RefreshTokenAdmin) admin_site.register(RefreshToken, RefreshTokenAdmin)
if "django_htcpcp_tea" in settings.INSTALLED_APPS:
from django_htcpcp_tea.admin import *
from django_htcpcp_tea.models import *
admin_site.register(Pot, PotAdmin)
admin_site.register(TeaType, TeaTypeAdmin)
admin_site.register(Addition, AdditionAdmin)
if "mailer" in settings.INSTALLED_APPS: if "mailer" in settings.INSTALLED_APPS:
from mailer.admin import * from mailer.admin import *
@ -44,3 +50,9 @@ if "rest_framework" in settings.INSTALLED_APPS:
from rest_framework.authtoken.admin import * from rest_framework.authtoken.admin import *
from rest_framework.authtoken.models import * from rest_framework.authtoken.models import *
admin_site.register(Token, TokenAdmin) admin_site.register(Token, TokenAdmin)
if "cas_server" in settings.INSTALLED_APPS:
from cas_server.admin import *
from cas_server.models import *
admin_site.register(ServicePattern, ServicePatternAdmin)
admin_site.register(FederatedIendityProvider, FederatedIendityProviderAdmin)

View File

@ -4,7 +4,7 @@
"pk": 1, "pk": 1,
"fields": { "fields": {
"domain": "note.crans.org", "domain": "note.crans.org",
"name": "La Note Kfet 🍪" "name": "La Note Kfet \ud83c\udf7b"
} }
} }
] ]

View File

@ -41,7 +41,7 @@ INSTALLED_APPS = [
'bootstrap_datepicker_plus', 'bootstrap_datepicker_plus',
'colorfield', 'colorfield',
'crispy_forms', 'crispy_forms',
'crispy_bootstrap4', 'django_htcpcp_tea',
'django_tables2', 'django_tables2',
'mailer', 'mailer',
'phonenumber_field', 'phonenumber_field',
@ -90,6 +90,7 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.locale.LocaleMiddleware', 'django.middleware.locale.LocaleMiddleware',
'django.contrib.sites.middleware.CurrentSiteMiddleware', 'django.contrib.sites.middleware.CurrentSiteMiddleware',
'django_htcpcp_tea.middleware.HTCPCPTeaMiddleware',
'note_kfet.middlewares.SessionMiddleware', 'note_kfet.middlewares.SessionMiddleware',
'note_kfet.middlewares.LoginByIPMiddleware', 'note_kfet.middlewares.LoginByIPMiddleware',
'note_kfet.middlewares.TurbolinksMiddleware', 'note_kfet.middlewares.TurbolinksMiddleware',
@ -294,6 +295,3 @@ PHONENUMBER_DEFAULT_REGION = 'FR'
# We add custom information to CAS, in order to give a normalized name to other services # We add custom information to CAS, in order to give a normalized name to other services
CAS_AUTH_CLASS = 'member.auth.CustomAuthUser' CAS_AUTH_CLASS = 'member.auth.CustomAuthUser'
# Default field for primary key
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"

View File

@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% if widget.value != None and widget.value != "" %}value="{{ widget.value }}"{% endif %} {% if widget.value != None and widget.value != "" %}value="{{ widget.value }}"{% endif %}
name="{{ widget.name }}_name" autocomplete="off" name="{{ widget.name }}_name" autocomplete="off"
{% for name, value in widget.attrs.items %} {% for name, value in widget.attrs.items %}
{% if value != False %}{{ name }}{% if value != True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %} {% ifnotequal value False %}{{ name }}{% ifnotequal value True %}="{{ value|stringformat:'s' }}"{% endifnotequal %}{% endifnotequal %}
{% endfor %} {% endfor %}
aria-describedby="{{widget.attrs.id}}_tooltip"> aria-describedby="{{widget.attrs.id}}_tooltip">
{% if widget.resetable %} {% if widget.resetable %}

View File

@ -126,12 +126,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
<a class="dropdown-item" href="{% url 'member:user_detail' pk=request.user.pk %}"> <a class="dropdown-item" href="{% url 'member:user_detail' pk=request.user.pk %}">
<i class="fa fa-user"></i> {% trans "My account" %} <i class="fa fa-user"></i> {% trans "My account" %}
</a> </a>
<form method="post" action="{% url 'logout' %}"> <a class="dropdown-item" href="{% url 'logout' %}">
{% csrf_token %}
<button class="dropdown-item" type="submit">
<i class="fa fa-sign-out"></i> {% trans "Log out" %} <i class="fa fa-sign-out"></i> {% trans "Log out" %}
</button> </a>
</form>
</div> </div>
</li> </li>
{% else %} {% else %}
@ -197,8 +194,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
class="text-muted">{% trans "Contact us" %}</a> &mdash; class="text-muted">{% trans "Contact us" %}</a> &mdash;
<a href="mailto:{{ "SUPPORT_EMAIL" | getenv }}" <a href="mailto:{{ "SUPPORT_EMAIL" | getenv }}"
class="text-muted">{% trans "Technical Support" %}</a> &mdash; class="text-muted">{% trans "Technical Support" %}</a> &mdash;
<a href="https://perso.crans.org/club-bde/charte_informatique.pdf"
class="text-muted">{% trans "Charte Info (FR)" %}</a> &mdash;
<a href="https://note.crans.org/doc/faq/" <a href="https://note.crans.org/doc/faq/"
class="text-muted">{% trans "FAQ (FR)" %}</a> &mdash; class="text-muted">{% trans "FAQ (FR)" %}</a> &mdash;
</span> </span>

View File

@ -30,6 +30,9 @@ urlpatterns = [
path('accounts/', include('django.contrib.auth.urls')), path('accounts/', include('django.contrib.auth.urls')),
path('api/', include('api.urls')), path('api/', include('api.urls')),
path('permission/', include('permission.urls')), path('permission/', include('permission.urls')),
# Make coffee
path('coffee/', include('django_htcpcp_tea.urls')),
] ]
# During development, serve static and media files # During development, serve static and media files
@ -43,6 +46,11 @@ if "oauth2_provider" in settings.INSTALLED_APPS:
path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')) path('o/', include('oauth2_provider.urls', namespace='oauth2_provider'))
) )
if "cas_server" in settings.INSTALLED_APPS:
urlpatterns.append(
path('cas/', include('cas_server.urls', namespace='cas_server'))
)
if "debug_toolbar" in settings.INSTALLED_APPS: if "debug_toolbar" in settings.INSTALLED_APPS:
import debug_toolbar import debug_toolbar
urlpatterns = [ urlpatterns = [

View File

@ -1,17 +1,19 @@
beautifulsoup4~=4.12.3 beautifulsoup4~=4.7.1
crispy-bootstrap4~=2024.1 Django~=2.2.15
Django~=5.0.7 django-bootstrap-datepicker-plus~=3.0.5
django-bootstrap-datepicker-plus~=5.0.5 django-cas-server~=1.2.0
django-colorfield~=0.11.0 django-colorfield~=0.3.2
django-crispy-forms~=2.2 django-crispy-forms~=1.7.2
django-extensions~=3.2.3 django-extensions>=2.1.4
django-filter~=24.2 django-filter~=2.1
django-mailer~=2.3.2 django-htcpcp-tea~=0.3.1
django-oauth-toolkit~=2.4.0 django-mailer~=2.0.1
django-phonenumber-field~=8.0.0 django-oauth-toolkit~=1.3.3
django-polymorphic~=3.1.0 django-phonenumber-field~=5.0.0
django-rest-polymorphic~=0.1.10 django-polymorphic>=2.0.3,<3.0.0
django-tables2~=2.7.0 djangorestframework>=3.9.0,<3.13.0
djangorestframework~=3.15.2 django-rest-polymorphic~=0.1.9
phonenumbers~=8.13.40 django-tables2~=2.3.1
python-memcached~=1.59
phonenumbers~=8.9.10
Pillow>=5.4.1 Pillow>=5.4.1

View File

@ -1,10 +1,13 @@
[tox] [tox]
envlist = envlist =
# Debian Buster Python
py37-django22
# Ubuntu 20.04 Python # Ubuntu 20.04 Python
py310-django50 py38-django22
# Debian Bullseye Python # Debian Bullseye Python
py311-django50 py39-django22
linters linters
skipsdist = True skipsdist = True