mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 15:50:03 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			potvieux
			...
			586794ca20
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 586794ca20 | 
| @@ -201,8 +201,8 @@ class Entry(models.Model): | |||||||
|     def save(self, *args, **kwargs): |     def save(self, *args, **kwargs): | ||||||
|         qs = Entry.objects.filter(~Q(pk=self.pk), activity=self.activity, note=self.note, guest=self.guest) |         qs = Entry.objects.filter(~Q(pk=self.pk), activity=self.activity, note=self.note, guest=self.guest) | ||||||
|         if qs.exists(): |         if qs.exists(): | ||||||
|             raise ValidationError(_("Already entered on ") |             raise ValidationError(_("Already entered on ") + | ||||||
|                                   + _("{:%Y-%m-%d %H:%M:%S}").format(timezone.localtime(qs.get().time), )) |                                   _("{:%Y-%m-%d %H:%M:%S}").format(timezone.localtime(qs.get().time), )) | ||||||
|  |  | ||||||
|         if self.guest: |         if self.guest: | ||||||
|             self.note = self.guest.inviter |             self.note = self.guest.inviter | ||||||
|   | |||||||
| @@ -1,8 +1,6 @@ | |||||||
| # Copyright (C) 2018-2025 by BDE ENS Paris-Saclay | # Copyright (C) 2018-2025 by BDE ENS Paris-Saclay | ||||||
| # SPDX-License-Identifier: GPL-3.0-or-later | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  |  | ||||||
| import datetime |  | ||||||
|  |  | ||||||
| from django.utils import timezone | from django.utils import timezone | ||||||
| from django.utils.html import escape | from django.utils.html import escape | ||||||
| from django.utils.safestring import mark_safe | from django.utils.safestring import mark_safe | ||||||
| @@ -79,9 +77,6 @@ def get_row_class(record): | |||||||
|             c += " table-info" |             c += " table-info" | ||||||
|         elif record.note.balance < 0: |         elif record.note.balance < 0: | ||||||
|             c += " table-danger" |             c += " table-danger" | ||||||
|         # MODE VIEUXCON=ON |  | ||||||
|         if (datetime.datetime.utcnow().timestamp() - record.note.created_at.timestamp()) > 3600 * 24 * 365 * 2.5: |  | ||||||
|             c += " font-weight-bold underline" |  | ||||||
|     return c |     return c | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -264,22 +264,13 @@ class ActivityEntryView(LoginRequiredMixin, SingleTableMixin, TemplateView): | |||||||
|                                          balance=F("note__balance")) |                                          balance=F("note__balance")) | ||||||
|  |  | ||||||
|         # Keep only users that have a note |         # Keep only users that have a note | ||||||
|         note_qs = note_qs.filter(note__noteuser__isnull=False).exclude(note__inactivity_reason='forced') |         note_qs = note_qs.filter(note__noteuser__isnull=False) | ||||||
|  |  | ||||||
|         if activity.activity_type.name != "Pot Vieux": |  | ||||||
|             # Keep only members |  | ||||||
|             note_qs = note_qs.filter( |  | ||||||
|                 note__noteuser__user__memberships__club=activity.attendees_club, |  | ||||||
|                 note__noteuser__user__memberships__date_start__lte=timezone.now(), |  | ||||||
|                 note__noteuser__user__memberships__date_end__gte=timezone.now(), |  | ||||||
|             ) |  | ||||||
|  |  | ||||||
|         # Keep only valid members |         # Keep only valid members | ||||||
| #        note_qs = note_qs.filter( |         note_qs = note_qs.filter( | ||||||
| #            note__noteuser__user__memberships__club=activity.attendees_club, |             note__noteuser__user__memberships__club=activity.attendees_club, | ||||||
| #            note__noteuser__user__memberships__date_start__lte=timezone.now(), |             note__noteuser__user__memberships__date_start__lte=timezone.now(), | ||||||
| #            note__noteuser__user__memberships__date_end__gte=timezone.now(), |             note__noteuser__user__memberships__date_end__gte=timezone.now()).exclude(note__inactivity_reason='forced') | ||||||
| #       ) |  | ||||||
|  |  | ||||||
|         # Filter with permission backend |         # Filter with permission backend | ||||||
|         note_qs = note_qs.filter(PermissionBackend.filter_queryset(self.request, Alias, "view")) |         note_qs = note_qs.filter(PermissionBackend.filter_queryset(self.request, Alias, "view")) | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ from .models import Profile, Club, Membership | |||||||
| class CustomAuthenticationForm(AuthenticationForm): | class CustomAuthenticationForm(AuthenticationForm): | ||||||
|     permission_mask = forms.ModelChoiceField( |     permission_mask = forms.ModelChoiceField( | ||||||
|         label=_("Permission mask"), |         label=_("Permission mask"), | ||||||
|         queryset=PermissionMask.objects.order_by("-rank"), |         queryset=PermissionMask.objects.order_by("rank"), | ||||||
|         empty_label=None, |         empty_label=None, | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,14 +20,12 @@ SPDX-License-Identifier: GPL-3.0-or-later | |||||||
|       </form> |       </form> | ||||||
|     </div> |     </div> | ||||||
|     <!-- MODAL TO CROP THE IMAGE --> |     <!-- MODAL TO CROP THE IMAGE --> | ||||||
|     <div class="modal fade" id="modalCrop" data-backdrop="static"> |     <div class="modal fade" id="modalCrop"> | ||||||
|       <div class="modal-dialog"> |       <div class="modal-dialog"> | ||||||
|         <div class="modal-content"> |         <div class="modal-content"> | ||||||
|             <div class="modal-body-wrapper" style="width: 500px; height: 500px; padding: 16px;"> |           <div class="modal-body"> | ||||||
|               <div class="modal-body" style="width: 100%; height: 100%; padding: 0"> |             <img src="" id="modal-image" style="max-width: 100%;"> | ||||||
|                 <img src="" id="modal-image" style="display: block; max-width: 100%;"> |           </div> | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           <div class="modal-footer"> |           <div class="modal-footer"> | ||||||
|             <div class="btn-group pull-left" role="group"> |             <div class="btn-group pull-left" role="group"> | ||||||
|               <button type="button" class="btn btn-default" id="js-zoom-in"> |               <button type="button" class="btn btn-default" id="js-zoom-in"> | ||||||
|   | |||||||
| @@ -89,7 +89,7 @@ SPDX-License-Identifier: GPL-2.0-or-later | |||||||
|                 </ul> |                 </ul> | ||||||
|                 <div class="card-body"> |                 <div class="card-body"> | ||||||
|                     <select id="debit_type" class="form-control custom-select d-none"> |                     <select id="debit_type" class="form-control custom-select d-none"> | ||||||
|                         {% for special_type in special_types|slice:"::-1" %} |                         {% for special_type in special_types %} | ||||||
|                             <option value="{{ special_type.id }}">{{ special_type.special_type }}</option> |                             <option value="{{ special_type.id }}">{{ special_type.special_type }}</option> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                     </select> |                     </select> | ||||||
|   | |||||||
| @@ -3815,8 +3815,8 @@ | |||||||
|             "mask": 2, |             "mask": 2, | ||||||
|             "field": "", |             "field": "", | ||||||
|             "permanent": false, |             "permanent": false, | ||||||
|             "description": "Créer une transaction vers la note d'un club" |             "description": "Créer une transaction vers la note d'un club tant que la source reste au dessus de -20 €" | ||||||
| 	} |         } | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         "model": "permission.permission", |         "model": "permission.permission", | ||||||
| @@ -4812,10 +4812,8 @@ | |||||||
|                 168, |                 168, | ||||||
|                 176, |                 176, | ||||||
|                 177, |                 177, | ||||||
| 		178, |  | ||||||
|                 197, |                 197, | ||||||
|                 211, |                 211 | ||||||
| 		244 |  | ||||||
|             ] |             ] | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -1,18 +0,0 @@ | |||||||
| # Generated by Django 4.2.20 on 2025-04-14 20:21 |  | ||||||
|  |  | ||||||
| from django.db import migrations, models |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
|  |  | ||||||
|     dependencies = [ |  | ||||||
|         ('treasury', '0009_alter_sogecredit_transactions'), |  | ||||||
|     ] |  | ||||||
|  |  | ||||||
|     operations = [ |  | ||||||
|         migrations.AlterField( |  | ||||||
|             model_name='invoice', |  | ||||||
|             name='bde', |  | ||||||
|             field=models.CharField(choices=[('Diolistos', 'Diol[list]os'), ('RavePartlist', 'RavePart[list]'), ('SecretStorlist', 'SecretStor[list]'), ('TotalistSpies', 'Tota[list]Spies'), ('Saperlistpopette', 'Saper[list]popette'), ('Finalist', 'Fina[list]'), ('Listorique', '[List]orique'), ('Satellist', 'Satel[list]'), ('Monopolist', 'Monopo[list]'), ('Kataclist', 'Katac[list]')], default='Diolistos', max_length=32, verbose_name='BDE'), |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
| @@ -27,9 +27,8 @@ class Invoice(models.Model): | |||||||
|  |  | ||||||
|     bde = models.CharField( |     bde = models.CharField( | ||||||
|         max_length=32, |         max_length=32, | ||||||
|         default='Diolistos', |         default='RavePartlist', | ||||||
|         choices=( |         choices=( | ||||||
|             ('Diolistos', 'Diol[list]os'), |  | ||||||
|             ('RavePartlist', 'RavePart[list]'), |             ('RavePartlist', 'RavePart[list]'), | ||||||
|             ('SecretStorlist', 'SecretStor[list]'), |             ('SecretStorlist', 'SecretStor[list]'), | ||||||
|             ('TotalistSpies', 'Tota[list]Spies'), |             ('TotalistSpies', 'Tota[list]Spies'), | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 2.8 MiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 284 KiB | 
| @@ -27,5 +27,5 @@ MAILTO=notekfet2020@lists.crans.org | |||||||
| # 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 | # 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 -e "bda.ensparissaclay@gmail.com" |  00  10     *   *   0     root   cd /var/www/note_kfet && env/bin/python manage.py extract_ml_registrations -t art | ||||||
|   |   | ||||||
							
								
								
									
										96
									
								
								note_kfet/static/css/custom.css
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										96
									
								
								note_kfet/static/css/custom.css
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -61,16 +61,20 @@ mark { | |||||||
| /* Make navbar more readable */ | /* Make navbar more readable */ | ||||||
| .navbar-dark .navbar-nav .nav-link { | .navbar-dark .navbar-nav .nav-link { | ||||||
|     color: rgba(255, 255, 255, .75); |     color: rgba(255, 255, 255, .75); | ||||||
|     /* text-shadow: 2px 2px 15px #ffeb40; */ |     text-shadow: 2px 2px 15px #ffeb40; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* .navbar-brand { */ | .navbar-brand { | ||||||
| /*     text-shadow: 2px 2px 15px #ffeb40; */ |     text-shadow: 2px 2px 15px #ffeb40; | ||||||
| /* } | } | ||||||
|  |  | ||||||
| /* Last BDE colors */ | /* Last BDE colors */ | ||||||
| .bg-primary { | .bg-primary { | ||||||
|     background-color: rgb(102, 83, 105) !important; | /*    background-color: rgb(18, 67, 4) !important; */ | ||||||
|  | /* MODE VIEUXCON=ON */ | ||||||
|  | /*    background-color: rgb(166, 0, 2) !important; */ | ||||||
|  |     background-color: rgb(0, 0, 0); | ||||||
|  |     background-image: url('/static/img/rp_bg.png'); | ||||||
| } | } | ||||||
|  |  | ||||||
| html { | html { | ||||||
| @@ -85,52 +89,94 @@ body { | |||||||
| .btn-outline-primary:hover, | .btn-outline-primary:hover, | ||||||
| .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:  rgb(0, 0, 0); | ||||||
|     background-color: rgb(102, 83, 105); |     background-color: rgb(255, 0, 101); | ||||||
|     border-color: rgb(102, 83, 105); |     border-color: rgb(255, 203, 32); | ||||||
| } | } | ||||||
|  |  | ||||||
| .btn-outline-primary { | .btn-outline-primary { | ||||||
|     color: rgb(102, 83, 105); |     color: #000; | ||||||
|     background-color: rgba(248, 249, 250, 0.9); |     background-color: #ffcb20; | ||||||
|     border-color: rgb(102, 83, 105); |     border-color: #000; | ||||||
| } | } | ||||||
|  |  | ||||||
| .turbolinks-progress-bar { | .turbolinks-progress-bar { | ||||||
|     background-color: #12432E; |     background-color: #ffffff; | ||||||
| } | } | ||||||
|  |  | ||||||
| .btn-primary:hover, | .btn-primary:hover, | ||||||
| .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:  rgb(0, 0, 0); | ||||||
|     background-color: rgb(102, 83, 105); |     background-color: rgb(255, 0, 101); | ||||||
|     border-color: rgb(102, 83, 105); |     border-color: rgb(255, 203, 32); | ||||||
| } | } | ||||||
|  |  | ||||||
| .btn-primary { | .btn-primary { | ||||||
|     color: rgba(248, 249, 250, 0.9);  |     color:  #ffcb20;  | ||||||
|     background-color: rgb(102, 83, 105); |     background-color: #000000; | ||||||
|     border-color: rgb(102, 83, 105); |     border-color: #ffcd20; | ||||||
| } | } | ||||||
|  |  | ||||||
| .border-primary { | .border-primary { | ||||||
|     border-color: rgb(115, 15, 115) !important;  |     border-color: rgb(255, 255, 255) !important;  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-secondary { | ||||||
|  |     color:  #ff0065; | ||||||
|  |     background-color: #000000; | ||||||
|  |     border-color: #ff0065; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-secondary:hover, | ||||||
|  | .btn-secondary:not(:disabled):not(.disabled).active, | ||||||
|  | .btn-secondary:not(:disabled):not(.disabled):active { | ||||||
|  |     color:  rgb(0, 0, 0); | ||||||
|  |     background-color: rgb(255, 203, 32); | ||||||
|  |     border-color: rgb(255, 0, 101); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-outline-dark-shiny { | ||||||
|  |     background-color: #222; | ||||||
|  |     border-color: #61605b; | ||||||
|  |     color: rgba(255, 0, 101, 75%); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-outline-dark-shiny:hover, | ||||||
|  | .btn-outline-dark-shiny:not(:disabled):not(.disabled).active, | ||||||
|  | .btn-outline-dark-shiny:not(:disabled):not(.disabled):active { | ||||||
|  |     color:  rgb(0, 0, 0); | ||||||
|  |     background-color: rgb(255, 203, 32); | ||||||
|  |     border-color: rgb(255, 0, 101); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-outline-dark { | ||||||
|  |     background-color: #222; | ||||||
|  |     border-color: #61605b; | ||||||
|  |     color: rgba(255, 203, 32, 75%); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-outline-dark:hover, | ||||||
|  | .btn-outline-dark:not(:disabled):not(.disabled).active, | ||||||
|  | .btn-outline-dark:not(:disabled):not(.disabled):active { | ||||||
|  |     color:  rgb(0, 0, 0); | ||||||
|  |     background-color: rgb(255, 0, 101); | ||||||
|  |     border-color: rgb(255, 203, 32); | ||||||
| } | } | ||||||
|  |  | ||||||
| a { | a { | ||||||
|     color: rgb(102, 83, 105); |     color: rgb(255, 0, 101); | ||||||
| } | } | ||||||
|  |  | ||||||
| a:hover { | a:hover { | ||||||
|     color: rgb(200, 30, 200); |     color: rgb(255, 203, 32); | ||||||
| } | } | ||||||
|  |  | ||||||
| .form-control:focus { | .form-control:focus { | ||||||
|     box-shadow: 0 0 0 0.25rem rgba(200, 30, 200, 0.25); |     box-shadow: 0 0 0 0.25rem rgb(255 0 101 / 50%); | ||||||
|     border-color: rgb(200, 30, 200); |     border-color: rgb(255, 0, 101); | ||||||
| } | } | ||||||
|  |  | ||||||
| .btn-outline-primary.focus { | .btn-outline-primary.focus { | ||||||
|   box-shadow: 0 0 0 0.25rem rgba(200, 30, 200, 0.5); |   box-shadow: 0 0 0 0.25rem rgb(255 203 32 / 22%); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -96,13 +96,11 @@ function displayStyle (note) { | |||||||
|   if (!note) { return '' } |   if (!note) { return '' } | ||||||
|   const balance = note.balance |   const balance = note.balance | ||||||
|   var css = '' |   var css = '' | ||||||
|   var ms_per_year = 31536000000 // 365 * 24 * 3600 * 1000 |  | ||||||
|   if (balance < -2000) { css += ' text-danger bg-dark' }  |   if (balance < -2000) { css += ' text-danger bg-dark' }  | ||||||
|   else if (balance < -1000) { css += ' text-danger' }  |   else if (balance < -1000) { css += ' text-danger' }  | ||||||
|   else if (balance < 0) { css += ' text-warning' } |   else if (balance < 0) { css += ' text-warning' } | ||||||
|   if (!note.email_confirmed) { css += ' bg-primary' } |   if (!note.email_confirmed) { css += ' bg-primary' } | ||||||
|   else if (!note.is_active || (note.membership && note.membership.date_end < new Date().toISOString())) { css += ' bg-info' } |   else if (!note.is_active || (note.membership && note.membership.date_end < new Date().toISOString())) { css += ' bg-info' } | ||||||
|   if (((Date.now() - Date.parse(note.created_at))/ms_per_year) > 2.5) { css += ' font-weight-bold underline' } |  | ||||||
|   return css |   return css | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -164,12 +164,7 @@ SPDX-License-Identifier: GPL-3.0-or-later | |||||||
|         </div> |         </div> | ||||||
|     </nav> |     </nav> | ||||||
|     <div class="{% block containertype %}container{% endblock %} my-3"> |     <div class="{% block containertype %}container{% endblock %} my-3"> | ||||||
|         <div id="messages"> | 	<div id="messages"> | ||||||
| 	    {% if user.is_authenticated %} |  | ||||||
| 	    	<div class="alert alert-info"> |  | ||||||
| 		    Bravo pour votre diplomation les survis ! |  | ||||||
| 		</div> |  | ||||||
| 	    {% endif %} |  | ||||||
|             {% if user.is_authenticated %} |             {% if user.is_authenticated %} | ||||||
|                 {% if not user|is_member:"BDE" %} |                 {% if not user|is_member:"BDE" %} | ||||||
|                     <div class="alert alert-danger"> |                     <div class="alert alert-danger"> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user