mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 07:49:57 +01:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			5a7dadbe5d
			...
			darbonne
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 5a8acbde00 | ||
|  | f60dc8cfa0 | ||
|  | 067dd6f9d1 | ||
|  | 7b1e32e514 | ||
|  | 3d34270959 | ||
|  | 3bb99671ec | ||
|  | 0d69383dfd | ||
|  | 7b9ff119e8 | ||
|  | 108a56745c | 
| @@ -168,7 +168,8 @@ class BasicFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): | |||||||
|     template_name = "food/food_update.html" |     template_name = "food/food_update.html" | ||||||
|  |  | ||||||
|     def get_sample_object(self): |     def get_sample_object(self): | ||||||
|         return BasicFood( |         # We choose a club which may work or BDE else | ||||||
|  |         food = BasicFood( | ||||||
|             name="", |             name="", | ||||||
|             owner_id=1, |             owner_id=1, | ||||||
|             expiry_date=timezone.now(), |             expiry_date=timezone.now(), | ||||||
| @@ -177,6 +178,14 @@ class BasicFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): | |||||||
|             date_type='DLC', |             date_type='DLC', | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  |         for membership in self.request.user.memberships.all(): | ||||||
|  |             club_id = membership.club.id | ||||||
|  |             food.owner_id = club_id | ||||||
|  |             if PermissionBackend.check_perm(self.request, "food.add_basicfood", food): | ||||||
|  |                 return food | ||||||
|  |  | ||||||
|  |         return food | ||||||
|  |  | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def form_valid(self, form): |     def form_valid(self, form): | ||||||
|         if QRCode.objects.filter(qr_code_number=self.kwargs['slug']).count() > 0: |         if QRCode.objects.filter(qr_code_number=self.kwargs['slug']).count() > 0: | ||||||
| @@ -227,13 +236,22 @@ class TransformedFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): | |||||||
|     template_name = "food/food_update.html" |     template_name = "food/food_update.html" | ||||||
|  |  | ||||||
|     def get_sample_object(self): |     def get_sample_object(self): | ||||||
|         return TransformedFood( |         # We choose a club which may work or BDE else | ||||||
|  |         food = TransformedFood( | ||||||
|             name="", |             name="", | ||||||
|             owner_id=1, |             owner_id=1, | ||||||
|             expiry_date=timezone.now(), |             expiry_date=timezone.now(), | ||||||
|             is_ready=True, |             is_ready=True, | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  |         for membership in self.request.user.memberships.all(): | ||||||
|  |             club_id = membership.club.id | ||||||
|  |             food.owner_id = club_id | ||||||
|  |             if PermissionBackend.check_perm(self.request, "food.add_transformedfood", food): | ||||||
|  |                 return food | ||||||
|  |  | ||||||
|  |         return food | ||||||
|  |  | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def form_valid(self, form): |     def form_valid(self, form): | ||||||
|         form.instance.expiry_date = timezone.now() + timedelta(days=3) |         form.instance.expiry_date = timezone.now() + timedelta(days=3) | ||||||
| @@ -245,10 +263,10 @@ class TransformedFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): | |||||||
|         return reverse_lazy('food:transformedfood_view', kwargs={"pk": self.object.pk}) |         return reverse_lazy('food:transformedfood_view', kwargs={"pk": self.object.pk}) | ||||||
|  |  | ||||||
|  |  | ||||||
| MAX_FORMS = 10 | MAX_FORMS = 100 | ||||||
|  |  | ||||||
|  |  | ||||||
| class ManageIngredientsView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): | class ManageIngredientsView(LoginRequiredMixin, UpdateView): | ||||||
|     """ |     """ | ||||||
|     A view to manage ingredient for a transformed food |     A view to manage ingredient for a transformed food | ||||||
|     """ |     """ | ||||||
| @@ -279,6 +297,14 @@ class ManageIngredientsView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView | |||||||
|                     ingredient.end_of_life = _('Fully used in {meal}'.format( |                     ingredient.end_of_life = _('Fully used in {meal}'.format( | ||||||
|                         meal=self.object.name)) |                         meal=self.object.name)) | ||||||
|                     ingredient.save() |                     ingredient.save() | ||||||
|  |         # We recalculate new expiry date and allergens | ||||||
|  |         self.object.expiry_date = self.object.creation_date + self.object.shelf_life | ||||||
|  |         self.object.allergens.clear() | ||||||
|  |  | ||||||
|  |         for ingredient in self.object.ingredients.iterator(): | ||||||
|  |             if not (ingredient.polymorphic_ctype.model == 'basicfood' and ingredient.date_type == 'DDM'): | ||||||
|  |                 self.object.expiry_date = min(self.object.expiry_date, ingredient.expiry_date) | ||||||
|  |             self.object.allergens.set(self.object.allergens.union(ingredient.allergens.all())) | ||||||
|  |  | ||||||
|         self.object.save(old_ingredients=old_ingredients, old_allergens=old_allergens) |         self.object.save(old_ingredients=old_ingredients, old_allergens=old_allergens) | ||||||
|         return HttpResponseRedirect(self.get_success_url()) |         return HttpResponseRedirect(self.get_success_url()) | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								apps/member/migrations/0014_create_bda.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								apps/member/migrations/0014_create_bda.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | from django.db import migrations | ||||||
|  |  | ||||||
|  | def create_bda(apps, schema_editor): | ||||||
|  |     """ | ||||||
|  |     The club BDA is now pre-injected. | ||||||
|  |     """ | ||||||
|  |     Club = apps.get_model("member", "club") | ||||||
|  |     NoteClub = apps.get_model("note", "noteclub") | ||||||
|  |     Alias = apps.get_model("note", "alias") | ||||||
|  |     ContentType = apps.get_model('contenttypes', 'ContentType') | ||||||
|  |     polymorphic_ctype_id = ContentType.objects.get_for_model(NoteClub).id | ||||||
|  |      | ||||||
|  |     Club.objects.get_or_create( | ||||||
|  |         id=10, | ||||||
|  |         name="BDA", | ||||||
|  |         email="bda.ensparissaclay@gmail.com", | ||||||
|  |         require_memberships=True, | ||||||
|  |         membership_fee_paid=750, | ||||||
|  |         membership_fee_unpaid=750, | ||||||
|  |         membership_duration=396, | ||||||
|  |         membership_start="2024-08-01", | ||||||
|  |         membership_end="2025-09-30", | ||||||
|  |     ) | ||||||
|  |     NoteClub.objects.get_or_create( | ||||||
|  |         id=1937, | ||||||
|  |         club_id=10, | ||||||
|  |         polymorphic_ctype_id=polymorphic_ctype_id, | ||||||
|  |     ) | ||||||
|  |     Alias.objects.get_or_create( | ||||||
|  |         id=1937, | ||||||
|  |         note_id=1937, | ||||||
|  |         name="BDA", | ||||||
|  |         normalized_name="bda", | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ('member', '0013_auto_20240801_1436'), | ||||||
|  |     ] | ||||||
|  |      | ||||||
|  |     operations = [ | ||||||
|  |         migrations.RunPython(create_bda), | ||||||
|  |     ] | ||||||
|  |  | ||||||
| @@ -4152,8 +4152,8 @@ | |||||||
|             "name": "Pr\u00e9sident\u22c5e de club", |             "name": "Pr\u00e9sident\u22c5e de club", | ||||||
|             "permissions": [ |             "permissions": [ | ||||||
|                 62, |                 62, | ||||||
|                 142, |                 135, | ||||||
|                 135 |                 142 | ||||||
|             ] |             ] | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
| @@ -4562,6 +4562,133 @@ | |||||||
|             ] |             ] | ||||||
|         } |         } | ||||||
|     },   |     },   | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 23, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": 2, | ||||||
|  |             "name": "Darbonne", | ||||||
|  |             "permissions": [ | ||||||
|  |                 30, | ||||||
|  |                 31, | ||||||
|  |                 32 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 24, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": null, | ||||||
|  |             "name": "Staffeur⋅euse (S&L,Respo Tech,...)", | ||||||
|  |             "permissions": [] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 25, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": null, | ||||||
|  |             "name": "Référent⋅e Bus", | ||||||
|  |             "permissions": [ | ||||||
|  |                 22, | ||||||
|  |                 84, | ||||||
|  |                 115, | ||||||
|  |                 117, | ||||||
|  |                 118, | ||||||
|  |                 119, | ||||||
|  |                 120, | ||||||
|  |                 121, | ||||||
|  |                 122 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 28, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": 10, | ||||||
|  |             "name": "Trésorièr⸱e BDA", | ||||||
|  |             "permissions": [ | ||||||
|  |                 55, | ||||||
|  |                 56, | ||||||
|  |                 57, | ||||||
|  |                 58, | ||||||
|  |                 135, | ||||||
|  |                 143, | ||||||
|  |                 176, | ||||||
|  |                 177, | ||||||
|  |                 178, | ||||||
|  |                 243, | ||||||
|  |                 260, | ||||||
|  |                 261, | ||||||
|  |                 262, | ||||||
|  |                 263, | ||||||
|  |                 264, | ||||||
|  |                 265, | ||||||
|  |                 266, | ||||||
|  |                 267, | ||||||
|  |                 268, | ||||||
|  |                 269 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 30, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": 10, | ||||||
|  |             "name": "Respo sorties", | ||||||
|  |             "permissions": [ | ||||||
|  |                 49,  | ||||||
|  |                 62,  | ||||||
|  |                 141,  | ||||||
|  |                 241,  | ||||||
|  |                 242,  | ||||||
|  |                 243 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 31, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": 1, | ||||||
|  |             "name": "Respo comm", | ||||||
|  |             "permissions": [ | ||||||
|  |                 135, | ||||||
|  |                 244 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 32, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": 10, | ||||||
|  |             "name": "Respo comm Art", | ||||||
|  |             "permissions": [ | ||||||
|  |                 135, | ||||||
|  |                 245 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|  |     { | ||||||
|  |         "model": "permission.role", | ||||||
|  |         "pk": 33, | ||||||
|  |             "fields": { | ||||||
|  |             "for_club": 10, | ||||||
|  |             "name": "Respo Jam", | ||||||
|  |             "permissions": [ | ||||||
|  |                 247,  | ||||||
|  |                 250,  | ||||||
|  |                 251,  | ||||||
|  |                 252,  | ||||||
|  |                 253,  | ||||||
|  |                 254 | ||||||
|  |             ] | ||||||
|  |         } | ||||||
|  |     },  | ||||||
|     { |     { | ||||||
|         "model": "wei.weirole", |         "model": "wei.weirole", | ||||||
|         "pk": 12, |         "pk": 12, | ||||||
| @@ -4596,5 +4723,15 @@ | |||||||
|         "model": "wei.weirole", |         "model": "wei.weirole", | ||||||
|         "pk": 18, |         "pk": 18, | ||||||
|         "fields": {} |         "fields": {} | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "wei.weirole", | ||||||
|  |         "pk": 24, | ||||||
|  |         "fields": {} | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "model": "wei.weirole", | ||||||
|  |         "pk": 25, | ||||||
|  |         "fields": {} | ||||||
|     } |     } | ||||||
| ] | ] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user