mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-30 23:39:54 +01:00 
			
		
		
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			delete_act
			...
			15c86c7497
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 15c86c7497 | ||
|  | 3bb99671ec | ||
|  | 0d69383dfd | ||
|  | 7b9ff119e8 | ||
|  | 108a56745c | ||
|  | 9643d7652b | ||
|  | dde1baa25c | ||
|  | 7a7ee47e0b | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -48,7 +48,6 @@ backups/ | |||||||
| env/ | env/ | ||||||
| venv/ | venv/ | ||||||
| db.sqlite3 | db.sqlite3 | ||||||
| shell.nix |  | ||||||
|  |  | ||||||
| # ansibles customs host | # ansibles customs host | ||||||
| ansible/host_vars/*.yaml | ansible/host_vars/*.yaml | ||||||
|   | |||||||
| @@ -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()) | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								shell-static.nix
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								shell-static.nix
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | # This is a workaround meant for use with the nix package manager. If you don't know what it is or don't use it, please ignore this file. | ||||||
|  | #  | ||||||
|  | # The nk20 javascript static location are hardcoded for imperative system. | ||||||
|  | # This make ./manage.py collectstatic hard to use with nixos. | ||||||
|  | #  | ||||||
|  | # A workaround is to enter a FHSUserEnv with the static placed under /share/javascript/<static>. | ||||||
|  | # This emulate a debian like system and enable collecting static normally with ./manage.py collectstatics. | ||||||
|  | # The regular shell.nix should be enough for other configurations. | ||||||
|  | # | ||||||
|  | # Warning, you are still supposed to use pip package with a venv ! | ||||||
|  | { pkgs ? import <nixpkgs> {} }: | ||||||
|  | (pkgs.buildFHSUserEnv { | ||||||
|  |   name = "pipzone"; | ||||||
|  |   targetPkgs = pkgs: (with pkgs; | ||||||
|  |   let | ||||||
|  |     fhs-static = stdenv.mkDerivation { | ||||||
|  |       name = "fhs-static"; | ||||||
|  |       buildCommand = '' | ||||||
|  |       mkdir -p $out/share/javascript/bootstrap4 | ||||||
|  |       mkdir -p $out/share/javascript/jquery | ||||||
|  |       ln -s ${python39Packages.xstatic-bootstrap}/lib/python3.9/site-packages/xstatic/pkg/bootstrap/data/* $out/share/javascript/bootstrap4 | ||||||
|  |       ln -s ${python39Packages.xstatic-jquery}/lib/python3.9/site-packages/xstatic/pkg/jquery/data/* $out/share/javascript/jquery | ||||||
|  |     ''; | ||||||
|  |     }; | ||||||
|  |   in [ | ||||||
|  |     fhs-static | ||||||
|  |     python39 | ||||||
|  |     gettext | ||||||
|  |     python39Packages.pip | ||||||
|  |     python39Packages.virtualenv | ||||||
|  |     python39Packages.setuptools | ||||||
|  |   ]); | ||||||
|  |   runScript = "bash"; | ||||||
|  | }).env | ||||||
							
								
								
									
										23
									
								
								shell.nix
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								shell.nix
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | # This is meant for use with the nix package manager. If you don't know what it is or don't use it, please ignore this file. | ||||||
|  | # | ||||||
|  | # This shell.nix contains all dependencies require to create a venv and pip install -r requirements.txt. | ||||||
|  | # | ||||||
|  | # Please check shell-static.nix for running ./manage.py collectstatics. | ||||||
|  | { pkgs ? import <nixpkgs> {} }: | ||||||
|  | pkgs.mkShell { | ||||||
|  |   buildInputs = with pkgs; [ | ||||||
|  |     python39 | ||||||
|  |     python39Packages.pip | ||||||
|  |     python39Packages.setuptools | ||||||
|  |     gettext | ||||||
|  |  | ||||||
|  |   ]; | ||||||
|  |   shellHook = '' | ||||||
|  |     # Tells pip to put packages into $PIP_PREFIX instead of the usual locations. | ||||||
|  |     # See https://pip.pypa.io/en/stable/user_guide/#environment-variables. | ||||||
|  |     export PIP_PREFIX=$(pwd)/_build/pip_packages | ||||||
|  |     export PYTHONPATH="$PIP_PREFIX/${pkgs.python39.sitePackages}:$PYTHONPATH" | ||||||
|  |     export PATH="$PIP_PREFIX/bin:$PATH" | ||||||
|  |     unset SOURCE_DATE_EPOCH | ||||||
|  |   ''; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user