mirror of https://gitlab.crans.org/bde/nk20
Open table and shelf life
This commit is contained in:
parent
980bdb6fd8
commit
7f12ee63f2
|
@ -89,7 +89,7 @@ class TransformedFoodForms(forms.ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TransformedFood
|
model = TransformedFood
|
||||||
fields = ('name', 'creation_date', 'owner', 'is_active')
|
fields = ('name', 'creation_date', 'owner', 'is_active', 'shelf_life')
|
||||||
widgets = {
|
widgets = {
|
||||||
"owner": Autocomplete(
|
"owner": Autocomplete(
|
||||||
model=Club,
|
model=Club,
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Generated by Django 2.2.28 on 2024-07-06 20:37
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('food', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='transformedfood',
|
||||||
|
name='shelf_life',
|
||||||
|
field=models.DurationField(default=datetime.timedelta(days=3), verbose_name='shelf life'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -165,6 +165,12 @@ class TransformedFood(Food):
|
||||||
verbose_name=_('is active'),
|
verbose_name=_('is active'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Without microbiological analyzes, the storage time is 3 days
|
||||||
|
shelf_life = models.DurationField(
|
||||||
|
verbose_name=_("shelf life"),
|
||||||
|
default=timedelta(days=3),
|
||||||
|
)
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def update_allergens(self):
|
def update_allergens(self):
|
||||||
# When allergens are changed, simply update the parents' allergens
|
# When allergens are changed, simply update the parents' allergens
|
||||||
|
@ -185,7 +191,7 @@ class TransformedFood(Food):
|
||||||
def update_expiry_date(self):
|
def update_expiry_date(self):
|
||||||
# When expiry_date is changed, simply update the parents' expiry_date
|
# When expiry_date is changed, simply update the parents' expiry_date
|
||||||
old_expiry_date = self.expiry_date
|
old_expiry_date = self.expiry_date
|
||||||
self.expiry_date = self.creation_date + timedelta(days=3)
|
self.expiry_date = self.creation_date + self.shelf_life
|
||||||
for ingredient in self.ingredient.iterator():
|
for ingredient in self.ingredient.iterator():
|
||||||
self.expiry_date = min(self.expiry_date, ingredient.expiry_date)
|
self.expiry_date = min(self.expiry_date, ingredient.expiry_date)
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,18 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="card bg-light mb-3">
|
<div class="card bg-light mb-3">
|
||||||
<h3 class="card-header text-center">
|
|
||||||
Transformed food
|
|
||||||
</h3>
|
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<a class="btn btn-sm btn-success" href="{% url 'food:transformed_create' %}" data-turbolinks="false">
|
<a class="btn btn-sm btn-success" href="{% url 'food:transformed_create' %}" data-turbolinks="false">
|
||||||
New transformed food
|
New transformed food
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<h3 class="card-header text-center">
|
||||||
|
In preparation
|
||||||
|
</h3>
|
||||||
{% render_table table %}
|
{% render_table table %}
|
||||||
|
<h3 class="card-header text-center">
|
||||||
|
Open
|
||||||
|
</h3>
|
||||||
|
{% render_table open_table %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
|
# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
from datetime import timedelta
|
|
||||||
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
|
@ -234,12 +232,13 @@ class TransformedFoodFormView(ProtectQuerysetMixin):
|
||||||
|
|
||||||
# Save the aliment and allergens associated
|
# Save the aliment and allergens associated
|
||||||
transformed_food = form.save(commit=False)
|
transformed_food = form.save(commit=False)
|
||||||
# Without microbiological analyzes, the storage time is 3 days
|
transformed_food.expiry_date = transformed_food.creation_date
|
||||||
transformed_food.expiry_date = transformed_food.creation_date + timedelta(days=3)
|
|
||||||
transformed_food._force_save = True
|
transformed_food._force_save = True
|
||||||
transformed_food.save()
|
transformed_food.save()
|
||||||
transformed_food.refresh_from_db()
|
transformed_food.refresh_from_db()
|
||||||
return super().form_valid(form)
|
ans = super().form_valid(form)
|
||||||
|
transformed_food.update()
|
||||||
|
return ans
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
def get_success_url(self, **kwargs):
|
||||||
self.object.refresh_from_db()
|
self.object.refresh_from_db()
|
||||||
|
@ -260,14 +259,24 @@ class TransformedFoodCreateView(TransformedFoodFormView, ProtectedCreateView):
|
||||||
|
|
||||||
class TransfomedListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
class TransfomedListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
||||||
"""
|
"""
|
||||||
Displays all Activities, and classify if they are on-going or upcoming ones.
|
Displays not ready TransformedFood
|
||||||
"""
|
"""
|
||||||
model = TransformedFood
|
model = TransformedFood
|
||||||
table_class = TransformedFoodTable
|
table_class = TransformedFoodTable
|
||||||
ordering = ('-name',)
|
ordering = ('name',)
|
||||||
extra_context = {"title": _("Transformed food")}
|
extra_context = {"title": _("Transformed food")}
|
||||||
|
|
||||||
def get_queryset(self, **kwargs):
|
def get_queryset(self, **kwargs):
|
||||||
return super().get_queryset(**kwargs)\
|
return super().get_queryset(**kwargs)\
|
||||||
.filter(is_ready=False)\
|
.filter(is_ready=False)\
|
||||||
.distinct()
|
.distinct()
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context['open_table'] = TransformedFoodTable(
|
||||||
|
TransformedFood.objects.filter(
|
||||||
|
was_eaten=False,
|
||||||
|
expiry_date__lt=timezone.now()
|
||||||
|
),
|
||||||
|
prefix="open-")
|
||||||
|
return context
|
||||||
|
|
Loading…
Reference in New Issue