diff --git a/apps/food/views.py b/apps/food/views.py index d9556ef6..c0362df2 100644 --- a/apps/food/views.py +++ b/apps/food/views.py @@ -168,7 +168,8 @@ class BasicFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): template_name = "food/food_update.html" def get_sample_object(self): - return BasicFood( + # We choose a club which may work or BDE else + food = BasicFood( name="", owner_id=1, expiry_date=timezone.now(), @@ -177,6 +178,14 @@ class BasicFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): 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 def form_valid(self, form): 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" def get_sample_object(self): - return TransformedFood( + # We choose a club which may work or BDE else + food = TransformedFood( name="", owner_id=1, expiry_date=timezone.now(), 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 def form_valid(self, form): form.instance.expiry_date = timezone.now() + timedelta(days=3) @@ -248,7 +266,7 @@ class TransformedFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView): MAX_FORMS = 10 -class ManageIngredientsView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): +class ManageIngredientsView(LoginRequiredMixin, UpdateView): """ 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( 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() + + 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) return HttpResponseRedirect(self.get_success_url())