mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 07:49:57 +01:00 
			
		
		
		
	Compare commits
	
		
			55 Commits
		
	
	
		
			non-BDE-me
			...
			062f57c0d7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 062f57c0d7 | ||
|  | 9f888a5281 | ||
|  | 88b1a25ca0 | ||
|  | 8cb50f58f2 | ||
|  | 041a8f20a9 | ||
|  | b1ffb28532 | ||
|  | 6225fb51f1 | ||
|  | 1dd74e8024 | ||
|  | 1af9f5f23c | ||
|  | 83d5a7ceff | ||
|  | a7cba0a4a3 | ||
|  | ccd9a66ab9 | ||
|  | c7a92fa4b2 | ||
|  | 0a5368d23f | ||
|  | 26b351a51c | ||
|  | 1836677c47 | ||
|  | e7a98c86f0 | ||
|  | eb5044490b | ||
|  | 983d7ec052 | ||
|  | dc56deaf85 | ||
|  | 694f54e1c4 | ||
|  | 0d0fdef363 | ||
|  | 821efbf78b | ||
|  | a209e0d366 | ||
|  | ef485e0628 | ||
|  | 1481aa0635 | ||
|  | 867bf9fd25 | ||
|  | 47fda0ea36 | ||
|  | 623290827a | ||
|  | a87ce625f3 | ||
|  | 3559787fa7 | ||
|  | bd6ed27ae5 | ||
|  | 43dc676747 | ||
|  | caaeab6b0b | ||
|  | 54ba786884 | ||
|  | 80e109114f | ||
|  | 787005e60d | ||
|  | 414e103686 | ||
|  | 942d887c2e | ||
|  | a63c34fe37 | ||
|  | 2be6133458 | ||
|  | 7975fe47a6 | ||
|  | 476fbceeea | ||
|  | 8fbaa0bdc8 | ||
|  | a0de63effd | ||
|  | 09fb1d227e | ||
|  | 2e27d4f05c | ||
|  | 3c34033bf5 | ||
|  | e6f3084588 | ||
|  | 145e55da75 | ||
|  | d3ba95cdca | ||
|  | 8ffb0ebb56 | ||
|  | 5038af9e34 | ||
|  | 819b4214c9 | ||
|  | b8a93b0b75 | 
| @@ -38,6 +38,7 @@ SPDX-License-Identifier: GPL-3.0-or-later | |||||||
| </a> | </a> | ||||||
|  |  | ||||||
| <input id="alias" type="text" class="form-control" placeholder="Nom/note ..."> | <input id="alias" type="text" class="form-control" placeholder="Nom/note ..."> | ||||||
|  | <button id="trigger" class="btn btn-secondary">Click me !</button> | ||||||
|  |  | ||||||
| <hr> | <hr> | ||||||
|  |  | ||||||
| @@ -63,15 +64,46 @@ SPDX-License-Identifier: GPL-3.0-or-later | |||||||
|         refreshBalance(); |         refreshBalance(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     function process_qrcode() { | ||||||
|  |         let name = alias_obj.val(); | ||||||
|  |         $.get("/api/note/note?search=" + name + "&format=json").done( | ||||||
|  |             function (res) { | ||||||
|  |                 let note = res.results[0]; | ||||||
|  |                 $.post("/api/activity/entry/?format=json", { | ||||||
|  |                     csrfmiddlewaretoken: CSRF_TOKEN, | ||||||
|  |                     activity: {{ activity.id }}, | ||||||
|  |                     note: note.id, | ||||||
|  |                     guest: null | ||||||
|  |                 }).done(function () { | ||||||
|  |                     addMsg(interpolate(gettext( | ||||||
|  |                         "Entry made for %s whose balance is %s €"), | ||||||
|  |                         [note.name, note.balance / 100]), "success", 4000); | ||||||
|  |                     reloadTable(true); | ||||||
|  |                 }).fail(function (xhr) { | ||||||
|  |                     errMsg(xhr.responseJSON, 4000); | ||||||
|  |                 }); | ||||||
|  |             }).fail(function (xhr) { | ||||||
|  |                 errMsg(xhr.responseJSON, 4000); | ||||||
|  |             }); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     alias_obj.keyup(function(event) { |     alias_obj.keyup(function(event) { | ||||||
|         let code = event.originalEvent.keyCode |         let code = event.originalEvent.keyCode | ||||||
|         if (65 <= code <= 122 || code === 13) { |         if (65 <= code <= 122 || code === 13) { | ||||||
|             debounce(reloadTable)() |             debounce(reloadTable)() | ||||||
|         } |         } | ||||||
|  |         if (code === 0) | ||||||
|  |             process_qrcode(); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     $(document).ready(init); |     $(document).ready(init); | ||||||
|  |  | ||||||
|  |     alias_obj2 = document.getElementById("alias"); | ||||||
|  |     $("#trigger").click(function (e) { | ||||||
|  |         addMsg("Clicked", "success", 1000); | ||||||
|  |         alias_obj.val(alias_obj.val() + "\0"); | ||||||
|  |         alias_obj2.dispatchEvent(new KeyboardEvent('keyup')); | ||||||
|  |     }) | ||||||
|     function init() { |     function init() { | ||||||
|         $(".table-row").click(function (e) { |         $(".table-row").click(function (e) { | ||||||
|             let target = e.target.parentElement; |             let target = e.target.parentElement; | ||||||
|   | |||||||
| @@ -329,7 +329,7 @@ class ActivityEntryView(LoginRequiredMixin, SingleTableMixin, TemplateView): | |||||||
|         context["noteuser_ctype"] = ContentType.objects.get_for_model(NoteUser).pk |         context["noteuser_ctype"] = ContentType.objects.get_for_model(NoteUser).pk | ||||||
|         context["notespecial_ctype"] = ContentType.objects.get_for_model(NoteSpecial).pk |         context["notespecial_ctype"] = ContentType.objects.get_for_model(NoteSpecial).pk | ||||||
|  |  | ||||||
|         activities_open = Activity.objects.filter(open=True).filter( |         activities_open = Activity.objects.filter(open=True, activity_type__manage_entries=True).filter( | ||||||
|             PermissionBackend.filter_queryset(self.request, Activity, "view")).distinct().all() |             PermissionBackend.filter_queryset(self.request, Activity, "view")).distinct().all() | ||||||
|         context["activities_open"] = [a for a in activities_open |         context["activities_open"] = [a for a in activities_open | ||||||
|                                       if PermissionBackend.check_perm(self.request, |                                       if PermissionBackend.check_perm(self.request, | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ class ProfileForm(forms.ModelForm): | |||||||
|     """ |     """ | ||||||
|     A form for the extras field provided by the :model:`member.Profile` model. |     A form for the extras field provided by the :model:`member.Profile` model. | ||||||
|     """ |     """ | ||||||
|  |     # Remove widget=forms.HiddenInput() if you want to use report frequency. | ||||||
|     report_frequency = forms.IntegerField(required=False, initial=0, label=_("Report frequency")) |     report_frequency = forms.IntegerField(required=False, initial=0, label=_("Report frequency")) | ||||||
|  |  | ||||||
|     last_report = forms.DateTimeField(required=False, disabled=True, label=_("Last report date")) |     last_report = forms.DateTimeField(required=False, disabled=True, label=_("Last report date")) | ||||||
| @@ -76,7 +77,8 @@ class ProfileForm(forms.ModelForm): | |||||||
|     class Meta: |     class Meta: | ||||||
|         model = Profile |         model = Profile | ||||||
|         fields = '__all__' |         fields = '__all__' | ||||||
|         exclude = ('user', 'email_confirmed', 'registration_valid', ) |         # Remove ml_[asso]_registration from exclude if the concerned association uses nk20 to manage its mailing list. | ||||||
|  |         exclude = ('user', 'email_confirmed', 'registration_valid', 'ml_sport_registration', ) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ImageForm(forms.Form): | class ImageForm(forms.Form): | ||||||
|   | |||||||
| @@ -60,7 +60,10 @@ | |||||||
| {% if user_object.pk == user.pk %} | {% if user_object.pk == user.pk %} | ||||||
|     <div class="text-center"> |     <div class="text-center"> | ||||||
|         <a class="small badge badge-secondary" href="{% url 'member:auth_token' %}"> |         <a class="small badge badge-secondary" href="{% url 'member:auth_token' %}"> | ||||||
|             <i class="fa fa-cogs"></i>{% trans 'API token' %} |             <i class="fa fa-cogs"></i> {% trans 'API token' %} | ||||||
|  |         </a> | ||||||
|  |         <a class="small badge badge-secondary" href="{% url 'member:qr_code' user_object.pk %}"> | ||||||
|  |             <i class="fa fa-qrcode"></i> {% trans 'QR Code' %} | ||||||
|         </a> |         </a> | ||||||
|     </div> |     </div> | ||||||
| {% endif %} | {% endif %} | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								apps/member/templates/member/qr_code.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								apps/member/templates/member/qr_code.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | {% extends "base.html" %} | ||||||
|  | {% comment %} | ||||||
|  | SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  | {% endcomment %} | ||||||
|  | {% load i18n %} | ||||||
|  |  | ||||||
|  | {% block content %} | ||||||
|  | <div class="card bg-light"> | ||||||
|  |   	<h3 class="card-header text-center"> | ||||||
|  | 		{% trans "QR Code for" %} {{ user_object.username }} ({{ user_object.first_name }} {{user_object.last_name }}) | ||||||
|  |   	</h3> | ||||||
|  |   	<div class="text-center" id="qrcode"> | ||||||
|  |   	</div> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {% endblock %} | ||||||
|  |  | ||||||
|  | {% block extrajavascript %} | ||||||
|  | <script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" integrity="sha512-CNgIRecGo7nphbeZ04Sc13ka07paqdeTu0WR1IM4kNcpmBAUSHSQX0FslNhTDadL4O5SAGapGt4FodqL8My0mA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | ||||||
|  | <script> | ||||||
|  | 	var qrc = new QRCode(document.getElementById("qrcode"), { | ||||||
|  | 		text: "{{ user_object.pk }}\0", | ||||||
|  | 		width: 1024, | ||||||
|  | 		height: 1024 | ||||||
|  | 	}); | ||||||
|  | </script> | ||||||
|  | {% endblock %} | ||||||
|  |  | ||||||
|  | {% block extracss %} | ||||||
|  | <style> | ||||||
|  | img { | ||||||
|  |     width: 100% | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  | {% endblock %} | ||||||
| @@ -25,4 +25,5 @@ urlpatterns = [ | |||||||
|     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('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'), | ||||||
|  |     path('user/<int:pk>/qr_code/', views.QRCodeView.as_view(), name='qr_code'), | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ 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 | ||||||
| from permission.views import ProtectQuerysetMixin, ProtectedCreateView | from permission.views import ProtectQuerysetMixin, ProtectedCreateView | ||||||
|  | from django import forms | ||||||
|  |  | ||||||
| from .forms import UserForm, ProfileForm, ImageForm, ClubForm, MembershipForm, \ | from .forms import UserForm, ProfileForm, ImageForm, ClubForm, MembershipForm, \ | ||||||
|     CustomAuthenticationForm, MembershipRolesForm |     CustomAuthenticationForm, MembershipRolesForm | ||||||
| @@ -72,11 +73,24 @@ class UserUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): | |||||||
|         form.fields['email'].required = True |         form.fields['email'].required = True | ||||||
|         form.fields['email'].help_text = _("This address must be valid.") |         form.fields['email'].help_text = _("This address must be valid.") | ||||||
|  |  | ||||||
|         if PermissionBackend.check_perm(self.request, "member.change_profile", context['user_object'].profile): |         profile_form = self.profile_form(instance=context['user_object'].profile, | ||||||
|             context['profile_form'] = self.profile_form(instance=context['user_object'].profile, |  | ||||||
|                                          data=self.request.POST if self.request.POST else None) |                                          data=self.request.POST if self.request.POST else None) | ||||||
|  |  | ||||||
|         if not self.object.profile.report_frequency: |         if not self.object.profile.report_frequency: | ||||||
|                 del context['profile_form'].fields["last_report"] |             del profile_form.fields["last_report"] | ||||||
|  |  | ||||||
|  |         fields_to_check = list(profile_form.fields.keys()) | ||||||
|  |         fields_modifiable = False | ||||||
|  |  | ||||||
|  |         # Delete the fields for which the user does not have the permission to modify | ||||||
|  |         for field_name in fields_to_check: | ||||||
|  |             if not PermissionBackend.check_perm(self.request, f"member.change_profile_{field_name}", context['user_object'].profile): | ||||||
|  |                 profile_form.fields[field_name].widget = forms.HiddenInput() | ||||||
|  |             else: | ||||||
|  |                 fields_modifiable = True | ||||||
|  |  | ||||||
|  |         if fields_modifiable: | ||||||
|  |             context['profile_form'] = profile_form | ||||||
|  |  | ||||||
|         return context |         return context | ||||||
|  |  | ||||||
| @@ -388,6 +402,14 @@ class ManageAuthTokens(LoginRequiredMixin, TemplateView): | |||||||
|         context['token'] = Token.objects.get_or_create(user=self.request.user)[0] |         context['token'] = Token.objects.get_or_create(user=self.request.user)[0] | ||||||
|         return context |         return context | ||||||
|  |  | ||||||
|  | class QRCodeView(LoginRequiredMixin, DetailView): | ||||||
|  |     """ | ||||||
|  |     Affiche le QR Code | ||||||
|  |     """ | ||||||
|  |     model = User | ||||||
|  |     context_object_name = "user_object" | ||||||
|  |     template_name = "member/qr_code.html" | ||||||
|  |     extra_context = {"title": _("QR Code")} | ||||||
|  |  | ||||||
| # ******************************* # | # ******************************* # | ||||||
| #              CLUB               # | #              CLUB               # | ||||||
|   | |||||||
| @@ -31,3 +31,4 @@ class RoleAdmin(admin.ModelAdmin): | |||||||
|     Admin customisation for Role |     Admin customisation for Role | ||||||
|     """ |     """ | ||||||
|     list_display = ('name', ) |     list_display = ('name', ) | ||||||
|  |     filter_horizontal = ('permissions',) | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ | |||||||
|                 "auth", |                 "auth", | ||||||
|                 "user" |                 "user" | ||||||
|             ], |             ], | ||||||
|             "query": "{\"pk\": [\"user\", \"pk\"]}", |             "query": "[\"AND\", {\"pk\": [\"user\", \"pk\"]}, {\"memberships__club__parent_club__isnull\": true}]", | ||||||
|             "type": "change", |             "type": "change", | ||||||
|             "mask": 1, |             "mask": 1, | ||||||
|             "field": "last_login", |             "field": "last_login", | ||||||
| @@ -3800,6 +3800,214 @@ | |||||||
|             "description": "Voir les utilisateurs adhérents au club parent" |             "description": "Voir les utilisateurs adhérents au club parent" | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 242, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "note", | ||||||
|  |                 "transaction" | ||||||
|  |             ], | ||||||
|  |             "query": "[\"AND\", {\"destination\": [\"club\", \"note\"]}, [\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 2000]}}, {\"valid\": false}]]", | ||||||
|  |             "type": "add", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Créer une transaction vers la note d'un club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 243, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "member", | ||||||
|  |                 "profile" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"user__memberships__club\": [\"club\"], \"user__memberships__date_start__lte\": [\"today\"],\"user__memberships__date_end__gte\": [\"today\"]}", | ||||||
|  |             "type": "view", | ||||||
|  |             "mask": 3, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Voir les profils des membres du club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 244, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "member", | ||||||
|  |                 "profile" | ||||||
|  |             ], | ||||||
|  |             "query": "{}", | ||||||
|  |             "type": "change", | ||||||
|  |             "mask": 3, | ||||||
|  |             "field": "ml_events_registration", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Modifier l'abonnement à la Newsletter BDE pour n'importe quel profil" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 245, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "member", | ||||||
|  |                 "profile" | ||||||
|  |             ], | ||||||
|  |             "query": "{}", | ||||||
|  |             "type": "change", | ||||||
|  |             "mask": 3, | ||||||
|  |             "field": "ml_art_registration", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Modifier l'abonnement à la Newsletter Art pour n'importe quel profil" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 246, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "member", | ||||||
|  |                 "profile" | ||||||
|  |             ], | ||||||
|  |             "query": "{}", | ||||||
|  |             "type": "change", | ||||||
|  |             "mask": 3, | ||||||
|  |             "field": "ml_sport_registration", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Modifier l'abonnement à la Newsletter Sport pour n'importe quel profil" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 247, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "activity", | ||||||
|  |                 "guest" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"activity__organizer\": [\"club\"]}", | ||||||
|  |             "type": "view", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Voir les personnes invitées aux événements organisés par son club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 248, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "auth", | ||||||
|  |                 "user" | ||||||
|  |             ], | ||||||
|  |             "query": "[\"NOT\", {\"pk__isnull\": [\"user\", \"note\", \"activity_responsible\", [\"filter\", {\"activity__open\": true, \"activity__activity_type__manage_entries\":true}], [\"exists\"]]}]", | ||||||
|  |             "type": "view", | ||||||
|  |             "mask": 3, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Voir n'importe quel⋅le utilisateur⋅rice pour les ouvreur⋅ses" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 249, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "note", | ||||||
|  |                 "note" | ||||||
|  |             ], | ||||||
|  |             "query": "[\"NOT\", {\"pk__isnull\": [\"user\", \"note\", \"activity_responsible\", [\"filter\", {\"activity__open\": true, \"activity__activity_type__manage_entries\":true}], [\"exists\"]]}]", | ||||||
|  |             "type": "view", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Voir toutes les notes lorsque utilisateur⋅rice est ouvreur⋅ses" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 250, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "activity", | ||||||
|  |                 "guest" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"activity__organizer\": [\"club\"]}", | ||||||
|  |             "type": "delete", | ||||||
|  |             "mask": 1, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Supprimer des personnes invitées aux événements organisés par son club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 251, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "activity", | ||||||
|  |                 "opener" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"activity__organizer\": [\"club\"]}", | ||||||
|  |             "type": "view", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Voir les ouvreur⋅ses des activités organisées par son club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 252, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "activity", | ||||||
|  |                 "opener" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"activity__organizer\": [\"club\"]}", | ||||||
|  |             "type": "add", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Ajouter des ouvreur⋅ses aux activités organisées par son club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 253, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "activity", | ||||||
|  |                 "opener" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"activity__organizer\": [\"club\"]}", | ||||||
|  |             "type": "delete", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Supprimer des ouvreur⋅ses aux activités organisées par son club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "permission.permission", | ||||||
|  |         "pk": 254, | ||||||
|  |         "fields": { | ||||||
|  |             "model": [ | ||||||
|  |                 "activity", | ||||||
|  |                 "activity" | ||||||
|  |             ], | ||||||
|  |             "query": "{\"organizer\": [\"club\"]}", | ||||||
|  |             "type": "change", | ||||||
|  |             "mask": 2, | ||||||
|  |             "field": "opener", | ||||||
|  |             "permanent": false, | ||||||
|  |             "description": "Voir le tableau des ouvreur⋅ses pour les activités organisées par son club" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "model": "permission.role", |         "model": "permission.role", | ||||||
|         "pk": 1, |         "pk": 1, | ||||||
| @@ -3849,7 +4057,9 @@ | |||||||
|                 203, |                 203, | ||||||
|                 204, |                 204, | ||||||
|                 205, |                 205, | ||||||
|                 206 |                 206, | ||||||
|  |                 248, | ||||||
|  |                 249 | ||||||
|             ] |             ] | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -279,7 +279,6 @@ class WEISurveyAlgorithm2024(WEISurveyAlgorithm): | |||||||
|         # surveys = [s for s in surveys if s.bus_id != None] |         # surveys = [s for s in surveys if s.bus_id != None] | ||||||
|         # surveys = [s for s in surveys if not hasattr(s.information, 'hardcoded') or not s.information.hardcoded] |         # surveys = [s for s in surveys if not hasattr(s.information, 'hardcoded') or not s.information.hardcoded] | ||||||
|  |  | ||||||
|  |  | ||||||
|         # surveys = [s for s in surveys if s.registration.user_id in free_users] |         # surveys = [s for s in surveys if s.registration.user_id in free_users] | ||||||
|  |  | ||||||
|         # hardcoded_first_year_mb = WEIMembership.objects.filter(bus != None,registration__first_year=True) |         # hardcoded_first_year_mb = WEIMembership.objects.filter(bus != None,registration__first_year=True) | ||||||
| @@ -288,15 +287,13 @@ class WEISurveyAlgorithm2024(WEISurveyAlgorithm): | |||||||
|         hardcoded_first_year_mb = WEIMembership.objects.filter(registration__first_year=True) |         hardcoded_first_year_mb = WEIMembership.objects.filter(registration__first_year=True) | ||||||
|         hardcoded_first_year = {mb.user.id if mb.bus else None: mb.bus.id if mb.bus else None for mb in hardcoded_first_year_mb} |         hardcoded_first_year = {mb.user.id if mb.bus else None: mb.bus.id if mb.bus else None for mb in hardcoded_first_year_mb} | ||||||
|  |  | ||||||
|  |  | ||||||
|         # Reset previous algorithm run |         # Reset previous algorithm run | ||||||
|         for survey in surveys: |         for survey in surveys: | ||||||
|             survey.free() |             survey.free() | ||||||
|             if survey.registration.user_id in hardcoded_first_year.keys(): |             if survey.registration.user_id in hardcoded_first_year.keys(): | ||||||
|                 survey.select_bus(hardcoded_first_year[s.registration.user_id]) |                 survey.select_bus(hardcoded_first_year[survey.registration.user_id]) | ||||||
|             survey.save() |             survey.save() | ||||||
|  |  | ||||||
|  |  | ||||||
|         non_men = [s for s in surveys if s.registration.gender != 'male'] |         non_men = [s for s in surveys if s.registration.gender != 'male'] | ||||||
|         men = [s for s in surveys if s.registration.gender == 'male'] |         men = [s for s in surveys if s.registration.gender == 'male'] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -795,11 +795,11 @@ msgstr "Masque de permissions" | |||||||
|  |  | ||||||
| #: apps/member/forms.py:46 | #: apps/member/forms.py:46 | ||||||
| msgid "Report frequency" | msgid "Report frequency" | ||||||
| msgstr "Fréquence des rapports (en jours)" | msgstr "Fréquence des relevés (en jours)" | ||||||
|  |  | ||||||
| #: apps/member/forms.py:48 | #: apps/member/forms.py:48 | ||||||
| msgid "Last report date" | msgid "Last report date" | ||||||
| msgstr "Date de dernier rapport" | msgstr "Date de dernier relevé" | ||||||
|  |  | ||||||
| #: apps/member/forms.py:52 | #: apps/member/forms.py:52 | ||||||
| msgid "" | msgid "" | ||||||
| @@ -1032,6 +1032,7 @@ msgid "" | |||||||
| "Register on the mailing list to stay informed of the sport events of the " | "Register on the mailing list to stay informed of the sport events of the " | ||||||
| "campus (1 mail/week)" | "campus (1 mail/week)" | ||||||
| msgstr "" | msgstr "" | ||||||
|  | "S'inscrire sur la liste de diffusion pour rester informé·e des actualités " | ||||||
| "sportives sur le campus (1 mail par semaine)" | "sportives sur le campus (1 mail par semaine)" | ||||||
|  |  | ||||||
| #: apps/member/models.py:113 | #: apps/member/models.py:113 | ||||||
| @@ -1044,11 +1045,11 @@ msgstr "" | |||||||
|  |  | ||||||
| #: apps/member/models.py:117 | #: apps/member/models.py:117 | ||||||
| msgid "report frequency (in days)" | msgid "report frequency (in days)" | ||||||
| msgstr "fréquence des rapports (en jours)" | msgstr "fréquence des relevés (en jours)" | ||||||
|  |  | ||||||
| #: apps/member/models.py:122 | #: apps/member/models.py:122 | ||||||
| msgid "last report date" | msgid "last report date" | ||||||
| msgstr "date de dernier rapport" | msgstr "date de dernier relevé" | ||||||
|  |  | ||||||
| #: apps/member/models.py:127 | #: apps/member/models.py:127 | ||||||
| msgid "email confirmed" | msgid "email confirmed" | ||||||
|   | |||||||
| @@ -26,3 +26,6 @@ MAILTO=notekfet2020@lists.crans.org | |||||||
|  00  9     *   *   *     root   cd /var/www/note_kfet && env/bin/python manage.py refresh_highlighted_buttons -v 0 |  00  9     *   *   *     root   cd /var/www/note_kfet && env/bin/python manage.py refresh_highlighted_buttons -v 0 | ||||||
| # Vider les tokens Oauth2 | # Vider les tokens Oauth2 | ||||||
|  00  6     *   *   *     root   cd /var/www/note_kfet && env/bin/python manage.py cleartokens -v 0 |  00  6     *   *   *     root   cd /var/www/note_kfet && env/bin/python manage.py cleartokens -v 0 | ||||||
|  | # Envoyer la liste des abonnés à la NL BDA | ||||||
|  |  00  10     *   *   0     root   cd /var/www/note_kfet && env/bin/python manage.py extract_ml_registrations -t art | ||||||
|  |   | ||||||
		Reference in New Issue
	
	Block a user