mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-06-29 20:51:11 +02:00
Compare commits
42 Commits
qrcode
...
6b1cd3ba7a
Author | SHA1 | Date | |
---|---|---|---|
6b1cd3ba7a | |||
9f114b8ca2 | |||
e0132b6dc8 | |||
31e67ae3f6 | |||
2839d3de1e | |||
30afa6da0a | |||
84fc77696f | |||
19fc620d1f | |||
6bceb394c5 | |||
62cf8f9d84 | |||
2dd1c3fb89 | |||
c8665c5798 | |||
e9f1b6f52d | |||
1d95ae4810 | |||
84b16ab603 | |||
6a1b51dbbf | |||
c441a43a8b | |||
87f3b51b04 | |||
0a853fd3e6 | |||
c429734810 | |||
5d759111b6 | |||
70baf7566c | |||
eb355f547c | |||
7068170f18 | |||
45ee9a8941 | |||
454ea19603 | |||
5a77a66391 | |||
761fc170eb
|
|||
ac23d7eb54
|
|||
40e7415062
|
|||
319405d2b1
|
|||
633ab88b04
|
|||
e29b42eecc
|
|||
dc69faaf1d
|
|||
442a5c5e36
|
|||
7ab0fec3bc
|
|||
bd4fb23351 | |||
ee22e9b3b6 | |||
19ae616fb4 | |||
b7657ec362 | |||
4d03d9460d | |||
3633f66a87 |
@ -6,7 +6,7 @@
|
|||||||
"name": "Pot",
|
"name": "Pot",
|
||||||
"manage_entries": true,
|
"manage_entries": true,
|
||||||
"can_invite": true,
|
"can_invite": true,
|
||||||
"guest_entry_fee": 500
|
"guest_entry_fee": 1000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -28,5 +28,25 @@
|
|||||||
"can_invite": false,
|
"can_invite": false,
|
||||||
"guest_entry_fee": 0
|
"guest_entry_fee": 0
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "activity.activitytype",
|
||||||
|
"pk": 5,
|
||||||
|
"fields": {
|
||||||
|
"name": "Soir\u00e9e avec entrées",
|
||||||
|
"manage_entries": true,
|
||||||
|
"can_invite": false,
|
||||||
|
"guest_entry_fee": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "activity.activitytype",
|
||||||
|
"pk": 7,
|
||||||
|
"fields": {
|
||||||
|
"name": "Soir\u00e9e avec invitations",
|
||||||
|
"manage_entries": true,
|
||||||
|
"can_invite": true,
|
||||||
|
"guest_entry_fee": 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
5
apps/api/pagination.py
Normal file
5
apps/api/pagination.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from rest_framework.pagination import PageNumberPagination
|
||||||
|
|
||||||
|
class CustomPagination(PageNumberPagination):
|
||||||
|
page_size_query_param = 'page_size'
|
||||||
|
|
53
apps/member/static/member/js/trust.js
Normal file
53
apps/member/static/member/js/trust.js
Normal file
@ -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)
|
||||||
|
})
|
@ -25,6 +25,14 @@
|
|||||||
</a>
|
</a>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
<dt class="col-xl-6">{% trans 'friendships'|capfirst %}</dt>
|
||||||
|
<dd class="col-xl-6">
|
||||||
|
<a class="badge badge-secondary" href="{% url 'member:user_trust' user_object.pk %}">
|
||||||
|
<i class="fa fa-edit"></i>
|
||||||
|
{% trans 'Manage friendships' %} ({{ user_object.note.trusting.all|length }})
|
||||||
|
</a>
|
||||||
|
</dd>
|
||||||
|
|
||||||
{% if "member.view_profile"|has_perm:user_object.profile %}
|
{% if "member.view_profile"|has_perm:user_object.profile %}
|
||||||
<dt class="col-xl-6">{% trans 'section'|capfirst %}</dt>
|
<dt class="col-xl-6">{% trans 'section'|capfirst %}</dt>
|
||||||
<dd class="col-xl-6">{{ user_object.profile.section }}</dd>
|
<dd class="col-xl-6">{{ user_object.profile.section }}</dd>
|
||||||
|
41
apps/member/templates/member/profile_trust.html
Normal file
41
apps/member/templates/member/profile_trust.html
Normal file
@ -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 %}
|
||||||
|
<div class="card bg-light mb-3">
|
||||||
|
<h3 class="card-header text-center">
|
||||||
|
{% trans "Note friendships" %}
|
||||||
|
</h3>
|
||||||
|
<div class="card-body">
|
||||||
|
{% if can_create %}
|
||||||
|
<form class="input-group" method="POST" id="form_trust">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="trusting" value="{{ object.note.pk }}">
|
||||||
|
{%include "autocomplete_model.html" %}
|
||||||
|
<div class="input-group-append">
|
||||||
|
<input type="submit" class="btn btn-success" value="{% trans "Add" %}">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% render_table trusting %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-warning card">
|
||||||
|
{% 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 %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extrajavascript %}
|
||||||
|
<script src="{% static "member/js/trust.js" %}"></script>
|
||||||
|
<script src="{% static "js/autocomplete_model.js" %}"></script>
|
||||||
|
{% endblock%}
|
@ -23,5 +23,6 @@ urlpatterns = [
|
|||||||
path('user/<int:pk>/update/', views.UserUpdateView.as_view(), name="user_update_profile"),
|
path('user/<int:pk>/update/', views.UserUpdateView.as_view(), name="user_update_profile"),
|
||||||
path('user/<int:pk>/update_pic/', views.ProfilePictureUpdateView.as_view(), name="user_update_pic"),
|
path('user/<int:pk>/update_pic/', views.ProfilePictureUpdateView.as_view(), name="user_update_pic"),
|
||||||
path('user/<int:pk>/aliases/', views.ProfileAliasView.as_view(), name="user_alias"),
|
path('user/<int:pk>/aliases/', views.ProfileAliasView.as_view(), name="user_alias"),
|
||||||
|
path('user/<int:pk>/trust', views.ProfileTrustView.as_view(), name="user_trust"),
|
||||||
path('manage-auth-token/', views.ManageAuthTokens.as_view(), name='auth_token'),
|
path('manage-auth-token/', views.ManageAuthTokens.as_view(), name='auth_token'),
|
||||||
]
|
]
|
||||||
|
@ -8,6 +8,7 @@ from django.contrib.auth import logout
|
|||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.views import LoginView
|
from django.contrib.auth.views import LoginView
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q, F
|
from django.db.models import Q, F
|
||||||
from django.shortcuts import redirect
|
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.views.generic.edit import FormMixin
|
||||||
from django_tables2.views import SingleTableView
|
from django_tables2.views import SingleTableView
|
||||||
from rest_framework.authtoken.models import Token
|
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.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 note_kfet.middlewares import _set_current_request
|
||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
from permission.models import Role
|
from permission.models import Role
|
||||||
@ -243,6 +244,39 @@ class UserListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
|||||||
return context
|
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):
|
class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
||||||
"""
|
"""
|
||||||
View and manage user aliases.
|
View and manage user aliases.
|
||||||
|
@ -12,7 +12,7 @@ from note_kfet.middlewares import get_current_request
|
|||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
from rest_framework.utils import model_meta
|
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, \
|
from ..models.transactions import TransactionTemplate, Transaction, MembershipTransaction, TemplateCategory, \
|
||||||
RecurrentTransaction, SpecialTransaction
|
RecurrentTransaction, SpecialTransaction
|
||||||
|
|
||||||
@ -77,6 +77,22 @@ class NoteUserSerializer(serializers.ModelSerializer):
|
|||||||
return str(obj)
|
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):
|
class AliasSerializer(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
REST API Serializer for Aliases.
|
REST API Serializer for Aliases.
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
from .views import NotePolymorphicViewSet, AliasViewSet, ConsumerViewSet, \
|
from .views import NotePolymorphicViewSet, AliasViewSet, ConsumerViewSet, \
|
||||||
TemplateCategoryViewSet, TransactionViewSet, TransactionTemplateViewSet
|
TemplateCategoryViewSet, TransactionViewSet, TransactionTemplateViewSet, \
|
||||||
|
TrustViewSet
|
||||||
|
|
||||||
|
|
||||||
def register_note_urls(router, path):
|
def register_note_urls(router, path):
|
||||||
@ -11,6 +12,7 @@ def register_note_urls(router, path):
|
|||||||
"""
|
"""
|
||||||
router.register(path + '/note', NotePolymorphicViewSet)
|
router.register(path + '/note', NotePolymorphicViewSet)
|
||||||
router.register(path + '/alias', AliasViewSet)
|
router.register(path + '/alias', AliasViewSet)
|
||||||
|
router.register(path + '/trust', TrustViewSet)
|
||||||
router.register(path + '/consumer', ConsumerViewSet)
|
router.register(path + '/consumer', ConsumerViewSet)
|
||||||
|
|
||||||
router.register(path + '/transaction/category', TemplateCategoryViewSet)
|
router.register(path + '/transaction/category', TemplateCategoryViewSet)
|
||||||
|
@ -14,8 +14,9 @@ from api.viewsets import ReadProtectedModelViewSet, ReadOnlyProtectedModelViewSe
|
|||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
|
|
||||||
from .serializers import NotePolymorphicSerializer, AliasSerializer, ConsumerSerializer,\
|
from .serializers import NotePolymorphicSerializer, AliasSerializer, ConsumerSerializer,\
|
||||||
TemplateCategorySerializer, TransactionTemplateSerializer, TransactionPolymorphicSerializer
|
TemplateCategorySerializer, TransactionTemplateSerializer, TransactionPolymorphicSerializer, \
|
||||||
from ..models.notes import Note, Alias, NoteUser, NoteClub, NoteSpecial
|
TrustSerializer
|
||||||
|
from ..models.notes import Note, Alias, NoteUser, NoteClub, NoteSpecial, Trust
|
||||||
from ..models.transactions import TransactionTemplate, Transaction, TemplateCategory
|
from ..models.transactions import TransactionTemplate, Transaction, TemplateCategory
|
||||||
|
|
||||||
|
|
||||||
@ -56,11 +57,41 @@ class NotePolymorphicViewSet(ReadProtectedModelViewSet):
|
|||||||
return queryset.order_by("id")
|
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):
|
class AliasViewSet(ReadProtectedModelViewSet):
|
||||||
"""
|
"""
|
||||||
REST API View set.
|
REST API View set.
|
||||||
The djangorestframework plugin will get all `Alias` objects, serialize it to JSON with the given serializer,
|
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
|
queryset = Alias.objects
|
||||||
serializer_class = AliasSerializer
|
serializer_class = AliasSerializer
|
||||||
|
27
apps/note/migrations/0006_trust.py
Normal file
27
apps/note/migrations/0006_trust.py
Normal file
@ -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')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
@ -1,13 +1,13 @@
|
|||||||
# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
|
# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# 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, \
|
from .transactions import MembershipTransaction, Transaction, \
|
||||||
TemplateCategory, TransactionTemplate, RecurrentTransaction, SpecialTransaction
|
TemplateCategory, TransactionTemplate, RecurrentTransaction, SpecialTransaction
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
# Notes
|
# Notes
|
||||||
'Alias', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser',
|
'Alias', 'Trust', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser',
|
||||||
# Transactions
|
# Transactions
|
||||||
'MembershipTransaction', 'Transaction', 'TemplateCategory', 'TransactionTemplate',
|
'MembershipTransaction', 'Transaction', 'TemplateCategory', 'TransactionTemplate',
|
||||||
'RecurrentTransaction', 'SpecialTransaction',
|
'RecurrentTransaction', 'SpecialTransaction',
|
||||||
|
@ -217,6 +217,38 @@ class NoteSpecial(Note):
|
|||||||
return self.special_type
|
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):
|
class Alias(models.Model):
|
||||||
"""
|
"""
|
||||||
points toward a :model:`note.NoteUser` or :model;`note.NoteClub` instance.
|
points toward a :model:`note.NoteUser` or :model;`note.NoteClub` instance.
|
||||||
|
@ -10,7 +10,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
from note_kfet.middlewares import get_current_request
|
from note_kfet.middlewares import get_current_request
|
||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
|
|
||||||
from .models.notes import Alias
|
from .models.notes import Alias, Trust
|
||||||
from .models.transactions import Transaction, TransactionTemplate
|
from .models.transactions import Transaction, TransactionTemplate
|
||||||
from .templatetags.pretty_money import pretty_money
|
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 AliasTable(tables.Table):
|
||||||
class Meta:
|
class Meta:
|
||||||
attrs = {
|
attrs = {
|
||||||
|
@ -243,7 +243,7 @@
|
|||||||
"type": "delete",
|
"type": "delete",
|
||||||
"mask": 1,
|
"mask": 1,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": true,
|
||||||
"description": "Supprimer un alias à sa note"
|
"description": "Supprimer un alias à sa note"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -369,7 +369,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "valid",
|
"field": "valid",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Mettre à jour le statut de validation d'une transaction"
|
"description": "Mettre à jour le statut de validation d'une transaction"
|
||||||
@ -705,7 +705,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "view",
|
"type": "view",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Voir toutes les transactions d'invitation"
|
"description": "Voir toutes les transactions d'invitation"
|
||||||
@ -737,7 +737,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"pk\": [\"club\", \"pk\"]}",
|
"query": "{\"pk\": [\"club\", \"pk\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier un club"
|
"description": "Modifier un club"
|
||||||
@ -865,7 +865,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Ajouter un utilisateur"
|
"description": "Ajouter un utilisateur"
|
||||||
@ -881,7 +881,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"email_confirmed\": false, \"registration_valid\": false}",
|
"query": "{\"email_confirmed\": false, \"registration_valid\": false}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Ajouter un profil"
|
"description": "Ajouter un profil"
|
||||||
@ -961,7 +961,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"destination\": [\"club\", \"note\"]}",
|
"query": "{\"destination\": [\"club\", \"note\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 2,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le bouton d'un club"
|
"description": "Modifier le bouton d'un club"
|
||||||
@ -1105,7 +1105,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Ajouter un crédit de la Soci\u00e9t\u00e9 g\u00e9n\u00e9rale"
|
"description": "Ajouter un crédit de la Soci\u00e9t\u00e9 g\u00e9n\u00e9rale"
|
||||||
@ -1137,7 +1137,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier un crédit de la Soci\u00e9t\u00e9 g\u00e9n\u00e9rale"
|
"description": "Modifier un crédit de la Soci\u00e9t\u00e9 g\u00e9n\u00e9rale"
|
||||||
@ -1281,7 +1281,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"first_year\": true, \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}",
|
"query": "{\"wei\": [\"club\"], \"first_year\": true, \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Inscrire un 1A au WEI"
|
"description": "Inscrire un 1A au WEI"
|
||||||
@ -1297,7 +1297,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Inscrire n'importe qui au WEI"
|
"description": "Inscrire n'importe qui au WEI"
|
||||||
@ -1313,7 +1313,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"]}",
|
"query": "{\"wei\": [\"club\"]}",
|
||||||
"type": "delete",
|
"type": "delete",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Supprimer une inscription WEI"
|
"description": "Supprimer une inscription WEI"
|
||||||
@ -1345,9 +1345,9 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"]}",
|
"query": "{\"wei\": [\"club\"]}",
|
||||||
"type": "view",
|
"type": "view",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "Voir toutes les inscriptions WEI"
|
"description": "Voir toutes les inscriptions WEI"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1361,7 +1361,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "soge_credit",
|
"field": "soge_credit",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Indiquer si une inscription WEI est payée par la Société générale"
|
"description": "Indiquer si une inscription WEI est payée par la Société générale"
|
||||||
@ -1393,7 +1393,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "caution_check",
|
"field": "caution_check",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Dire si un chèque de caution est donné pour une inscription WEI"
|
"description": "Dire si un chèque de caution est donné pour une inscription WEI"
|
||||||
@ -1409,7 +1409,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "birth_date",
|
"field": "birth_date",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la date de naissance d'une inscription WEI"
|
"description": "Modifier la date de naissance d'une inscription WEI"
|
||||||
@ -1441,7 +1441,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "gender",
|
"field": "gender",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le genre de toute inscription WEI"
|
"description": "Modifier le genre de toute inscription WEI"
|
||||||
@ -1473,7 +1473,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "health_issues",
|
"field": "health_issues",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier les problèmes de santé de toutes les inscriptions WEI"
|
"description": "Modifier les problèmes de santé de toutes les inscriptions WEI"
|
||||||
@ -1505,7 +1505,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "emergency_contact_name",
|
"field": "emergency_contact_name",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le nom du contact en cas d'urgence de toute inscription WEI"
|
"description": "Modifier le nom du contact en cas d'urgence de toute inscription WEI"
|
||||||
@ -1537,7 +1537,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "emergency_contact_phone",
|
"field": "emergency_contact_phone",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le téléphone du contact en cas d'urgence de toute inscription WEI"
|
"description": "Modifier le téléphone du contact en cas d'urgence de toute inscription WEI"
|
||||||
@ -1569,7 +1569,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "information_json",
|
"field": "information_json",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier les informations (sondage 1A, ...) d'une inscription WEI"
|
"description": "Modifier les informations (sondage 1A, ...) d'une inscription WEI"
|
||||||
@ -1697,9 +1697,9 @@
|
|||||||
],
|
],
|
||||||
"query": "[\"AND\", {\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}, [\"OR\", {\"registration__soge_credit\": true}, {\"user__note__balance__gte\": {\"F\": [\"F\", \"fee\"]}}]]",
|
"query": "[\"AND\", {\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}, [\"OR\", {\"registration__soge_credit\": true}, {\"user__note__balance__gte\": {\"F\": [\"F\", \"fee\"]}}]]",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 3,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "Créer une adhésion WEI pour le dernier WEI"
|
"description": "Créer une adhésion WEI pour le dernier WEI"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1713,7 +1713,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}",
|
"query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "bus",
|
"field": "bus",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le bus d'une adhésion WEI"
|
"description": "Modifier le bus d'une adhésion WEI"
|
||||||
@ -1729,7 +1729,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}",
|
"query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "team",
|
"field": "team",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier l'équipe d'une adhésion WEI"
|
"description": "Modifier l'équipe d'une adhésion WEI"
|
||||||
@ -1745,9 +1745,9 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"club\": [\"club\"]}",
|
"query": "{\"club\": [\"club\"]}",
|
||||||
"type": "view",
|
"type": "view",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "Voir toutes les adhésions au WEI"
|
"description": "Voir toutes les adhésions au WEI"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1777,9 +1777,9 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"club\": [\"club\"], \"bus\": [\"membership\", \"weimembership\", \"bus\"]}",
|
"query": "{\"club\": [\"club\"], \"bus\": [\"membership\", \"weimembership\", \"bus\"]}",
|
||||||
"type": "view",
|
"type": "view",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "Voir les membres du bus"
|
"description": "Voir les membres du bus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1793,9 +1793,9 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"club\": [\"club\"], \"team\": [\"membership\", \"weimembership\", \"team\"]}",
|
"query": "{\"club\": [\"club\"], \"team\": [\"membership\", \"weimembership\", \"team\"]}",
|
||||||
"type": "view",
|
"type": "view",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "Voir les membres de l'équipe"
|
"description": "Voir les membres de l'équipe"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1809,7 +1809,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"pk\": [\"membership\", \"weimembership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"pk\": [\"membership\", \"weimembership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "name",
|
"field": "name",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le nom du bus"
|
"description": "Modifier le nom du bus"
|
||||||
@ -1825,7 +1825,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"pk\": [\"membership\", \"weimembership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"pk\": [\"membership\", \"weimembership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "description",
|
"field": "description",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la description du bus"
|
"description": "Modifier la description du bus"
|
||||||
@ -1841,7 +1841,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Ajouter une équipe à mon bus"
|
"description": "Ajouter une équipe à mon bus"
|
||||||
@ -1857,7 +1857,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "name",
|
"field": "name",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le nom d'une équipe de mon bus"
|
"description": "Modifier le nom d'une équipe de mon bus"
|
||||||
@ -1873,7 +1873,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "color",
|
"field": "color",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la couleur d'une équipe de mon bus"
|
"description": "Modifier la couleur d'une équipe de mon bus"
|
||||||
@ -1889,7 +1889,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "description",
|
"field": "description",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la description d'une équipe de mon bus"
|
"description": "Modifier la description d'une équipe de mon bus"
|
||||||
@ -1905,7 +1905,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "name",
|
"field": "name",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier le nom de mon équipe"
|
"description": "Modifier le nom de mon équipe"
|
||||||
@ -1921,7 +1921,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "color",
|
"field": "color",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la couleur de mon équipe"
|
"description": "Modifier la couleur de mon équipe"
|
||||||
@ -1937,7 +1937,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "description",
|
"field": "description",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la description de mon équipe"
|
"description": "Modifier la description de mon équipe"
|
||||||
@ -1967,7 +1967,7 @@
|
|||||||
"note",
|
"note",
|
||||||
"transaction"
|
"transaction"
|
||||||
],
|
],
|
||||||
"query": "[\"AND\", [\"OR\", {\"source\": [\"club\", \"note\"]}, {\"destination\": [\"club\", \"note\"]}], [\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}]]",
|
"query": "[\"AND\", [\"OR\", {\"source\": [\"club\", \"note\"]}, {\"destination\": [\"club\", \"note\"]}], [\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}]]",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 2,
|
"mask": 2,
|
||||||
"field": "valid",
|
"field": "valid",
|
||||||
@ -1985,7 +1985,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "clothing_cut",
|
"field": "clothing_cut",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la coupe de vêtements d'une inscription WEI"
|
"description": "Modifier la coupe de vêtements d'une inscription WEI"
|
||||||
@ -2017,7 +2017,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "clothing_size",
|
"field": "clothing_size",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier la taille de vêtements d'une inscription WEI"
|
"description": "Modifier la taille de vêtements d'une inscription WEI"
|
||||||
@ -2225,7 +2225,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Créer une note d'utilisateur"
|
"description": "Créer une note d'utilisateur"
|
||||||
@ -2257,7 +2257,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "view",
|
"type": "view",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Voir toutes les notes de club"
|
"description": "Voir toutes les notes de club"
|
||||||
@ -2276,7 +2276,7 @@
|
|||||||
"mask": 3,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Voir tous les adhérents du club"
|
"description": "Voir tous les adhérents de tous les clubs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2564,7 +2564,7 @@
|
|||||||
"mask": 3,
|
"mask": 3,
|
||||||
"field": "inactivity_reason",
|
"field": "inactivity_reason",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "(Dé)bloquer sa propre note et modifier la raison"
|
"description": "(Dé)bloquer n'importe quelle note et indiquer la raison"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2607,7 +2607,7 @@
|
|||||||
"note",
|
"note",
|
||||||
"transaction"
|
"transaction"
|
||||||
],
|
],
|
||||||
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}]",
|
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}]",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 2,
|
"mask": 2,
|
||||||
"field": "valid",
|
"field": "valid",
|
||||||
@ -2623,7 +2623,7 @@
|
|||||||
"note",
|
"note",
|
||||||
"transaction"
|
"transaction"
|
||||||
],
|
],
|
||||||
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}]",
|
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}]",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 2,
|
"mask": 2,
|
||||||
"field": "invalidity_reason",
|
"field": "invalidity_reason",
|
||||||
@ -2641,7 +2641,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"club\": [\"club\"]}",
|
"query": "{\"club\": [\"club\"]}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 2,
|
||||||
"field": "display_image",
|
"field": "display_image",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Changer l'image de la note de son club"
|
"description": "Changer l'image de la note de son club"
|
||||||
@ -2657,7 +2657,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"note__is_active\": true}",
|
"query": "{\"note__is_active\": true}",
|
||||||
"type": "add",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Ajouter n'importe quel alias à une note non bloquée"
|
"description": "Ajouter n'importe quel alias à une note non bloquée"
|
||||||
@ -2753,7 +2753,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"profile__registration_valid\": false}",
|
"query": "{\"profile__registration_valid\": false}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier n'importe quel utilisateur non encore inscrit"
|
"description": "Modifier n'importe quel utilisateur non encore inscrit"
|
||||||
@ -2769,7 +2769,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{\"registration_valid\": false}",
|
"query": "{\"registration_valid\": false}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Modifier n'importe quel profil non encore inscrit"
|
"description": "Modifier n'importe quel profil non encore inscrit"
|
||||||
@ -2865,7 +2865,7 @@
|
|||||||
],
|
],
|
||||||
"query": "{}",
|
"query": "{}",
|
||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 1,
|
"mask": 3,
|
||||||
"field": "display_image",
|
"field": "display_image",
|
||||||
"permanent": false,
|
"permanent": false,
|
||||||
"description": "Changer l'image de n'importe quelle note"
|
"description": "Changer l'image de n'importe quelle note"
|
||||||
@ -2883,7 +2883,7 @@
|
|||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 3,
|
"mask": 3,
|
||||||
"field": "is_active",
|
"field": "is_active",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "(Dé)bloquer la note de son club manuellement"
|
"description": "(Dé)bloquer la note de son club manuellement"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -2899,7 +2899,7 @@
|
|||||||
"type": "change",
|
"type": "change",
|
||||||
"mask": 3,
|
"mask": 3,
|
||||||
"field": "inactivity_reason",
|
"field": "inactivity_reason",
|
||||||
"permanent": true,
|
"permanent": false,
|
||||||
"description": "(Dé)bloquer la note de son club et indiquer que cela a été fait manuellement"
|
"description": "(Dé)bloquer la note de son club et indiquer que cela a été fait manuellement"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -2928,7 +2928,7 @@
|
|||||||
"application"
|
"application"
|
||||||
],
|
],
|
||||||
"query": "{\"user\": [\"user\"]}",
|
"query": "{\"user\": [\"user\"]}",
|
||||||
"type": "create",
|
"type": "add",
|
||||||
"mask": 1,
|
"mask": 1,
|
||||||
"field": "",
|
"field": "",
|
||||||
"permanent": true,
|
"permanent": true,
|
||||||
@ -2967,6 +2967,134 @@
|
|||||||
"description": "Supprimer une application OAuth2"
|
"description": "Supprimer une application OAuth2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 190,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"note",
|
||||||
|
"trust"
|
||||||
|
],
|
||||||
|
"query": "{\"trusting\": [\"user\", \"note\"]}",
|
||||||
|
"type": "delete",
|
||||||
|
"mask": 1,
|
||||||
|
"field": "",
|
||||||
|
"permanent": true,
|
||||||
|
"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": 3,
|
||||||
|
"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": 2,
|
||||||
|
"field": "",
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Transférer de l'argent depuis une note amie en restant positif"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 197,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"note",
|
||||||
|
"specialtransaction"
|
||||||
|
],
|
||||||
|
"query": "{\"source__notespecial__gte\":0}",
|
||||||
|
"type": "add",
|
||||||
|
"mask": 2,
|
||||||
|
"field": "",
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Créer un crédit quelconque"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "permission.role",
|
"model": "permission.role",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -2992,16 +3120,22 @@
|
|||||||
16,
|
16,
|
||||||
17,
|
17,
|
||||||
22,
|
22,
|
||||||
|
34,
|
||||||
48,
|
48,
|
||||||
52,
|
52,
|
||||||
126,
|
126,
|
||||||
161,
|
161,
|
||||||
162,
|
162,
|
||||||
165,
|
165,
|
||||||
|
179,
|
||||||
186,
|
186,
|
||||||
187,
|
187,
|
||||||
188,
|
188,
|
||||||
189
|
189,
|
||||||
|
190,
|
||||||
|
191,
|
||||||
|
195,
|
||||||
|
196
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3013,11 +3147,9 @@
|
|||||||
"name": "Adh\u00e9rent Kfet",
|
"name": "Adh\u00e9rent Kfet",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
22,
|
22,
|
||||||
34,
|
|
||||||
36,
|
36,
|
||||||
39,
|
39,
|
||||||
40,
|
40,
|
||||||
70,
|
|
||||||
78,
|
78,
|
||||||
79,
|
79,
|
||||||
83,
|
83,
|
||||||
@ -3041,8 +3173,7 @@
|
|||||||
157,
|
157,
|
||||||
158,
|
158,
|
||||||
159,
|
159,
|
||||||
160,
|
160
|
||||||
179
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3079,9 +3210,7 @@
|
|||||||
"for_club": null,
|
"for_club": null,
|
||||||
"name": "Pr\u00e9sident\u00b7e de club",
|
"name": "Pr\u00e9sident\u00b7e de club",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
50,
|
|
||||||
62,
|
62,
|
||||||
141,
|
|
||||||
142
|
142
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -3093,23 +3222,17 @@
|
|||||||
"for_club": null,
|
"for_club": null,
|
||||||
"name": "Tr\u00e9sorier\u00b7\u00e8re de club",
|
"name": "Tr\u00e9sorier\u00b7\u00e8re de club",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
59,
|
|
||||||
19,
|
19,
|
||||||
20,
|
20,
|
||||||
21,
|
21,
|
||||||
27,
|
27,
|
||||||
|
59,
|
||||||
60,
|
60,
|
||||||
61,
|
61,
|
||||||
62,
|
62,
|
||||||
127,
|
127,
|
||||||
133,
|
133,
|
||||||
136,
|
|
||||||
141,
|
|
||||||
142,
|
142,
|
||||||
150,
|
|
||||||
166,
|
|
||||||
167,
|
|
||||||
168,
|
|
||||||
182,
|
182,
|
||||||
184,
|
184,
|
||||||
185
|
185
|
||||||
@ -3128,7 +3251,16 @@
|
|||||||
26,
|
26,
|
||||||
27,
|
27,
|
||||||
30,
|
30,
|
||||||
33
|
33,
|
||||||
|
41,
|
||||||
|
42,
|
||||||
|
63,
|
||||||
|
66,
|
||||||
|
135,
|
||||||
|
136,
|
||||||
|
137,
|
||||||
|
150,
|
||||||
|
172
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3150,6 +3282,10 @@
|
|||||||
31,
|
31,
|
||||||
32,
|
32,
|
||||||
33,
|
33,
|
||||||
|
37,
|
||||||
|
38,
|
||||||
|
41,
|
||||||
|
42,
|
||||||
43,
|
43,
|
||||||
51,
|
51,
|
||||||
53,
|
53,
|
||||||
@ -3165,6 +3301,7 @@
|
|||||||
67,
|
67,
|
||||||
68,
|
68,
|
||||||
69,
|
69,
|
||||||
|
70,
|
||||||
71,
|
71,
|
||||||
72,
|
72,
|
||||||
73,
|
73,
|
||||||
@ -3179,12 +3316,12 @@
|
|||||||
143,
|
143,
|
||||||
146,
|
146,
|
||||||
147,
|
147,
|
||||||
|
148,
|
||||||
|
149,
|
||||||
150,
|
150,
|
||||||
151,
|
151,
|
||||||
163,
|
163,
|
||||||
164,
|
164,
|
||||||
170,
|
|
||||||
171,
|
|
||||||
172,
|
172,
|
||||||
173,
|
173,
|
||||||
174,
|
174,
|
||||||
@ -3386,7 +3523,14 @@
|
|||||||
186,
|
186,
|
||||||
187,
|
187,
|
||||||
188,
|
188,
|
||||||
189
|
189,
|
||||||
|
190,
|
||||||
|
191,
|
||||||
|
192,
|
||||||
|
193,
|
||||||
|
194,
|
||||||
|
195,
|
||||||
|
196
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3397,12 +3541,6 @@
|
|||||||
"for_club": 2,
|
"for_club": 2,
|
||||||
"name": "GC Kfet",
|
"name": "GC Kfet",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
32,
|
|
||||||
56,
|
|
||||||
58,
|
|
||||||
55,
|
|
||||||
57,
|
|
||||||
52,
|
|
||||||
23,
|
23,
|
||||||
24,
|
24,
|
||||||
25,
|
25,
|
||||||
@ -3412,20 +3550,16 @@
|
|||||||
29,
|
29,
|
||||||
30,
|
30,
|
||||||
31,
|
31,
|
||||||
70,
|
32,
|
||||||
72,
|
37,
|
||||||
143,
|
38,
|
||||||
|
41,
|
||||||
|
43,
|
||||||
|
148,
|
||||||
|
149,
|
||||||
166,
|
166,
|
||||||
167,
|
167,
|
||||||
168,
|
168,
|
||||||
170,
|
|
||||||
171,
|
|
||||||
176,
|
|
||||||
177,
|
|
||||||
178,
|
|
||||||
179,
|
|
||||||
180,
|
|
||||||
181,
|
|
||||||
182
|
182
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -3437,6 +3571,9 @@
|
|||||||
"for_club": 2,
|
"for_club": 2,
|
||||||
"name": "Res[pot]",
|
"name": "Res[pot]",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
|
19,
|
||||||
|
25,
|
||||||
|
26,
|
||||||
37,
|
37,
|
||||||
38,
|
38,
|
||||||
41,
|
41,
|
||||||
@ -3459,6 +3596,8 @@
|
|||||||
"name": "GC WEI",
|
"name": "GC WEI",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
22,
|
22,
|
||||||
|
70,
|
||||||
|
72,
|
||||||
76,
|
76,
|
||||||
85,
|
85,
|
||||||
86,
|
86,
|
||||||
@ -3480,8 +3619,8 @@
|
|||||||
111,
|
111,
|
||||||
112,
|
112,
|
||||||
113,
|
113,
|
||||||
130,
|
128,
|
||||||
131
|
130
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3494,12 +3633,13 @@
|
|||||||
"permissions": [
|
"permissions": [
|
||||||
22,
|
22,
|
||||||
84,
|
84,
|
||||||
|
115,
|
||||||
117,
|
117,
|
||||||
118,
|
118,
|
||||||
|
119,
|
||||||
120,
|
120,
|
||||||
121,
|
121,
|
||||||
122,
|
122
|
||||||
115
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3560,18 +3700,7 @@
|
|||||||
"name": "Adhérent WEI",
|
"name": "Adhérent WEI",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
77,
|
77,
|
||||||
87,
|
114
|
||||||
90,
|
|
||||||
93,
|
|
||||||
95,
|
|
||||||
97,
|
|
||||||
99,
|
|
||||||
101,
|
|
||||||
108,
|
|
||||||
109,
|
|
||||||
114,
|
|
||||||
128,
|
|
||||||
130
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3582,6 +3711,9 @@
|
|||||||
"for_club": 1,
|
"for_club": 1,
|
||||||
"name": "Secrétaire BDE",
|
"name": "Secrétaire BDE",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
|
37,
|
||||||
|
41,
|
||||||
|
53,
|
||||||
54,
|
54,
|
||||||
55,
|
55,
|
||||||
56,
|
56,
|
||||||
@ -3590,15 +3722,21 @@
|
|||||||
135,
|
135,
|
||||||
136,
|
136,
|
||||||
137,
|
137,
|
||||||
|
138,
|
||||||
139,
|
139,
|
||||||
140,
|
140,
|
||||||
143,
|
143,
|
||||||
145,
|
145,
|
||||||
146,
|
146,
|
||||||
147,
|
147,
|
||||||
|
148,
|
||||||
|
149,
|
||||||
150,
|
150,
|
||||||
176,
|
176,
|
||||||
177
|
177,
|
||||||
|
180,
|
||||||
|
181,
|
||||||
|
183
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3610,20 +3748,16 @@
|
|||||||
"name": "PC Kfet",
|
"name": "PC Kfet",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
6,
|
6,
|
||||||
22,
|
|
||||||
24,
|
24,
|
||||||
25,
|
25,
|
||||||
26,
|
|
||||||
27,
|
27,
|
||||||
30,
|
30,
|
||||||
|
34,
|
||||||
49,
|
49,
|
||||||
50,
|
50,
|
||||||
55,
|
55,
|
||||||
56,
|
56,
|
||||||
57,
|
|
||||||
58,
|
|
||||||
70,
|
70,
|
||||||
72,
|
|
||||||
135,
|
135,
|
||||||
137,
|
137,
|
||||||
143,
|
143,
|
||||||
@ -3634,8 +3768,7 @@
|
|||||||
168,
|
168,
|
||||||
176,
|
176,
|
||||||
177,
|
177,
|
||||||
180,
|
197
|
||||||
181
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
19
apps/permission/migrations/0002_club_not_required.py
Normal file
19
apps/permission/migrations/0002_club_not_required.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 2.2.28 on 2023-07-24 10:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('permission', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='role',
|
||||||
|
name='for_club',
|
||||||
|
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='member.Club', verbose_name='for club'),
|
||||||
|
),
|
||||||
|
]
|
@ -339,6 +339,7 @@ class Role(models.Model):
|
|||||||
"member.Club",
|
"member.Club",
|
||||||
verbose_name=_("for club"),
|
verbose_name=_("for club"),
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
default=None,
|
default=None,
|
||||||
)
|
)
|
||||||
|
@ -310,8 +310,8 @@ class SogeCredit(models.Model):
|
|||||||
amount = sum(transaction.total for transaction in self.transactions.all())
|
amount = sum(transaction.total for transaction in self.transactions.all())
|
||||||
if 'wei' in settings.INSTALLED_APPS:
|
if 'wei' in settings.INSTALLED_APPS:
|
||||||
from wei.models import WEIMembership
|
from wei.models import WEIMembership
|
||||||
if not WEIMembership.objects.filter(club__weiclub__year=datetime.date.today().year, user=self.user)\
|
if not WEIMembership.objects\
|
||||||
.exists():
|
.filter(club__weiclub__year=self.credit_transaction.created_at.year, user=self.user).exists():
|
||||||
# 80 € for people that don't go to WEI
|
# 80 € for people that don't go to WEI
|
||||||
amount += 8000
|
amount += 8000
|
||||||
return amount
|
return amount
|
||||||
@ -329,17 +329,18 @@ class SogeCredit(models.Model):
|
|||||||
bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start)
|
bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start)
|
||||||
kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start)
|
kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start)
|
||||||
|
|
||||||
if bde_qs.exists():
|
## Soge do not pay BDE and kfet memberships this year (2022-2023)
|
||||||
m = bde_qs.get()
|
# if bde_qs.exists():
|
||||||
if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
|
# m = bde_qs.get()
|
||||||
if m.transaction not in self.transactions.all():
|
# if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
|
||||||
self.transactions.add(m.transaction)
|
# if m.transaction not in self.transactions.all():
|
||||||
|
# self.transactions.add(m.transaction)
|
||||||
if kfet_qs.exists():
|
#
|
||||||
m = kfet_qs.get()
|
# if kfet_qs.exists():
|
||||||
if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
|
# m = kfet_qs.get()
|
||||||
if m.transaction not in self.transactions.all():
|
# if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
|
||||||
self.transactions.add(m.transaction)
|
# if m.transaction not in self.transactions.all():
|
||||||
|
# self.transactions.add(m.transaction)
|
||||||
|
|
||||||
if 'wei' in settings.INSTALLED_APPS:
|
if 'wei' in settings.INSTALLED_APPS:
|
||||||
from wei.models import WEIClub
|
from wei.models import WEIClub
|
||||||
|
@ -108,7 +108,7 @@ class InvoiceListView(LoginRequiredMixin, SingleTableView):
|
|||||||
name="",
|
name="",
|
||||||
address="",
|
address="",
|
||||||
)
|
)
|
||||||
if not PermissionBackend.check_perm(self.request, "treasury.add_invoice", sample_invoice):
|
if not PermissionBackend.check_perm(self.request, "treasury.view_invoice", sample_invoice):
|
||||||
raise PermissionDenied(_("You are not able to see the treasury interface."))
|
raise PermissionDenied(_("You are not able to see the treasury interface."))
|
||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -14,14 +14,17 @@ from .base import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm, WEIBusInf
|
|||||||
from ...models import WEIMembership
|
from ...models import WEIMembership
|
||||||
|
|
||||||
WORDS = [
|
WORDS = [
|
||||||
'13 organisé', '3ième mi temps', 'Années 2000', 'Apéro', 'BBQ', 'BP', 'Beauf', 'Binge drinking', 'Bon enfant',
|
'ABBA', 'After', 'Alcoolique anonyme', 'Ambiance festive', 'Années 2000', 'Apéro', 'Art',
|
||||||
'Cartouche', 'Catacombes', 'Chansons paillardes', 'Chansons populaires', 'Chanteur', 'Chartreuse', 'Chill',
|
'Baby foot billard biere pong', 'BBQ', 'Before', 'Bière pong', 'Bon enfant', 'Calme', 'Canapé',
|
||||||
'Core', 'DJ', 'Dancefloor', 'Danse', 'David Guetta', 'Disco', 'Eau de vie', 'Électro', 'Escalade', 'Familial',
|
'Chanson paillarde', 'Chanson populaire', 'Chartreuse', 'Cheerleader', 'Chill', 'Choré',
|
||||||
'Fanfare', 'Fracassage', 'Féria', 'Hard rock', 'Hoeggarden', 'House', 'Huit-six', 'IPA', 'Inclusif', 'Inferno',
|
'Cinéma', 'Cocktail', 'Comédie musicle', 'Commercial', 'Copaing', 'Danse', 'Dancefloor',
|
||||||
'Introverti', 'Jager bomb', 'Jazz', 'Jeux d\'alcool', 'Jeux de rôles', 'Jeux vidéo', 'Jul', 'Jus de fruit',
|
'Electro', 'Fanfare', 'Gin tonic', 'Inclusif', 'Jazz', "Jeux d'alcool", 'Jeux de carte',
|
||||||
'Karaoké', 'LGBTQI+', 'Lady Gaga', 'Loup garou', 'Morning beer', 'Métal', 'Nuit blanche', 'Ovalie', 'Psychedelic',
|
'Jeux de rôle', 'Jeux de société', 'JUL', 'Jus de fruit', 'Kfet', 'Kleptomanie assurée',
|
||||||
'Pétanque', 'Rave', 'Reggae', 'Rhum', 'Ricard', 'Rock', 'Rosé', 'Rétro', 'Séducteur', 'Techno', 'Thérapie taxi',
|
'LGBTQ+', 'Livre', 'Morning beer', 'Musique', 'NAPS', 'Paillettes', 'Pastis', 'Paté Hénaff',
|
||||||
'Théâtre', 'Trap', 'Turn up', 'Underground', 'Volley', 'Wati B', 'Zinédine Zidane',
|
'Peluche', 'Pena baiona', "Peu d'alcool", 'Pilier de bar', 'PMU', 'Poulpe', 'Punch', 'Rap',
|
||||||
|
'Réveil', 'Rock', 'Rugby', 'Sandwich', 'Serge', 'Shot', 'Sociable', 'Spectacle', 'Techno',
|
||||||
|
'Techno house', 'Thérapie Taxi', 'Tradition kchanaises', 'Troisième mi-temps', 'Turn up',
|
||||||
|
'Vodka', 'Vodka pomme', 'Volley', 'Vomi stratégique'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -7,16 +7,16 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-10-07 22:55+0200\n"
|
"POT-Creation-Date: 2022-04-10 22:34+0200\n"
|
||||||
"PO-Revision-Date: 2020-11-16 20:02+0000\n"
|
"PO-Revision-Date: 2022-04-11 22:05+0200\n"
|
||||||
"Last-Translator: Yohann D'ANELLO <ynerant@crans.org>\n"
|
"Last-Translator: elkmaennchen <elkmaennchen@crans.org>\n"
|
||||||
"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
|
"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\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/apps.py:10 apps/activity/models.py:151
|
||||||
#: apps/activity/models.py:167
|
#: 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/models.py:199
|
||||||
#: apps/member/templates/member/includes/club_info.html:4
|
#: apps/member/templates/member/includes/club_info.html:4
|
||||||
#: apps/member/templates/member/includes/profile_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/note/models/transactions.py:46 apps/note/models/transactions.py:301
|
||||||
#: apps/permission/models.py:330
|
#: apps/permission/models.py:330
|
||||||
#: apps/registration/templates/registration/future_profile_detail.html:16
|
#: 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"
|
msgid "type"
|
||||||
msgstr "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/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/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
|
||||||
#: apps/wei/templates/wei/survey.html:15
|
#: apps/wei/templates/wei/survey.html:15
|
||||||
@ -295,7 +295,7 @@ msgstr "Invité supprimé"
|
|||||||
#: apps/note/models/transactions.py:257
|
#: apps/note/models/transactions.py:257
|
||||||
#: apps/note/templates/note/transaction_form.html:17
|
#: apps/note/templates/note/transaction_form.html:17
|
||||||
#: apps/note/templates/note/transaction_form.html:152
|
#: apps/note/templates/note/transaction_form.html:152
|
||||||
#: note_kfet/templates/base.html:73
|
#: note_kfet/templates/base.html:72
|
||||||
msgid "Transfer"
|
msgid "Transfer"
|
||||||
msgstr "Virement"
|
msgstr "Virement"
|
||||||
|
|
||||||
@ -388,7 +388,7 @@ msgid "validate"
|
|||||||
msgstr "valider"
|
msgstr "valider"
|
||||||
|
|
||||||
#: apps/activity/templates/activity/includes/activity_info.html:71
|
#: 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"
|
msgid "edit"
|
||||||
msgstr "modifier"
|
msgstr "modifier"
|
||||||
|
|
||||||
@ -400,7 +400,7 @@ msgstr "Inviter"
|
|||||||
msgid "Create new activity"
|
msgid "Create new activity"
|
||||||
msgstr "Créer une nouvelle activité"
|
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"
|
msgid "Activities"
|
||||||
msgstr "Activités"
|
msgstr "Activités"
|
||||||
|
|
||||||
@ -466,9 +466,9 @@ msgstr "nouvelles données"
|
|||||||
msgid "create"
|
msgid "create"
|
||||||
msgstr "créer"
|
msgstr "créer"
|
||||||
|
|
||||||
#: apps/logs/models.py:65 apps/note/tables.py:165 apps/note/tables.py:211
|
#: apps/logs/models.py:65 apps/note/tables.py:166 apps/note/tables.py:190
|
||||||
#: apps/permission/models.py:127 apps/treasury/tables.py:38
|
#: apps/note/tables.py:237 apps/permission/models.py:127
|
||||||
#: apps/wei/tables.py:74
|
#: apps/treasury/tables.py:38 apps/wei/tables.py:74
|
||||||
msgid "delete"
|
msgid "delete"
|
||||||
msgstr "supprimer"
|
msgstr "supprimer"
|
||||||
|
|
||||||
@ -507,11 +507,11 @@ msgstr "cotisation pour adhérer (normalien élève)"
|
|||||||
msgid "membership fee (unpaid students)"
|
msgid "membership fee (unpaid students)"
|
||||||
msgstr "cotisation pour adhérer (normalien étudiant)"
|
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"
|
msgid "roles"
|
||||||
msgstr "rôles"
|
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"
|
msgid "fee"
|
||||||
msgstr "cotisation"
|
msgstr "cotisation"
|
||||||
|
|
||||||
@ -547,7 +547,7 @@ msgstr "Taille maximale : 2 Mo"
|
|||||||
msgid "This image cannot be loaded."
|
msgid "This image cannot be loaded."
|
||||||
msgstr "Cette image ne peut pas être chargée."
|
msgstr "Cette image ne peut pas être chargée."
|
||||||
|
|
||||||
#: apps/member/forms.py: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
|
#: apps/registration/forms.py:33 apps/registration/views.py:262
|
||||||
msgid "An alias with a similar name already exists."
|
msgid "An alias with a similar name already exists."
|
||||||
msgstr "Un alias avec un nom similaire existe déjà."
|
msgstr "Un alias avec un nom similaire existe déjà."
|
||||||
@ -610,14 +610,14 @@ msgid "hash"
|
|||||||
msgstr "haché"
|
msgstr "haché"
|
||||||
|
|
||||||
#: apps/member/models.py:38
|
#: 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/registration/templates/registration/future_profile_detail.html:40
|
||||||
#: apps/wei/templates/wei/weimembership_form.html:44
|
#: apps/wei/templates/wei/weimembership_form.html:44
|
||||||
msgid "phone number"
|
msgid "phone number"
|
||||||
msgstr "numéro de téléphone"
|
msgstr "numéro de téléphone"
|
||||||
|
|
||||||
#: apps/member/models.py:45
|
#: 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/registration/templates/registration/future_profile_detail.html:34
|
||||||
#: apps/wei/templates/wei/weimembership_form.html:38
|
#: apps/wei/templates/wei/weimembership_form.html:38
|
||||||
msgid "section"
|
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)"
|
msgstr "Année d'entrée dans l'école (None si non-étudiant·e de l'ENS)"
|
||||||
|
|
||||||
#: apps/member/models.py:83
|
#: 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/registration/templates/registration/future_profile_detail.html:37
|
||||||
#: apps/wei/templates/wei/weimembership_form.html:41
|
#: apps/wei/templates/wei/weimembership_form.html:41
|
||||||
msgid "address"
|
msgid "address"
|
||||||
msgstr "adresse"
|
msgstr "adresse"
|
||||||
|
|
||||||
#: apps/member/models.py:90
|
#: 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/registration/templates/registration/future_profile_detail.html:43
|
||||||
#: apps/wei/templates/wei/weimembership_form.html:47
|
#: apps/wei/templates/wei/weimembership_form.html:47
|
||||||
msgid "paid"
|
msgid "paid"
|
||||||
@ -784,7 +784,7 @@ msgstr "Activez votre compte Note Kfet"
|
|||||||
|
|
||||||
#: apps/member/models.py:204
|
#: apps/member/models.py:204
|
||||||
#: apps/member/templates/member/includes/club_info.html:55
|
#: 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/registration/templates/registration/future_profile_detail.html:22
|
||||||
#: apps/wei/templates/wei/base.html:70
|
#: apps/wei/templates/wei/base.html:70
|
||||||
#: apps/wei/templates/wei/weimembership_form.html:20
|
#: 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 "
|
"Date maximale d'une fin d'adhésion, après laquelle les adhérents doivent la "
|
||||||
"renouveler."
|
"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
|
#: apps/note/models/notes.py:176
|
||||||
msgid "club"
|
msgid "club"
|
||||||
msgstr "club"
|
msgstr "club"
|
||||||
|
|
||||||
#: apps/member/models.py:287
|
#: apps/member/models.py:289
|
||||||
msgid "clubs"
|
msgid "clubs"
|
||||||
msgstr "clubs"
|
msgstr "clubs"
|
||||||
|
|
||||||
#: apps/member/models.py:322
|
#: apps/member/models.py:324
|
||||||
msgid "membership starts on"
|
msgid "membership starts on"
|
||||||
msgstr "l'adhésion commence le"
|
msgstr "l'adhésion commence le"
|
||||||
|
|
||||||
#: apps/member/models.py:326
|
#: apps/member/models.py:328
|
||||||
msgid "membership ends on"
|
msgid "membership ends on"
|
||||||
msgstr "l'adhésion finit le"
|
msgstr "l'adhésion finit le"
|
||||||
|
|
||||||
#: apps/member/models.py:428
|
#: apps/member/models.py:430
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "The role {role} does not apply to the club {club}."
|
msgid "The role {role} does not apply to the club {club}."
|
||||||
msgstr "Le rôle {role} ne s'applique pas au club {club}."
|
msgstr "Le rôle {role} ne s'applique pas au club {club}."
|
||||||
|
|
||||||
#: apps/member/models.py: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"
|
msgid "User is already a member of the club"
|
||||||
msgstr "L'utilisateur est déjà membre du 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"
|
msgid "User is not a member of the parent club"
|
||||||
msgstr "L'utilisateur n'est pas membre du club parent"
|
msgstr "L'utilisateur n'est pas membre du club parent"
|
||||||
|
|
||||||
#: apps/member/models.py:502
|
#: apps/member/models.py:504
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Membership of {user} for the club {club}"
|
msgid "Membership of {user} for the club {club}"
|
||||||
msgstr "Adhésion de {user} pour le 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"
|
msgid "membership"
|
||||||
msgstr "adhésion"
|
msgstr "adhésion"
|
||||||
|
|
||||||
#: apps/member/models.py:506
|
#: apps/member/models.py:508
|
||||||
msgid "memberships"
|
msgid "memberships"
|
||||||
msgstr "adhésions"
|
msgstr "adhésions"
|
||||||
|
|
||||||
@ -924,7 +924,7 @@ msgid "Account #"
|
|||||||
msgstr "Compte n°"
|
msgstr "Compte n°"
|
||||||
|
|
||||||
#: apps/member/templates/member/base.html:48
|
#: apps/member/templates/member/base.html:48
|
||||||
#: apps/member/templates/member/base.html:62 apps/member/views.py:59
|
#: apps/member/templates/member/base.html:62 apps/member/views.py:60
|
||||||
#: apps/registration/templates/registration/future_profile_detail.html:48
|
#: apps/registration/templates/registration/future_profile_detail.html:48
|
||||||
#: apps/wei/templates/wei/weimembership_form.html:117
|
#: apps/wei/templates/wei/weimembership_form.html:117
|
||||||
msgid "Update Profile"
|
msgid "Update Profile"
|
||||||
@ -985,13 +985,14 @@ msgstr ""
|
|||||||
"seront à nouveau possible."
|
"seront à nouveau possible."
|
||||||
|
|
||||||
#: apps/member/templates/member/club_alias.html:10
|
#: apps/member/templates/member/club_alias.html:10
|
||||||
#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:253
|
#: apps/member/templates/member/profile_alias.html:10 apps/member/views.py:287
|
||||||
#: apps/member/views.py:456
|
#: apps/member/views.py:517
|
||||||
msgid "Note aliases"
|
msgid "Note aliases"
|
||||||
msgstr "Alias de la note"
|
msgstr "Alias de la note"
|
||||||
|
|
||||||
#: apps/member/templates/member/club_alias.html:20
|
#: apps/member/templates/member/club_alias.html:20
|
||||||
#: apps/member/templates/member/profile_alias.html:19
|
#: apps/member/templates/member/profile_alias.html:19
|
||||||
|
#: apps/member/templates/member/profile_trust.html:19
|
||||||
#: apps/treasury/tables.py:99
|
#: apps/treasury/tables.py:99
|
||||||
#: apps/treasury/templates/treasury/sogecredit_list.html:34
|
#: apps/treasury/templates/treasury/sogecredit_list.html:34
|
||||||
#: apps/treasury/templates/treasury/sogecredit_list.html:73
|
#: apps/treasury/templates/treasury/sogecredit_list.html:73
|
||||||
@ -1044,7 +1045,7 @@ msgid "membership fee"
|
|||||||
msgstr "cotisation pour adhérer"
|
msgstr "cotisation pour adhérer"
|
||||||
|
|
||||||
#: apps/member/templates/member/includes/club_info.html:43
|
#: 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/treasury/templates/treasury/sogecredit_detail.html:24
|
||||||
#: apps/wei/templates/wei/base.html:60
|
#: apps/wei/templates/wei/base.html:60
|
||||||
msgid "balance"
|
msgid "balance"
|
||||||
@ -1052,7 +1053,7 @@ msgstr "solde du compte"
|
|||||||
|
|
||||||
#: apps/member/templates/member/includes/club_info.html:47
|
#: apps/member/templates/member/includes/club_info.html:47
|
||||||
#: apps/member/templates/member/includes/profile_info.html:20
|
#: 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"
|
msgid "aliases"
|
||||||
msgstr "alias"
|
msgstr "alias"
|
||||||
|
|
||||||
@ -1076,7 +1077,16 @@ msgstr "mot de passe"
|
|||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr "Changer le mot de passe"
|
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"
|
msgid "API token"
|
||||||
msgstr "Accès API"
|
msgstr "Accès API"
|
||||||
|
|
||||||
@ -1148,6 +1158,23 @@ msgstr "Cliquez ici pour renvoyer un lien de validation."
|
|||||||
msgid "View my memberships"
|
msgid "View my memberships"
|
||||||
msgstr "Voir mes adhésions"
|
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
|
#: apps/member/templates/member/profile_update.html:18
|
||||||
msgid "Save Changes"
|
msgid "Save Changes"
|
||||||
msgstr "Sauvegarder les changements"
|
msgstr "Sauvegarder les changements"
|
||||||
@ -1156,47 +1183,47 @@ msgstr "Sauvegarder les changements"
|
|||||||
msgid "Registrations"
|
msgid "Registrations"
|
||||||
msgstr "Inscriptions"
|
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."
|
msgid "This address must be valid."
|
||||||
msgstr "Cette adresse doit être valide."
|
msgstr "Cette adresse doit être valide."
|
||||||
|
|
||||||
#: apps/member/views.py:139
|
#: apps/member/views.py:140
|
||||||
msgid "Profile detail"
|
msgid "Profile detail"
|
||||||
msgstr "Détails de l'utilisateur"
|
msgstr "Détails de l'utilisateur"
|
||||||
|
|
||||||
#: apps/member/views.py:205
|
#: apps/member/views.py:206
|
||||||
msgid "Search user"
|
msgid "Search user"
|
||||||
msgstr "Chercher un utilisateur"
|
msgstr "Chercher un utilisateur"
|
||||||
|
|
||||||
#: apps/member/views.py:273
|
#: apps/member/views.py:308
|
||||||
msgid "Update note picture"
|
msgid "Update note picture"
|
||||||
msgstr "Modifier la photo de la note"
|
msgstr "Modifier la photo de la note"
|
||||||
|
|
||||||
#: apps/member/views.py:319
|
#: apps/member/views.py:354
|
||||||
msgid "Manage auth token"
|
msgid "Manage auth token"
|
||||||
msgstr "Gérer les jetons d'authentification"
|
msgstr "Gérer les jetons d'authentification"
|
||||||
|
|
||||||
#: apps/member/views.py:346
|
#: apps/member/views.py:381
|
||||||
msgid "Create new club"
|
msgid "Create new club"
|
||||||
msgstr "Créer un nouveau club"
|
msgstr "Créer un nouveau club"
|
||||||
|
|
||||||
#: apps/member/views.py:365
|
#: apps/member/views.py:400
|
||||||
msgid "Search club"
|
msgid "Search club"
|
||||||
msgstr "Chercher un club"
|
msgstr "Chercher un club"
|
||||||
|
|
||||||
#: apps/member/views.py:398
|
#: apps/member/views.py:433
|
||||||
msgid "Club detail"
|
msgid "Club detail"
|
||||||
msgstr "Détails du club"
|
msgstr "Détails du club"
|
||||||
|
|
||||||
#: apps/member/views.py:479
|
#: apps/member/views.py:540
|
||||||
msgid "Update club"
|
msgid "Update club"
|
||||||
msgstr "Modifier le club"
|
msgstr "Modifier le club"
|
||||||
|
|
||||||
#: apps/member/views.py:513
|
#: apps/member/views.py:574
|
||||||
msgid "Add new member to the club"
|
msgid "Add new member to the club"
|
||||||
msgstr "Ajouter un nouveau membre au 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 ""
|
msgid ""
|
||||||
"This user don't have enough money to join this club, and can't have a "
|
"This user don't have enough money to join this club, and can't have a "
|
||||||
"negative balance."
|
"negative balance."
|
||||||
@ -1204,19 +1231,19 @@ msgstr ""
|
|||||||
"Cet utilisateur n'a pas assez d'argent pour rejoindre ce club et ne peut pas "
|
"Cet utilisateur n'a pas assez d'argent pour rejoindre ce club et ne peut pas "
|
||||||
"avoir un solde négatif."
|
"avoir un solde négatif."
|
||||||
|
|
||||||
#: apps/member/views.py:664
|
#: apps/member/views.py:725
|
||||||
msgid "The membership must start after {:%m-%d-%Y}."
|
msgid "The membership must start after {:%m-%d-%Y}."
|
||||||
msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}."
|
msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}."
|
||||||
|
|
||||||
#: apps/member/views.py:669
|
#: apps/member/views.py:730
|
||||||
msgid "The membership must begin before {:%m-%d-%Y}."
|
msgid "The membership must begin before {:%m-%d-%Y}."
|
||||||
msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
|
msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
|
||||||
|
|
||||||
#: apps/member/views.py:815
|
#: apps/member/views.py:876
|
||||||
msgid "Manage roles of an user in the club"
|
msgid "Manage roles of an user in the club"
|
||||||
msgstr "Gérer les rôles d'un utilisateur dans le 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"
|
msgid "Members of the club"
|
||||||
msgstr "Membres du club"
|
msgstr "Membres du club"
|
||||||
|
|
||||||
@ -1234,7 +1261,7 @@ msgstr "destination"
|
|||||||
msgid "amount"
|
msgid "amount"
|
||||||
msgstr "montant"
|
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
|
#: apps/note/models/transactions.py:228
|
||||||
msgid ""
|
msgid ""
|
||||||
"The transaction can't be saved since the source note or the destination note "
|
"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"
|
msgid "special notes"
|
||||||
msgstr "notes spéciales"
|
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"
|
msgid "Invalid alias"
|
||||||
msgstr "Alias invalide"
|
msgstr "Alias invalide"
|
||||||
|
|
||||||
#: apps/note/models/notes.py:254
|
#: apps/note/models/notes.py:286
|
||||||
msgid "alias"
|
msgid "alias"
|
||||||
msgstr "alias"
|
msgstr "alias"
|
||||||
|
|
||||||
#: apps/note/models/notes.py:278
|
#: apps/note/models/notes.py:310
|
||||||
msgid "Alias is too long."
|
msgid "Alias is too long."
|
||||||
msgstr "L'alias est trop long."
|
msgstr "L'alias est trop long."
|
||||||
|
|
||||||
#: apps/note/models/notes.py:281
|
#: apps/note/models/notes.py:313
|
||||||
msgid ""
|
msgid ""
|
||||||
"This alias contains only complex character. Please use a more simple alias."
|
"This alias contains only complex character. Please use a more simple alias."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cet alias ne contient que des caractères complexes. Merci d'utiliser un "
|
"Cet alias ne contient que des caractères complexes. Merci d'utiliser un "
|
||||||
"alias plus simple."
|
"alias plus simple."
|
||||||
|
|
||||||
#: apps/note/models/notes.py:285
|
#: apps/note/models/notes.py:317
|
||||||
msgid "An alias with a similar name already exists: {} "
|
msgid "An alias with a similar name already exists: {} "
|
||||||
msgstr "Un alias avec un nom similaire existe déjà : {} "
|
msgstr "Un alias avec un nom similaire existe déjà : {} "
|
||||||
|
|
||||||
#: apps/note/models/notes.py:299
|
#: apps/note/models/notes.py:331
|
||||||
msgid "You can't delete your main alias."
|
msgid "You can't delete your main alias."
|
||||||
msgstr "Vous ne pouvez pas supprimer votre alias principal."
|
msgstr "Vous ne pouvez pas supprimer votre alias principal."
|
||||||
|
|
||||||
@ -1535,7 +1579,8 @@ msgstr "Cliquez pour valider"
|
|||||||
msgid "No reason specified"
|
msgid "No reason specified"
|
||||||
msgstr "Pas de motif spécifié"
|
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/invoice_confirm_delete.html:30
|
||||||
#: apps/treasury/templates/treasury/sogecredit_detail.html:65
|
#: apps/treasury/templates/treasury/sogecredit_detail.html:65
|
||||||
#: apps/wei/tables.py:75 apps/wei/tables.py:118
|
#: apps/wei/tables.py:75 apps/wei/tables.py:118
|
||||||
@ -1546,7 +1591,7 @@ msgstr "Pas de motif spécifié"
|
|||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Supprimer"
|
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/tables.py:49 apps/wei/tables.py:50
|
||||||
#: apps/wei/templates/wei/base.html:89
|
#: apps/wei/templates/wei/base.html:89
|
||||||
#: apps/wei/templates/wei/bus_detail.html:20
|
#: apps/wei/templates/wei/bus_detail.html:20
|
||||||
@ -1556,7 +1601,7 @@ msgstr "Supprimer"
|
|||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr "Éditer"
|
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"
|
msgid "Hide/Show"
|
||||||
msgstr "Afficher/Masquer"
|
msgstr "Afficher/Masquer"
|
||||||
|
|
||||||
@ -1717,7 +1762,7 @@ msgstr "Chercher un bouton"
|
|||||||
msgid "Update button"
|
msgid "Update button"
|
||||||
msgstr "Modifier le bouton"
|
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"
|
msgid "Consumptions"
|
||||||
msgstr "Consommations"
|
msgstr "Consommations"
|
||||||
|
|
||||||
@ -1915,7 +1960,7 @@ msgstr ""
|
|||||||
"Vous n'avez pas la permission d'ajouter une instance du modèle « {model} » "
|
"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."
|
"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"
|
msgid "Rights"
|
||||||
msgstr "Droits"
|
msgstr "Droits"
|
||||||
|
|
||||||
@ -2122,7 +2167,7 @@ msgstr ""
|
|||||||
msgid "Invalidate pre-registration"
|
msgid "Invalidate pre-registration"
|
||||||
msgstr "Invalider l'inscription"
|
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"
|
msgid "Treasury"
|
||||||
msgstr "Trésorerie"
|
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/apps.py:10 apps/wei/models.py:50 apps/wei/models.py:51
|
||||||
#: apps/wei/models.py:62 apps/wei/models.py:180
|
#: apps/wei/models.py:62 apps/wei/models.py:180
|
||||||
#: note_kfet/templates/base.html:103
|
#: note_kfet/templates/base.html:102
|
||||||
msgid "WEI"
|
msgid "WEI"
|
||||||
msgstr "WEI"
|
msgstr "WEI"
|
||||||
|
|
||||||
@ -2538,7 +2583,7 @@ msgstr "WEI"
|
|||||||
msgid "The selected user is not validated. Please validate its account first"
|
msgid "The selected user is not validated. Please validate its account first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"L'utilisateur sélectionné n'est pas validé. Merci de d'abord valider son "
|
"L'utilisateur sélectionné n'est pas validé. Merci de d'abord valider son "
|
||||||
"compte."
|
"compte"
|
||||||
|
|
||||||
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126
|
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126
|
||||||
#: apps/wei/models.py:323
|
#: 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."
|
msgid "This team doesn't belong to the given bus."
|
||||||
msgstr "Cette équipe n'appartient pas à ce 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:"
|
msgid "Choose a word:"
|
||||||
msgstr "Choisissez un mot :"
|
msgstr "Choisissez un mot :"
|
||||||
|
|
||||||
@ -3140,19 +3185,19 @@ msgstr "Répartir les 1A dans les bus"
|
|||||||
msgid "Attribute bus"
|
msgid "Attribute bus"
|
||||||
msgstr "Attribuer un bus"
|
msgstr "Attribuer un bus"
|
||||||
|
|
||||||
#: note_kfet/settings/base.py:161
|
#: note_kfet/settings/base.py:172
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Allemand"
|
msgstr "Allemand"
|
||||||
|
|
||||||
#: note_kfet/settings/base.py:162
|
#: note_kfet/settings/base.py:173
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglais"
|
msgstr "Anglais"
|
||||||
|
|
||||||
#: note_kfet/settings/base.py:163
|
#: note_kfet/settings/base.py:174
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Espagnol"
|
msgstr "Espagnol"
|
||||||
|
|
||||||
#: note_kfet/settings/base.py:164
|
#: note_kfet/settings/base.py:175
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Français"
|
msgstr "Français"
|
||||||
|
|
||||||
@ -3209,7 +3254,7 @@ msgstr ""
|
|||||||
"erreur, qui sera corrigée rapidement. Vous pouvez désormais aller boire une "
|
"erreur, qui sera corrigée rapidement. Vous pouvez désormais aller boire une "
|
||||||
"bière."
|
"bière."
|
||||||
|
|
||||||
#: note_kfet/templates/autocomplete_model.html:14
|
#: note_kfet/templates/autocomplete_model.html:15
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr "Réinitialiser"
|
msgstr "Réinitialiser"
|
||||||
|
|
||||||
@ -3217,34 +3262,34 @@ msgstr "Réinitialiser"
|
|||||||
msgid "The ENS Paris-Saclay BDE note."
|
msgid "The ENS Paris-Saclay BDE note."
|
||||||
msgstr "La note du BDE de l'ENS Paris-Saclay."
|
msgstr "La note du BDE de l'ENS Paris-Saclay."
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:79
|
#: note_kfet/templates/base.html:78
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr "Utilisateurs"
|
msgstr "Utilisateurs"
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:85
|
#: note_kfet/templates/base.html:84
|
||||||
msgid "Clubs"
|
msgid "Clubs"
|
||||||
msgstr "Clubs"
|
msgstr "Clubs"
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:114
|
#: note_kfet/templates/base.html:113
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
msgstr "Admin"
|
msgstr "Admin"
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:128
|
#: note_kfet/templates/base.html:127
|
||||||
msgid "My account"
|
msgid "My account"
|
||||||
msgstr "Mon compte"
|
msgstr "Mon compte"
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:131
|
#: note_kfet/templates/base.html:130
|
||||||
msgid "Log out"
|
msgid "Log out"
|
||||||
msgstr "Se déconnecter"
|
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:6
|
||||||
#: note_kfet/templates/registration/signup.html:11
|
#: note_kfet/templates/registration/signup.html:11
|
||||||
#: note_kfet/templates/registration/signup.html:28
|
#: note_kfet/templates/registration/signup.html:28
|
||||||
msgid "Sign up"
|
msgid "Sign up"
|
||||||
msgstr "Inscription"
|
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:6
|
||||||
#: note_kfet/templates/registration/login.html:15
|
#: note_kfet/templates/registration/login.html:15
|
||||||
#: note_kfet/templates/registration/login.html:38
|
#: note_kfet/templates/registration/login.html:38
|
||||||
@ -3252,7 +3297,7 @@ msgstr "Inscription"
|
|||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr "Se connecter"
|
msgstr "Se connecter"
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:160
|
#: note_kfet/templates/base.html:159
|
||||||
msgid ""
|
msgid ""
|
||||||
"You are not a BDE member anymore. Please renew your membership if you want "
|
"You are not a BDE member anymore. Please renew your membership if you want "
|
||||||
"to use the note."
|
"to use the note."
|
||||||
@ -3260,7 +3305,7 @@ msgstr ""
|
|||||||
"Vous n'êtes plus adhérent BDE. Merci de réadhérer si vous voulez profiter de "
|
"Vous n'êtes plus adhérent BDE. Merci de réadhérer si vous voulez profiter de "
|
||||||
"la note."
|
"la note."
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:166
|
#: note_kfet/templates/base.html:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your e-mail address is not validated. Please check your mail inbox and click "
|
"Your e-mail address is not validated. Please check your mail inbox and click "
|
||||||
"on the validation link."
|
"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 "
|
"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."
|
"et de cliquer sur le lien de validation."
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:172
|
#: note_kfet/templates/base.html:171
|
||||||
msgid ""
|
msgid ""
|
||||||
"You declared that you opened a bank account in the Société générale. The "
|
"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 "
|
"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 "
|
"vérification peut durer quelques jours. Merci de vous assurer de bien aller "
|
||||||
"au bout de vos démarches."
|
"au bout de vos démarches."
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:195
|
#: note_kfet/templates/base.html:194
|
||||||
msgid "Contact us"
|
msgid "Contact us"
|
||||||
msgstr "Nous contacter"
|
msgstr "Nous contacter"
|
||||||
|
|
||||||
#: note_kfet/templates/base.html:197
|
#: note_kfet/templates/base.html:196
|
||||||
msgid "Technical Support"
|
msgid "Technical Support"
|
||||||
msgstr "Support technique"
|
msgstr "Support technique"
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ REST_FRAMEWORK = {
|
|||||||
'rest_framework.authentication.TokenAuthentication',
|
'rest_framework.authentication.TokenAuthentication',
|
||||||
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
|
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
|
||||||
],
|
],
|
||||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
|
'DEFAULT_PAGINATION_CLASS': 'apps.api.pagination.CustomPagination',
|
||||||
'PAGE_SIZE': 20,
|
'PAGE_SIZE': 20,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ mark {
|
|||||||
|
|
||||||
/* Last BDE colors */
|
/* Last BDE colors */
|
||||||
.bg-primary {
|
.bg-primary {
|
||||||
background-color: rgb(18, 67, 4) !important;
|
background-color: rgb(102, 83, 105) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
@ -81,14 +81,14 @@ body {
|
|||||||
.btn-outline-primary:not(:disabled):not(.disabled).active,
|
.btn-outline-primary:not(:disabled):not(.disabled).active,
|
||||||
.btn-outline-primary:not(:disabled):not(.disabled):active {
|
.btn-outline-primary:not(:disabled):not(.disabled):active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: rgb(18, 67, 46);
|
background-color: rgb(102, 83, 105);
|
||||||
border-color: rgb(18, 67, 46);
|
border-color: rgb(102, 83, 105);
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-outline-primary {
|
.btn-outline-primary {
|
||||||
color: rgb(18, 67, 46);
|
color: rgb(102, 83, 105);
|
||||||
background-color: rgba(248, 249, 250, 0.9);
|
background-color: rgba(248, 249, 250, 0.9);
|
||||||
border-color: rgb(18, 67, 46);
|
border-color: rgb(102, 83, 105);
|
||||||
}
|
}
|
||||||
|
|
||||||
.turbolinks-progress-bar {
|
.turbolinks-progress-bar {
|
||||||
@ -99,35 +99,35 @@ body {
|
|||||||
.btn-primary:not(:disabled):not(.disabled).active,
|
.btn-primary:not(:disabled):not(.disabled).active,
|
||||||
.btn-primary:not(:disabled):not(.disabled):active {
|
.btn-primary:not(:disabled):not(.disabled):active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: rgb(18, 67, 46);
|
background-color: rgb(102, 83, 105);
|
||||||
border-color: rgb(18, 67, 46);
|
border-color: rgb(102, 83, 105);
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
color: rgba(248, 249, 250, 0.9);
|
color: rgba(248, 249, 250, 0.9);
|
||||||
background-color: rgb(28, 114, 10);
|
background-color: rgb(102, 83, 105);
|
||||||
border-color: rgb(18, 67, 46);
|
border-color: rgb(102, 83, 105);
|
||||||
}
|
}
|
||||||
|
|
||||||
.border-primary {
|
.border-primary {
|
||||||
border-color: rgb(28, 114, 10) !important;
|
border-color: rgb(115, 15, 115) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: rgb(28, 114, 10);
|
color: rgb(102, 83, 105);
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
color: rgb(122, 163, 75);
|
color: rgb(200, 30, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control:focus {
|
.form-control:focus {
|
||||||
box-shadow: 0 0 0 0.25rem rgba(122, 163, 75, 0.25);
|
box-shadow: 0 0 0 0.25rem rgba(200, 30, 200, 0.25);
|
||||||
border-color: rgb(122, 163, 75);
|
border-color: rgb(200, 30, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-outline-primary.focus {
|
.btn-outline-primary.focus {
|
||||||
box-shadow: 0 0 0 0.25rem rgba(122, 163, 75, 0.5);
|
box-shadow: 0 0 0 0.25rem rgba(200, 30, 200, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,21 +13,29 @@ $(document).ready(function () {
|
|||||||
$('#' + prefix + '_reset').removeClass('d-none')
|
$('#' + prefix + '_reset').removeClass('d-none')
|
||||||
|
|
||||||
$.getJSON(api_url + (api_url.includes('?') ? '&' : '?') + 'format=json&search=^' + input + api_url_suffix, function (objects) {
|
$.getJSON(api_url + (api_url.includes('?') ? '&' : '?') + 'format=json&search=^' + input + api_url_suffix, function (objects) {
|
||||||
let html = ''
|
let html = '<ul class="list-group list-group-flush" id="' + prefix + '_list">'
|
||||||
|
|
||||||
objects.results.forEach(function (obj) {
|
objects.results.forEach(function (obj) {
|
||||||
html += li(prefix + '_' + obj.id, obj[name_field])
|
html += li(prefix + '_' + obj.id, obj[name_field])
|
||||||
})
|
})
|
||||||
|
html += '</ul>'
|
||||||
|
|
||||||
const results_list = $('#' + prefix + '_list')
|
target.tooltip({
|
||||||
results_list.html(html)
|
html: true,
|
||||||
|
placement: 'bottom',
|
||||||
|
trigger: 'manual',
|
||||||
|
container: target.parent(),
|
||||||
|
fallbackPlacement: 'clockwise'
|
||||||
|
})
|
||||||
|
|
||||||
|
target.attr("data-original-title", html).tooltip("show")
|
||||||
|
|
||||||
objects.results.forEach(function (obj) {
|
objects.results.forEach(function (obj) {
|
||||||
$('#' + prefix + '_' + obj.id).click(function () {
|
$('#' + prefix + '_' + obj.id).click(function () {
|
||||||
target.val(obj[name_field])
|
target.val(obj[name_field])
|
||||||
$('#' + prefix + '_pk').val(obj.id)
|
$('#' + prefix + '_pk').val(obj.id)
|
||||||
|
|
||||||
results_list.html('')
|
target.tooltip("hide")
|
||||||
target.removeClass('is-invalid')
|
target.removeClass('is-invalid')
|
||||||
target.addClass('is-valid')
|
target.addClass('is-valid')
|
||||||
|
|
||||||
@ -37,8 +45,8 @@ $(document).ready(function () {
|
|||||||
if (input === obj[name_field]) { $('#' + prefix + '_pk').val(obj.id) }
|
if (input === obj[name_field]) { $('#' + prefix + '_pk').val(obj.id) }
|
||||||
})
|
})
|
||||||
|
|
||||||
if (results_list.children().length === 1 && e.originalEvent.keyCode >= 32) {
|
if (objects.results.length === 1 && e.originalEvent.keyCode >= 32) {
|
||||||
results_list.children().first().trigger('click')
|
$('#' + prefix + '_' + objects.results[0].id).trigger('click')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -9,9 +9,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
name="{{ widget.name }}_name" autocomplete="off"
|
name="{{ widget.name }}_name" autocomplete="off"
|
||||||
{% for name, value in widget.attrs.items %}
|
{% for name, value in widget.attrs.items %}
|
||||||
{% ifnotequal value False %}{{ name }}{% ifnotequal value True %}="{{ value|stringformat:'s' }}"{% endifnotequal %}{% endifnotequal %}
|
{% ifnotequal value False %}{{ name }}{% ifnotequal value True %}="{{ value|stringformat:'s' }}"{% endifnotequal %}{% endifnotequal %}
|
||||||
{% endfor %}>
|
{% endfor %}
|
||||||
|
aria-describedby="{{widget.attrs.id}}_tooltip">
|
||||||
{% if widget.resetable %}
|
{% if widget.resetable %}
|
||||||
<a id="{{ widget.attrs.id }}_reset" class="btn btn-light autocomplete-reset{% if not widget.value %} d-none{% endif %}">{% trans "Reset" %}</a>
|
<a id="{{ widget.attrs.id }}_reset" class="btn btn-light autocomplete-reset{% if not widget.value %} d-none{% endif %}">{% trans "Reset" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<ul class="list-group list-group-flush" id="{{ widget.attrs.id }}_list">
|
|
||||||
</ul>
|
|
||||||
|
@ -23,11 +23,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
{{ profile_form|crispy }}
|
{{ profile_form|crispy }}
|
||||||
{{ soge_form|crispy }}
|
{% comment "Soge not for membership (only WEI)" %} {{ soge_form|crispy }} {% endcomment %}
|
||||||
<button class="btn btn-success" type="submit">
|
<button class="btn btn-success" type="submit">
|
||||||
{% trans "Sign up" %}
|
{% trans "Sign up" %}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Reference in New Issue
Block a user