diff --git a/apps/member/static/member/js/trust.js b/apps/member/static/member/js/trust.js new file mode 100644 index 00000000..a16bed08 --- /dev/null +++ b/apps/member/static/member/js/trust.js @@ -0,0 +1,53 @@ +/** + * On form submit, create a new friendship + */ +function create_trust (e) { + // Do not submit HTML form + e.preventDefault() + + // Get data and send to API + const formData = new FormData(e.target) + $.getJSON('/api/note/alias/'+formData.get('trusted') + '/', + function (trusted_alias) { + if ((trusted_alias.note == formData.get('trusting'))) + { + addMsg(gettext("You can't add yourself as a friend"), "danger") + return + } + $.post('/api/note/trust/', { + csrfmiddlewaretoken: formData.get('csrfmiddlewaretoken'), + trusting: formData.get('trusting'), + trusted: trusted_alias.note + }).done(function () { + // Reload table + $('#trust_table').load(location.pathname + ' #trust_table') + addMsg(gettext('Friendship successfully added'), 'success') + }).fail(function (xhr, _textStatus, _error) { + errMsg(xhr.responseJSON) + }) + }).fail(function (xhr, _textStatus, _error) { + errMsg(xhr.responseJSON) + }) +} + +/** + * On click of "delete", delete the alias + * @param button_id:Integer Alias id to remove + */ +function delete_button (button_id) { + $.ajax({ + url: '/api/note/trust/' + button_id + '/', + method: 'DELETE', + headers: { 'X-CSRFTOKEN': CSRF_TOKEN } + }).done(function () { + addMsg(gettext('Friendship successfully deleted'), 'success') + $('#trust_table').load(location.pathname + ' #trust_table') + }).fail(function (xhr, _textStatus, _error) { + errMsg(xhr.responseJSON) + }) +} + +$(document).ready(function () { + // Attach event + document.getElementById('form_trust').addEventListener('submit', create_trust) +}) diff --git a/apps/member/templates/member/includes/profile_info.html b/apps/member/templates/member/includes/profile_info.html index 378d54e2..3a927c9f 100644 --- a/apps/member/templates/member/includes/profile_info.html +++ b/apps/member/templates/member/includes/profile_info.html @@ -25,6 +25,14 @@ +
{% trans 'friendships'|capfirst %}
+
+ + + {% trans 'Manage friendships' %} ({{ user_object.note.trusting.all|length }}) + +
+ {% if "member.view_profile"|has_perm:user_object.profile %}
{% trans 'section'|capfirst %}
{{ user_object.profile.section }}
diff --git a/apps/member/templates/member/profile_trust.html b/apps/member/templates/member/profile_trust.html new file mode 100644 index 00000000..bd8d6b50 --- /dev/null +++ b/apps/member/templates/member/profile_trust.html @@ -0,0 +1,41 @@ +{% extends "member/base.html" %} +{% comment %} +SPDX-License-Identifier: GPL-3.0-or-later +{% endcomment %} +{% load static django_tables2 i18n %} + +{% block profile_content %} +
+

+ {% trans "Note friendships" %} +

+
+ {% if can_create %} +
+ {% csrf_token %} + + {%include "autocomplete_model.html" %} +
+ +
+
+ {% endif %} +
+ {% render_table trusting %} +
+ +
+ {% blocktrans trimmed %} + Adding someone as a friend enables them to initiate transactions coming + from your account (while keeping your balance positive). This is + designed to simplify using note kfet transfers to transfer money between + users. The intent is that one person can make all transfers for a group of + friends without needing additional rights among them. + {% endblocktrans %} +
+{% endblock %} + +{% block extrajavascript %} + + +{% endblock%} diff --git a/apps/member/urls.py b/apps/member/urls.py index b1c537d5..54b0f91d 100644 --- a/apps/member/urls.py +++ b/apps/member/urls.py @@ -23,5 +23,6 @@ urlpatterns = [ path('user//update/', views.UserUpdateView.as_view(), name="user_update_profile"), path('user//update_pic/', views.ProfilePictureUpdateView.as_view(), name="user_update_pic"), path('user//aliases/', views.ProfileAliasView.as_view(), name="user_alias"), + path('user//trust', views.ProfileTrustView.as_view(), name="user_trust"), path('manage-auth-token/', views.ManageAuthTokens.as_view(), name='auth_token'), ] diff --git a/apps/member/views.py b/apps/member/views.py index 6ce8d4c5..2f6348a6 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -8,6 +8,7 @@ from django.contrib.auth import logout from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from django.contrib.auth.views import LoginView +from django.contrib.contenttypes.models import ContentType from django.db import transaction from django.db.models import Q, F from django.shortcuts import redirect @@ -18,9 +19,9 @@ from django.views.generic import DetailView, UpdateView, TemplateView from django.views.generic.edit import FormMixin from django_tables2.views import SingleTableView from rest_framework.authtoken.models import Token -from note.models import Alias, NoteUser, NoteClub +from note.models import Alias, NoteClub, NoteUser, Trust from note.models.transactions import Transaction, SpecialTransaction -from note.tables import HistoryTable, AliasTable +from note.tables import HistoryTable, AliasTable, TrustTable from note_kfet.middlewares import _set_current_request from permission.backends import PermissionBackend from permission.models import Role @@ -243,6 +244,39 @@ class UserListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView): return context +class ProfileTrustView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): + """ + View and manage user trust relationships + """ + model = User + template_name = 'member/profile_trust.html' + context_object_name = 'user_object' + extra_context = {"title": _("Note friendships")} + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + note = context['object'].note + context["trusting"] = TrustTable( + note.trusting.filter(PermissionBackend.filter_queryset(self.request, Trust, "view")).distinct().all()) + context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_trust", Trust( + trusting=context["object"].note, + trusted=context["object"].note + )) + context["widget"] = { + "name": "trusted", + "attrs": { + "model_pk": ContentType.objects.get_for_model(Alias).pk, + "class": "autocomplete form-control", + "id": "trusted", + "resetable": True, + "api_url": "/api/note/alias/?note__polymorphic_ctype__model=noteuser", + "name_field": "name", + "placeholder": "" + } + } + return context + + class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): """ View and manage user aliases. diff --git a/apps/note/api/serializers.py b/apps/note/api/serializers.py index 7dda6dba..33bf75ba 100644 --- a/apps/note/api/serializers.py +++ b/apps/note/api/serializers.py @@ -12,7 +12,7 @@ from note_kfet.middlewares import get_current_request from permission.backends import PermissionBackend from rest_framework.utils import model_meta -from ..models.notes import Note, NoteClub, NoteSpecial, NoteUser, Alias +from ..models.notes import Note, NoteClub, NoteSpecial, NoteUser, Alias, Trust from ..models.transactions import TransactionTemplate, Transaction, MembershipTransaction, TemplateCategory, \ RecurrentTransaction, SpecialTransaction @@ -77,6 +77,22 @@ class NoteUserSerializer(serializers.ModelSerializer): return str(obj) +class TrustSerializer(serializers.ModelSerializer): + """ + REST API Serializer for Trusts. + The djangorestframework plugin will analyse the model `Trust` and parse all fields in the API. + """ + + class Meta: + model = Trust + fields = '__all__' + + def validate(self, attrs): + instance = Trust(**attrs) + instance.clean() + return attrs + + class AliasSerializer(serializers.ModelSerializer): """ REST API Serializer for Aliases. diff --git a/apps/note/api/urls.py b/apps/note/api/urls.py index bacf3d32..d15e8241 100644 --- a/apps/note/api/urls.py +++ b/apps/note/api/urls.py @@ -2,7 +2,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later from .views import NotePolymorphicViewSet, AliasViewSet, ConsumerViewSet, \ - TemplateCategoryViewSet, TransactionViewSet, TransactionTemplateViewSet + TemplateCategoryViewSet, TransactionViewSet, TransactionTemplateViewSet, \ + TrustViewSet def register_note_urls(router, path): @@ -11,6 +12,7 @@ def register_note_urls(router, path): """ router.register(path + '/note', NotePolymorphicViewSet) router.register(path + '/alias', AliasViewSet) + router.register(path + '/trust', TrustViewSet) router.register(path + '/consumer', ConsumerViewSet) router.register(path + '/transaction/category', TemplateCategoryViewSet) diff --git a/apps/note/api/views.py b/apps/note/api/views.py index a228bdf6..34ffaf2d 100644 --- a/apps/note/api/views.py +++ b/apps/note/api/views.py @@ -14,8 +14,9 @@ from api.viewsets import ReadProtectedModelViewSet, ReadOnlyProtectedModelViewSe from permission.backends import PermissionBackend from .serializers import NotePolymorphicSerializer, AliasSerializer, ConsumerSerializer,\ - TemplateCategorySerializer, TransactionTemplateSerializer, TransactionPolymorphicSerializer -from ..models.notes import Note, Alias, NoteUser, NoteClub, NoteSpecial + TemplateCategorySerializer, TransactionTemplateSerializer, TransactionPolymorphicSerializer, \ + TrustSerializer +from ..models.notes import Note, Alias, NoteUser, NoteClub, NoteSpecial, Trust from ..models.transactions import TransactionTemplate, Transaction, TemplateCategory @@ -56,11 +57,41 @@ class NotePolymorphicViewSet(ReadProtectedModelViewSet): return queryset.order_by("id") +class TrustViewSet(ReadProtectedModelViewSet): + """ + REST Trust View set. + The djangorestframework plugin will get all `Trust` objects, serialize it to JSON with the given serializer, + then render it on /api/note/trust/ + """ + queryset = Trust.objects + serializer_class = TrustSerializer + filter_backends = [SearchFilter, DjangoFilterBackend, OrderingFilter] + search_fields = ['$trusting__alias__name', '$trusting__alias__normalized_name', + '$trusted__alias__name', '$trusted__alias__normalized_name'] + filterset_fields = ['trusting', 'trusting__noteuser__user', 'trusted', 'trusted__noteuser__user'] + ordering_fields = ['trusting', 'trusted', ] + + def get_serializer_class(self): + serializer_class = self.serializer_class + if self.request.method in ['PUT', 'PATCH']: + # trust relationship can't change people involved + serializer_class.Meta.read_only_fields = ('trusting', 'trusting',) + return serializer_class + + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + try: + self.perform_destroy(instance) + except ValidationError as e: + return Response({e.code: str(e)}, status.HTTP_400_BAD_REQUEST) + return Response(status=status.HTTP_204_NO_CONTENT) + + class AliasViewSet(ReadProtectedModelViewSet): """ REST API View set. The djangorestframework plugin will get all `Alias` objects, serialize it to JSON with the given serializer, - then render it on /api/aliases/ + then render it on /api/note/aliases/ """ queryset = Alias.objects serializer_class = AliasSerializer diff --git a/apps/note/migrations/0006_trust.py b/apps/note/migrations/0006_trust.py new file mode 100644 index 00000000..4ed059fb --- /dev/null +++ b/apps/note/migrations/0006_trust.py @@ -0,0 +1,27 @@ +# Generated by Django 2.2.24 on 2021-09-05 19:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('note', '0005_auto_20210313_1235'), + ] + + operations = [ + migrations.CreateModel( + name='Trust', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('trusted', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='trusted', to='note.Note', verbose_name='trusted')), + ('trusting', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='trusting', to='note.Note', verbose_name='trusting')), + ], + options={ + 'verbose_name': 'frienship', + 'verbose_name_plural': 'friendships', + 'unique_together': {('trusting', 'trusted')}, + }, + ), + ] diff --git a/apps/note/models/__init__.py b/apps/note/models/__init__.py index 07a1d6e0..ab5d4ff1 100644 --- a/apps/note/models/__init__.py +++ b/apps/note/models/__init__.py @@ -1,13 +1,13 @@ # Copyright (C) 2018-2021 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later -from .notes import Alias, Note, NoteClub, NoteSpecial, NoteUser +from .notes import Alias, Note, NoteClub, NoteSpecial, NoteUser, Trust from .transactions import MembershipTransaction, Transaction, \ TemplateCategory, TransactionTemplate, RecurrentTransaction, SpecialTransaction __all__ = [ # Notes - 'Alias', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser', + 'Alias', 'Trust', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser', # Transactions 'MembershipTransaction', 'Transaction', 'TemplateCategory', 'TransactionTemplate', 'RecurrentTransaction', 'SpecialTransaction', diff --git a/apps/note/models/notes.py b/apps/note/models/notes.py index f760882b..6db9e5f8 100644 --- a/apps/note/models/notes.py +++ b/apps/note/models/notes.py @@ -217,6 +217,38 @@ class NoteSpecial(Note): return self.special_type +class Trust(models.Model): + """ + A one-sided trust relationship bertween two users + + If another user considers you as your friend, you can transfer money from + them + """ + + trusting = models.ForeignKey( + Note, + on_delete=models.CASCADE, + related_name='trusting', + verbose_name=_('trusting') + ) + + trusted = models.ForeignKey( + Note, + on_delete=models.CASCADE, + related_name='trusted', + verbose_name=_('trusted') + ) + + class Meta: + verbose_name = _("frienship") + verbose_name_plural = _("friendships") + unique_together = ("trusting", "trusted") + + def __str__(self): + return _("Friendship between {trusting} and {trusted}").format( + trusting=str(self.trusting), trusted=str(self.trusted)) + + class Alias(models.Model): """ points toward a :model:`note.NoteUser` or :model;`note.NoteClub` instance. diff --git a/apps/note/tables.py b/apps/note/tables.py index 2cfbcc76..1e94a39f 100644 --- a/apps/note/tables.py +++ b/apps/note/tables.py @@ -10,7 +10,7 @@ from django.utils.translation import gettext_lazy as _ from note_kfet.middlewares import get_current_request from permission.backends import PermissionBackend -from .models.notes import Alias +from .models.notes import Alias, Trust from .models.transactions import Transaction, TransactionTemplate from .templatetags.pretty_money import pretty_money @@ -148,6 +148,31 @@ DELETE_TEMPLATE = """ """ +class TrustTable(tables.Table): + class Meta: + attrs = { + 'class': 'table table condensed table-striped', + 'id': "trust_table" + } + model = Trust + fields = ("trusted",) + template_name = 'django_tables2/bootstrap4.html' + + show_header = False + trusted = tables.Column(attrs={'td': {'class': 'text_center'}}) + + delete_col = tables.TemplateColumn( + template_code=DELETE_TEMPLATE, + extra_context={"delete_trans": _('delete')}, + attrs={ + 'td': { + 'class': lambda record: 'col-sm-1' + + (' d-none' if not PermissionBackend.check_perm( + get_current_request(), "note.delete_trust", record) + else '')}}, + verbose_name=_("Delete"),) + + class AliasTable(tables.Table): class Meta: attrs = { diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index ddd5b0d2..1335b3aa 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -2967,6 +2967,118 @@ "description": "Supprimer une application OAuth2" } }, + { + "model": "permission.permission", + "pk": 190, + "fields": { + "model": [ + "note", + "trust" + ], + "query": "{\"trusting\": [\"user\", \"note\"]}", + "type": "delete", + "mask": 1, + "field": "", + "permanent": false, + "description": "Supprimer une amitié à sa note" + } + }, + { + "model": "permission.permission", + "pk": 191, + "fields": { + "model": [ + "note", + "trust" + ], + "query": "{\"trusting\": [\"user\", \"note\"]}", + "type": "add", + "mask": 1, + "field": "", + "permanent": false, + "description": "Ajouter une amitié à sa note" + } + }, + { + "model": "permission.permission", + "pk": 192, + "fields": { + "model": [ + "note", + "trust" + ], + "query": "{\"trusting__is_active\": true}", + "type": "add", + "mask": 1, + "field": "", + "permanent": false, + "description": "Ajouter une amitié à une note non bloquée" + } + }, + { + "model": "permission.permission", + "pk": 193, + "fields": { + "model": [ + "note", + "trust" + ], + "query": "{\"trusting__is_active\": true}", + "type": "delete", + "mask": 3, + "field": "", + "permanent": false, + "description": "Supprimer une amitié à une note non bloquée" + } + }, + { + "model": "permission.permission", + "pk": 194, + "fields": { + "model": [ + "note", + "trust" + ], + "query": "{}", + "type": "view", + "mask": 3, + "field": "", + "permanent": false, + "description": "Voir toutes les amitiés, y compris celles des non adhérents" + } + }, + { + "model": "permission.permission", + "pk": 195, + "fields": { + "model": [ + "note", + "trust" + ], + "query": "{\"trusting__noteuser__user\": [\"user\"]}", + "type": "view", + "mask": 1, + "field": "", + "permanent": true, + "description": "Voir ses propres amitiés, pour toujours" + } + }, + { + "model": "permission.permission", + "pk": 196, + "fields": { + "model": [ + "note", + "transaction" + ], + "query": "[\"AND\", {\"source__trusting__trusted\": [\"user\", \"note\"]}, [\"OR\", {\"source__balance__gte\": {\"F\": [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]]}}, {\"valid\": false}]]", + "type": "add", + "mask": 1, + "field": "", + "permanent": false, + "description": "Transférer de l'argent depuis une note amie en restant positif" + } + }, { "model": "permission.role", "pk": 1, @@ -3001,7 +3113,11 @@ 186, 187, 188, - 189 + 189, + 190, + 191, + 195, + 196 ] } }, @@ -3042,7 +3158,9 @@ 158, 159, 160, - 179 + 179, + 189, + 190 ] } }, @@ -3192,7 +3310,10 @@ 176, 177, 178, - 183 + 188, + 183, + 186, + 187 ] } }, @@ -3386,7 +3507,14 @@ 186, 187, 188, - 189 + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196 ] } }, diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 46d60dc6..215a09a7 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-29 14:06+0200\n" +"POT-Creation-Date: 2022-04-10 22:34+0200\n" "PO-Revision-Date: 2020-11-16 20:02+0000\n" "Last-Translator: Yohann D'ANELLO \n" "Language-Team: German \n" @@ -23,28 +23,32 @@ msgstr "" msgid "activity" msgstr "Veranstaltung" -#: apps/activity/forms.py:35 apps/activity/models.py:132 +#: apps/activity/forms.py:34 +msgid "The note of this club is inactive." +msgstr "" + +#: apps/activity/forms.py:41 apps/activity/models.py:132 msgid "The end date must be after the start date." msgstr "Das Abschlussdatum muss nach das Anfangsdatum sein." -#: apps/activity/forms.py:76 apps/activity/models.py:270 +#: apps/activity/forms.py:82 apps/activity/models.py:270 msgid "You can't invite someone once the activity is started." msgstr "" "Sie dürfen nicht jemandem einladen wenn die Veranstaltung angefangen hat." -#: apps/activity/forms.py:79 apps/activity/models.py:273 +#: apps/activity/forms.py:85 apps/activity/models.py:273 msgid "This activity is not validated yet." msgstr "Diese Veranstaltung ist noch nicht bestätigt." -#: apps/activity/forms.py:89 apps/activity/models.py:281 +#: apps/activity/forms.py:95 apps/activity/models.py:281 msgid "This person has been already invited 5 times this year." msgstr "Diese Person wurde schon 5 mal dieses Jahr eingeladen." -#: apps/activity/forms.py:93 apps/activity/models.py:285 +#: apps/activity/forms.py:99 apps/activity/models.py:285 msgid "This person is already invited." msgstr "Diese Person wurde schon eingeladen." -#: apps/activity/forms.py:97 apps/activity/models.py:289 +#: apps/activity/forms.py:103 apps/activity/models.py:289 msgid "You can't invite more than 3 people to this activity." msgstr "Sie dürfen höchstens 3 Leute zu dieser Veranstaltung einladen." @@ -52,11 +56,11 @@ msgstr "Sie dürfen höchstens 3 Leute zu dieser Veranstaltung einladen." #: apps/member/models.py:199 #: apps/member/templates/member/includes/club_info.html:4 #: apps/member/templates/member/includes/profile_info.html:4 -#: apps/note/models/notes.py:231 apps/note/models/transactions.py:26 +#: apps/note/models/notes.py:263 apps/note/models/transactions.py:26 #: apps/note/models/transactions.py:46 apps/note/models/transactions.py:301 #: apps/permission/models.py:330 #: apps/registration/templates/registration/future_profile_detail.html:16 -#: apps/wei/models.py:66 apps/wei/models.py:123 +#: apps/wei/models.py:67 apps/wei/models.py:131 apps/wei/tables.py:282 #: apps/wei/templates/wei/base.html:26 #: apps/wei/templates/wei/weimembership_form.html:14 msgid "name" @@ -91,7 +95,7 @@ msgstr "Vearnstaltungarte" #: apps/activity/models.py:68 #: apps/activity/templates/activity/includes/activity_info.html:19 #: apps/note/models/transactions.py:81 apps/permission/models.py:110 -#: apps/permission/models.py:189 apps/wei/models.py:77 apps/wei/models.py:134 +#: apps/permission/models.py:189 apps/wei/models.py:78 apps/wei/models.py:142 msgid "description" msgstr "Beschreibung" @@ -110,9 +114,10 @@ msgstr "Wo findet die Veranstaltung statt ? (z.B Kfet)." msgid "type" msgstr "Type" -#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305 -#: apps/note/models/notes.py:148 apps/treasury/models.py:283 -#: apps/wei/models.py:165 apps/wei/templates/wei/survey.html:15 +#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307 +#: apps/note/models/notes.py:148 apps/treasury/models.py:285 +#: apps/wei/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13 +#: apps/wei/templates/wei/survey.html:15 msgid "user" msgstr "User" @@ -194,7 +199,7 @@ msgstr "Eintritt von {note} zur Veranstaltung {activity}" msgid "Already entered on " msgstr "Schon eingetretten " -#: apps/activity/models.py:202 apps/activity/tables.py:54 +#: apps/activity/models.py:202 apps/activity/tables.py:56 msgid "{:%Y-%m-%d %H:%M:%S}" msgstr "{:%Y-%m-%d %H:%M:%S}" @@ -204,6 +209,7 @@ msgstr "Kontostand ist im Rot." #: apps/activity/models.py:240 #: apps/treasury/templates/treasury/sogecredit_detail.html:14 +#: apps/wei/templates/wei/attribute_bus_1A.html:16 msgid "last name" msgstr "Nachname" @@ -211,6 +217,7 @@ msgstr "Nachname" #: apps/member/templates/member/includes/profile_info.html:4 #: apps/registration/templates/registration/future_profile_detail.html:16 #: apps/treasury/templates/treasury/sogecredit_detail.html:17 +#: apps/wei/templates/wei/attribute_bus_1A.html:19 #: apps/wei/templates/wei/weimembership_form.html:14 msgid "first name" msgstr "Vorname" @@ -231,48 +238,48 @@ msgstr "Gäste" msgid "Invitation" msgstr "Einladung" -#: apps/activity/tables.py:25 +#: apps/activity/tables.py:27 msgid "The activity is currently open." msgstr "Die Veranstaltung ist geöffnet." -#: apps/activity/tables.py:26 +#: apps/activity/tables.py:28 msgid "The validation of the activity is pending." msgstr "Diese Veranstaltung ist noch nicht bestätigt." -#: apps/activity/tables.py:41 apps/treasury/tables.py:107 +#: apps/activity/tables.py:43 apps/treasury/tables.py:107 msgid "Remove" msgstr "Entfernen" -#: apps/activity/tables.py:54 +#: apps/activity/tables.py:56 msgid "Entered on " msgstr "Eingetreten um " -#: apps/activity/tables.py:56 +#: apps/activity/tables.py:58 msgid "remove" msgstr "entfernen" -#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:197 +#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:199 msgid "Type" msgstr "Type" -#: apps/activity/tables.py:82 apps/member/forms.py:186 -#: apps/registration/forms.py:90 apps/treasury/forms.py:130 -#: apps/wei/forms/registration.py:96 +#: apps/activity/tables.py:84 apps/member/forms.py:186 +#: apps/registration/forms.py:91 apps/treasury/forms.py:131 +#: apps/wei/forms/registration.py:104 msgid "Last name" msgstr "Nachname" -#: apps/activity/tables.py:84 apps/member/forms.py:191 -#: apps/note/templates/note/transaction_form.html:134 -#: apps/registration/forms.py:95 apps/treasury/forms.py:132 -#: apps/wei/forms/registration.py:101 +#: apps/activity/tables.py:86 apps/member/forms.py:191 +#: apps/note/templates/note/transaction_form.html:138 +#: apps/registration/forms.py:96 apps/treasury/forms.py:133 +#: apps/wei/forms/registration.py:109 msgid "First name" msgstr "Vorname" -#: apps/activity/tables.py:86 apps/note/models/notes.py:86 +#: apps/activity/tables.py:88 apps/note/models/notes.py:86 msgid "Note" msgstr "Note" -#: apps/activity/tables.py:88 apps/member/tables.py:49 +#: apps/activity/tables.py:90 apps/member/tables.py:50 msgid "Balance" msgstr "Kontostand" @@ -288,26 +295,26 @@ msgstr "Gastliste" #: apps/activity/templates/activity/activity_entry.html:14 #: apps/note/models/transactions.py:257 -#: apps/note/templates/note/transaction_form.html:16 -#: apps/note/templates/note/transaction_form.html:148 -#: note_kfet/templates/base.html:73 +#: apps/note/templates/note/transaction_form.html:17 +#: apps/note/templates/note/transaction_form.html:152 +#: note_kfet/templates/base.html:72 msgid "Transfer" msgstr "Überweisen" #: apps/activity/templates/activity/activity_entry.html:18 #: apps/note/models/transactions.py:317 -#: apps/note/templates/note/transaction_form.html:21 +#: apps/note/templates/note/transaction_form.html:22 msgid "Credit" msgstr "Kredit" #: apps/activity/templates/activity/activity_entry.html:21 #: apps/note/models/transactions.py:317 -#: apps/note/templates/note/transaction_form.html:25 +#: apps/note/templates/note/transaction_form.html:26 msgid "Debit" msgstr "Soll" #: apps/activity/templates/activity/activity_entry.html:27 -#: apps/note/templates/note/transaction_form.html:30 +#: apps/note/templates/note/transaction_form.html:34 msgid "Entries" msgstr "Eintritte" @@ -315,12 +322,12 @@ msgstr "Eintritte" msgid "Return to activity page" msgstr "Zurück zur Veranstaltungseite" -#: apps/activity/templates/activity/activity_entry.html:89 -#: apps/activity/templates/activity/activity_entry.html:124 +#: apps/activity/templates/activity/activity_entry.html:94 +#: apps/activity/templates/activity/activity_entry.html:129 msgid "Entry done, but caution: the user is not a Kfet member." msgstr "" -#: apps/activity/templates/activity/activity_entry.html:127 +#: apps/activity/templates/activity/activity_entry.html:132 #, fuzzy #| msgid "Entry page" msgid "Entry done!" @@ -330,7 +337,7 @@ msgstr "Eintrittseite" #: apps/member/templates/member/add_members.html:46 #: apps/member/templates/member/club_form.html:16 #: apps/note/templates/note/transactiontemplate_form.html:18 -#: apps/treasury/forms.py:88 apps/treasury/forms.py:142 +#: apps/treasury/forms.py:89 apps/treasury/forms.py:143 #: apps/treasury/templates/treasury/invoice_form.html:74 #: apps/wei/templates/wei/bus_form.html:17 #: apps/wei/templates/wei/busteam_form.html:17 @@ -384,7 +391,7 @@ msgid "validate" msgstr "" #: apps/activity/templates/activity/includes/activity_info.html:71 -#: apps/logs/models.py:64 apps/note/tables.py:195 +#: apps/logs/models.py:64 apps/note/tables.py:220 msgid "edit" msgstr "bearbeiten" @@ -396,35 +403,35 @@ msgstr "Einladen" msgid "Create new activity" msgstr "Neue Veranstaltung schaffen" -#: apps/activity/views.py:67 note_kfet/templates/base.html:91 +#: apps/activity/views.py:67 note_kfet/templates/base.html:90 msgid "Activities" msgstr "Veranstaltungen" -#: apps/activity/views.py:95 +#: apps/activity/views.py:93 msgid "Activity detail" msgstr "Veranstaltunginfo" -#: apps/activity/views.py:115 +#: apps/activity/views.py:113 msgid "Update activity" msgstr "Veranstaltung bearbeiten" -#: apps/activity/views.py:142 +#: apps/activity/views.py:140 msgid "Invite guest to the activity \"{}\"" msgstr "Gast zur Veranstaltung \"{}\" einladen" -#: apps/activity/views.py:177 +#: apps/activity/views.py:178 msgid "You are not allowed to display the entry interface for this activity." msgstr "Sie haben nicht das Recht diese Seite zu benuzten." -#: apps/activity/views.py:180 +#: apps/activity/views.py:181 msgid "This activity does not support activity entries." msgstr "Diese Veranstaltung braucht nicht Eintritt." -#: apps/activity/views.py:183 +#: apps/activity/views.py:184 msgid "This activity is closed." msgstr "Diese Veranstaltung ist geschlossen." -#: apps/activity/views.py:279 +#: apps/activity/views.py:280 msgid "Entry for activity \"{}\"" msgstr "Eintritt zur Veranstaltung \"{}\"" @@ -460,9 +467,9 @@ msgstr "neue Daten" msgid "create" msgstr "schaffen" -#: apps/logs/models.py:65 apps/note/tables.py:165 apps/note/tables.py:201 -#: apps/permission/models.py:127 apps/treasury/tables.py:38 -#: apps/wei/tables.py:73 +#: apps/logs/models.py:65 apps/note/tables.py:166 apps/note/tables.py:190 +#: apps/note/tables.py:237 apps/permission/models.py:127 +#: apps/treasury/tables.py:38 apps/wei/tables.py:74 msgid "delete" msgstr "entfernen" @@ -501,15 +508,15 @@ msgstr "Mitgliedschaftpreis (bezahlte Studenten)" msgid "membership fee (unpaid students)" msgstr "Mitgliedschaftpreis (unbezahlte Studenten)" -#: apps/member/admin.py:65 apps/member/models.py:317 +#: apps/member/admin.py:65 apps/member/models.py:319 msgid "roles" msgstr "Rollen" -#: apps/member/admin.py:66 apps/member/models.py:331 +#: apps/member/admin.py:66 apps/member/models.py:333 msgid "fee" msgstr "Preis" -#: apps/member/apps.py:14 apps/wei/tables.py:193 apps/wei/tables.py:224 +#: apps/member/apps.py:14 apps/wei/tables.py:226 apps/wei/tables.py:257 msgid "member" msgstr "Mitglied" @@ -541,26 +548,26 @@ msgstr "Maximal Größe: 2MB" msgid "This image cannot be loaded." msgstr "Dieses Bild kann nicht geladen werden." -#: apps/member/forms.py:141 apps/member/views.py:101 -#: apps/registration/forms.py:33 apps/registration/views.py:258 +#: apps/member/forms.py:141 apps/member/views.py:103 +#: apps/registration/forms.py:33 apps/registration/views.py:262 msgid "An alias with a similar name already exists." msgstr "Ein ähnliches Alias ist schon benutzt." -#: apps/member/forms.py:165 apps/registration/forms.py:70 +#: apps/member/forms.py:165 apps/registration/forms.py:71 msgid "Inscription paid by Société Générale" msgstr "Mitgliedschaft von der Société Générale bezahlt" -#: apps/member/forms.py:167 apps/registration/forms.py:72 +#: apps/member/forms.py:167 apps/registration/forms.py:73 msgid "Check this case if the Société Générale paid the inscription." msgstr "Die Société Générale die Mitgliedschaft bezahlt." -#: apps/member/forms.py:172 apps/registration/forms.py:77 -#: apps/wei/forms/registration.py:83 +#: apps/member/forms.py:172 apps/registration/forms.py:78 +#: apps/wei/forms/registration.py:91 msgid "Credit type" msgstr "Kredittype" -#: apps/member/forms.py:173 apps/registration/forms.py:78 -#: apps/wei/forms/registration.py:84 +#: apps/member/forms.py:173 apps/registration/forms.py:79 +#: apps/wei/forms/registration.py:92 msgid "No credit" msgstr "Kein Kredit" @@ -568,14 +575,14 @@ msgstr "Kein Kredit" msgid "You can credit the note of the user." msgstr "Sie dûrfen diese Note kreditieren." -#: apps/member/forms.py:179 apps/registration/forms.py:83 -#: apps/wei/forms/registration.py:89 +#: apps/member/forms.py:179 apps/registration/forms.py:84 +#: apps/wei/forms/registration.py:97 msgid "Credit amount" msgstr "Kreditanzahl" -#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:140 -#: apps/registration/forms.py:100 apps/treasury/forms.py:134 -#: apps/wei/forms/registration.py:106 +#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144 +#: apps/registration/forms.py:101 apps/treasury/forms.py:135 +#: apps/wei/forms/registration.py:114 msgid "Bank" msgstr "Bank" @@ -587,15 +594,33 @@ msgstr "User" msgid "Roles" msgstr "Rollen" +#: apps/member/hashers.py:57 +msgid "algorithm" +msgstr "" + +#: apps/member/hashers.py:58 +#, fuzzy +#| msgid "Registrations" +msgid "iterations" +msgstr "Anmeldung" + +#: apps/member/hashers.py:59 +msgid "salt" +msgstr "" + +#: apps/member/hashers.py:60 +msgid "hash" +msgstr "" + #: apps/member/models.py:38 -#: apps/member/templates/member/includes/profile_info.html:35 +#: apps/member/templates/member/includes/profile_info.html:43 #: apps/registration/templates/registration/future_profile_detail.html:40 #: apps/wei/templates/wei/weimembership_form.html:44 msgid "phone number" msgstr "Telefonnummer" #: apps/member/models.py:45 -#: apps/member/templates/member/includes/profile_info.html:29 +#: apps/member/templates/member/includes/profile_info.html:37 #: apps/registration/templates/registration/future_profile_detail.html:34 #: apps/wei/templates/wei/weimembership_form.html:38 msgid "section" @@ -605,7 +630,8 @@ msgstr "Section" msgid "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\"" msgstr "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\"" -#: apps/member/models.py:54 apps/wei/templates/wei/weimembership_form.html:32 +#: apps/member/models.py:54 apps/wei/templates/wei/attribute_bus_1A.html:25 +#: apps/wei/templates/wei/weimembership_form.html:32 msgid "department" msgstr "Fachabteilung" @@ -682,14 +708,14 @@ msgid "Year of entry to the school (None if not ENS student)" msgstr "ENS Eintrittjahr (None wenn kein ENS Student)" #: apps/member/models.py:83 -#: apps/member/templates/member/includes/profile_info.html:39 +#: apps/member/templates/member/includes/profile_info.html:47 #: apps/registration/templates/registration/future_profile_detail.html:37 #: apps/wei/templates/wei/weimembership_form.html:41 msgid "address" msgstr "Adresse" #: apps/member/models.py:90 -#: apps/member/templates/member/includes/profile_info.html:46 +#: apps/member/templates/member/includes/profile_info.html:50 #: apps/registration/templates/registration/future_profile_detail.html:43 #: apps/wei/templates/wei/weimembership_form.html:47 msgid "paid" @@ -761,7 +787,7 @@ msgstr "Ihre Note Kfet Konto bestätigen" #: apps/member/models.py:204 #: apps/member/templates/member/includes/club_info.html:55 -#: apps/member/templates/member/includes/profile_info.html:32 +#: apps/member/templates/member/includes/profile_info.html:40 #: apps/registration/templates/registration/future_profile_detail.html:22 #: apps/wei/templates/wei/base.html:70 #: apps/wei/templates/wei/weimembership_form.html:20 @@ -810,50 +836,50 @@ msgid "Maximal date of a membership, after which members must renew it." msgstr "" "Maximales Datum einer Mitgliedschaft, nach dem Mitglieder es erneuern müssen." -#: apps/member/models.py:286 apps/member/models.py:311 +#: apps/member/models.py:288 apps/member/models.py:313 #: apps/note/models/notes.py:176 msgid "club" msgstr "Club" -#: apps/member/models.py:287 +#: apps/member/models.py:289 msgid "clubs" msgstr "Clubs" -#: apps/member/models.py:322 +#: apps/member/models.py:324 msgid "membership starts on" msgstr "Mitgliedschaft fängt an" -#: apps/member/models.py:326 +#: apps/member/models.py:328 msgid "membership ends on" msgstr "Mitgliedschaft endet am" -#: apps/member/models.py:422 +#: apps/member/models.py:430 #, python-brace-format msgid "The role {role} does not apply to the club {club}." msgstr "Die Rolle {role} ist nicht erlaubt für das Club {club}." -#: apps/member/models.py:431 apps/member/views.py:651 +#: apps/member/models.py:439 apps/member/views.py:712 msgid "User is already a member of the club" msgstr "User ist schon ein Mitglied dieser club" -#: apps/member/models.py:443 apps/member/views.py:661 +#: apps/member/models.py:451 apps/member/views.py:721 msgid "User is not a member of the parent club" msgstr "User ist noch nicht Mitglied des Urclubs" -#: apps/member/models.py:496 +#: apps/member/models.py:504 #, python-brace-format msgid "Membership of {user} for the club {club}" msgstr "Mitgliedschaft von {user} für das Club {club}" -#: apps/member/models.py:499 apps/note/models/transactions.py:389 +#: apps/member/models.py:507 apps/note/models/transactions.py:389 msgid "membership" msgstr "Mitgliedschaft" -#: apps/member/models.py:500 +#: apps/member/models.py:508 msgid "memberships" msgstr "Mitgliedschaften" -#: apps/member/tables.py:137 +#: apps/member/tables.py:139 msgid "Renew" msgstr "Erneuern" @@ -904,7 +930,7 @@ msgid "Account #" msgstr "Konto #" #: apps/member/templates/member/base.html:48 -#: apps/member/templates/member/base.html:62 apps/member/views.py:58 +#: apps/member/templates/member/base.html:62 apps/member/views.py:60 #: apps/registration/templates/registration/future_profile_detail.html:48 #: apps/wei/templates/wei/weimembership_form.html:117 msgid "Update Profile" @@ -948,7 +974,8 @@ msgstr "" "zu aufschliessen." #: apps/member/templates/member/base.html:110 -#: apps/member/templates/member/base.html:137 apps/treasury/forms.py:90 +#: apps/member/templates/member/base.html:137 apps/treasury/forms.py:91 +#: apps/treasury/templates/treasury/sogecredit_list.html:72 msgid "Close" msgstr "Schluss" @@ -964,14 +991,17 @@ msgstr "" "erlaubt." #: apps/member/templates/member/club_alias.html:10 -#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:253 -#: apps/member/views.py:456 +#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:287 +#: apps/member/views.py:517 msgid "Note aliases" msgstr "Note Aliases" #: apps/member/templates/member/club_alias.html:20 #: apps/member/templates/member/profile_alias.html:19 +#: apps/member/templates/member/profile_trust.html:19 #: apps/treasury/tables.py:99 +#: apps/treasury/templates/treasury/sogecredit_list.html:34 +#: apps/treasury/templates/treasury/sogecredit_list.html:73 msgid "Add" msgstr "Neue" @@ -1021,7 +1051,7 @@ msgid "membership fee" msgstr "Mitgliedsachftpreis" #: apps/member/templates/member/includes/club_info.html:43 -#: apps/member/templates/member/includes/profile_info.html:43 +#: apps/member/templates/member/includes/profile_info.html:55 #: apps/treasury/templates/treasury/sogecredit_detail.html:24 #: apps/wei/templates/wei/base.html:60 msgid "balance" @@ -1029,7 +1059,7 @@ msgstr "Kontostand" #: apps/member/templates/member/includes/club_info.html:47 #: apps/member/templates/member/includes/profile_info.html:20 -#: apps/note/models/notes.py:255 apps/wei/templates/wei/base.html:66 +#: apps/note/models/notes.py:287 apps/wei/templates/wei/base.html:66 msgid "aliases" msgstr "Aliases" @@ -1053,22 +1083,71 @@ msgstr "Kennwort" msgid "Change password" msgstr "Kennword ändern" -#: apps/member/templates/member/includes/profile_info.html:55 +#: apps/member/templates/member/includes/profile_info.html:28 +#: apps/note/models/notes.py:244 +msgid "friendships" +msgstr "" + +#: apps/member/templates/member/includes/profile_info.html:32 +#, fuzzy +#| msgid "Manage aliases" +msgid "Manage friendships" +msgstr "Aliases bearbeiten" + +#: apps/member/templates/member/includes/profile_info.html:63 msgid "API token" msgstr "API token" -#: apps/member/templates/member/manage_auth_tokens.html:19 +#: apps/member/templates/member/manage_auth_tokens.html:12 +#, fuzzy +#| msgid "Central Authentication Service" +msgid "Token authentication" +msgstr "Central Authentication Service" + +#: apps/member/templates/member/manage_auth_tokens.html:28 msgid "Token" msgstr "Token" -#: apps/member/templates/member/manage_auth_tokens.html:26 +#: apps/member/templates/member/manage_auth_tokens.html:35 msgid "Created" msgstr "Neue" -#: apps/member/templates/member/manage_auth_tokens.html:34 +#: apps/member/templates/member/manage_auth_tokens.html:39 +msgid "Warning" +msgstr "" + +#: apps/member/templates/member/manage_auth_tokens.html:44 msgid "Regenerate token" msgstr "Token erneuern" +#: apps/member/templates/member/manage_auth_tokens.html:53 +#, fuzzy +#| msgid "Account activation" +msgid "OAuth2 authentication" +msgstr "Kontoaktivierung" + +#: apps/member/templates/member/manage_auth_tokens.html:79 +msgid "Authorization:" +msgstr "" + +#: apps/member/templates/member/manage_auth_tokens.html:83 +#, fuzzy +#| msgid "Token" +msgid "Token:" +msgstr "Token" + +#: apps/member/templates/member/manage_auth_tokens.html:87 +msgid "Revoke Token:" +msgstr "" + +#: apps/member/templates/member/manage_auth_tokens.html:91 +msgid "Introspect Token:" +msgstr "" + +#: apps/member/templates/member/manage_auth_tokens.html:97 +msgid "Show my applications" +msgstr "" + #: apps/member/templates/member/picture_update.html:35 msgid "Nevermind" msgstr "Vergessen" @@ -1093,6 +1172,19 @@ msgstr "Click hier um eine Bestätigunglinke zu schicken." msgid "View my memberships" msgstr "Meine Mitgliedschaften schauen" +#: apps/member/templates/member/profile_trust.html:10 apps/member/views.py:254 +msgid "Note friendships" +msgstr "" + +#: apps/member/templates/member/profile_trust.html:28 +msgid "" +"Adding someone as a friend enables them to initiate transactions coming from " +"your account (while keeping your balance positive). This is designed to " +"simplify using note kfet transfers to transfer money between users. The " +"intent is that one person can make all transfers for a group of friends " +"without needing additional rights among them." +msgstr "" + #: apps/member/templates/member/profile_update.html:18 msgid "Save Changes" msgstr "Speichern" @@ -1101,47 +1193,47 @@ msgstr "Speichern" msgid "Registrations" msgstr "Anmeldung" -#: apps/member/views.py:71 apps/registration/forms.py:23 +#: apps/member/views.py:73 apps/registration/forms.py:23 msgid "This address must be valid." msgstr "Diese Adresse muss gültig sein." -#: apps/member/views.py:138 +#: apps/member/views.py:140 msgid "Profile detail" msgstr "Profile detail" -#: apps/member/views.py:205 +#: apps/member/views.py:206 msgid "Search user" msgstr "User finden" -#: apps/member/views.py:273 +#: apps/member/views.py:308 msgid "Update note picture" msgstr "Notebild ändern" -#: apps/member/views.py:319 +#: apps/member/views.py:354 msgid "Manage auth token" msgstr "Auth token bearbeiten" -#: apps/member/views.py:346 +#: apps/member/views.py:381 msgid "Create new club" msgstr "Neue Club" -#: apps/member/views.py:365 +#: apps/member/views.py:400 msgid "Search club" msgstr "Club finden" -#: apps/member/views.py:398 +#: apps/member/views.py:433 msgid "Club detail" msgstr "Club Details" -#: apps/member/views.py:479 +#: apps/member/views.py:540 msgid "Update club" msgstr "Club bearbeiten" -#: apps/member/views.py:513 +#: apps/member/views.py:574 msgid "Add new member to the club" msgstr "Neue Mitglieder" -#: apps/member/views.py:642 apps/wei/views.py:917 +#: apps/member/views.py:703 apps/wei/views.py:973 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." @@ -1149,19 +1241,19 @@ msgstr "" "Diese User hat nicht genug Geld um Mitglied zu werden, und darf nich im Rot " "sein." -#: apps/member/views.py:665 +#: apps/member/views.py:725 msgid "The membership must start after {:%m-%d-%Y}." msgstr "Die Mitgliedschaft muss nach {:%m-%d-Y} anfängen." -#: apps/member/views.py:670 +#: apps/member/views.py:730 msgid "The membership must begin before {:%m-%d-%Y}." msgstr "Die Mitgliedschaft muss vor {:%m-%d-Y} anfängen." -#: apps/member/views.py:816 +#: apps/member/views.py:876 msgid "Manage roles of an user in the club" msgstr "Rollen in diesen Club bearbeiten" -#: apps/member/views.py:841 +#: apps/member/views.py:901 msgid "Members of the club" msgstr "Mitlglieder dieses Club" @@ -1179,7 +1271,7 @@ msgstr "Empfänger" msgid "amount" msgstr "Anzahl" -#: apps/note/api/serializers.py:183 apps/note/api/serializers.py:189 +#: apps/note/api/serializers.py:199 apps/note/api/serializers.py:205 #: apps/note/models/transactions.py:228 msgid "" "The transaction can't be saved since the source note or the destination note " @@ -1196,7 +1288,7 @@ msgstr "Sender" msgid "Destination" msgstr "Empfänger" -#: apps/note/forms.py:74 apps/note/templates/note/transaction_form.html:119 +#: apps/note/forms.py:74 apps/note/templates/note/transaction_form.html:123 msgid "Reason" msgstr "Grund" @@ -1310,30 +1402,47 @@ msgstr "Sondernote" msgid "special notes" msgstr "Sondernoten" -#: apps/note/models/notes.py:237 +#: apps/note/models/notes.py:232 +msgid "trusting" +msgstr "" + +#: apps/note/models/notes.py:239 +msgid "trusted" +msgstr "" + +#: apps/note/models/notes.py:243 +msgid "frienship" +msgstr "" + +#: apps/note/models/notes.py:248 +#, python-brace-format +msgid "Friendship between {trusting} and {trusted}" +msgstr "" + +#: apps/note/models/notes.py:269 msgid "Invalid alias" msgstr "Unerlaublt Alias" -#: apps/note/models/notes.py:254 +#: apps/note/models/notes.py:286 msgid "alias" msgstr "Alias" -#: apps/note/models/notes.py:278 +#: apps/note/models/notes.py:310 msgid "Alias is too long." msgstr "Alias ist zu lang." -#: apps/note/models/notes.py:281 +#: apps/note/models/notes.py:313 msgid "" "This alias contains only complex character. Please use a more simple alias." msgstr "" "Dieser Alias enthält nur komplexe Zeichen. Bitte verwenden Sie einen " "einfacheren Alias." -#: apps/note/models/notes.py:285 +#: apps/note/models/notes.py:317 msgid "An alias with a similar name already exists: {} " msgstr "Ein Alias mit einem ähnlichen Namen existiert bereits: {} " -#: apps/note/models/notes.py:299 +#: apps/note/models/notes.py:331 msgid "You can't delete your main alias." msgstr "Sie können Ihren Hauptalias nicht löschen." @@ -1444,8 +1553,8 @@ msgstr "" "Zahlungsmethode zugeordnet ist, und einem User oder einem Club möglich" #: apps/note/models/transactions.py:355 apps/note/models/transactions.py:358 -#: apps/note/models/transactions.py:361 apps/wei/views.py:922 -#: apps/wei/views.py:926 +#: apps/note/models/transactions.py:361 apps/wei/views.py:978 +#: apps/wei/views.py:982 msgid "This field is required." msgstr "Dies ist ein Pflichtfeld." @@ -1461,7 +1570,7 @@ msgstr "Sondertranskationen" msgid "membership transaction" msgstr "Mitgliedschafttransaktion" -#: apps/note/models/transactions.py:385 apps/treasury/models.py:289 +#: apps/note/models/transactions.py:385 apps/treasury/models.py:292 msgid "membership transactions" msgstr "Mitgliedschaftttransaktionen" @@ -1477,25 +1586,34 @@ msgstr "Klicken Sie zum gültigmachen" msgid "No reason specified" msgstr "Kein Grund gegeben" -#: apps/note/tables.py:169 apps/note/tables.py:203 apps/treasury/tables.py:39 +#: apps/note/tables.py:173 apps/note/tables.py:194 apps/note/tables.py:239 +#: apps/treasury/tables.py:39 #: apps/treasury/templates/treasury/invoice_confirm_delete.html:30 #: apps/treasury/templates/treasury/sogecredit_detail.html:65 -#: apps/wei/tables.py:74 apps/wei/tables.py:114 +#: apps/wei/tables.py:75 apps/wei/tables.py:118 #: apps/wei/templates/wei/weiregistration_confirm_delete.html:31 +#: note_kfet/templates/oauth2_provider/application_confirm_delete.html:18 +#: note_kfet/templates/oauth2_provider/application_detail.html:39 +#: note_kfet/templates/oauth2_provider/authorized-token-delete.html:12 msgid "Delete" msgstr "Löschen" -#: apps/note/tables.py:197 apps/note/templates/note/conso_form.html:132 -#: apps/wei/tables.py:48 apps/wei/tables.py:49 +#: apps/note/tables.py:222 apps/note/templates/note/conso_form.html:132 +#: apps/wei/tables.py:49 apps/wei/tables.py:50 #: apps/wei/templates/wei/base.html:89 #: apps/wei/templates/wei/bus_detail.html:20 #: apps/wei/templates/wei/busteam_detail.html:20 #: apps/wei/templates/wei/busteam_detail.html:40 +#: note_kfet/templates/oauth2_provider/application_detail.html:38 msgid "Edit" msgstr "Bearbeiten" +#: apps/note/tables.py:226 apps/note/tables.py:253 +msgid "Hide/Show" +msgstr "" + #: apps/note/templates/note/conso_form.html:22 -#: apps/note/templates/note/transaction_form.html:44 +#: apps/note/templates/note/transaction_form.html:48 msgid "Please select a note" msgstr "Wählen Sie eine Note" @@ -1504,8 +1622,8 @@ msgid "Consum" msgstr "Konsumieren" #: apps/note/templates/note/conso_form.html:43 -#: apps/note/templates/note/transaction_form.html:65 -#: apps/note/templates/note/transaction_form.html:92 +#: apps/note/templates/note/transaction_form.html:69 +#: apps/note/templates/note/transaction_form.html:96 msgid "Name or alias..." msgstr "Name oder Alias..." @@ -1530,7 +1648,7 @@ msgid "Double consumptions" msgstr "Doppelte Modus" #: apps/note/templates/note/conso_form.html:154 -#: apps/note/templates/note/transaction_form.html:159 +#: apps/note/templates/note/transaction_form.html:163 msgid "Recent transactions history" msgstr "Verlauf der letzten Transaktionen" @@ -1545,45 +1663,45 @@ msgstr "Verlauf der letzten Transaktionen" msgid "Mail generated by the Note Kfet on the" msgstr "Mail generiert vom Note Kfet auf dem" -#: apps/note/templates/note/transaction_form.html:54 -#: apps/note/templates/note/transaction_form.html:174 +#: apps/note/templates/note/transaction_form.html:58 +#: apps/note/templates/note/transaction_form.html:178 msgid "Select emitters" msgstr "Sender auswählen" -#: apps/note/templates/note/transaction_form.html:69 +#: apps/note/templates/note/transaction_form.html:73 msgid "I am the emitter" msgstr "Ich bin der Sender" -#: apps/note/templates/note/transaction_form.html:81 -#: apps/note/templates/note/transaction_form.html:176 +#: apps/note/templates/note/transaction_form.html:85 +#: apps/note/templates/note/transaction_form.html:180 msgid "Select receivers" msgstr "Empfänger auswählen" -#: apps/note/templates/note/transaction_form.html:104 +#: apps/note/templates/note/transaction_form.html:108 msgid "Action" msgstr "Aktion" -#: apps/note/templates/note/transaction_form.html:112 -#: apps/treasury/forms.py:136 apps/treasury/tables.py:67 +#: apps/note/templates/note/transaction_form.html:116 +#: apps/treasury/forms.py:137 apps/treasury/tables.py:67 #: apps/treasury/tables.py:132 #: apps/treasury/templates/treasury/remittance_form.html:23 msgid "Amount" msgstr "Anzahl" -#: apps/note/templates/note/transaction_form.html:128 -#: apps/treasury/models.py:52 +#: apps/note/templates/note/transaction_form.html:132 +#: apps/treasury/models.py:54 msgid "Name" msgstr "Name" -#: apps/note/templates/note/transaction_form.html:173 +#: apps/note/templates/note/transaction_form.html:177 msgid "Select emitter" msgstr "Sender auswählen" -#: apps/note/templates/note/transaction_form.html:175 +#: apps/note/templates/note/transaction_form.html:179 msgid "Select receiver" msgstr "Empfänger auswählen" -#: apps/note/templates/note/transaction_form.html:177 +#: apps/note/templates/note/transaction_form.html:181 msgid "Transfer type" msgstr "Überweisungtype" @@ -1623,6 +1741,22 @@ msgstr "Taste erfolgreich gelöscht " msgid "Unable to delete button " msgstr "Tatse kann nicht gelöscht werden " +#: apps/note/templates/note/transactiontemplate_list.html:95 +#, fuzzy +#| msgid "Buttons list" +msgid "Button hidden" +msgstr "Tastenliste" + +#: apps/note/templates/note/transactiontemplate_list.html:96 +#, fuzzy +#| msgid "Buttons list" +msgid "Button displayed" +msgstr "Tastenliste" + +#: apps/note/templates/note/transactiontemplate_list.html:100 +msgid "An error occured" +msgstr "" + #: apps/note/views.py:36 msgid "Transfer money" msgstr "Geld überweisen" @@ -1639,7 +1773,7 @@ msgstr "Tatsen finden" msgid "Update button" msgstr "Tatse bearbeiten" -#: apps/note/views.py:151 note_kfet/templates/base.html:67 +#: apps/note/views.py:151 note_kfet/templates/base.html:66 msgid "Consumptions" msgstr "Verbräuche" @@ -1730,7 +1864,7 @@ msgstr "Für Club" msgid "role permissions" msgstr "Berechtigung Rollen" -#: apps/permission/signals.py:63 +#: apps/permission/signals.py:73 #, python-brace-format msgid "" "You don't have the permission to change the field {field} on this instance " @@ -1739,7 +1873,7 @@ msgstr "" "Sie haben nicht die Berechtigung, das Feld {field} in dieser Instanz von " "Modell {app_label} zu ändern. {model_name}" -#: apps/permission/signals.py:73 apps/permission/views.py:105 +#: apps/permission/signals.py:83 apps/permission/views.py:105 #, python-brace-format msgid "" "You don't have the permission to add an instance of model {app_label}." @@ -1748,7 +1882,7 @@ msgstr "" "Sie haben nicht die Berechtigung, eine Instanz von model {app_label}. " "{model_name} hinzufügen." -#: apps/permission/signals.py:102 +#: apps/permission/signals.py:112 #, python-brace-format msgid "" "You don't have the permission to delete this instance of model {app_label}." @@ -1797,6 +1931,25 @@ msgstr "Abfrage:" msgid "No associated permission" msgstr "Keine zugehörige Berechtigung" +#: apps/permission/templates/permission/scopes.html:8 +msgid "Available scopes" +msgstr "" + +#: apps/permission/templates/permission/scopes.html:42 +#: note_kfet/templates/oauth2_provider/application_list.html:24 +msgid "No applications defined" +msgstr "" + +#: apps/permission/templates/permission/scopes.html:43 +#: note_kfet/templates/oauth2_provider/application_list.html:25 +msgid "Click here" +msgstr "" + +#: apps/permission/templates/permission/scopes.html:43 +#: note_kfet/templates/oauth2_provider/application_list.html:25 +msgid "if you want to register a new one" +msgstr "" + #: apps/permission/views.py:72 #, python-brace-format msgid "" @@ -1817,7 +1970,7 @@ msgstr "" "diesen Parametern zu erstellen. Bitte korrigieren Sie Ihre Daten und " "versuchen Sie es erneut." -#: apps/permission/views.py:112 note_kfet/templates/base.html:109 +#: apps/permission/views.py:112 note_kfet/templates/base.html:108 msgid "Rights" msgstr "Rechten" @@ -1837,21 +1990,21 @@ msgstr "Diese email adresse ist schon benutzt." #, fuzzy #| msgid "You already opened an account in the Société générale." msgid "" -"I declare that I opened a bank account in the Société générale with the BDE " -"partnership." +"I declare that I opened or I will open soon a bank account in the Société " +"générale with the BDE partnership." msgstr "Sie haben bereits ein Konto in der Société générale eröffnet." -#: apps/registration/forms.py:50 +#: apps/registration/forms.py:51 msgid "" "Warning: this engages you to open your bank account. If you finally decides " "to don't open your account, you will have to pay the BDE membership." msgstr "" -#: apps/registration/forms.py:58 +#: apps/registration/forms.py:59 msgid "Register to the WEI" msgstr "Zu WEI anmelden" -#: apps/registration/forms.py:60 +#: apps/registration/forms.py:61 msgid "" "Check this case if you want to register to the WEI. If you hesitate, you " "will be able to register later, after validating your account in the Kfet." @@ -1860,11 +2013,11 @@ msgstr "" "falls Zweifel, können Sie sich später nach Bestätigung Ihres Kontos im Kfet " "registrieren." -#: apps/registration/forms.py:105 +#: apps/registration/forms.py:106 msgid "Join BDE Club" msgstr "BDE Mitglieder werden" -#: apps/registration/forms.py:112 +#: apps/registration/forms.py:113 msgid "Join Kfet Club" msgstr "Kfet Mitglieder werden" @@ -1979,196 +2132,196 @@ msgstr "Die NoteKfet Team." msgid "Register new user" msgstr "Neuen User registrieren" -#: apps/registration/views.py:93 +#: apps/registration/views.py:98 msgid "Email validation" msgstr "Email validierung" -#: apps/registration/views.py:95 +#: apps/registration/views.py:100 msgid "Validate email" msgstr "Email validieren" -#: apps/registration/views.py:137 +#: apps/registration/views.py:144 msgid "Email validation unsuccessful" msgstr "Email validierung unerfolgreich" -#: apps/registration/views.py:148 +#: apps/registration/views.py:155 msgid "Email validation email sent" msgstr "Validierungsemail wurde gesendet" -#: apps/registration/views.py:156 +#: apps/registration/views.py:163 msgid "Resend email validation link" msgstr "E-Mail-Validierungslink erneut senden" -#: apps/registration/views.py:174 +#: apps/registration/views.py:181 msgid "Pre-registered users list" msgstr "Vorregistrierte Userliste" -#: apps/registration/views.py:198 +#: apps/registration/views.py:205 msgid "Unregistered users" msgstr "Unregistrierte Users" -#: apps/registration/views.py:211 +#: apps/registration/views.py:218 msgid "Registration detail" msgstr "Registrierung Detailen" -#: apps/registration/views.py:278 +#: apps/registration/views.py:282 msgid "You must join the BDE." msgstr "Sie müssen die BDE beitreten." -#: apps/registration/views.py:302 +#: apps/registration/views.py:306 msgid "" "The entered amount is not enough for the memberships, should be at least {}" msgstr "" "Der eingegebene Betrag reicht für die Mitgliedschaft nicht aus, sollte " "mindestens {} betragen" -#: apps/registration/views.py:383 +#: apps/registration/views.py:387 msgid "Invalidate pre-registration" msgstr "Ungültige Vorregistrierung" -#: apps/treasury/apps.py:12 note_kfet/templates/base.html:97 +#: apps/treasury/apps.py:12 note_kfet/templates/base.html:96 msgid "Treasury" msgstr "Quaestor" -#: apps/treasury/forms.py:25 apps/treasury/models.py:91 +#: apps/treasury/forms.py:26 apps/treasury/models.py:93 #: apps/treasury/templates/treasury/invoice_form.html:22 msgid "This invoice is locked and can no longer be edited." msgstr "Diese Rechnung ist gesperrt und kann nicht mehr bearbeitet werden." -#: apps/treasury/forms.py:99 +#: apps/treasury/forms.py:100 msgid "Remittance is already closed." msgstr "Überweisung ist bereits geschlossen." -#: apps/treasury/forms.py:104 +#: apps/treasury/forms.py:105 msgid "You can't change the type of the remittance." msgstr "Sie können die Art der Überweisung nicht ändern." -#: apps/treasury/forms.py:124 apps/treasury/models.py:265 +#: apps/treasury/forms.py:125 apps/treasury/models.py:267 #: apps/treasury/tables.py:97 apps/treasury/tables.py:105 #: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16 -#: apps/treasury/templates/treasury/sogecredit_list.html:16 +#: apps/treasury/templates/treasury/sogecredit_list.html:17 msgid "Remittance" msgstr "Überweisung" -#: apps/treasury/forms.py:125 +#: apps/treasury/forms.py:126 msgid "No attached remittance" msgstr "Keine beigefügte Überweisung" -#: apps/treasury/models.py:24 +#: apps/treasury/models.py:26 msgid "Invoice identifier" msgstr "Rechnungskennung" -#: apps/treasury/models.py:38 +#: apps/treasury/models.py:40 msgid "BDE" msgstr "BDE" -#: apps/treasury/models.py:43 +#: apps/treasury/models.py:45 msgid "Object" msgstr "Objekt" -#: apps/treasury/models.py:47 +#: apps/treasury/models.py:49 msgid "Description" msgstr "Beschreibung" -#: apps/treasury/models.py:56 +#: apps/treasury/models.py:58 msgid "Address" msgstr "Adresse" -#: apps/treasury/models.py:61 apps/treasury/models.py:191 +#: apps/treasury/models.py:63 apps/treasury/models.py:193 msgid "Date" msgstr "Datum" -#: apps/treasury/models.py:65 +#: apps/treasury/models.py:67 msgid "Acquitted" msgstr "Bezahlt" -#: apps/treasury/models.py:70 +#: apps/treasury/models.py:72 msgid "Locked" msgstr "Gesperrt" -#: apps/treasury/models.py:71 +#: apps/treasury/models.py:73 msgid "An invoice can't be edited when it is locked." msgstr "Eine Rechnung kann nicht bearbeitet werden, wenn sie gesperrt ist." -#: apps/treasury/models.py:77 +#: apps/treasury/models.py:79 msgid "tex source" msgstr "Tex Quelle" -#: apps/treasury/models.py:111 apps/treasury/models.py:127 +#: apps/treasury/models.py:113 apps/treasury/models.py:129 msgid "invoice" msgstr "Rechnung" -#: apps/treasury/models.py:112 +#: apps/treasury/models.py:114 msgid "invoices" msgstr "Rechnungen" -#: apps/treasury/models.py:115 +#: apps/treasury/models.py:117 #, python-brace-format msgid "Invoice #{id}" msgstr "Rechnung #{id}" -#: apps/treasury/models.py:132 +#: apps/treasury/models.py:134 msgid "Designation" msgstr "Bezeichnung" -#: apps/treasury/models.py:138 +#: apps/treasury/models.py:140 msgid "Quantity" msgstr "Qualität" -#: apps/treasury/models.py:143 +#: apps/treasury/models.py:145 msgid "Unit price" msgstr "Einzelpreis" -#: apps/treasury/models.py:159 +#: apps/treasury/models.py:161 msgid "product" msgstr "Produkt" -#: apps/treasury/models.py:160 +#: apps/treasury/models.py:162 msgid "products" msgstr "Produkten" -#: apps/treasury/models.py:180 +#: apps/treasury/models.py:182 msgid "remittance type" msgstr "Überweisungstyp" -#: apps/treasury/models.py:181 +#: apps/treasury/models.py:183 msgid "remittance types" msgstr "Überweisungstypen" -#: apps/treasury/models.py:202 +#: apps/treasury/models.py:204 msgid "Comment" msgstr "Kommentar" -#: apps/treasury/models.py:207 +#: apps/treasury/models.py:209 msgid "Closed" msgstr "Geschlossen" -#: apps/treasury/models.py:211 +#: apps/treasury/models.py:213 msgid "remittance" msgstr "Überweisung" -#: apps/treasury/models.py:212 +#: apps/treasury/models.py:214 msgid "remittances" msgstr "Überweisungen" -#: apps/treasury/models.py:245 +#: apps/treasury/models.py:247 msgid "Remittance #{:d}: {}" msgstr "Überweisung #{:d}:{}" -#: apps/treasury/models.py:269 +#: apps/treasury/models.py:271 msgid "special transaction proxy" msgstr "spezielle Transaktion Proxy" -#: apps/treasury/models.py:270 +#: apps/treasury/models.py:272 msgid "special transaction proxies" msgstr "spezielle Transaktion Proxies" -#: apps/treasury/models.py:295 +#: apps/treasury/models.py:298 msgid "credit transaction" msgstr "Kredit Transaktion" -#: apps/treasury/models.py:379 +#: apps/treasury/models.py:430 msgid "" "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." @@ -2176,16 +2329,16 @@ msgstr "" "Dieser Benutzer hat nicht genug Geld, um die Mitgliedschaften mit seiner " "Note zu bezahlen." -#: apps/treasury/models.py:399 +#: apps/treasury/models.py:451 #: apps/treasury/templates/treasury/sogecredit_detail.html:10 msgid "Credit from the Société générale" msgstr "Kredit von der Société générale" -#: apps/treasury/models.py:400 +#: apps/treasury/models.py:452 msgid "Credits from the Société générale" msgstr "Krediten von der Société générale" -#: apps/treasury/models.py:403 +#: apps/treasury/models.py:455 #, python-brace-format msgid "Soge credit for {user}" msgstr "Kredit von der Société générale für {user}" @@ -2197,7 +2350,7 @@ msgstr "Rechnung #{:d}" #: apps/treasury/tables.py:25 #: apps/treasury/templates/treasury/invoice_list.html:13 #: apps/treasury/templates/treasury/remittance_list.html:13 -#: apps/treasury/templates/treasury/sogecredit_list.html:13 +#: apps/treasury/templates/treasury/sogecredit_list.html:14 msgid "Invoice" msgstr "Rechnung" @@ -2214,12 +2367,12 @@ msgid "Yes" msgstr "Ja" #: apps/treasury/templates/treasury/invoice_confirm_delete.html:10 -#: apps/treasury/views.py:179 +#: apps/treasury/views.py:180 msgid "Delete invoice" msgstr "Rechnung löschen" #: apps/treasury/templates/treasury/invoice_confirm_delete.html:15 -#: apps/treasury/views.py:183 +#: apps/treasury/views.py:184 msgid "This invoice is locked and can't be deleted." msgstr "Eine Rechnung kann nicht gelöscht werden, wenn sie gesperrt ist." @@ -2253,7 +2406,7 @@ msgstr "Produkt entfernen" #: apps/treasury/templates/treasury/invoice_list.html:19 #: apps/treasury/templates/treasury/remittance_list.html:19 -#: apps/treasury/templates/treasury/sogecredit_list.html:19 +#: apps/treasury/templates/treasury/sogecredit_list.html:20 msgid "Société générale credits" msgstr "Krediten von der Société générale" @@ -2367,7 +2520,7 @@ msgstr "" "Kredit löschen." #: apps/treasury/templates/treasury/sogecredit_detail.html:63 -#: apps/wei/tables.py:59 apps/wei/tables.py:101 +#: apps/wei/tables.py:60 apps/wei/tables.py:102 msgid "Validate" msgstr "Validieren" @@ -2375,69 +2528,85 @@ msgstr "Validieren" msgid "Return to credit list" msgstr "Zurück zur Kreditlist" -#: apps/treasury/templates/treasury/sogecredit_list.html:34 +#: apps/treasury/templates/treasury/sogecredit_list.html:40 msgid "Filter with unvalidated credits only" msgstr "Filtern Sie nur mit nicht validierten Kredits" -#: apps/treasury/templates/treasury/sogecredit_list.html:44 +#: 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." msgstr "" "Es gibt keinen übereinstimmenden User, der eine Kredit für die Société " "générale beantragt hat." -#: apps/treasury/views.py:39 +#: apps/treasury/templates/treasury/sogecredit_list.html:63 +#, fuzzy +#| msgid "Credit from the Société générale" +msgid "Add credit from the Société générale" +msgstr "Kredit von der Société générale" + +#: apps/treasury/templates/treasury/sogecredit_list.html:109 +#, fuzzy +#| msgid "button successfully deleted " +msgid "Credit successfully registered" +msgstr "Taste erfolgreich gelöscht " + +#: apps/treasury/views.py:40 msgid "Create new invoice" msgstr "Neue Rechnung" -#: apps/treasury/views.py:96 +#: apps/treasury/views.py:97 msgid "Invoices list" msgstr "Rechnunglist" -#: apps/treasury/views.py:111 apps/treasury/views.py:285 -#: apps/treasury/views.py:411 +#: apps/treasury/views.py:112 apps/treasury/views.py:286 +#: apps/treasury/views.py:412 msgid "You are not able to see the treasury interface." msgstr "Sie können die Quaestor-App nicht sehen." -#: apps/treasury/views.py:121 +#: apps/treasury/views.py:122 msgid "Update an invoice" msgstr "Rechnung bearbeiten" -#: apps/treasury/views.py:246 +#: apps/treasury/views.py:247 msgid "Create a new remittance" msgstr "Neue Überweisung" -#: apps/treasury/views.py:273 +#: apps/treasury/views.py:274 msgid "Remittances list" msgstr "Überweisungliste" -#: apps/treasury/views.py:336 +#: apps/treasury/views.py:337 msgid "Update a remittance" msgstr "Überweisung bearbeiten" -#: apps/treasury/views.py:359 +#: apps/treasury/views.py:360 msgid "Attach a transaction to a remittance" msgstr "Fügen Sie einer Überweisung eine Transaktion hinzu" -#: apps/treasury/views.py:403 +#: apps/treasury/views.py:404 msgid "List of credits from the Société générale" msgstr "Kreditliste von Société générale" -#: apps/treasury/views.py:443 +#: apps/treasury/views.py:449 msgid "Manage credits from the Société générale" msgstr "Krediten von der Société générale handeln" -#: apps/wei/apps.py:10 apps/wei/models.py:49 apps/wei/models.py:50 -#: apps/wei/models.py:61 apps/wei/models.py:172 -#: note_kfet/templates/base.html:103 +#: apps/wei/apps.py:10 apps/wei/models.py:50 apps/wei/models.py:51 +#: apps/wei/models.py:62 apps/wei/models.py:180 +#: note_kfet/templates/base.html:102 msgid "WEI" msgstr "WEI" -#: apps/wei/forms/registration.py:51 apps/wei/models.py:118 -#: apps/wei/models.py:315 +#: apps/wei/forms/registration.py:35 +msgid "The selected user is not validated. Please validate its account first" +msgstr "" + +#: apps/wei/forms/registration.py:59 apps/wei/models.py:126 +#: apps/wei/models.py:323 msgid "bus" msgstr "Bus" -#: apps/wei/forms/registration.py:52 +#: apps/wei/forms/registration.py:60 msgid "" "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." @@ -2446,11 +2615,11 @@ msgstr "" "einen Bus und ein Team zuzuweisen, insbesondere wenn Sie ein freies Elektron " "sind." -#: apps/wei/forms/registration.py:59 +#: apps/wei/forms/registration.py:67 msgid "Team" msgstr "Team" -#: apps/wei/forms/registration.py:61 +#: apps/wei/forms/registration.py:69 msgid "" "Leave this field empty if you won't be in a team (staff, bus chief, free " "electron)" @@ -2458,138 +2627,140 @@ msgstr "" "Lassen Sie dieses Feld leer, wenn Sie nicht in einem Team sind (Mitarbeiter, " "Buschef, freies Elektron)" -#: apps/wei/forms/registration.py:67 apps/wei/forms/registration.py:77 -#: apps/wei/models.py:153 +#: apps/wei/forms/registration.py:75 apps/wei/forms/registration.py:85 +#: apps/wei/models.py:161 msgid "WEI Roles" msgstr "WEI Rollen" -#: apps/wei/forms/registration.py:68 +#: apps/wei/forms/registration.py:76 msgid "Select the roles that you are interested in." msgstr "Wählen Sie die Rollen aus, an denen Sie interessiert sind." -#: apps/wei/forms/registration.py:113 +#: apps/wei/forms/registration.py:122 msgid "This team doesn't belong to the given bus." msgstr "Dieses Team gehört nicht zum angegebenen Bus." -#: apps/wei/forms/surveys/wei2021.py:31 +#: apps/wei/forms/surveys/wei2021.py:35 apps/wei/forms/surveys/wei2022.py:35 msgid "Choose a word:" msgstr "Wählen Sie ein Wort:" -#: apps/wei/models.py:24 apps/wei/templates/wei/base.html:36 +#: apps/wei/models.py:25 apps/wei/templates/wei/base.html:36 msgid "year" msgstr "Jahr" -#: apps/wei/models.py:28 apps/wei/templates/wei/base.html:30 +#: apps/wei/models.py:29 apps/wei/templates/wei/base.html:30 msgid "date start" msgstr "Anfangsdatum" -#: apps/wei/models.py:32 apps/wei/templates/wei/base.html:33 +#: apps/wei/models.py:33 apps/wei/templates/wei/base.html:33 msgid "date end" msgstr "Abschlussdatum" -#: apps/wei/models.py:70 +#: apps/wei/models.py:71 apps/wei/tables.py:305 #, fuzzy #| msgid "The user joined the bus" msgid "seat count in the bus" msgstr "Der Benutzer ist dem Bus beigetreten" -#: apps/wei/models.py:82 +#: apps/wei/models.py:83 msgid "survey information" msgstr "Umfrage Infos" -#: apps/wei/models.py:83 +#: apps/wei/models.py:84 msgid "Information about the survey for new members, encoded in JSON" msgstr "Informationen zur Umfrage für neue Mitglieder, codiert in JSON" -#: apps/wei/models.py:105 +#: apps/wei/models.py:113 msgid "Bus" msgstr "Bus" -#: apps/wei/models.py:106 apps/wei/templates/wei/weiclub_detail.html:51 +#: apps/wei/models.py:114 apps/wei/templates/wei/weiclub_detail.html:51 msgid "Buses" msgstr "Buses" -#: apps/wei/models.py:127 +#: apps/wei/models.py:135 msgid "color" msgstr "Farbe" -#: apps/wei/models.py:128 +#: apps/wei/models.py:136 msgid "The color of the T-Shirt, stored with its number equivalent" msgstr "Die Farbe des T-Shirts, gespeichert mit der entsprechenden Nummer" -#: apps/wei/models.py:142 +#: apps/wei/models.py:150 msgid "Bus team" msgstr "Bus Team" -#: apps/wei/models.py:143 +#: apps/wei/models.py:151 msgid "Bus teams" msgstr "Bus Teams" -#: apps/wei/models.py:152 +#: apps/wei/models.py:160 msgid "WEI Role" msgstr "WEI Rolle" -#: apps/wei/models.py:177 +#: apps/wei/models.py:185 msgid "Credit from Société générale" msgstr "Kredit von der Société générale" -#: apps/wei/models.py:182 +#: apps/wei/models.py:190 msgid "Caution check given" msgstr "Caution check given" -#: apps/wei/models.py:186 apps/wei/templates/wei/weimembership_form.html:64 +#: apps/wei/models.py:194 apps/wei/templates/wei/weimembership_form.html:64 msgid "birth date" msgstr "Geburtsdatum" -#: apps/wei/models.py:192 apps/wei/models.py:202 +#: apps/wei/models.py:200 apps/wei/models.py:210 msgid "Male" msgstr "Männlich" -#: apps/wei/models.py:193 apps/wei/models.py:203 +#: apps/wei/models.py:201 apps/wei/models.py:211 msgid "Female" msgstr "Weiblich" -#: apps/wei/models.py:194 +#: apps/wei/models.py:202 msgid "Non binary" msgstr "Nicht binär" -#: apps/wei/models.py:196 apps/wei/templates/wei/weimembership_form.html:55 +#: apps/wei/models.py:204 apps/wei/templates/wei/attribute_bus_1A.html:22 +#: apps/wei/templates/wei/weimembership_form.html:55 msgid "gender" msgstr "Geschlecht" -#: apps/wei/models.py:205 apps/wei/templates/wei/weimembership_form.html:58 +#: apps/wei/models.py:213 apps/wei/templates/wei/weimembership_form.html:58 msgid "clothing cut" msgstr "Kleidung Schnitt" -#: apps/wei/models.py:218 apps/wei/templates/wei/weimembership_form.html:61 +#: apps/wei/models.py:226 apps/wei/templates/wei/weimembership_form.html:61 msgid "clothing size" msgstr "Kleidergröße" -#: apps/wei/models.py:224 apps/wei/templates/wei/weimembership_form.html:67 +#: apps/wei/models.py:232 apps/wei/templates/wei/attribute_bus_1A.html:28 +#: apps/wei/templates/wei/weimembership_form.html:67 msgid "health issues" msgstr "Gesundheitsprobleme" -#: apps/wei/models.py:229 apps/wei/templates/wei/weimembership_form.html:70 +#: apps/wei/models.py:237 apps/wei/templates/wei/weimembership_form.html:70 msgid "emergency contact name" msgstr "Notfall-Kontakt" -#: apps/wei/models.py:234 apps/wei/templates/wei/weimembership_form.html:73 +#: apps/wei/models.py:242 apps/wei/templates/wei/weimembership_form.html:73 msgid "emergency contact phone" msgstr "Notfallkontakttelefon" -#: apps/wei/models.py:239 apps/wei/templates/wei/weimembership_form.html:52 +#: apps/wei/models.py:247 apps/wei/templates/wei/weimembership_form.html:52 msgid "first year" msgstr "Erste Jahr" -#: apps/wei/models.py:240 +#: apps/wei/models.py:248 msgid "Tells if the user is new in the school." msgstr "Gibt an, ob der USer neu in der Schule ist." -#: apps/wei/models.py:245 +#: apps/wei/models.py:253 msgid "registration information" msgstr "Registrierung Detailen" -#: apps/wei/models.py:246 +#: apps/wei/models.py:254 msgid "" "Information about the registration (buses for old members, survey for the " "new members), encoded in JSON" @@ -2597,35 +2768,41 @@ msgstr "" "Informationen zur Registrierung (Busse für alte Mitglieder, Umfrage für neue " "Mitglieder), verschlüsselt in JSON" -#: apps/wei/models.py:304 +#: apps/wei/models.py:312 msgid "WEI User" msgstr "WEI User" -#: apps/wei/models.py:305 +#: apps/wei/models.py:313 msgid "WEI Users" msgstr "WEI Users" -#: apps/wei/models.py:325 +#: apps/wei/models.py:333 msgid "team" msgstr "Team" -#: apps/wei/models.py:335 +#: apps/wei/models.py:343 msgid "WEI registration" msgstr "WEI Registrierung" -#: apps/wei/models.py:339 +#: apps/wei/models.py:347 msgid "WEI membership" msgstr "WEI Mitgliedschaft" -#: apps/wei/models.py:340 +#: apps/wei/models.py:348 msgid "WEI memberships" msgstr "WEI Mitgliedschaften" -#: apps/wei/tables.py:104 +#: apps/wei/tables.py:105 msgid "The user does not have enough money." msgstr "" -#: apps/wei/tables.py:107 +#: apps/wei/tables.py:108 +msgid "" +"The user is in first year. You may validate the credit, the algorithm will " +"run later." +msgstr "" + +#: apps/wei/tables.py:111 #, fuzzy #| msgid "" #| "The note has enough money (%(pretty_fee)s required), the registration is " @@ -2635,23 +2812,77 @@ msgstr "" "Die Note hat genug Geld (%(pretty_fee)s erforderlich), die Registrierung ist " "möglich." -#: apps/wei/tables.py:139 +#: apps/wei/tables.py:143 msgid "Year" msgstr "Jahr" -#: apps/wei/tables.py:177 apps/wei/templates/wei/bus_detail.html:32 +#: apps/wei/tables.py:180 apps/wei/templates/wei/weimembership_form.html:102 +msgid "preferred bus" +msgstr "bevorzugter Bus" + +#: apps/wei/tables.py:210 apps/wei/templates/wei/bus_detail.html:32 #: apps/wei/templates/wei/busteam_detail.html:50 msgid "Teams" msgstr "Teams" -#: apps/wei/tables.py:186 apps/wei/tables.py:227 +#: apps/wei/tables.py:219 apps/wei/tables.py:260 msgid "Members count" msgstr "Anzahl Mitgliedern" -#: apps/wei/tables.py:193 apps/wei/tables.py:224 +#: apps/wei/tables.py:226 apps/wei/tables.py:257 msgid "members" msgstr "Mitglieder" +#: apps/wei/tables.py:287 +#, fuzzy +#| msgid "first year" +msgid "suggested first year" +msgstr "Erste Jahr" + +#: apps/wei/tables.py:293 +#, fuzzy +#| msgid "first year" +msgid "validated first year" +msgstr "Erste Jahr" + +#: apps/wei/tables.py:299 +#, fuzzy +#| msgid "Unvalidated registrations" +msgid "validated staff" +msgstr "Unvalidierte Registrierungen" + +#: apps/wei/tables.py:310 +msgid "free seats" +msgstr "" + +#: apps/wei/templates/wei/1A_list.html:9 +msgid "Attribute first year members into buses" +msgstr "" + +#: apps/wei/templates/wei/1A_list.html:15 +msgid "Start attribution!" +msgstr "" + +#: apps/wei/templates/wei/attribute_bus_1A.html:8 +msgid "Bus attribution" +msgstr "" + +#: apps/wei/templates/wei/attribute_bus_1A.html:31 +msgid "suggested bus" +msgstr "" + +#: apps/wei/templates/wei/attribute_bus_1A.html:37 +#, fuzzy +#| msgid "Raw survey information" +msgid "View raw survey information" +msgstr "Rohe Umfrageinformationen" + +#: apps/wei/templates/wei/attribute_bus_1A.html:57 +#, fuzzy +#| msgid "Buttons list" +msgid "Back to main list" +msgstr "Tastenliste" + #: apps/wei/templates/wei/base.html:44 msgid "WEI fee (paid students)" msgstr "WEI Preis (bezahlte Studenten)" @@ -2668,11 +2899,11 @@ msgstr "WEI Preis (unbezahlte Studenten)" msgid "WEI list" msgstr "WEI Liste" -#: apps/wei/templates/wei/base.html:81 apps/wei/views.py:510 +#: apps/wei/templates/wei/base.html:81 apps/wei/views.py:528 msgid "Register 1A" msgstr "1A Registrieren" -#: apps/wei/templates/wei/base.html:85 apps/wei/views.py:578 +#: apps/wei/templates/wei/base.html:85 apps/wei/views.py:614 msgid "Register 2A+" msgstr "2A+ Registrieren" @@ -2701,8 +2932,8 @@ msgstr "Als PDF schauen" #: apps/wei/templates/wei/survey.html:11 #: apps/wei/templates/wei/survey_closed.html:11 -#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:973 -#: apps/wei/views.py:1028 apps/wei/views.py:1038 +#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:1028 +#: apps/wei/views.py:1083 apps/wei/views.py:1093 msgid "Survey WEI" msgstr "WEI Umfrage" @@ -2742,7 +2973,11 @@ msgstr "Mitglied der WEI" msgid "Unvalidated registrations" msgstr "Unvalidierte Registrierungen" -#: apps/wei/templates/wei/weiclub_list.html:14 apps/wei/views.py:77 +#: apps/wei/templates/wei/weiclub_detail.html:99 +msgid "Attribute buses" +msgstr "" + +#: apps/wei/templates/wei/weiclub_list.html:14 apps/wei/views.py:79 msgid "Create WEI" msgstr "Neue WEI" @@ -2778,10 +3013,6 @@ msgstr "Der Algorithmus wurde nicht ausgeführt." msgid "caution check given" msgstr "Vorsichtsprüfung gegeben" -#: apps/wei/templates/wei/weimembership_form.html:102 -msgid "preferred bus" -msgstr "bevorzugter Bus" - #: apps/wei/templates/wei/weimembership_form.html:105 msgid "preferred team" msgstr "bevorzugtes Team" @@ -2888,67 +3119,67 @@ msgstr "Bei diesem Muster wurde keine Vorregistrierung gefunden." msgid "View validated memberships..." msgstr "Validierte Mitgliedschaften anzeigen ..." -#: apps/wei/views.py:56 +#: apps/wei/views.py:58 msgid "Search WEI" msgstr "WEI finden" -#: apps/wei/views.py:107 +#: apps/wei/views.py:109 msgid "WEI Detail" msgstr "WEI Infos" -#: apps/wei/views.py:202 +#: apps/wei/views.py:208 msgid "View members of the WEI" msgstr "Mitglied der WEI schauen" -#: apps/wei/views.py:230 +#: apps/wei/views.py:236 msgid "Find WEI Membership" msgstr "WEI Mitgliedschaft finden" -#: apps/wei/views.py:240 +#: apps/wei/views.py:246 msgid "View registrations to the WEI" msgstr "Mitglied der WEI schauen" -#: apps/wei/views.py:264 +#: apps/wei/views.py:270 msgid "Find WEI Registration" msgstr "WEI Registrierung finden" -#: apps/wei/views.py:275 +#: apps/wei/views.py:281 msgid "Update the WEI" msgstr "WEI bearbeiten" -#: apps/wei/views.py:296 +#: apps/wei/views.py:302 msgid "Create new bus" msgstr "Neue Bus" -#: apps/wei/views.py:334 +#: apps/wei/views.py:340 msgid "Update bus" msgstr "Bus bearbeiten" -#: apps/wei/views.py:366 +#: apps/wei/views.py:372 msgid "Manage bus" msgstr "Bus ändern" -#: apps/wei/views.py:393 +#: apps/wei/views.py:399 msgid "Create new team" msgstr "Neue Bus Team" -#: apps/wei/views.py:433 +#: apps/wei/views.py:439 msgid "Update team" msgstr "Team bearbeiten" -#: apps/wei/views.py:464 +#: apps/wei/views.py:470 msgid "Manage WEI team" msgstr "WEI Team bearbeiten" -#: apps/wei/views.py:486 +#: apps/wei/views.py:492 msgid "Register first year student to the WEI" msgstr "Registrieren Sie den Erstsemester beim WEI" -#: apps/wei/views.py:532 apps/wei/views.py:613 +#: apps/wei/views.py:550 apps/wei/views.py:649 msgid "This user is already registered to this WEI." msgstr "Dieser Benutzer ist bereits bei dieser WEI registriert." -#: apps/wei/views.py:537 +#: apps/wei/views.py:555 msgid "" "This user can't be in her/his first year since he/she has already " "participated to a WEI." @@ -2956,43 +3187,51 @@ msgstr "" "Dieser Benutzer kann nicht in seinem ersten Jahr sein, da er bereits an " "einer WEI teilgenommen hat." -#: apps/wei/views.py:554 +#: apps/wei/views.py:578 msgid "Register old student to the WEI" msgstr "Registrieren Sie einen alten Studenten beim WEI" -#: apps/wei/views.py:597 apps/wei/views.py:686 +#: apps/wei/views.py:633 apps/wei/views.py:721 msgid "You already opened an account in the Société générale." msgstr "Sie haben bereits ein Konto in der Société générale eröffnet." -#: apps/wei/views.py:643 +#: apps/wei/views.py:685 msgid "Update WEI Registration" msgstr "WEI Registrierung aktualisieren" -#: apps/wei/views.py:746 +#: apps/wei/views.py:795 msgid "Delete WEI registration" msgstr "WEI Registrierung löschen" -#: apps/wei/views.py:757 +#: apps/wei/views.py:806 msgid "You don't have the right to delete this WEI registration." msgstr "Sie haben nicht das Recht, diese WEI-Registrierung zu löschen." -#: apps/wei/views.py:776 +#: apps/wei/views.py:824 msgid "Validate WEI registration" msgstr "Überprüfen Sie die WEI-Registrierung" -#: note_kfet/settings/base.py:161 +#: apps/wei/views.py:1186 +msgid "Attribute buses to first year members" +msgstr "" + +#: apps/wei/views.py:1211 +msgid "Attribute bus" +msgstr "" + +#: note_kfet/settings/base.py:172 msgid "German" msgstr "Deutsch" -#: note_kfet/settings/base.py:162 +#: note_kfet/settings/base.py:173 msgid "English" msgstr "English" -#: note_kfet/settings/base.py:163 +#: note_kfet/settings/base.py:174 msgid "Spanish" msgstr "Spanisch" -#: note_kfet/settings/base.py:164 +#: note_kfet/settings/base.py:175 msgid "French" msgstr "Französich" @@ -3048,7 +3287,7 @@ msgstr "" "wurde eine E-Mail mit den Details des Fehlers an die Webmaster gesendet, die " "in Kürze behoben wird. Sie können jetzt ein Bier trinken." -#: note_kfet/templates/autocomplete_model.html:14 +#: note_kfet/templates/autocomplete_model.html:15 msgid "Reset" msgstr "Reset" @@ -3056,34 +3295,34 @@ msgstr "Reset" msgid "The ENS Paris-Saclay BDE note." msgstr "Die BDE ENS-Paris-Saclay Note." -#: note_kfet/templates/base.html:79 +#: note_kfet/templates/base.html:78 msgid "Users" msgstr "Users" -#: note_kfet/templates/base.html:85 +#: note_kfet/templates/base.html:84 msgid "Clubs" msgstr "Clubs" -#: note_kfet/templates/base.html:114 +#: note_kfet/templates/base.html:113 msgid "Admin" msgstr "Admin" -#: note_kfet/templates/base.html:128 +#: note_kfet/templates/base.html:127 msgid "My account" msgstr "Mein Konto" -#: note_kfet/templates/base.html:131 +#: note_kfet/templates/base.html:130 msgid "Log out" msgstr "Abmelden" -#: note_kfet/templates/base.html:139 +#: note_kfet/templates/base.html:138 #: note_kfet/templates/registration/signup.html:6 #: note_kfet/templates/registration/signup.html:11 #: note_kfet/templates/registration/signup.html:28 msgid "Sign up" msgstr "Registrieren" -#: note_kfet/templates/base.html:146 +#: note_kfet/templates/base.html:145 #: note_kfet/templates/registration/login.html:6 #: note_kfet/templates/registration/login.html:15 #: note_kfet/templates/registration/login.html:38 @@ -3091,17 +3330,13 @@ msgstr "Registrieren" msgid "Log in" msgstr "Anmelden" -#: note_kfet/templates/base.html:160 +#: note_kfet/templates/base.html:159 msgid "" "You are not a BDE member anymore. Please renew your membership if you want " "to use the note." msgstr "" -#: note_kfet/templates/base.html:164 -msgid "You are not a Kfet member, so you can't use your note account." -msgstr "" - -#: note_kfet/templates/base.html:170 +#: note_kfet/templates/base.html:165 msgid "" "Your e-mail address is not validated. Please check your mail inbox and click " "on the validation link." @@ -3109,19 +3344,23 @@ msgstr "" "Ihre E-Mail-Adresse ist nicht validiert. Bitte überprüfen Sie Ihren " "Posteingang und klicken Sie auf den Validierungslink." -#: note_kfet/templates/base.html:176 +#: note_kfet/templates/base.html:171 msgid "" "You declared that you opened a bank account in the Société générale. The " "bank did not validate the creation of the account to the BDE, so the " -"registration bonus of 80 € is not credited and the membership is not paid " -"yet. This verification procedure may last a few days. Please make sure that " -"you go to the end of the account creation." +"membership and the WEI are not paid yet. This verification procedure may " +"last a few days. Please make sure that you go to the end of the account " +"creation." msgstr "" -#: note_kfet/templates/base.html:199 +#: note_kfet/templates/base.html:194 msgid "Contact us" msgstr "Kontakt" +#: note_kfet/templates/base.html:196 +msgid "Technical Support" +msgstr "" + #: note_kfet/templates/base_search.html:15 msgid "Search by attribute such as name…" msgstr "Suche nach Attributen wie Name…" @@ -3130,6 +3369,132 @@ msgstr "Suche nach Attributen wie Name…" msgid "There is no results." msgstr "Es gibt keine Ergebnisse." +#: note_kfet/templates/oauth2_provider/application_confirm_delete.html:8 +#, fuzzy +#| msgid "" +#| "Are you sure you want to delete this invoice? This action can't be undone." +msgid "Are you sure to delete the application" +msgstr "" +"Möchten Sie diese Rechnung wirklich löschen? Diese Aktion kann nicht " +"rückgängig gemacht werden." + +#: note_kfet/templates/oauth2_provider/application_confirm_delete.html:17 +#: note_kfet/templates/oauth2_provider/authorize.html:28 +#, fuzzy +#| msgid "Balance" +msgid "Cancel" +msgstr "Kontostand" + +#: note_kfet/templates/oauth2_provider/application_detail.html:11 +msgid "Client id" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_detail.html:14 +msgid "Client secret" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_detail.html:17 +#, fuzzy +#| msgid "Credit type" +msgid "Client type" +msgstr "Kredittype" + +#: note_kfet/templates/oauth2_provider/application_detail.html:20 +msgid "Authorization Grant Type" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_detail.html:23 +msgid "Redirect Uris" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_detail.html:29 +#, python-format +msgid "" +"You can go here to generate authorization " +"link templates and convert permissions to scope numbers with the permissions " +"that you want to grant for your application." +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_detail.html:37 +#: note_kfet/templates/oauth2_provider/application_form.html:23 +msgid "Go Back" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_form.html:12 +#, fuzzy +#| msgid "Email validation" +msgid "Edit application" +msgstr "Email validierung" + +#: note_kfet/templates/oauth2_provider/application_list.html:7 +msgid "Your applications" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_list.html:11 +msgid "" +"You can find on this page the list of the applications that you already " +"registered." +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_list.html:30 +#, fuzzy +#| msgid "location" +msgid "New Application" +msgstr "Ort" + +#: note_kfet/templates/oauth2_provider/application_list.html:31 +msgid "Authorized Tokens" +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_registration_form.html:5 +#, fuzzy +#| msgid "Registrations" +msgid "Register a new application" +msgstr "Anmeldung" + +#: note_kfet/templates/oauth2_provider/authorize.html:9 +#: note_kfet/templates/oauth2_provider/authorize.html:29 +msgid "Authorize" +msgstr "" + +#: note_kfet/templates/oauth2_provider/authorize.html:14 +msgid "Application requires following permissions:" +msgstr "" + +#: note_kfet/templates/oauth2_provider/authorize.html:36 +#: note_kfet/templates/oauth2_provider/authorized-oob.html:15 +msgid "Error:" +msgstr "" + +#: note_kfet/templates/oauth2_provider/authorized-oob.html:13 +msgid "Success" +msgstr "" + +#: note_kfet/templates/oauth2_provider/authorized-oob.html:21 +msgid "Please return to your application and enter this code:" +msgstr "" + +#: note_kfet/templates/oauth2_provider/authorized-token-delete.html:9 +#, fuzzy +#| msgid "" +#| "Are you sure you want to delete this invoice? This action can't be undone." +msgid "Are you sure you want to delete this token?" +msgstr "" +"Möchten Sie diese Rechnung wirklich löschen? Diese Aktion kann nicht " +"rückgängig gemacht werden." + +#: note_kfet/templates/oauth2_provider/authorized-tokens.html:7 +#, fuzzy +#| msgid "Token" +msgid "Tokens" +msgstr "Token" + +#: note_kfet/templates/oauth2_provider/authorized-tokens.html:22 +#, fuzzy +#| msgid "There is no closed remittance yet." +msgid "There are no authorized tokens yet." +msgstr "Es gibt noch keine geschlossene Überweisung." + #: note_kfet/templates/registration/logged_out.html:13 msgid "Thanks for spending some quality time with the Web site today." msgstr "" @@ -3246,9 +3611,6 @@ msgstr "" #~ msgid "This user didn't give her/his caution check." #~ msgstr "Dieser User hat seine / ihre Vorsicht nicht überprüft." -#~ msgid "Central Authentication Service" -#~ msgstr "Central Authentication Service" - #, python-format #~ msgid "" #~ "A new version of the application is available. This instance runs " diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index e582dab0..4f03a2ca 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-29 14:06+0200\n" -"PO-Revision-Date: 2020-11-17 23:47+0100\n" +"POT-Creation-Date: 2022-04-10 22:34+0200\n" +"PO-Revision-Date: 2022-04-11 23:12+0200\n" "Last-Translator: elkmaennchen \n" "Language-Team: \n" "Language: es\n" @@ -16,34 +16,38 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3\n" +"X-Generator: Poedit 3.0\n" #: apps/activity/apps.py:10 apps/activity/models.py:151 #: apps/activity/models.py:167 msgid "activity" msgstr "actividad" -#: apps/activity/forms.py:35 apps/activity/models.py:132 +#: apps/activity/forms.py:34 +msgid "The note of this club is inactive." +msgstr "La note del club está inactiva." + +#: apps/activity/forms.py:41 apps/activity/models.py:132 msgid "The end date must be after the start date." msgstr "La fecha final tiene que ser después de la fecha de inicio." -#: apps/activity/forms.py:76 apps/activity/models.py:270 +#: apps/activity/forms.py:82 apps/activity/models.py:270 msgid "You can't invite someone once the activity is started." msgstr "No se puede invitar a alguien una vez que arrancó la actividad." -#: apps/activity/forms.py:79 apps/activity/models.py:273 +#: apps/activity/forms.py:85 apps/activity/models.py:273 msgid "This activity is not validated yet." msgstr "Esta actividad no fue validada por ahora." -#: apps/activity/forms.py:89 apps/activity/models.py:281 +#: apps/activity/forms.py:95 apps/activity/models.py:281 msgid "This person has been already invited 5 times this year." msgstr "Esta persona ya fue invitada 5 veces este año." -#: apps/activity/forms.py:93 apps/activity/models.py:285 +#: apps/activity/forms.py:99 apps/activity/models.py:285 msgid "This person is already invited." msgstr "Esta persona ya está invitada." -#: apps/activity/forms.py:97 apps/activity/models.py:289 +#: apps/activity/forms.py:103 apps/activity/models.py:289 msgid "You can't invite more than 3 people to this activity." msgstr "Usted no puede invitar más de 3 persona a esta actividad." @@ -51,11 +55,11 @@ msgstr "Usted no puede invitar más de 3 persona a esta actividad." #: apps/member/models.py:199 #: apps/member/templates/member/includes/club_info.html:4 #: apps/member/templates/member/includes/profile_info.html:4 -#: apps/note/models/notes.py:231 apps/note/models/transactions.py:26 +#: apps/note/models/notes.py:263 apps/note/models/transactions.py:26 #: apps/note/models/transactions.py:46 apps/note/models/transactions.py:301 #: apps/permission/models.py:330 #: apps/registration/templates/registration/future_profile_detail.html:16 -#: apps/wei/models.py:66 apps/wei/models.py:123 +#: apps/wei/models.py:67 apps/wei/models.py:131 apps/wei/tables.py:282 #: apps/wei/templates/wei/base.html:26 #: apps/wei/templates/wei/weimembership_form.html:14 msgid "name" @@ -90,7 +94,7 @@ msgstr "tipos de actividad" #: apps/activity/models.py:68 #: apps/activity/templates/activity/includes/activity_info.html:19 #: apps/note/models/transactions.py:81 apps/permission/models.py:110 -#: apps/permission/models.py:189 apps/wei/models.py:77 apps/wei/models.py:134 +#: apps/permission/models.py:189 apps/wei/models.py:78 apps/wei/models.py:142 msgid "description" msgstr "descripción" @@ -109,9 +113,10 @@ msgstr "Lugar donde se organiza la actividad, por ejemplo la Kfet." msgid "type" msgstr "tipo" -#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305 -#: apps/note/models/notes.py:148 apps/treasury/models.py:283 -#: apps/wei/models.py:165 apps/wei/templates/wei/survey.html:15 +#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307 +#: apps/note/models/notes.py:148 apps/treasury/models.py:285 +#: apps/wei/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13 +#: apps/wei/templates/wei/survey.html:15 msgid "user" msgstr "usuario" @@ -193,7 +198,7 @@ msgstr "Entrada para {note} en la actividad {activity}" msgid "Already entered on " msgstr "Entrado ya el " -#: apps/activity/models.py:202 apps/activity/tables.py:54 +#: apps/activity/models.py:202 apps/activity/tables.py:56 msgid "{:%Y-%m-%d %H:%M:%S}" msgstr "{:%d/%m/%Y %H:%M:%S}" @@ -203,6 +208,7 @@ msgstr "El saldo es negativo." #: apps/activity/models.py:240 #: apps/treasury/templates/treasury/sogecredit_detail.html:14 +#: apps/wei/templates/wei/attribute_bus_1A.html:16 msgid "last name" msgstr "apellido" @@ -210,6 +216,7 @@ msgstr "apellido" #: apps/member/templates/member/includes/profile_info.html:4 #: apps/registration/templates/registration/future_profile_detail.html:16 #: apps/treasury/templates/treasury/sogecredit_detail.html:17 +#: apps/wei/templates/wei/attribute_bus_1A.html:19 #: apps/wei/templates/wei/weimembership_form.html:14 msgid "first name" msgstr "nombre" @@ -230,48 +237,48 @@ msgstr "invitados" msgid "Invitation" msgstr "Invitación" -#: apps/activity/tables.py:25 +#: apps/activity/tables.py:27 msgid "The activity is currently open." msgstr "La actividad está actualmente abierta." -#: apps/activity/tables.py:26 +#: apps/activity/tables.py:28 msgid "The validation of the activity is pending." msgstr "La validación de esta actividad es pendiente." -#: apps/activity/tables.py:41 apps/treasury/tables.py:107 +#: apps/activity/tables.py:43 apps/treasury/tables.py:107 msgid "Remove" msgstr "Quitar" -#: apps/activity/tables.py:54 +#: apps/activity/tables.py:56 msgid "Entered on " msgstr "Entrado el " -#: apps/activity/tables.py:56 +#: apps/activity/tables.py:58 msgid "remove" msgstr "quitar" -#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:197 +#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:199 msgid "Type" msgstr "Tipo" -#: apps/activity/tables.py:82 apps/member/forms.py:186 -#: apps/registration/forms.py:90 apps/treasury/forms.py:130 -#: apps/wei/forms/registration.py:96 +#: apps/activity/tables.py:84 apps/member/forms.py:186 +#: apps/registration/forms.py:91 apps/treasury/forms.py:131 +#: apps/wei/forms/registration.py:104 msgid "Last name" msgstr "Apellido" -#: apps/activity/tables.py:84 apps/member/forms.py:191 -#: apps/note/templates/note/transaction_form.html:134 -#: apps/registration/forms.py:95 apps/treasury/forms.py:132 -#: apps/wei/forms/registration.py:101 +#: apps/activity/tables.py:86 apps/member/forms.py:191 +#: apps/note/templates/note/transaction_form.html:138 +#: apps/registration/forms.py:96 apps/treasury/forms.py:133 +#: apps/wei/forms/registration.py:109 msgid "First name" msgstr "Nombre" -#: apps/activity/tables.py:86 apps/note/models/notes.py:86 +#: apps/activity/tables.py:88 apps/note/models/notes.py:86 msgid "Note" msgstr "Note" -#: apps/activity/tables.py:88 apps/member/tables.py:49 +#: apps/activity/tables.py:90 apps/member/tables.py:50 msgid "Balance" msgstr "Saldo de la cuenta" @@ -285,26 +292,26 @@ msgstr "Invitados suprimidos" #: apps/activity/templates/activity/activity_entry.html:14 #: apps/note/models/transactions.py:257 -#: apps/note/templates/note/transaction_form.html:16 -#: apps/note/templates/note/transaction_form.html:148 -#: note_kfet/templates/base.html:73 +#: apps/note/templates/note/transaction_form.html:17 +#: apps/note/templates/note/transaction_form.html:152 +#: note_kfet/templates/base.html:72 msgid "Transfer" msgstr "Transferencia" #: apps/activity/templates/activity/activity_entry.html:18 #: apps/note/models/transactions.py:317 -#: apps/note/templates/note/transaction_form.html:21 +#: apps/note/templates/note/transaction_form.html:22 msgid "Credit" msgstr "Crédito" #: apps/activity/templates/activity/activity_entry.html:21 #: apps/note/models/transactions.py:317 -#: apps/note/templates/note/transaction_form.html:25 +#: apps/note/templates/note/transaction_form.html:26 msgid "Debit" msgstr "Débito" #: apps/activity/templates/activity/activity_entry.html:27 -#: apps/note/templates/note/transaction_form.html:30 +#: apps/note/templates/note/transaction_form.html:34 msgid "Entries" msgstr "Entradas" @@ -312,12 +319,12 @@ msgstr "Entradas" msgid "Return to activity page" msgstr "Regresar a la página de la actividad" -#: apps/activity/templates/activity/activity_entry.html:89 -#: apps/activity/templates/activity/activity_entry.html:124 +#: apps/activity/templates/activity/activity_entry.html:94 +#: apps/activity/templates/activity/activity_entry.html:129 msgid "Entry done, but caution: the user is not a Kfet member." msgstr "Entrada echa, pero cuidado : el usuario no es un miembro de la Kfet." -#: apps/activity/templates/activity/activity_entry.html:127 +#: apps/activity/templates/activity/activity_entry.html:132 msgid "Entry done!" msgstr "Entrada echa !" @@ -325,7 +332,7 @@ msgstr "Entrada echa !" #: apps/member/templates/member/add_members.html:46 #: apps/member/templates/member/club_form.html:16 #: apps/note/templates/note/transactiontemplate_form.html:18 -#: apps/treasury/forms.py:88 apps/treasury/forms.py:142 +#: apps/treasury/forms.py:89 apps/treasury/forms.py:143 #: apps/treasury/templates/treasury/invoice_form.html:74 #: apps/wei/templates/wei/bus_form.html:17 #: apps/wei/templates/wei/busteam_form.html:17 @@ -379,7 +386,7 @@ msgid "validate" msgstr "validar" #: apps/activity/templates/activity/includes/activity_info.html:71 -#: apps/logs/models.py:64 apps/note/tables.py:195 +#: apps/logs/models.py:64 apps/note/tables.py:220 msgid "edit" msgstr "modificar" @@ -391,37 +398,37 @@ msgstr "Invitar" msgid "Create new activity" msgstr "Crear una nueva actividad" -#: apps/activity/views.py:67 note_kfet/templates/base.html:91 +#: apps/activity/views.py:67 note_kfet/templates/base.html:90 msgid "Activities" msgstr "Actividades" -#: apps/activity/views.py:95 +#: apps/activity/views.py:93 msgid "Activity detail" msgstr "Detalles de la actividad" -#: apps/activity/views.py:115 +#: apps/activity/views.py:113 msgid "Update activity" msgstr "Modificar la actividad" -#: apps/activity/views.py:142 +#: apps/activity/views.py:140 msgid "Invite guest to the activity \"{}\"" msgstr "Invitar alguien para la actividad \"{}\"" -#: apps/activity/views.py:177 +#: apps/activity/views.py:178 msgid "You are not allowed to display the entry interface for this activity." msgstr "" "Usted no tiene derecho a mostrar la interfaz de las entradas para esta " "actividad." -#: apps/activity/views.py:180 +#: apps/activity/views.py:181 msgid "This activity does not support activity entries." msgstr "Esta actividad no necesita entradas." -#: apps/activity/views.py:183 +#: apps/activity/views.py:184 msgid "This activity is closed." msgstr "Esta actividad esta cerrada." -#: apps/activity/views.py:279 +#: apps/activity/views.py:280 msgid "Entry for activity \"{}\"" msgstr "Entradas para la actividad \"{}\"" @@ -457,9 +464,9 @@ msgstr "nuevos datos" msgid "create" msgstr "crear" -#: apps/logs/models.py:65 apps/note/tables.py:165 apps/note/tables.py:201 -#: apps/permission/models.py:127 apps/treasury/tables.py:38 -#: apps/wei/tables.py:73 +#: apps/logs/models.py:65 apps/note/tables.py:166 apps/note/tables.py:190 +#: apps/note/tables.py:237 apps/permission/models.py:127 +#: apps/treasury/tables.py:38 apps/wei/tables.py:74 msgid "delete" msgstr "suprimir" @@ -498,15 +505,15 @@ msgstr "pago de afiliación (estudiantes pagados)" msgid "membership fee (unpaid students)" msgstr "pago de afiliación (estudiantes no pagados)" -#: apps/member/admin.py:65 apps/member/models.py:317 +#: apps/member/admin.py:65 apps/member/models.py:319 msgid "roles" msgstr "papel" -#: apps/member/admin.py:66 apps/member/models.py:331 +#: apps/member/admin.py:66 apps/member/models.py:333 msgid "fee" msgstr "pago" -#: apps/member/apps.py:14 apps/wei/tables.py:193 apps/wei/tables.py:224 +#: apps/member/apps.py:14 apps/wei/tables.py:226 apps/wei/tables.py:257 msgid "member" msgstr "miembro" @@ -538,26 +545,26 @@ msgstr "Tamaño máximo : 2Mo" msgid "This image cannot be loaded." msgstr "Esta imagen no puede ser cargada." -#: apps/member/forms.py:141 apps/member/views.py:101 -#: apps/registration/forms.py:33 apps/registration/views.py:258 +#: apps/member/forms.py:141 apps/member/views.py:103 +#: apps/registration/forms.py:33 apps/registration/views.py:262 msgid "An alias with a similar name already exists." msgstr "Un alias similar ya existe." -#: apps/member/forms.py:165 apps/registration/forms.py:70 +#: apps/member/forms.py:165 apps/registration/forms.py:71 msgid "Inscription paid by Société Générale" msgstr "Registración pagadas por Société Générale" -#: apps/member/forms.py:167 apps/registration/forms.py:72 +#: apps/member/forms.py:167 apps/registration/forms.py:73 msgid "Check this case if the Société Générale paid the inscription." msgstr "Marcar esta casilla si Société Générale pagó la registración." -#: apps/member/forms.py:172 apps/registration/forms.py:77 -#: apps/wei/forms/registration.py:83 +#: apps/member/forms.py:172 apps/registration/forms.py:78 +#: apps/wei/forms/registration.py:91 msgid "Credit type" msgstr "Tipo de crédito" -#: apps/member/forms.py:173 apps/registration/forms.py:78 -#: apps/wei/forms/registration.py:84 +#: apps/member/forms.py:173 apps/registration/forms.py:79 +#: apps/wei/forms/registration.py:92 msgid "No credit" msgstr "No crédito" @@ -565,14 +572,14 @@ msgstr "No crédito" msgid "You can credit the note of the user." msgstr "Usted puede acreditar la note del usuario." -#: apps/member/forms.py:179 apps/registration/forms.py:83 -#: apps/wei/forms/registration.py:89 +#: apps/member/forms.py:179 apps/registration/forms.py:84 +#: apps/wei/forms/registration.py:97 msgid "Credit amount" msgstr "Valor del crédito" -#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:140 -#: apps/registration/forms.py:100 apps/treasury/forms.py:134 -#: apps/wei/forms/registration.py:106 +#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144 +#: apps/registration/forms.py:101 apps/treasury/forms.py:135 +#: apps/wei/forms/registration.py:114 msgid "Bank" msgstr "Banco" @@ -584,15 +591,31 @@ msgstr "Usuario" msgid "Roles" msgstr "Papeles" +#: apps/member/hashers.py:57 +msgid "algorithm" +msgstr "algoritmo" + +#: apps/member/hashers.py:58 +msgid "iterations" +msgstr "iteraciones" + +#: apps/member/hashers.py:59 +msgid "salt" +msgstr "sal" + +#: apps/member/hashers.py:60 +msgid "hash" +msgstr "hash" + #: apps/member/models.py:38 -#: apps/member/templates/member/includes/profile_info.html:35 +#: apps/member/templates/member/includes/profile_info.html:43 #: apps/registration/templates/registration/future_profile_detail.html:40 #: apps/wei/templates/wei/weimembership_form.html:44 msgid "phone number" msgstr "número de teléfono" #: apps/member/models.py:45 -#: apps/member/templates/member/includes/profile_info.html:29 +#: apps/member/templates/member/includes/profile_info.html:37 #: apps/registration/templates/registration/future_profile_detail.html:34 #: apps/wei/templates/wei/weimembership_form.html:38 msgid "section" @@ -602,7 +625,8 @@ msgstr "sección" msgid "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\"" msgstr "i.e. \"1A0\", \"9A♥\", \"SAPHIRE\"" -#: apps/member/models.py:54 apps/wei/templates/wei/weimembership_form.html:32 +#: apps/member/models.py:54 apps/wei/templates/wei/attribute_bus_1A.html:25 +#: apps/wei/templates/wei/weimembership_form.html:32 msgid "department" msgstr "departamento" @@ -679,14 +703,14 @@ msgid "Year of entry to the school (None if not ENS student)" msgstr "Año de ingreso en la escuela (None si no un alumn@ ENS)" #: apps/member/models.py:83 -#: apps/member/templates/member/includes/profile_info.html:39 +#: apps/member/templates/member/includes/profile_info.html:47 #: apps/registration/templates/registration/future_profile_detail.html:37 #: apps/wei/templates/wei/weimembership_form.html:41 msgid "address" msgstr "dirección" #: apps/member/models.py:90 -#: apps/member/templates/member/includes/profile_info.html:46 +#: apps/member/templates/member/includes/profile_info.html:50 #: apps/registration/templates/registration/future_profile_detail.html:43 #: apps/wei/templates/wei/weimembership_form.html:47 msgid "paid" @@ -758,7 +782,7 @@ msgstr "Active su cuenta Note Kfet" #: apps/member/models.py:204 #: apps/member/templates/member/includes/club_info.html:55 -#: apps/member/templates/member/includes/profile_info.html:32 +#: apps/member/templates/member/includes/profile_info.html:40 #: apps/registration/templates/registration/future_profile_detail.html:22 #: apps/wei/templates/wei/base.html:70 #: apps/wei/templates/wei/weimembership_form.html:20 @@ -806,50 +830,50 @@ msgstr "" "Ultima fecha de una afiliación, después de la cual los miembros tienen que " "prorrogarla." -#: apps/member/models.py:286 apps/member/models.py:311 +#: apps/member/models.py:288 apps/member/models.py:313 #: apps/note/models/notes.py:176 msgid "club" msgstr "club" -#: apps/member/models.py:287 +#: apps/member/models.py:289 msgid "clubs" msgstr "clubs" -#: apps/member/models.py:322 +#: apps/member/models.py:324 msgid "membership starts on" msgstr "afiliación empezá el" -#: apps/member/models.py:326 +#: apps/member/models.py:328 msgid "membership ends on" msgstr "afiliación termina el" -#: apps/member/models.py:422 +#: apps/member/models.py:430 #, python-brace-format msgid "The role {role} does not apply to the club {club}." msgstr "El papel {role} no se encuentra en el club {club}." -#: apps/member/models.py:431 apps/member/views.py:651 +#: apps/member/models.py:439 apps/member/views.py:712 msgid "User is already a member of the club" msgstr "Usuario ya esta un miembro del club" -#: apps/member/models.py:443 apps/member/views.py:661 +#: apps/member/models.py:451 apps/member/views.py:721 msgid "User is not a member of the parent club" msgstr "Usuario no es un miembro del club pariente" -#: apps/member/models.py:496 +#: apps/member/models.py:504 #, python-brace-format msgid "Membership of {user} for the club {club}" msgstr "Afiliación of {user} for the club {club}" -#: apps/member/models.py:499 apps/note/models/transactions.py:389 +#: apps/member/models.py:507 apps/note/models/transactions.py:389 msgid "membership" msgstr "afiliación" -#: apps/member/models.py:500 +#: apps/member/models.py:508 msgid "memberships" msgstr "afiliaciones" -#: apps/member/tables.py:137 +#: apps/member/tables.py:139 msgid "Renew" msgstr "Prorrogar" @@ -897,7 +921,7 @@ msgid "Account #" msgstr "Cuenta n°" #: apps/member/templates/member/base.html:48 -#: apps/member/templates/member/base.html:62 apps/member/views.py:58 +#: apps/member/templates/member/base.html:62 apps/member/views.py:60 #: apps/registration/templates/registration/future_profile_detail.html:48 #: apps/wei/templates/wei/weimembership_form.html:117 msgid "Update Profile" @@ -941,7 +965,8 @@ msgstr "" "desbloquearla si mismo." #: apps/member/templates/member/base.html:110 -#: apps/member/templates/member/base.html:137 apps/treasury/forms.py:90 +#: apps/member/templates/member/base.html:137 apps/treasury/forms.py:91 +#: apps/treasury/templates/treasury/sogecredit_list.html:72 msgid "Close" msgstr "Cerrar" @@ -957,14 +982,17 @@ msgstr "" "nuevo posibles." #: apps/member/templates/member/club_alias.html:10 -#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:253 -#: apps/member/views.py:456 +#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:287 +#: apps/member/views.py:517 msgid "Note aliases" msgstr "Alias de la note" #: apps/member/templates/member/club_alias.html:20 #: apps/member/templates/member/profile_alias.html:19 +#: apps/member/templates/member/profile_trust.html:19 #: apps/treasury/tables.py:99 +#: apps/treasury/templates/treasury/sogecredit_list.html:34 +#: apps/treasury/templates/treasury/sogecredit_list.html:73 msgid "Add" msgstr "Añadir" @@ -1014,7 +1042,7 @@ msgid "membership fee" msgstr "pago de afiliación" #: apps/member/templates/member/includes/club_info.html:43 -#: apps/member/templates/member/includes/profile_info.html:43 +#: apps/member/templates/member/includes/profile_info.html:55 #: apps/treasury/templates/treasury/sogecredit_detail.html:24 #: apps/wei/templates/wei/base.html:60 msgid "balance" @@ -1022,7 +1050,7 @@ msgstr "saldo de la cuenta" #: apps/member/templates/member/includes/club_info.html:47 #: apps/member/templates/member/includes/profile_info.html:20 -#: apps/note/models/notes.py:255 apps/wei/templates/wei/base.html:66 +#: apps/note/models/notes.py:287 apps/wei/templates/wei/base.html:66 msgid "aliases" msgstr "alias" @@ -1046,22 +1074,63 @@ msgstr "contraseña" msgid "Change password" msgstr "Cambiar la contraseña" -#: apps/member/templates/member/includes/profile_info.html:55 +#: apps/member/templates/member/includes/profile_info.html:28 +#: apps/note/models/notes.py:244 +msgid "friendships" +msgstr "amistades" + +#: apps/member/templates/member/includes/profile_info.html:32 +msgid "Manage friendships" +msgstr "Gestionar las amistades" + +#: apps/member/templates/member/includes/profile_info.html:63 msgid "API token" msgstr "Acceso API" -#: apps/member/templates/member/manage_auth_tokens.html:19 +#: apps/member/templates/member/manage_auth_tokens.html:12 +msgid "Token authentication" +msgstr "Token de autentificación" + +#: apps/member/templates/member/manage_auth_tokens.html:28 msgid "Token" msgstr "Token" -#: apps/member/templates/member/manage_auth_tokens.html:26 +#: apps/member/templates/member/manage_auth_tokens.html:35 msgid "Created" msgstr "Creado el" -#: apps/member/templates/member/manage_auth_tokens.html:34 +#: apps/member/templates/member/manage_auth_tokens.html:39 +msgid "Warning" +msgstr "Cuidado" + +#: apps/member/templates/member/manage_auth_tokens.html:44 msgid "Regenerate token" msgstr "Regenerar token" +#: apps/member/templates/member/manage_auth_tokens.html:53 +msgid "OAuth2 authentication" +msgstr "Autentificación OAuth2" + +#: apps/member/templates/member/manage_auth_tokens.html:79 +msgid "Authorization:" +msgstr "Autorizaciones :" + +#: apps/member/templates/member/manage_auth_tokens.html:83 +msgid "Token:" +msgstr "Token :" + +#: apps/member/templates/member/manage_auth_tokens.html:87 +msgid "Revoke Token:" +msgstr "Token revocado :" + +#: apps/member/templates/member/manage_auth_tokens.html:91 +msgid "Introspect Token:" +msgstr "Introspección :" + +#: apps/member/templates/member/manage_auth_tokens.html:97 +msgid "Show my applications" +msgstr "Mostrar mis aplicaciones" + #: apps/member/templates/member/picture_update.html:35 msgid "Nevermind" msgstr "No importa" @@ -1086,6 +1155,23 @@ msgstr "Hacer clic aquí para reenviar un enlace de validación." msgid "View my memberships" msgstr "Ver mis afiliaciones" +#: apps/member/templates/member/profile_trust.html:10 apps/member/views.py:254 +msgid "Note friendships" +msgstr "Amistades de note" + +#: apps/member/templates/member/profile_trust.html:28 +msgid "" +"Adding someone as a friend enables them to initiate transactions coming from " +"your account (while keeping your balance positive). This is designed to " +"simplify using note kfet transfers to transfer money between users. The " +"intent is that one person can make all transfers for a group of friends " +"without needing additional rights among them." +msgstr "" +"Añadir alguien como amig@ permite a esta persona hacer transacciones de su " +"note a la note de el (si su cuenta se queda en positivo). La meta es " +"simplificar el reembolso entre amig@s por Note Kfet. Pues una persona puede " +"crear todas la transacciones sin tener derechos particulares." + #: apps/member/templates/member/profile_update.html:18 msgid "Save Changes" msgstr "Guardar cambios" @@ -1094,47 +1180,47 @@ msgstr "Guardar cambios" msgid "Registrations" msgstr "Registraciones" -#: apps/member/views.py:71 apps/registration/forms.py:23 +#: apps/member/views.py:73 apps/registration/forms.py:23 msgid "This address must be valid." msgstr "Este correo tiene que ser valido." -#: apps/member/views.py:138 +#: apps/member/views.py:140 msgid "Profile detail" msgstr "Detalles del usuario" -#: apps/member/views.py:205 +#: apps/member/views.py:206 msgid "Search user" msgstr "Buscar un usuario" -#: apps/member/views.py:273 +#: apps/member/views.py:308 msgid "Update note picture" msgstr "Modificar la imagen de la note" -#: apps/member/views.py:319 +#: apps/member/views.py:354 msgid "Manage auth token" msgstr "Gestionar los token de autentificación" -#: apps/member/views.py:346 +#: apps/member/views.py:381 msgid "Create new club" msgstr "Crear un nuevo club" -#: apps/member/views.py:365 +#: apps/member/views.py:400 msgid "Search club" msgstr "Buscar un club" -#: apps/member/views.py:398 +#: apps/member/views.py:433 msgid "Club detail" msgstr "Detalles del club" -#: apps/member/views.py:479 +#: apps/member/views.py:540 msgid "Update club" msgstr "Modificar el club" -#: apps/member/views.py:513 +#: apps/member/views.py:574 msgid "Add new member to the club" msgstr "Añadir un nuevo miembro al club" -#: apps/member/views.py:642 apps/wei/views.py:917 +#: apps/member/views.py:703 apps/wei/views.py:973 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." @@ -1142,19 +1228,19 @@ msgstr "" "Este usuario no tiene suficiente dinero para unirse a este club, y no puede " "tener un saldo negativo." -#: apps/member/views.py:665 +#: apps/member/views.py:725 msgid "The membership must start after {:%m-%d-%Y}." msgstr "La afiliación tiene que empezar después del {:%d-%m-%Y}." -#: apps/member/views.py:670 +#: apps/member/views.py:730 msgid "The membership must begin before {:%m-%d-%Y}." msgstr "La afiliación tiene que empezar antes del {:%d-%m-%Y}." -#: apps/member/views.py:816 +#: apps/member/views.py:876 msgid "Manage roles of an user in the club" msgstr "Gestionar los papeles de un usuario en el club" -#: apps/member/views.py:841 +#: apps/member/views.py:901 msgid "Members of the club" msgstr "Miembros del club" @@ -1172,7 +1258,7 @@ msgstr "destino" msgid "amount" msgstr "monto" -#: apps/note/api/serializers.py:183 apps/note/api/serializers.py:189 +#: apps/note/api/serializers.py:199 apps/note/api/serializers.py:205 #: apps/note/models/transactions.py:228 msgid "" "The transaction can't be saved since the source note or the destination note " @@ -1189,7 +1275,7 @@ msgstr "Fuente" msgid "Destination" msgstr "Destino" -#: apps/note/forms.py:74 apps/note/templates/note/transaction_form.html:119 +#: apps/note/forms.py:74 apps/note/templates/note/transaction_form.html:123 msgid "Reason" msgstr "Motivo" @@ -1304,30 +1390,47 @@ msgstr "note especial" msgid "special notes" msgstr "notes especiales" -#: apps/note/models/notes.py:237 +#: apps/note/models/notes.py:232 +msgid "trusting" +msgstr "note" + +#: apps/note/models/notes.py:239 +msgid "trusted" +msgstr "amigo" + +#: apps/note/models/notes.py:243 +msgid "frienship" +msgstr "amistad" + +#: apps/note/models/notes.py:248 +#, python-brace-format +msgid "Friendship between {trusting} and {trusted}" +msgstr "Amistad entre {trusting} y {trusted}" + +#: apps/note/models/notes.py:269 msgid "Invalid alias" msgstr "Alias inválido" -#: apps/note/models/notes.py:254 +#: apps/note/models/notes.py:286 msgid "alias" msgstr "alias" -#: apps/note/models/notes.py:278 +#: apps/note/models/notes.py:310 msgid "Alias is too long." msgstr "El alias es demasiado largo." -#: apps/note/models/notes.py:281 +#: apps/note/models/notes.py:313 msgid "" "This alias contains only complex character. Please use a more simple alias." msgstr "" "Este alias solo contiene caracteres complejos. Por favor usa un alias más " "sencillo." -#: apps/note/models/notes.py:285 +#: apps/note/models/notes.py:317 msgid "An alias with a similar name already exists: {} " msgstr "Un alias parecido ya existe : {} " -#: apps/note/models/notes.py:299 +#: apps/note/models/notes.py:331 msgid "You can't delete your main alias." msgstr "No puede suprimir su alias principal." @@ -1437,8 +1540,8 @@ msgstr "" "pago y un usuario o un club" #: apps/note/models/transactions.py:355 apps/note/models/transactions.py:358 -#: apps/note/models/transactions.py:361 apps/wei/views.py:922 -#: apps/wei/views.py:926 +#: apps/note/models/transactions.py:361 apps/wei/views.py:978 +#: apps/wei/views.py:982 msgid "This field is required." msgstr "Este campo es obligatorio." @@ -1454,7 +1557,7 @@ msgstr "Transacciones especiales" msgid "membership transaction" msgstr "transacción de afiliación" -#: apps/note/models/transactions.py:385 apps/treasury/models.py:289 +#: apps/note/models/transactions.py:385 apps/treasury/models.py:292 msgid "membership transactions" msgstr "transacciones de afiliación" @@ -1470,25 +1573,34 @@ msgstr "Hacer clic para validar" msgid "No reason specified" msgstr "Ningún motivo dado" -#: apps/note/tables.py:169 apps/note/tables.py:203 apps/treasury/tables.py:39 +#: apps/note/tables.py:173 apps/note/tables.py:194 apps/note/tables.py:239 +#: apps/treasury/tables.py:39 #: apps/treasury/templates/treasury/invoice_confirm_delete.html:30 #: apps/treasury/templates/treasury/sogecredit_detail.html:65 -#: apps/wei/tables.py:74 apps/wei/tables.py:114 +#: apps/wei/tables.py:75 apps/wei/tables.py:118 #: apps/wei/templates/wei/weiregistration_confirm_delete.html:31 +#: note_kfet/templates/oauth2_provider/application_confirm_delete.html:18 +#: note_kfet/templates/oauth2_provider/application_detail.html:39 +#: note_kfet/templates/oauth2_provider/authorized-token-delete.html:12 msgid "Delete" msgstr "Suprimir" -#: apps/note/tables.py:197 apps/note/templates/note/conso_form.html:132 -#: apps/wei/tables.py:48 apps/wei/tables.py:49 +#: apps/note/tables.py:222 apps/note/templates/note/conso_form.html:132 +#: apps/wei/tables.py:49 apps/wei/tables.py:50 #: apps/wei/templates/wei/base.html:89 #: apps/wei/templates/wei/bus_detail.html:20 #: apps/wei/templates/wei/busteam_detail.html:20 #: apps/wei/templates/wei/busteam_detail.html:40 +#: note_kfet/templates/oauth2_provider/application_detail.html:38 msgid "Edit" msgstr "Editar" +#: apps/note/tables.py:226 apps/note/tables.py:253 +msgid "Hide/Show" +msgstr "Ocultar/Mostrar" + #: apps/note/templates/note/conso_form.html:22 -#: apps/note/templates/note/transaction_form.html:44 +#: apps/note/templates/note/transaction_form.html:48 msgid "Please select a note" msgstr "Por favor elige una note" @@ -1497,8 +1609,8 @@ msgid "Consum" msgstr "Consumir" #: apps/note/templates/note/conso_form.html:43 -#: apps/note/templates/note/transaction_form.html:65 -#: apps/note/templates/note/transaction_form.html:92 +#: apps/note/templates/note/transaction_form.html:69 +#: apps/note/templates/note/transaction_form.html:96 msgid "Name or alias..." msgstr "Nombre o alias..." @@ -1523,7 +1635,7 @@ msgid "Double consumptions" msgstr "Consumiciones dobles" #: apps/note/templates/note/conso_form.html:154 -#: apps/note/templates/note/transaction_form.html:159 +#: apps/note/templates/note/transaction_form.html:163 msgid "Recent transactions history" msgstr "Historial de las transacciones recientes" @@ -1538,45 +1650,45 @@ msgstr "Historial de las transacciones recientes" msgid "Mail generated by the Note Kfet on the" msgstr "Correo electrónico enviado por la Note Kfet el" -#: apps/note/templates/note/transaction_form.html:54 -#: apps/note/templates/note/transaction_form.html:174 +#: apps/note/templates/note/transaction_form.html:58 +#: apps/note/templates/note/transaction_form.html:178 msgid "Select emitters" msgstr "Elegir los remitentes" -#: apps/note/templates/note/transaction_form.html:69 +#: apps/note/templates/note/transaction_form.html:73 msgid "I am the emitter" msgstr "Estoy la fuente" -#: apps/note/templates/note/transaction_form.html:81 -#: apps/note/templates/note/transaction_form.html:176 +#: apps/note/templates/note/transaction_form.html:85 +#: apps/note/templates/note/transaction_form.html:180 msgid "Select receivers" msgstr "Elegir destinatarios" -#: apps/note/templates/note/transaction_form.html:104 +#: apps/note/templates/note/transaction_form.html:108 msgid "Action" msgstr "Acción" -#: apps/note/templates/note/transaction_form.html:112 -#: apps/treasury/forms.py:136 apps/treasury/tables.py:67 +#: apps/note/templates/note/transaction_form.html:116 +#: apps/treasury/forms.py:137 apps/treasury/tables.py:67 #: apps/treasury/tables.py:132 #: apps/treasury/templates/treasury/remittance_form.html:23 msgid "Amount" msgstr "Monto" -#: apps/note/templates/note/transaction_form.html:128 -#: apps/treasury/models.py:52 +#: apps/note/templates/note/transaction_form.html:132 +#: apps/treasury/models.py:54 msgid "Name" msgstr "Nombre" -#: apps/note/templates/note/transaction_form.html:173 +#: apps/note/templates/note/transaction_form.html:177 msgid "Select emitter" msgstr "Elegir el remitente" -#: apps/note/templates/note/transaction_form.html:175 +#: apps/note/templates/note/transaction_form.html:179 msgid "Select receiver" msgstr "Elegir destinatario" -#: apps/note/templates/note/transaction_form.html:177 +#: apps/note/templates/note/transaction_form.html:181 msgid "Transfer type" msgstr "Tipo de transferencia" @@ -1616,6 +1728,18 @@ msgstr "botón suprimido con éxito " msgid "Unable to delete button " msgstr "Imposible de suprimir el botón " +#: apps/note/templates/note/transactiontemplate_list.html:95 +msgid "Button hidden" +msgstr "Botón ocultado" + +#: apps/note/templates/note/transactiontemplate_list.html:96 +msgid "Button displayed" +msgstr "Botón mostrado" + +#: apps/note/templates/note/transactiontemplate_list.html:100 +msgid "An error occured" +msgstr "Un error ocurrió" + #: apps/note/views.py:36 msgid "Transfer money" msgstr "Transferir dinero" @@ -1632,7 +1756,7 @@ msgstr "Buscar un botón" msgid "Update button" msgstr "Modificar el botón" -#: apps/note/views.py:151 note_kfet/templates/base.html:67 +#: apps/note/views.py:151 note_kfet/templates/base.html:66 msgid "Consumptions" msgstr "Consumiciones" @@ -1725,7 +1849,7 @@ msgstr "interesa el club" msgid "role permissions" msgstr "permisos por papeles" -#: apps/permission/signals.py:63 +#: apps/permission/signals.py:73 #, python-brace-format msgid "" "You don't have the permission to change the field {field} on this instance " @@ -1734,7 +1858,7 @@ msgstr "" "Usted no tiene permiso a cambiar el campo {field} on this instance of model " "{app_label}.{model_name}." -#: apps/permission/signals.py:73 apps/permission/views.py:105 +#: apps/permission/signals.py:83 apps/permission/views.py:105 #, python-brace-format msgid "" "You don't have the permission to add an instance of model {app_label}." @@ -1743,7 +1867,7 @@ msgstr "" "Usted no tiene permiso a añadir an instance of model {app_label}." "{model_name}." -#: apps/permission/signals.py:102 +#: apps/permission/signals.py:112 #, python-brace-format msgid "" "You don't have the permission to delete this instance of model {app_label}." @@ -1794,6 +1918,25 @@ msgstr "Consulta :" msgid "No associated permission" msgstr "No hay permiso relacionado" +#: apps/permission/templates/permission/scopes.html:8 +msgid "Available scopes" +msgstr "" + +#: apps/permission/templates/permission/scopes.html:42 +#: note_kfet/templates/oauth2_provider/application_list.html:24 +msgid "No applications defined" +msgstr "Ninguna aplicación definida" + +#: apps/permission/templates/permission/scopes.html:43 +#: note_kfet/templates/oauth2_provider/application_list.html:25 +msgid "Click here" +msgstr "Pulsar aquí" + +#: apps/permission/templates/permission/scopes.html:43 +#: note_kfet/templates/oauth2_provider/application_list.html:25 +msgid "if you want to register a new one" +msgstr "si quiere crear una nueva" + #: apps/permission/views.py:72 #, python-brace-format msgid "" @@ -1808,7 +1951,7 @@ msgid "" "with these parameters. Please correct your data and retry." msgstr "" -#: apps/permission/views.py:112 note_kfet/templates/base.html:109 +#: apps/permission/views.py:112 note_kfet/templates/base.html:108 msgid "Rights" msgstr "Permisos" @@ -1826,13 +1969,13 @@ msgstr "Este correo electrónico ya esta utilizado." #: apps/registration/forms.py:49 msgid "" -"I declare that I opened a bank account in the Société générale with the BDE " -"partnership." +"I declare that I opened or I will open soon a bank account in the Société " +"générale with the BDE partnership." msgstr "" "Declaro que ya abrió una cuenta a la Société Générale en colaboración con el " "BDE." -#: apps/registration/forms.py:50 +#: apps/registration/forms.py:51 msgid "" "Warning: this engages you to open your bank account. If you finally decides " "to don't open your account, you will have to pay the BDE membership." @@ -1840,11 +1983,11 @@ msgstr "" "Cuidado : esto le obliga abrir su cuenta bancaria. Si cambia de idea y no " "abre su cuenta bancaria, tendrá que pagar su afiliación al BDE." -#: apps/registration/forms.py:58 +#: apps/registration/forms.py:59 msgid "Register to the WEI" msgstr "Registrarse en el WEI" -#: apps/registration/forms.py:60 +#: apps/registration/forms.py:61 msgid "" "Check this case if you want to register to the WEI. If you hesitate, you " "will be able to register later, after validating your account in the Kfet." @@ -1852,11 +1995,11 @@ msgstr "" "Marcar esta casilla si usted quiere registrarse en el WEI. Si duda, podrá " "registrarse más tarde, después de validar su cuenta Note Kfet." -#: apps/registration/forms.py:105 +#: apps/registration/forms.py:106 msgid "Join BDE Club" msgstr "Afiliarse al club BDE" -#: apps/registration/forms.py:112 +#: apps/registration/forms.py:113 msgid "Join Kfet Club" msgstr "Afiliarse al club Kfet" @@ -1969,196 +2112,196 @@ msgstr "El equipo Note Kfet." msgid "Register new user" msgstr "Registrar un nuevo usuario" -#: apps/registration/views.py:93 +#: apps/registration/views.py:98 msgid "Email validation" msgstr "Validación del correo electrónico" -#: apps/registration/views.py:95 +#: apps/registration/views.py:100 msgid "Validate email" msgstr "Validar el correo electrónico" -#: apps/registration/views.py:137 +#: apps/registration/views.py:144 msgid "Email validation unsuccessful" msgstr "La validación del correo electrónico fracasó" -#: apps/registration/views.py:148 +#: apps/registration/views.py:155 msgid "Email validation email sent" msgstr "Correo de validación enviado" -#: apps/registration/views.py:156 +#: apps/registration/views.py:163 msgid "Resend email validation link" msgstr "Reenviar el enlace de validación" -#: apps/registration/views.py:174 +#: apps/registration/views.py:181 msgid "Pre-registered users list" msgstr "Lista de los usuarios con afiliación pendiente" -#: apps/registration/views.py:198 +#: apps/registration/views.py:205 msgid "Unregistered users" msgstr "Usuarios con afiliación pendiente" -#: apps/registration/views.py:211 +#: apps/registration/views.py:218 msgid "Registration detail" msgstr "Detalles de la afiliación" -#: apps/registration/views.py:278 +#: apps/registration/views.py:282 msgid "You must join the BDE." msgstr "Usted tiene que afiliarse al BDE." -#: apps/registration/views.py:302 +#: apps/registration/views.py:306 msgid "" "The entered amount is not enough for the memberships, should be at least {}" msgstr "" "El monto dado no es suficiente para las afiliaciones, tiene que ser al menos " "{}" -#: apps/registration/views.py:383 +#: apps/registration/views.py:387 msgid "Invalidate pre-registration" msgstr "Invalidar la afiliación" -#: apps/treasury/apps.py:12 note_kfet/templates/base.html:97 +#: apps/treasury/apps.py:12 note_kfet/templates/base.html:96 msgid "Treasury" msgstr "Tesorería" -#: apps/treasury/forms.py:25 apps/treasury/models.py:91 +#: apps/treasury/forms.py:26 apps/treasury/models.py:93 #: apps/treasury/templates/treasury/invoice_form.html:22 msgid "This invoice is locked and can no longer be edited." msgstr "Esta factura esta bloqueada y no puede ser modificada." -#: apps/treasury/forms.py:99 +#: apps/treasury/forms.py:100 msgid "Remittance is already closed." msgstr "El descuento ya esta cerrado." -#: apps/treasury/forms.py:104 +#: apps/treasury/forms.py:105 msgid "You can't change the type of the remittance." msgstr "No puede cambiar el tipo de descuento." -#: apps/treasury/forms.py:124 apps/treasury/models.py:265 +#: apps/treasury/forms.py:125 apps/treasury/models.py:267 #: apps/treasury/tables.py:97 apps/treasury/tables.py:105 #: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16 -#: apps/treasury/templates/treasury/sogecredit_list.html:16 +#: apps/treasury/templates/treasury/sogecredit_list.html:17 msgid "Remittance" msgstr "Descuento" -#: apps/treasury/forms.py:125 +#: apps/treasury/forms.py:126 msgid "No attached remittance" msgstr "No hay descuento relacionado" -#: apps/treasury/models.py:24 +#: apps/treasury/models.py:26 msgid "Invoice identifier" msgstr "Numero de factura" -#: apps/treasury/models.py:38 +#: apps/treasury/models.py:40 msgid "BDE" msgstr "BDE" -#: apps/treasury/models.py:43 +#: apps/treasury/models.py:45 msgid "Object" msgstr "Asunto" -#: apps/treasury/models.py:47 +#: apps/treasury/models.py:49 msgid "Description" msgstr "Descripción" -#: apps/treasury/models.py:56 +#: apps/treasury/models.py:58 msgid "Address" msgstr "Dirección" -#: apps/treasury/models.py:61 apps/treasury/models.py:191 +#: apps/treasury/models.py:63 apps/treasury/models.py:193 msgid "Date" msgstr "Fecha" -#: apps/treasury/models.py:65 +#: apps/treasury/models.py:67 msgid "Acquitted" msgstr "Pagada" -#: apps/treasury/models.py:70 +#: apps/treasury/models.py:72 msgid "Locked" msgstr "Bloqueada" -#: apps/treasury/models.py:71 +#: apps/treasury/models.py:73 msgid "An invoice can't be edited when it is locked." msgstr "Une factura no puede ser modificada cuando esta bloqueada." -#: apps/treasury/models.py:77 +#: apps/treasury/models.py:79 msgid "tex source" msgstr "código fuente TeX" -#: apps/treasury/models.py:111 apps/treasury/models.py:127 +#: apps/treasury/models.py:113 apps/treasury/models.py:129 msgid "invoice" msgstr "factura" -#: apps/treasury/models.py:112 +#: apps/treasury/models.py:114 msgid "invoices" msgstr "facturas" -#: apps/treasury/models.py:115 +#: apps/treasury/models.py:117 #, python-brace-format msgid "Invoice #{id}" msgstr "Factura n°{id}" -#: apps/treasury/models.py:132 +#: apps/treasury/models.py:134 msgid "Designation" msgstr "Designación" -#: apps/treasury/models.py:138 +#: apps/treasury/models.py:140 msgid "Quantity" msgstr "Cantidad" -#: apps/treasury/models.py:143 +#: apps/treasury/models.py:145 msgid "Unit price" msgstr "Precio unitario" -#: apps/treasury/models.py:159 +#: apps/treasury/models.py:161 msgid "product" msgstr "producto" -#: apps/treasury/models.py:160 +#: apps/treasury/models.py:162 msgid "products" msgstr "productos" -#: apps/treasury/models.py:180 +#: apps/treasury/models.py:182 msgid "remittance type" msgstr "tipo de descuento" -#: apps/treasury/models.py:181 +#: apps/treasury/models.py:183 msgid "remittance types" msgstr "tipos de descuentos" -#: apps/treasury/models.py:202 +#: apps/treasury/models.py:204 msgid "Comment" msgstr "Comentario" -#: apps/treasury/models.py:207 +#: apps/treasury/models.py:209 msgid "Closed" msgstr "Cerrada" -#: apps/treasury/models.py:211 +#: apps/treasury/models.py:213 msgid "remittance" msgstr "descuento" -#: apps/treasury/models.py:212 +#: apps/treasury/models.py:214 msgid "remittances" msgstr "descuentos" -#: apps/treasury/models.py:245 +#: apps/treasury/models.py:247 msgid "Remittance #{:d}: {}" msgstr "Descuento n°{:d} : {}" -#: apps/treasury/models.py:269 +#: apps/treasury/models.py:271 msgid "special transaction proxy" msgstr "proxy de transacción especial" -#: apps/treasury/models.py:270 +#: apps/treasury/models.py:272 msgid "special transaction proxies" msgstr "proxys de transacciones especiales" -#: apps/treasury/models.py:295 +#: apps/treasury/models.py:298 msgid "credit transaction" msgstr "transacción de crédito" -#: apps/treasury/models.py:379 +#: apps/treasury/models.py:430 msgid "" "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." @@ -2167,16 +2310,16 @@ msgstr "" "afiliaciones. Por favor pídelo acreditar su note antes de invalidar este " "crédito." -#: apps/treasury/models.py:399 +#: apps/treasury/models.py:451 #: apps/treasury/templates/treasury/sogecredit_detail.html:10 msgid "Credit from the Société générale" msgstr "Crédito de la Société Générale" -#: apps/treasury/models.py:400 +#: apps/treasury/models.py:452 msgid "Credits from the Société générale" msgstr "Créditos de la Société Générale" -#: apps/treasury/models.py:403 +#: apps/treasury/models.py:455 #, python-brace-format msgid "Soge credit for {user}" msgstr "Crédito de la Société Générale para {user}" @@ -2188,7 +2331,7 @@ msgstr "Factura n°{:d}" #: apps/treasury/tables.py:25 #: apps/treasury/templates/treasury/invoice_list.html:13 #: apps/treasury/templates/treasury/remittance_list.html:13 -#: apps/treasury/templates/treasury/sogecredit_list.html:13 +#: apps/treasury/templates/treasury/sogecredit_list.html:14 msgid "Invoice" msgstr "Factura" @@ -2205,12 +2348,12 @@ msgid "Yes" msgstr "Sí" #: apps/treasury/templates/treasury/invoice_confirm_delete.html:10 -#: apps/treasury/views.py:179 +#: apps/treasury/views.py:180 msgid "Delete invoice" msgstr "Suprimir la factura" #: apps/treasury/templates/treasury/invoice_confirm_delete.html:15 -#: apps/treasury/views.py:183 +#: apps/treasury/views.py:184 msgid "This invoice is locked and can't be deleted." msgstr "Esta factura esta bloqueada y no puede ser suprimida." @@ -2243,7 +2386,7 @@ msgstr "Quitar un producto" #: apps/treasury/templates/treasury/invoice_list.html:19 #: apps/treasury/templates/treasury/remittance_list.html:19 -#: apps/treasury/templates/treasury/sogecredit_list.html:19 +#: apps/treasury/templates/treasury/sogecredit_list.html:20 msgid "Société générale credits" msgstr "Créditos de la Société Générale" @@ -2353,7 +2496,7 @@ msgstr "" "Por favor pide al usuario acreditar su note antes de suprimir este crédito." #: apps/treasury/templates/treasury/sogecredit_detail.html:63 -#: apps/wei/tables.py:59 apps/wei/tables.py:101 +#: apps/wei/tables.py:60 apps/wei/tables.py:102 msgid "Validate" msgstr "Validar" @@ -2361,68 +2504,81 @@ msgstr "Validar" msgid "Return to credit list" msgstr "Regresar a la lista de los créditos" -#: apps/treasury/templates/treasury/sogecredit_list.html:34 +#: apps/treasury/templates/treasury/sogecredit_list.html:40 msgid "Filter with unvalidated credits only" msgstr "Filtrar con créditos invalidados unicamente" -#: apps/treasury/templates/treasury/sogecredit_list.html:44 +#: 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." msgstr "" "No hay usuario encontrado cual pidió un crédito de la Société Générale." -#: apps/treasury/views.py:39 +#: apps/treasury/templates/treasury/sogecredit_list.html:63 +msgid "Add credit from the Société générale" +msgstr "Anãdir un crédito de la Société Générale" + +#: apps/treasury/templates/treasury/sogecredit_list.html:109 +msgid "Credit successfully registered" +msgstr "Crédito creado con éxito" + +#: apps/treasury/views.py:40 msgid "Create new invoice" msgstr "Crear una nueva factura" -#: apps/treasury/views.py:96 +#: apps/treasury/views.py:97 msgid "Invoices list" msgstr "Lista de las facturas" -#: apps/treasury/views.py:111 apps/treasury/views.py:285 -#: apps/treasury/views.py:411 +#: apps/treasury/views.py:112 apps/treasury/views.py:286 +#: apps/treasury/views.py:412 msgid "You are not able to see the treasury interface." msgstr "Usted no tiene derecho a ver la interfaz de tesorería." -#: apps/treasury/views.py:121 +#: apps/treasury/views.py:122 msgid "Update an invoice" msgstr "Modificar una factura" -#: apps/treasury/views.py:246 +#: apps/treasury/views.py:247 msgid "Create a new remittance" msgstr "Crear un nuevo descuento" -#: apps/treasury/views.py:273 +#: apps/treasury/views.py:274 msgid "Remittances list" msgstr "Lista de los descuentos" -#: apps/treasury/views.py:336 +#: apps/treasury/views.py:337 msgid "Update a remittance" msgstr "Modificar un descuento" -#: apps/treasury/views.py:359 +#: apps/treasury/views.py:360 msgid "Attach a transaction to a remittance" msgstr "Unir una transacción con un descuento" -#: apps/treasury/views.py:403 +#: apps/treasury/views.py:404 msgid "List of credits from the Société générale" msgstr "Lista de los créditos de la Société Générale" -#: apps/treasury/views.py:443 +#: apps/treasury/views.py:449 msgid "Manage credits from the Société générale" msgstr "Gestionar los créditos de la Société Générale" -#: apps/wei/apps.py:10 apps/wei/models.py:49 apps/wei/models.py:50 -#: apps/wei/models.py:61 apps/wei/models.py:172 -#: note_kfet/templates/base.html:103 +#: apps/wei/apps.py:10 apps/wei/models.py:50 apps/wei/models.py:51 +#: apps/wei/models.py:62 apps/wei/models.py:180 +#: note_kfet/templates/base.html:102 msgid "WEI" msgstr "WEI" -#: apps/wei/forms/registration.py:51 apps/wei/models.py:118 -#: apps/wei/models.py:315 +#: apps/wei/forms/registration.py:35 +msgid "The selected user is not validated. Please validate its account first" +msgstr "" +"El usuario seleccionado no ha sido validado. Validar esta cuenta primero" + +#: apps/wei/forms/registration.py:59 apps/wei/models.py:126 +#: apps/wei/models.py:323 msgid "bus" msgstr "bus" -#: apps/wei/forms/registration.py:52 +#: apps/wei/forms/registration.py:60 msgid "" "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." @@ -2431,11 +2587,11 @@ msgstr "" "derecho de imponer su bus y su equipo, en particular para los electrones " "libres." -#: apps/wei/forms/registration.py:59 +#: apps/wei/forms/registration.py:67 msgid "Team" msgstr "Equipo" -#: apps/wei/forms/registration.py:61 +#: apps/wei/forms/registration.py:69 msgid "" "Leave this field empty if you won't be in a team (staff, bus chief, free " "electron)" @@ -2443,140 +2599,140 @@ msgstr "" "Deje este campo vacío si no quiere estar en un equipo (staff, jefe de bus, " "electrón libre)" -#: apps/wei/forms/registration.py:67 apps/wei/forms/registration.py:77 -#: apps/wei/models.py:153 +#: apps/wei/forms/registration.py:75 apps/wei/forms/registration.py:85 +#: apps/wei/models.py:161 msgid "WEI Roles" msgstr "Papeles en el WEI" -#: apps/wei/forms/registration.py:68 +#: apps/wei/forms/registration.py:76 msgid "Select the roles that you are interested in." msgstr "Elegir los papeles que le interesa." -#: apps/wei/forms/registration.py:113 +#: apps/wei/forms/registration.py:122 msgid "This team doesn't belong to the given bus." msgstr "Este equipo no pertenece al bus dado." -#: apps/wei/forms/surveys/wei2021.py:31 +#: apps/wei/forms/surveys/wei2021.py:35 apps/wei/forms/surveys/wei2022.py:35 msgid "Choose a word:" msgstr "Elegir una palabra :" -#: apps/wei/models.py:24 apps/wei/templates/wei/base.html:36 +#: apps/wei/models.py:25 apps/wei/templates/wei/base.html:36 msgid "year" msgstr "año" -#: apps/wei/models.py:28 apps/wei/templates/wei/base.html:30 +#: apps/wei/models.py:29 apps/wei/templates/wei/base.html:30 msgid "date start" msgstr "fecha de inicio" -#: apps/wei/models.py:32 apps/wei/templates/wei/base.html:33 +#: apps/wei/models.py:33 apps/wei/templates/wei/base.html:33 msgid "date end" msgstr "fecha de fin" -#: apps/wei/models.py:70 -#, fuzzy -#| msgid "The user joined the bus" +#: apps/wei/models.py:71 apps/wei/tables.py:305 msgid "seat count in the bus" -msgstr "El usuario se queda con el bus" +msgstr "cantidad de asientos en el bus" -#: apps/wei/models.py:82 +#: apps/wei/models.py:83 msgid "survey information" msgstr "informaciones sobre el cuestionario" -#: apps/wei/models.py:83 +#: apps/wei/models.py:84 msgid "Information about the survey for new members, encoded in JSON" msgstr "" "Informaciones sobre el cuestionario para los nuevos miembros, registrado en " "JSON" -#: apps/wei/models.py:105 +#: apps/wei/models.py:113 msgid "Bus" msgstr "Bus" -#: apps/wei/models.py:106 apps/wei/templates/wei/weiclub_detail.html:51 +#: apps/wei/models.py:114 apps/wei/templates/wei/weiclub_detail.html:51 msgid "Buses" msgstr "Bus" -#: apps/wei/models.py:127 +#: apps/wei/models.py:135 msgid "color" msgstr "color" -#: apps/wei/models.py:128 +#: apps/wei/models.py:136 msgid "The color of the T-Shirt, stored with its number equivalent" msgstr "El color de la camiseta, registrado con su número equivalente" -#: apps/wei/models.py:142 +#: apps/wei/models.py:150 msgid "Bus team" msgstr "Equipo de bus" -#: apps/wei/models.py:143 +#: apps/wei/models.py:151 msgid "Bus teams" msgstr "Equipos de bus" -#: apps/wei/models.py:152 +#: apps/wei/models.py:160 msgid "WEI Role" msgstr "Papeles en el WEI" -#: apps/wei/models.py:177 +#: apps/wei/models.py:185 msgid "Credit from Société générale" msgstr "Crédito de la Société Générale" -#: apps/wei/models.py:182 +#: apps/wei/models.py:190 msgid "Caution check given" msgstr "Cheque de garantía dado" -#: apps/wei/models.py:186 apps/wei/templates/wei/weimembership_form.html:64 +#: apps/wei/models.py:194 apps/wei/templates/wei/weimembership_form.html:64 msgid "birth date" msgstr "fecha de nacimiento" -#: apps/wei/models.py:192 apps/wei/models.py:202 +#: apps/wei/models.py:200 apps/wei/models.py:210 msgid "Male" msgstr "Hombre" -#: apps/wei/models.py:193 apps/wei/models.py:203 +#: apps/wei/models.py:201 apps/wei/models.py:211 msgid "Female" msgstr "Mujer" -#: apps/wei/models.py:194 +#: apps/wei/models.py:202 msgid "Non binary" msgstr "No binari@" -#: apps/wei/models.py:196 apps/wei/templates/wei/weimembership_form.html:55 +#: apps/wei/models.py:204 apps/wei/templates/wei/attribute_bus_1A.html:22 +#: apps/wei/templates/wei/weimembership_form.html:55 msgid "gender" msgstr "género" -#: apps/wei/models.py:205 apps/wei/templates/wei/weimembership_form.html:58 +#: apps/wei/models.py:213 apps/wei/templates/wei/weimembership_form.html:58 msgid "clothing cut" msgstr "forma de ropa" -#: apps/wei/models.py:218 apps/wei/templates/wei/weimembership_form.html:61 +#: apps/wei/models.py:226 apps/wei/templates/wei/weimembership_form.html:61 msgid "clothing size" msgstr "medida de ropa" -#: apps/wei/models.py:224 apps/wei/templates/wei/weimembership_form.html:67 +#: apps/wei/models.py:232 apps/wei/templates/wei/attribute_bus_1A.html:28 +#: apps/wei/templates/wei/weimembership_form.html:67 msgid "health issues" msgstr "problemas de salud" -#: apps/wei/models.py:229 apps/wei/templates/wei/weimembership_form.html:70 +#: apps/wei/models.py:237 apps/wei/templates/wei/weimembership_form.html:70 msgid "emergency contact name" msgstr "nombre del contacto de emergencia" -#: apps/wei/models.py:234 apps/wei/templates/wei/weimembership_form.html:73 +#: apps/wei/models.py:242 apps/wei/templates/wei/weimembership_form.html:73 msgid "emergency contact phone" msgstr "teléfono del contacto de emergencia" -#: apps/wei/models.py:239 apps/wei/templates/wei/weimembership_form.html:52 +#: apps/wei/models.py:247 apps/wei/templates/wei/weimembership_form.html:52 msgid "first year" msgstr "primer año" -#: apps/wei/models.py:240 +#: apps/wei/models.py:248 msgid "Tells if the user is new in the school." msgstr "Indica si el usuario es nuevo en la escuela." -#: apps/wei/models.py:245 +#: apps/wei/models.py:253 msgid "registration information" msgstr "informaciones sobre la afiliación" -#: apps/wei/models.py:246 +#: apps/wei/models.py:254 msgid "" "Information about the registration (buses for old members, survey for the " "new members), encoded in JSON" @@ -2584,61 +2740,107 @@ msgstr "" "Informaciones sobre la afiliacion (bus para miembros ancianos, cuestionario " "para los nuevos miembros), registrado en JSON" -#: apps/wei/models.py:304 +#: apps/wei/models.py:312 msgid "WEI User" msgstr "Participante WEI" -#: apps/wei/models.py:305 +#: apps/wei/models.py:313 msgid "WEI Users" msgstr "Participantes WEI" -#: apps/wei/models.py:325 +#: apps/wei/models.py:333 msgid "team" msgstr "equipo" -#: apps/wei/models.py:335 +#: apps/wei/models.py:343 msgid "WEI registration" msgstr "Apuntación al WEI" -#: apps/wei/models.py:339 +#: apps/wei/models.py:347 msgid "WEI membership" msgstr "Afiliación al WEI" -#: apps/wei/models.py:340 +#: apps/wei/models.py:348 msgid "WEI memberships" msgstr "Afiliaciones al WEI" -#: apps/wei/tables.py:104 +#: apps/wei/tables.py:105 msgid "The user does not have enough money." -msgstr "" +msgstr "El usuario no tiene suficientemente dinero." -#: apps/wei/tables.py:107 -#, fuzzy -#| msgid "" -#| "The note has enough money (%(pretty_fee)s required), the registration is " -#| "possible." +#: apps/wei/tables.py:108 +msgid "" +"The user is in first year. You may validate the credit, the algorithm will " +"run later." +msgstr "" +"El usuario esta en primer año. Puede validar el crédito, el algoritmo se " +"ejecutara más tarde." + +#: apps/wei/tables.py:111 msgid "The user has enough money, you can validate the registration." -msgstr "" -"La note tiene suficiente dinero (%(pretty_fee)s pedidos), la afiliación es " -"posible." +msgstr "La note tiene suficiente dinero, la afiliación es posible." -#: apps/wei/tables.py:139 +#: apps/wei/tables.py:143 msgid "Year" msgstr "Año" -#: apps/wei/tables.py:177 apps/wei/templates/wei/bus_detail.html:32 +#: apps/wei/tables.py:180 apps/wei/templates/wei/weimembership_form.html:102 +msgid "preferred bus" +msgstr "bus preferido" + +#: apps/wei/tables.py:210 apps/wei/templates/wei/bus_detail.html:32 #: apps/wei/templates/wei/busteam_detail.html:50 msgid "Teams" msgstr "Equipos" -#: apps/wei/tables.py:186 apps/wei/tables.py:227 +#: apps/wei/tables.py:219 apps/wei/tables.py:260 msgid "Members count" msgstr "Número de miembros" -#: apps/wei/tables.py:193 apps/wei/tables.py:224 +#: apps/wei/tables.py:226 apps/wei/tables.py:257 msgid "members" msgstr "miembros" +#: apps/wei/tables.py:287 +msgid "suggested first year" +msgstr "primer año sugerido" + +#: apps/wei/tables.py:293 +msgid "validated first year" +msgstr "primer año validado" + +#: apps/wei/tables.py:299 +msgid "validated staff" +msgstr "staff validado" + +#: apps/wei/tables.py:310 +msgid "free seats" +msgstr "asientos libres" + +#: apps/wei/templates/wei/1A_list.html:9 +msgid "Attribute first year members into buses" +msgstr "Repartir los primer años en los buses" + +#: apps/wei/templates/wei/1A_list.html:15 +msgid "Start attribution!" +msgstr "Empezar repartición !" + +#: apps/wei/templates/wei/attribute_bus_1A.html:8 +msgid "Bus attribution" +msgstr "Repartición de los buses" + +#: apps/wei/templates/wei/attribute_bus_1A.html:31 +msgid "suggested bus" +msgstr "bus sugerido" + +#: apps/wei/templates/wei/attribute_bus_1A.html:37 +msgid "View raw survey information" +msgstr "Ver las informaciones crudas del cuestionario" + +#: apps/wei/templates/wei/attribute_bus_1A.html:57 +msgid "Back to main list" +msgstr "Volver a la lista principal" + #: apps/wei/templates/wei/base.html:44 msgid "WEI fee (paid students)" msgstr "Pago de entrada del WEI (estudiantes pagados)" @@ -2655,11 +2857,11 @@ msgstr "Pago de entrada del WEI (estudiantes no pagados)" msgid "WEI list" msgstr "Lista de los WEI" -#: apps/wei/templates/wei/base.html:81 apps/wei/views.py:510 +#: apps/wei/templates/wei/base.html:81 apps/wei/views.py:528 msgid "Register 1A" msgstr "Apuntar un 1A" -#: apps/wei/templates/wei/base.html:85 apps/wei/views.py:578 +#: apps/wei/templates/wei/base.html:85 apps/wei/views.py:614 msgid "Register 2A+" msgstr "Apuntar un 2A+" @@ -2688,8 +2890,8 @@ msgstr "Descargar un PDF" #: apps/wei/templates/wei/survey.html:11 #: apps/wei/templates/wei/survey_closed.html:11 -#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:973 -#: apps/wei/views.py:1028 apps/wei/views.py:1038 +#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:1028 +#: apps/wei/views.py:1083 apps/wei/views.py:1093 msgid "Survey WEI" msgstr "Cuestionario WEI" @@ -2729,7 +2931,11 @@ msgstr "Miembros del WEI" msgid "Unvalidated registrations" msgstr "Inscripciones sin validación" -#: apps/wei/templates/wei/weiclub_list.html:14 apps/wei/views.py:77 +#: apps/wei/templates/wei/weiclub_detail.html:99 +msgid "Attribute buses" +msgstr "Repartición en los buses" + +#: apps/wei/templates/wei/weiclub_list.html:14 apps/wei/views.py:79 msgid "Create WEI" msgstr "Crear un WEI" @@ -2765,10 +2971,6 @@ msgstr "El algoritmo no funcionó." msgid "caution check given" msgstr "cheque de garantía dado" -#: apps/wei/templates/wei/weimembership_form.html:102 -msgid "preferred bus" -msgstr "bus preferido" - #: apps/wei/templates/wei/weimembership_form.html:105 msgid "preferred team" msgstr "equipo preferido" @@ -2870,109 +3072,117 @@ msgstr "No hay pre-inscripción encontrada con esta entrada." msgid "View validated memberships..." msgstr "Ver las inscripciones validadas..." -#: apps/wei/views.py:56 +#: apps/wei/views.py:58 msgid "Search WEI" msgstr "Buscar un WEI" -#: apps/wei/views.py:107 +#: apps/wei/views.py:109 msgid "WEI Detail" msgstr "Detalles del WEI" -#: apps/wei/views.py:202 +#: apps/wei/views.py:208 msgid "View members of the WEI" msgstr "Ver los miembros del WEI" -#: apps/wei/views.py:230 +#: apps/wei/views.py:236 msgid "Find WEI Membership" msgstr "Buscar una afiliación al WEI" -#: apps/wei/views.py:240 +#: apps/wei/views.py:246 msgid "View registrations to the WEI" msgstr "Ver las inscripciones al WEI" -#: apps/wei/views.py:264 +#: apps/wei/views.py:270 msgid "Find WEI Registration" msgstr "Buscar una inscripción al WEI" -#: apps/wei/views.py:275 +#: apps/wei/views.py:281 msgid "Update the WEI" msgstr "Modificar el WEI" -#: apps/wei/views.py:296 +#: apps/wei/views.py:302 msgid "Create new bus" msgstr "Añadir un bus" -#: apps/wei/views.py:334 +#: apps/wei/views.py:340 msgid "Update bus" msgstr "Modificar el bus" -#: apps/wei/views.py:366 +#: apps/wei/views.py:372 msgid "Manage bus" msgstr "Gestionar el bus" -#: apps/wei/views.py:393 +#: apps/wei/views.py:399 msgid "Create new team" msgstr "Añadir un equipo" -#: apps/wei/views.py:433 +#: apps/wei/views.py:439 msgid "Update team" msgstr "Modificar el equipo" -#: apps/wei/views.py:464 +#: apps/wei/views.py:470 msgid "Manage WEI team" msgstr "Gestionar el equipo" -#: apps/wei/views.py:486 +#: apps/wei/views.py:492 msgid "Register first year student to the WEI" msgstr "Registrar un 1A al WEI" -#: apps/wei/views.py:532 apps/wei/views.py:613 +#: apps/wei/views.py:550 apps/wei/views.py:649 msgid "This user is already registered to this WEI." msgstr "Este usuario ya afilió a este WEI." -#: apps/wei/views.py:537 +#: apps/wei/views.py:555 msgid "" "This user can't be in her/his first year since he/she has already " "participated to a WEI." msgstr "Este usuario no puede ser un 1A porque ya participó en un WEI." -#: apps/wei/views.py:554 +#: apps/wei/views.py:578 msgid "Register old student to the WEI" msgstr "Registrar un 2A+ al WEI" -#: apps/wei/views.py:597 apps/wei/views.py:686 +#: apps/wei/views.py:633 apps/wei/views.py:721 msgid "You already opened an account in the Société générale." msgstr "Usted ya abrió una cuenta a la Société Générale." -#: apps/wei/views.py:643 +#: apps/wei/views.py:685 msgid "Update WEI Registration" msgstr "Modificar la inscripción WEI" -#: apps/wei/views.py:746 +#: apps/wei/views.py:795 msgid "Delete WEI registration" msgstr "Suprimir la inscripción WEI" -#: apps/wei/views.py:757 +#: apps/wei/views.py:806 msgid "You don't have the right to delete this WEI registration." msgstr "Usted no tiene derecho a suprimir esta inscripción WEI." -#: apps/wei/views.py:776 +#: apps/wei/views.py:824 msgid "Validate WEI registration" msgstr "Validar la inscripción WEI" -#: note_kfet/settings/base.py:161 +#: apps/wei/views.py:1186 +msgid "Attribute buses to first year members" +msgstr "Repartir los primer años en los buses" + +#: apps/wei/views.py:1211 +msgid "Attribute bus" +msgstr "Repartir en un bus" + +#: note_kfet/settings/base.py:172 msgid "German" msgstr "Alemán" -#: note_kfet/settings/base.py:162 +#: note_kfet/settings/base.py:173 msgid "English" msgstr "Ingles" -#: note_kfet/settings/base.py:163 +#: note_kfet/settings/base.py:174 msgid "Spanish" msgstr "Español" -#: note_kfet/settings/base.py:164 +#: note_kfet/settings/base.py:175 msgid "French" msgstr "Francés" @@ -3026,7 +3236,7 @@ msgstr "" "electrónico con los detalles fue enviado a los responsables técnicos de la " "página. Mientras usted puede relajarse." -#: note_kfet/templates/autocomplete_model.html:14 +#: note_kfet/templates/autocomplete_model.html:15 msgid "Reset" msgstr "Reiniciar" @@ -3034,34 +3244,34 @@ msgstr "Reiniciar" msgid "The ENS Paris-Saclay BDE note." msgstr "La note del BDE de la ENS Paris-Saclay." -#: note_kfet/templates/base.html:79 +#: note_kfet/templates/base.html:78 msgid "Users" msgstr "Usuarios" -#: note_kfet/templates/base.html:85 +#: note_kfet/templates/base.html:84 msgid "Clubs" msgstr "Clubs" -#: note_kfet/templates/base.html:114 +#: note_kfet/templates/base.html:113 msgid "Admin" msgstr "" -#: note_kfet/templates/base.html:128 +#: note_kfet/templates/base.html:127 msgid "My account" msgstr "Mi cuenta" -#: note_kfet/templates/base.html:131 +#: note_kfet/templates/base.html:130 msgid "Log out" msgstr "Desconectarse" -#: note_kfet/templates/base.html:139 +#: note_kfet/templates/base.html:138 #: note_kfet/templates/registration/signup.html:6 #: note_kfet/templates/registration/signup.html:11 #: note_kfet/templates/registration/signup.html:28 msgid "Sign up" msgstr "Registrar" -#: note_kfet/templates/base.html:146 +#: note_kfet/templates/base.html:145 #: note_kfet/templates/registration/login.html:6 #: note_kfet/templates/registration/login.html:15 #: note_kfet/templates/registration/login.html:38 @@ -3069,7 +3279,7 @@ msgstr "Registrar" msgid "Log in" msgstr "Conectarse" -#: note_kfet/templates/base.html:160 +#: note_kfet/templates/base.html:159 msgid "" "You are not a BDE member anymore. Please renew your membership if you want " "to use the note." @@ -3077,11 +3287,7 @@ msgstr "" "Usted ya no está miembro del BDE. Por favor renueva su afiliación si quiere " "usar la note." -#: note_kfet/templates/base.html:164 -msgid "You are not a Kfet member, so you can't use your note account." -msgstr "Usted no es un miembro de la Kfet, no puede usar su cuenta note." - -#: note_kfet/templates/base.html:170 +#: note_kfet/templates/base.html:165 msgid "" "Your e-mail address is not validated. Please check your mail inbox and click " "on the validation link." @@ -3089,23 +3295,27 @@ msgstr "" "Su correo electrónico no fue validado. Por favor mire en sus correos y haga " "clic en el enlace de validación." -#: note_kfet/templates/base.html:176 +#: note_kfet/templates/base.html:171 msgid "" "You declared that you opened a bank account in the Société générale. The " "bank did not validate the creation of the account to the BDE, so the " -"registration bonus of 80 € is not credited and the membership is not paid " -"yet. This verification procedure may last a few days. Please make sure that " -"you go to the end of the account creation." +"membership and the WEI are not paid yet. This verification procedure may " +"last a few days. Please make sure that you go to the end of the account " +"creation." msgstr "" "Usted declaró que abrió una cuenta bancaria a la Société Générale. El banco " -"no convalidó la cuenta al BDE, así que el bonus de 80€ no fue dado y la " -"afiliación no está pagada. El proceso de convalidación puede durar unos " -"días. Por favor comprueba que fue hasta el final de la creación de la cuenta." +"no convalidó la cuenta al BDE, así que la afiliación y el WEI no están " +"pagados. El proceso de convalidación puede durar unos días. Por favor " +"comprueba que fue hasta el final de la creación de la cuenta." -#: note_kfet/templates/base.html:199 +#: note_kfet/templates/base.html:194 msgid "Contact us" msgstr "Contactarnos" +#: note_kfet/templates/base.html:196 +msgid "Technical Support" +msgstr "Soporte técnico" + #: note_kfet/templates/base_search.html:15 msgid "Search by attribute such as name…" msgstr "Buscar con atributo, como el nombre…" @@ -3114,6 +3324,111 @@ msgstr "Buscar con atributo, como el nombre…" msgid "There is no results." msgstr "No hay resultado." +#: note_kfet/templates/oauth2_provider/application_confirm_delete.html:8 +msgid "Are you sure to delete the application" +msgstr "" +"¿ Usted está seguro de querer suprimir esta aplicación ? Este acto es " +"definitivo" + +#: note_kfet/templates/oauth2_provider/application_confirm_delete.html:17 +#: note_kfet/templates/oauth2_provider/authorize.html:28 +msgid "Cancel" +msgstr "Anular" + +#: note_kfet/templates/oauth2_provider/application_detail.html:11 +msgid "Client id" +msgstr "ID cliente" + +#: note_kfet/templates/oauth2_provider/application_detail.html:14 +msgid "Client secret" +msgstr "Secreto cliente" + +#: note_kfet/templates/oauth2_provider/application_detail.html:17 +msgid "Client type" +msgstr "Tipo de cliente" + +#: note_kfet/templates/oauth2_provider/application_detail.html:20 +msgid "Authorization Grant Type" +msgstr "Tipo de autorización" + +#: note_kfet/templates/oauth2_provider/application_detail.html:23 +msgid "Redirect Uris" +msgstr "URL de redirecto" + +#: note_kfet/templates/oauth2_provider/application_detail.html:29 +#, python-format +msgid "" +"You can go here to generate authorization " +"link templates and convert permissions to scope numbers with the permissions " +"that you want to grant for your application." +msgstr "" + +#: note_kfet/templates/oauth2_provider/application_detail.html:37 +#: note_kfet/templates/oauth2_provider/application_form.html:23 +msgid "Go Back" +msgstr "Volver" + +#: note_kfet/templates/oauth2_provider/application_form.html:12 +msgid "Edit application" +msgstr "Editar la aplicación" + +#: note_kfet/templates/oauth2_provider/application_list.html:7 +msgid "Your applications" +msgstr "Sus aplicaciones" + +#: note_kfet/templates/oauth2_provider/application_list.html:11 +msgid "" +"You can find on this page the list of the applications that you already " +"registered." +msgstr "" +"Puede encontrar en esta pagina la lista de la aplicaciones que ya registró." + +#: note_kfet/templates/oauth2_provider/application_list.html:30 +msgid "New Application" +msgstr "Nueva aplicación" + +#: note_kfet/templates/oauth2_provider/application_list.html:31 +msgid "Authorized Tokens" +msgstr "Tokens autorizados" + +#: note_kfet/templates/oauth2_provider/application_registration_form.html:5 +msgid "Register a new application" +msgstr "Registrar una nueva aplicación" + +#: note_kfet/templates/oauth2_provider/authorize.html:9 +#: note_kfet/templates/oauth2_provider/authorize.html:29 +msgid "Authorize" +msgstr "Autorizar" + +#: note_kfet/templates/oauth2_provider/authorize.html:14 +msgid "Application requires following permissions:" +msgstr "La aplicación necesita los derechos siguientes :" + +#: note_kfet/templates/oauth2_provider/authorize.html:36 +#: note_kfet/templates/oauth2_provider/authorized-oob.html:15 +msgid "Error:" +msgstr "Error :" + +#: note_kfet/templates/oauth2_provider/authorized-oob.html:13 +msgid "Success" +msgstr "Éxito" + +#: note_kfet/templates/oauth2_provider/authorized-oob.html:21 +msgid "Please return to your application and enter this code:" +msgstr "Volver a su aplicación y entrar este código :" + +#: note_kfet/templates/oauth2_provider/authorized-token-delete.html:9 +msgid "Are you sure you want to delete this token?" +msgstr "¿ Usted está seguro de querer suprimir este token ?" + +#: note_kfet/templates/oauth2_provider/authorized-tokens.html:7 +msgid "Tokens" +msgstr "Tokens" + +#: note_kfet/templates/oauth2_provider/authorized-tokens.html:22 +msgid "There are no authorized tokens yet." +msgstr "Por ahora no hay ningún token autorizado." + #: note_kfet/templates/registration/logged_out.html:13 msgid "Thanks for spending some quality time with the Web site today." msgstr "Gracias por usar la Note Kfet." @@ -3222,12 +3537,12 @@ msgstr "" "pagar su afiliación. Tambien tiene que validar su correo electronico con el " "enlace que recibió." +#~ msgid "You are not a Kfet member, so you can't use your note account." +#~ msgstr "Usted no es un miembro de la Kfet, no puede usar su cuenta note." + #~ msgid "This user didn't give her/his caution check." #~ msgstr "Este usuario no dio su cheque de garantía." -#~ msgid "Central Authentication Service" -#~ msgstr "Servicio Central de Autentificación" - #~ msgid "" #~ "A new version of the application is available. This instance runs " #~ "%(VERSION)s and the last version is %(LAST_VERSION)s. Please consider " diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 4ee77566..65fd6062 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,16 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-07 22:55+0200\n" -"PO-Revision-Date: 2020-11-16 20:02+0000\n" -"Last-Translator: Yohann D'ANELLO \n" +"POT-Creation-Date: 2022-04-10 22:34+0200\n" +"PO-Revision-Date: 2022-04-11 22:05+0200\n" +"Last-Translator: elkmaennchen \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Poedit 3.0\n" #: apps/activity/apps.py:10 apps/activity/models.py:151 #: apps/activity/models.py:167 @@ -56,7 +56,7 @@ msgstr "Vous ne pouvez pas inviter plus de 3 personnes à cette activité." #: apps/member/models.py:199 #: apps/member/templates/member/includes/club_info.html:4 #: apps/member/templates/member/includes/profile_info.html:4 -#: apps/note/models/notes.py:231 apps/note/models/transactions.py:26 +#: apps/note/models/notes.py:263 apps/note/models/transactions.py:26 #: apps/note/models/transactions.py:46 apps/note/models/transactions.py:301 #: apps/permission/models.py:330 #: apps/registration/templates/registration/future_profile_detail.html:16 @@ -114,7 +114,7 @@ msgstr "Lieu où l'activité est organisée, par exemple la Kfet." msgid "type" msgstr "type" -#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305 +#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307 #: apps/note/models/notes.py:148 apps/treasury/models.py:285 #: apps/wei/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13 #: apps/wei/templates/wei/survey.html:15 @@ -295,7 +295,7 @@ msgstr "Invité supprimé" #: apps/note/models/transactions.py:257 #: apps/note/templates/note/transaction_form.html:17 #: apps/note/templates/note/transaction_form.html:152 -#: note_kfet/templates/base.html:73 +#: note_kfet/templates/base.html:72 msgid "Transfer" msgstr "Virement" @@ -388,7 +388,7 @@ msgid "validate" msgstr "valider" #: apps/activity/templates/activity/includes/activity_info.html:71 -#: apps/logs/models.py:64 apps/note/tables.py:195 +#: apps/logs/models.py:64 apps/note/tables.py:220 msgid "edit" msgstr "modifier" @@ -400,7 +400,7 @@ msgstr "Inviter" msgid "Create new activity" msgstr "Créer une nouvelle activité" -#: apps/activity/views.py:67 note_kfet/templates/base.html:91 +#: apps/activity/views.py:67 note_kfet/templates/base.html:90 msgid "Activities" msgstr "Activités" @@ -466,9 +466,9 @@ msgstr "nouvelles données" msgid "create" msgstr "créer" -#: apps/logs/models.py:65 apps/note/tables.py:165 apps/note/tables.py:211 -#: apps/permission/models.py:127 apps/treasury/tables.py:38 -#: apps/wei/tables.py:74 +#: apps/logs/models.py:65 apps/note/tables.py:166 apps/note/tables.py:190 +#: apps/note/tables.py:237 apps/permission/models.py:127 +#: apps/treasury/tables.py:38 apps/wei/tables.py:74 msgid "delete" msgstr "supprimer" @@ -507,11 +507,11 @@ msgstr "cotisation pour adhérer (normalien élève)" msgid "membership fee (unpaid students)" msgstr "cotisation pour adhérer (normalien étudiant)" -#: apps/member/admin.py:65 apps/member/models.py:317 +#: apps/member/admin.py:65 apps/member/models.py:319 msgid "roles" msgstr "rôles" -#: apps/member/admin.py:66 apps/member/models.py:331 +#: apps/member/admin.py:66 apps/member/models.py:333 msgid "fee" msgstr "cotisation" @@ -547,7 +547,7 @@ msgstr "Taille maximale : 2 Mo" msgid "This image cannot be loaded." msgstr "Cette image ne peut pas être chargée." -#: apps/member/forms.py:141 apps/member/views.py:102 +#: apps/member/forms.py:141 apps/member/views.py:103 #: apps/registration/forms.py:33 apps/registration/views.py:262 msgid "An alias with a similar name already exists." msgstr "Un alias avec un nom similaire existe déjà." @@ -610,14 +610,14 @@ msgid "hash" msgstr "haché" #: apps/member/models.py:38 -#: apps/member/templates/member/includes/profile_info.html:35 +#: apps/member/templates/member/includes/profile_info.html:43 #: apps/registration/templates/registration/future_profile_detail.html:40 #: apps/wei/templates/wei/weimembership_form.html:44 msgid "phone number" msgstr "numéro de téléphone" #: apps/member/models.py:45 -#: apps/member/templates/member/includes/profile_info.html:29 +#: apps/member/templates/member/includes/profile_info.html:37 #: apps/registration/templates/registration/future_profile_detail.html:34 #: apps/wei/templates/wei/weimembership_form.html:38 msgid "section" @@ -705,14 +705,14 @@ msgid "Year of entry to the school (None if not ENS student)" msgstr "Année d'entrée dans l'école (None si non-étudiant·e de l'ENS)" #: apps/member/models.py:83 -#: apps/member/templates/member/includes/profile_info.html:39 +#: apps/member/templates/member/includes/profile_info.html:47 #: apps/registration/templates/registration/future_profile_detail.html:37 #: apps/wei/templates/wei/weimembership_form.html:41 msgid "address" msgstr "adresse" #: apps/member/models.py:90 -#: apps/member/templates/member/includes/profile_info.html:42 +#: apps/member/templates/member/includes/profile_info.html:50 #: apps/registration/templates/registration/future_profile_detail.html:43 #: apps/wei/templates/wei/weimembership_form.html:47 msgid "paid" @@ -784,7 +784,7 @@ msgstr "Activez votre compte Note Kfet" #: apps/member/models.py:204 #: apps/member/templates/member/includes/club_info.html:55 -#: apps/member/templates/member/includes/profile_info.html:32 +#: apps/member/templates/member/includes/profile_info.html:40 #: apps/registration/templates/registration/future_profile_detail.html:22 #: apps/wei/templates/wei/base.html:70 #: apps/wei/templates/wei/weimembership_form.html:20 @@ -833,46 +833,46 @@ msgstr "" "Date maximale d'une fin d'adhésion, après laquelle les adhérents doivent la " "renouveler." -#: apps/member/models.py:286 apps/member/models.py:311 +#: apps/member/models.py:288 apps/member/models.py:313 #: apps/note/models/notes.py:176 msgid "club" msgstr "club" -#: apps/member/models.py:287 +#: apps/member/models.py:289 msgid "clubs" msgstr "clubs" -#: apps/member/models.py:322 +#: apps/member/models.py:324 msgid "membership starts on" msgstr "l'adhésion commence le" -#: apps/member/models.py:326 +#: apps/member/models.py:328 msgid "membership ends on" msgstr "l'adhésion finit le" -#: apps/member/models.py:428 +#: apps/member/models.py:430 #, python-brace-format msgid "The role {role} does not apply to the club {club}." msgstr "Le rôle {role} ne s'applique pas au club {club}." -#: apps/member/models.py:437 apps/member/views.py:651 +#: apps/member/models.py:439 apps/member/views.py:712 msgid "User is already a member of the club" msgstr "L'utilisateur est déjà membre du club" -#: apps/member/models.py:449 apps/member/views.py:660 +#: apps/member/models.py:451 apps/member/views.py:721 msgid "User is not a member of the parent club" msgstr "L'utilisateur n'est pas membre du club parent" -#: apps/member/models.py:502 +#: apps/member/models.py:504 #, python-brace-format msgid "Membership of {user} for the club {club}" msgstr "Adhésion de {user} pour le club {club}" -#: apps/member/models.py:505 apps/note/models/transactions.py:389 +#: apps/member/models.py:507 apps/note/models/transactions.py:389 msgid "membership" msgstr "adhésion" -#: apps/member/models.py:506 +#: apps/member/models.py:508 msgid "memberships" msgstr "adhésions" @@ -924,7 +924,7 @@ msgid "Account #" msgstr "Compte n°" #: apps/member/templates/member/base.html:48 -#: apps/member/templates/member/base.html:62 apps/member/views.py:59 +#: apps/member/templates/member/base.html:62 apps/member/views.py:60 #: apps/registration/templates/registration/future_profile_detail.html:48 #: apps/wei/templates/wei/weimembership_form.html:117 msgid "Update Profile" @@ -985,13 +985,14 @@ msgstr "" "seront à nouveau possible." #: apps/member/templates/member/club_alias.html:10 -#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:253 -#: apps/member/views.py:456 +#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:287 +#: apps/member/views.py:517 msgid "Note aliases" msgstr "Alias de la note" #: apps/member/templates/member/club_alias.html:20 #: apps/member/templates/member/profile_alias.html:19 +#: apps/member/templates/member/profile_trust.html:19 #: apps/treasury/tables.py:99 #: apps/treasury/templates/treasury/sogecredit_list.html:34 #: apps/treasury/templates/treasury/sogecredit_list.html:73 @@ -1044,7 +1045,7 @@ msgid "membership fee" msgstr "cotisation pour adhérer" #: apps/member/templates/member/includes/club_info.html:43 -#: apps/member/templates/member/includes/profile_info.html:47 +#: apps/member/templates/member/includes/profile_info.html:55 #: apps/treasury/templates/treasury/sogecredit_detail.html:24 #: apps/wei/templates/wei/base.html:60 msgid "balance" @@ -1052,7 +1053,7 @@ msgstr "solde du compte" #: apps/member/templates/member/includes/club_info.html:47 #: apps/member/templates/member/includes/profile_info.html:20 -#: apps/note/models/notes.py:255 apps/wei/templates/wei/base.html:66 +#: apps/note/models/notes.py:287 apps/wei/templates/wei/base.html:66 msgid "aliases" msgstr "alias" @@ -1076,7 +1077,16 @@ msgstr "mot de passe" msgid "Change password" msgstr "Changer le mot de passe" -#: apps/member/templates/member/includes/profile_info.html:55 +#: apps/member/templates/member/includes/profile_info.html:28 +#: apps/note/models/notes.py:244 +msgid "friendships" +msgstr "amitiés" + +#: apps/member/templates/member/includes/profile_info.html:32 +msgid "Manage friendships" +msgstr "Gérer les amitiés" + +#: apps/member/templates/member/includes/profile_info.html:63 msgid "API token" msgstr "Accès API" @@ -1148,6 +1158,23 @@ msgstr "Cliquez ici pour renvoyer un lien de validation." msgid "View my memberships" msgstr "Voir mes adhésions" +#: apps/member/templates/member/profile_trust.html:10 apps/member/views.py:254 +msgid "Note friendships" +msgstr "Amitiés note" + +#: apps/member/templates/member/profile_trust.html:28 +msgid "" +"Adding someone as a friend enables them to initiate transactions coming from " +"your account (while keeping your balance positive). This is designed to " +"simplify using note kfet transfers to transfer money between users. The " +"intent is that one person can make all transfers for a group of friends " +"without needing additional rights among them." +msgstr "" +"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 " +"ami⋅es via note. En effet, une personne peut effectuer tous les transferts " +"sans posséder de droits supplémentaires." + #: apps/member/templates/member/profile_update.html:18 msgid "Save Changes" msgstr "Sauvegarder les changements" @@ -1156,47 +1183,47 @@ msgstr "Sauvegarder les changements" msgid "Registrations" msgstr "Inscriptions" -#: apps/member/views.py:72 apps/registration/forms.py:23 +#: apps/member/views.py:73 apps/registration/forms.py:23 msgid "This address must be valid." msgstr "Cette adresse doit être valide." -#: apps/member/views.py:139 +#: apps/member/views.py:140 msgid "Profile detail" msgstr "Détails de l'utilisateur" -#: apps/member/views.py:205 +#: apps/member/views.py:206 msgid "Search user" msgstr "Chercher un utilisateur" -#: apps/member/views.py:273 +#: apps/member/views.py:308 msgid "Update note picture" msgstr "Modifier la photo de la note" -#: apps/member/views.py:319 +#: apps/member/views.py:354 msgid "Manage auth token" msgstr "Gérer les jetons d'authentification" -#: apps/member/views.py:346 +#: apps/member/views.py:381 msgid "Create new club" msgstr "Créer un nouveau club" -#: apps/member/views.py:365 +#: apps/member/views.py:400 msgid "Search club" msgstr "Chercher un club" -#: apps/member/views.py:398 +#: apps/member/views.py:433 msgid "Club detail" msgstr "Détails du club" -#: apps/member/views.py:479 +#: apps/member/views.py:540 msgid "Update club" msgstr "Modifier le club" -#: apps/member/views.py:513 +#: apps/member/views.py:574 msgid "Add new member to the club" msgstr "Ajouter un nouveau membre au club" -#: apps/member/views.py:642 apps/wei/views.py:973 +#: apps/member/views.py:703 apps/wei/views.py:973 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." @@ -1204,19 +1231,19 @@ msgstr "" "Cet utilisateur n'a pas assez d'argent pour rejoindre ce club et ne peut pas " "avoir un solde négatif." -#: apps/member/views.py:664 +#: apps/member/views.py:725 msgid "The membership must start after {:%m-%d-%Y}." msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}." -#: apps/member/views.py:669 +#: apps/member/views.py:730 msgid "The membership must begin before {:%m-%d-%Y}." msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}." -#: apps/member/views.py:815 +#: apps/member/views.py:876 msgid "Manage roles of an user in the club" msgstr "Gérer les rôles d'un utilisateur dans le club" -#: apps/member/views.py:840 +#: apps/member/views.py:901 msgid "Members of the club" msgstr "Membres du club" @@ -1234,7 +1261,7 @@ msgstr "destination" msgid "amount" msgstr "montant" -#: apps/note/api/serializers.py:183 apps/note/api/serializers.py:189 +#: apps/note/api/serializers.py:199 apps/note/api/serializers.py:205 #: apps/note/models/transactions.py:228 msgid "" "The transaction can't be saved since the source note or the destination note " @@ -1366,30 +1393,47 @@ msgstr "note spéciale" msgid "special notes" msgstr "notes spéciales" -#: apps/note/models/notes.py:237 +#: apps/note/models/notes.py:232 +msgid "trusting" +msgstr "note" + +#: apps/note/models/notes.py:239 +msgid "trusted" +msgstr "ami" + +#: apps/note/models/notes.py:243 +msgid "frienship" +msgstr "amitié" + +#: apps/note/models/notes.py:248 +#, python-brace-format +msgid "Friendship between {trusting} and {trusted}" +msgstr "Amitié entre {trusting} et {trusted}" + +#: apps/note/models/notes.py:269 msgid "Invalid alias" msgstr "Alias invalide" -#: apps/note/models/notes.py:254 +#: apps/note/models/notes.py:286 msgid "alias" msgstr "alias" -#: apps/note/models/notes.py:278 +#: apps/note/models/notes.py:310 msgid "Alias is too long." msgstr "L'alias est trop long." -#: apps/note/models/notes.py:281 +#: apps/note/models/notes.py:313 msgid "" "This alias contains only complex character. Please use a more simple alias." msgstr "" "Cet alias ne contient que des caractères complexes. Merci d'utiliser un " "alias plus simple." -#: apps/note/models/notes.py:285 +#: apps/note/models/notes.py:317 msgid "An alias with a similar name already exists: {} " msgstr "Un alias avec un nom similaire existe déjà : {} " -#: apps/note/models/notes.py:299 +#: apps/note/models/notes.py:331 msgid "You can't delete your main alias." msgstr "Vous ne pouvez pas supprimer votre alias principal." @@ -1535,7 +1579,8 @@ msgstr "Cliquez pour valider" msgid "No reason specified" msgstr "Pas de motif spécifié" -#: apps/note/tables.py:169 apps/note/tables.py:213 apps/treasury/tables.py:39 +#: apps/note/tables.py:173 apps/note/tables.py:194 apps/note/tables.py:239 +#: apps/treasury/tables.py:39 #: apps/treasury/templates/treasury/invoice_confirm_delete.html:30 #: apps/treasury/templates/treasury/sogecredit_detail.html:65 #: apps/wei/tables.py:75 apps/wei/tables.py:118 @@ -1546,7 +1591,7 @@ msgstr "Pas de motif spécifié" msgid "Delete" msgstr "Supprimer" -#: apps/note/tables.py:197 apps/note/templates/note/conso_form.html:132 +#: apps/note/tables.py:222 apps/note/templates/note/conso_form.html:132 #: apps/wei/tables.py:49 apps/wei/tables.py:50 #: apps/wei/templates/wei/base.html:89 #: apps/wei/templates/wei/bus_detail.html:20 @@ -1556,7 +1601,7 @@ msgstr "Supprimer" msgid "Edit" msgstr "Éditer" -#: apps/note/tables.py:201 apps/note/tables.py:224 +#: apps/note/tables.py:226 apps/note/tables.py:253 msgid "Hide/Show" msgstr "Afficher/Masquer" @@ -1717,7 +1762,7 @@ msgstr "Chercher un bouton" msgid "Update button" msgstr "Modifier le bouton" -#: apps/note/views.py:151 note_kfet/templates/base.html:67 +#: apps/note/views.py:151 note_kfet/templates/base.html:66 msgid "Consumptions" msgstr "Consommations" @@ -1915,7 +1960,7 @@ msgstr "" "Vous n'avez pas la permission d'ajouter une instance du modèle « {model} » " "avec ces paramètres. Merci de les corriger et de réessayer." -#: apps/permission/views.py:112 note_kfet/templates/base.html:109 +#: apps/permission/views.py:112 note_kfet/templates/base.html:108 msgid "Rights" msgstr "Droits" @@ -2122,7 +2167,7 @@ msgstr "" msgid "Invalidate pre-registration" msgstr "Invalider l'inscription" -#: apps/treasury/apps.py:12 note_kfet/templates/base.html:97 +#: apps/treasury/apps.py:12 note_kfet/templates/base.html:96 msgid "Treasury" msgstr "Trésorerie" @@ -2530,7 +2575,7 @@ msgstr "Gérer les crédits de la Société générale" #: apps/wei/apps.py:10 apps/wei/models.py:50 apps/wei/models.py:51 #: apps/wei/models.py:62 apps/wei/models.py:180 -#: note_kfet/templates/base.html:103 +#: note_kfet/templates/base.html:102 msgid "WEI" msgstr "WEI" @@ -2538,7 +2583,7 @@ msgstr "WEI" msgid "The selected user is not validated. Please validate its account first" msgstr "" "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/models.py:323 @@ -2579,7 +2624,7 @@ msgstr "Sélectionnez les rôles qui vous intéressent." msgid "This team doesn't belong to the given bus." msgstr "Cette équipe n'appartient pas à ce bus." -#: apps/wei/forms/surveys/wei2021.py:35 +#: apps/wei/forms/surveys/wei2021.py:35 apps/wei/forms/surveys/wei2022.py:35 msgid "Choose a word:" msgstr "Choisissez un mot :" @@ -3140,19 +3185,19 @@ msgstr "Répartir les 1A dans les bus" msgid "Attribute bus" msgstr "Attribuer un bus" -#: note_kfet/settings/base.py:161 +#: note_kfet/settings/base.py:172 msgid "German" msgstr "Allemand" -#: note_kfet/settings/base.py:162 +#: note_kfet/settings/base.py:173 msgid "English" msgstr "Anglais" -#: note_kfet/settings/base.py:163 +#: note_kfet/settings/base.py:174 msgid "Spanish" msgstr "Espagnol" -#: note_kfet/settings/base.py:164 +#: note_kfet/settings/base.py:175 msgid "French" msgstr "Français" @@ -3209,7 +3254,7 @@ msgstr "" "erreur, qui sera corrigée rapidement. Vous pouvez désormais aller boire une " "bière." -#: note_kfet/templates/autocomplete_model.html:14 +#: note_kfet/templates/autocomplete_model.html:15 msgid "Reset" msgstr "Réinitialiser" @@ -3217,34 +3262,34 @@ msgstr "Réinitialiser" msgid "The ENS Paris-Saclay BDE note." msgstr "La note du BDE de l'ENS Paris-Saclay." -#: note_kfet/templates/base.html:79 +#: note_kfet/templates/base.html:78 msgid "Users" msgstr "Utilisateurs" -#: note_kfet/templates/base.html:85 +#: note_kfet/templates/base.html:84 msgid "Clubs" msgstr "Clubs" -#: note_kfet/templates/base.html:114 +#: note_kfet/templates/base.html:113 msgid "Admin" msgstr "Admin" -#: note_kfet/templates/base.html:128 +#: note_kfet/templates/base.html:127 msgid "My account" msgstr "Mon compte" -#: note_kfet/templates/base.html:131 +#: note_kfet/templates/base.html:130 msgid "Log out" msgstr "Se déconnecter" -#: note_kfet/templates/base.html:139 +#: note_kfet/templates/base.html:138 #: note_kfet/templates/registration/signup.html:6 #: note_kfet/templates/registration/signup.html:11 #: note_kfet/templates/registration/signup.html:28 msgid "Sign up" msgstr "Inscription" -#: note_kfet/templates/base.html:146 +#: note_kfet/templates/base.html:145 #: note_kfet/templates/registration/login.html:6 #: note_kfet/templates/registration/login.html:15 #: note_kfet/templates/registration/login.html:38 @@ -3252,7 +3297,7 @@ msgstr "Inscription" msgid "Log in" msgstr "Se connecter" -#: note_kfet/templates/base.html:160 +#: note_kfet/templates/base.html:159 msgid "" "You are not a BDE member anymore. Please renew your membership if you want " "to use the note." @@ -3260,7 +3305,7 @@ msgstr "" "Vous n'êtes plus adhérent BDE. Merci de réadhérer si vous voulez profiter de " "la note." -#: note_kfet/templates/base.html:166 +#: note_kfet/templates/base.html:165 msgid "" "Your e-mail address is not validated. Please check your mail inbox and click " "on the validation link." @@ -3268,7 +3313,7 @@ msgstr "" "Votre adresse e-mail n'est pas validée. Merci de vérifier votre boîte mail " "et de cliquer sur le lien de validation." -#: note_kfet/templates/base.html:172 +#: note_kfet/templates/base.html:171 msgid "" "You declared that you opened a bank account in the Société générale. The " "bank did not validate the creation of the account to the BDE, so the " @@ -3282,11 +3327,11 @@ msgstr "" "vérification peut durer quelques jours. Merci de vous assurer de bien aller " "au bout de vos démarches." -#: note_kfet/templates/base.html:195 +#: note_kfet/templates/base.html:194 msgid "Contact us" msgstr "Nous contacter" -#: note_kfet/templates/base.html:197 +#: note_kfet/templates/base.html:196 msgid "Technical Support" msgstr "Support technique" diff --git a/note_kfet/static/js/autocomplete_model.js b/note_kfet/static/js/autocomplete_model.js index f7aafbc6..2a2677d4 100644 --- a/note_kfet/static/js/autocomplete_model.js +++ b/note_kfet/static/js/autocomplete_model.js @@ -13,21 +13,29 @@ $(document).ready(function () { $('#' + prefix + '_reset').removeClass('d-none') $.getJSON(api_url + (api_url.includes('?') ? '&' : '?') + 'format=json&search=^' + input + api_url_suffix, function (objects) { - let html = '' + let html = '
    ' objects.results.forEach(function (obj) { html += li(prefix + '_' + obj.id, obj[name_field]) }) + html += '
