diff --git a/apps/food/forms.py b/apps/food/forms.py index fa926c37..fc88cbe2 100644 --- a/apps/food/forms.py +++ b/apps/food/forms.py @@ -181,6 +181,11 @@ class ManageIngredientsForm(forms.Form): ) qrcode.label = _('QR code number') + add_all_same_name = forms.BooleanField( + required=False, + label=_("Add all identical food") + ) + ManageIngredientsFormSet = forms.formset_factory( ManageIngredientsForm, diff --git a/apps/food/templates/food/manage_ingredients.html b/apps/food/templates/food/manage_ingredients.html index 0dd7acb5..54b03dd1 100644 --- a/apps/food/templates/food/manage_ingredients.html +++ b/apps/food/templates/food/manage_ingredients.html @@ -22,6 +22,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {{ form.name.label }} {{ form.qrcode.label }} {{ form.fully_used.label }} + {{ form.add_all_same_name.label }} @@ -34,6 +35,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {{ form.name }} {{ form.qrcode }} {{ form.fully_used }} + {{ form.add_all_same_name }} {% endfor %} diff --git a/apps/food/views.py b/apps/food/views.py index 6a2cebfa..517142ff 100644 --- a/apps/food/views.py +++ b/apps/food/views.py @@ -307,11 +307,19 @@ class ManageIngredientsView(LoginRequiredMixin, UpdateView): elif form.data[prefix + 'name'] != '': ingredient = Food.objects.get(pk=form.data[prefix + 'name']) - self.object.ingredients.add(ingredient) - if (prefix + 'fully_used') in form.data and form.data[prefix + 'fully_used'] == 'on': - ingredient.end_of_life = _('Fully used in {meal}'.format( - meal=self.object.name)) - ingredient.save() + if form.data.get(prefix + 'add_all_same_name') == 'on': + ingredients = Food.objects.filter(name=ingredient.name, owner=ingredient.owner, end_of_life='') + for ingredient in ingredients: + self.object.ingredients.add(ingredient) + if form.data.get(prefix + 'fully_used') == 'on': + ingredient.end_of_life = _('Fully used in {meal}'.format(meal=self.object.name)) + ingredient.save() + else: + self.object.ingredients.add(ingredient) + if (prefix + 'fully_used') in form.data and form.data[prefix + 'fully_used'] == 'on': + ingredient.end_of_life = _('Fully used in {meal}'.format( + meal=self.object.name)) + 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()