mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-06-21 09:58:23 +02:00
Compare commits
10 Commits
delete_act
...
darbonne
Author | SHA1 | Date | |
---|---|---|---|
5a8acbde00 | |||
f60dc8cfa0 | |||
067dd6f9d1 | |||
7b1e32e514 | |||
3d34270959 | |||
3bb99671ec | |||
0d69383dfd | |||
7b9ff119e8 | |||
108a56745c | |||
9643d7652b |
@ -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)
|
||||
@ -245,10 +263,10 @@ class TransformedFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView):
|
||||
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
|
||||
"""
|
||||
@ -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())
|
||||
|
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",
|
||||
"permissions": [
|
||||
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",
|
||||
"pk": 12,
|
||||
@ -4596,5 +4723,15 @@
|
||||
"model": "wei.weirole",
|
||||
"pk": 18,
|
||||
"fields": {}
|
||||
},
|
||||
{
|
||||
"model": "wei.weirole",
|
||||
"pk": 24,
|
||||
"fields": {}
|
||||
},
|
||||
{
|
||||
"model": "wei.weirole",
|
||||
"pk": 25,
|
||||
"fields": {}
|
||||
}
|
||||
]
|
||||
|
Reference in New Issue
Block a user