' - const results_list = $('#' + prefix + '_list') - results_list.html(html) + target.tooltip({ + html: true, + placement: 'bottom', + trigger: 'manual', + container: target.parent(), + fallbackPlacement: 'clockwise' + }) + + target.attr("data-original-title", html).tooltip("show") objects.results.forEach(function (obj) { $('#' + prefix + '_' + obj.id).click(function () { target.val(obj[name_field]) $('#' + prefix + '_pk').val(obj.id) - results_list.html('') + target.tooltip("hide") target.removeClass('is-invalid') target.addClass('is-valid') @@ -37,8 +45,8 @@ $(document).ready(function () { if (input === obj[name_field]) { $('#' + prefix + '_pk').val(obj.id) } }) - if (results_list.children().length === 1 && e.originalEvent.keyCode >= 32) { - results_list.children().first().trigger('click') + if (objects.results.length === 1 && e.originalEvent.keyCode >= 32) { + $('#' + prefix + '_' + objects.results[0].id).trigger('click') } }) }) diff --git a/note_kfet/templates/autocomplete_model.html b/note_kfet/templates/autocomplete_model.html index 0e5d17cd..20c8041e 100644 --- a/note_kfet/templates/autocomplete_model.html +++ b/note_kfet/templates/autocomplete_model.html @@ -9,9 +9,9 @@ SPDX-License-Identifier: GPL-3.0-or-later name="{{ widget.name }}_name" autocomplete="off" {% for name, value in widget.attrs.items %} {% ifnotequal value False %}{{ name }}{% ifnotequal value True %}="{{ value|stringformat:'s' }}"{% endifnotequal %}{% endifnotequal %} - {% endfor %}> + {% endfor %} + aria-describedby="{{widget.attrs.id}}_tooltip"> {% if widget.resetable %} {% trans "Reset" %} {% endif %} -
    -
+