mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-11-21 05:48:26 +01:00
Some permissions
This commit is contained in:
@@ -260,7 +260,13 @@ class RecipeForm(forms.ModelForm):
|
|||||||
"""
|
"""
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Recipe
|
model = Recipe
|
||||||
fields = ('name',)
|
fields = ('name', 'creater',)
|
||||||
|
widgets = {
|
||||||
|
"creater": Autocomplete(
|
||||||
|
model=Club,
|
||||||
|
attrs={"api_url": "/api/members/club/"},
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class RecipeIngredientsForm(forms.Form):
|
class RecipeIngredientsForm(forms.Form):
|
||||||
|
|||||||
@@ -396,6 +396,12 @@ class Supplement(models.Model):
|
|||||||
return _("Supplement {food} for {dish}").format(
|
return _("Supplement {food} for {dish}").format(
|
||||||
food=str(self.food), dish=str(self.dish))
|
food=str(self.food), dish=str(self.dish))
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
# Check the owner of the food
|
||||||
|
if self.food.owner != self.dish.main.owner:
|
||||||
|
raise ValidationError(_('You cannot select food that belongs to the same club than the main food.'))
|
||||||
|
return super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class Order(models.Model):
|
class Order(models.Model):
|
||||||
"""
|
"""
|
||||||
@@ -471,6 +477,8 @@ class Order(models.Model):
|
|||||||
user=str(self.user))
|
user=str(self.user))
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
if self.activity != self.dish.activity:
|
||||||
|
raise ValidationError(_('Activities must be the same.'))
|
||||||
created = self.pk is None
|
created = self.pk is None
|
||||||
if created:
|
if created:
|
||||||
last_order = Order.objects.filter(activity=self.activity).last()
|
last_order = Order.objects.filter(activity=self.activity).last()
|
||||||
@@ -486,6 +494,7 @@ class Order(models.Model):
|
|||||||
destination=self.activity.organizer.note,
|
destination=self.activity.organizer.note,
|
||||||
amount=self.amount,
|
amount=self.amount,
|
||||||
quantity=1,
|
quantity=1,
|
||||||
|
reason=str(self.dish),
|
||||||
)
|
)
|
||||||
transaction.save()
|
transaction.save()
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ class ManageIngredientsView(LoginRequiredMixin, UpdateView):
|
|||||||
prefix = 'form-' + str(i) + '-'
|
prefix = 'form-' + str(i) + '-'
|
||||||
|
|
||||||
ingredient = None
|
ingredient = None
|
||||||
if form.data[prefix + 'qrcode'] not in ['0', '']:
|
if form.data[prefix + 'qrcode'] not in ['0', '', 'NaN']:
|
||||||
ingredient = QRCode.objects.get(pk=form.data[prefix + 'qrcode']).food_container
|
ingredient = QRCode.objects.get(pk=form.data[prefix + 'qrcode']).food_container
|
||||||
|
|
||||||
elif form.data[prefix + 'name'] != '':
|
elif form.data[prefix + 'name'] != '':
|
||||||
@@ -1064,9 +1064,12 @@ def get_ingredients_for_recipe(request):
|
|||||||
# Union des Foods dont le nom commence par un nom d’ingrédient
|
# Union des Foods dont le nom commence par un nom d’ingrédient
|
||||||
query = Q()
|
query = Q()
|
||||||
for name in ingredient_names:
|
for name in ingredient_names:
|
||||||
query |= Q(name__istartswith=name)
|
valid_regex = is_regex(name)
|
||||||
|
suffix = '__iregex' if valid_regex else '__istartswith'
|
||||||
|
prefix = '.*' if valid_regex else ''
|
||||||
|
query |= Q(**{f'name{suffix}': prefix + name}, end_of_life='')
|
||||||
qs = Food.objects.filter(query).distinct()
|
qs = Food.objects.filter(query).distinct()
|
||||||
|
qs = qs.filter(PermissionBackend.filter_queryset(request, Food, 'view'))
|
||||||
|
|
||||||
data = [{'id': f.id, 'name': f.name, 'qr_code_numbers': ", ".join(str(q.qr_code_number) for q in f.QR_code.all())} for f in qs]
|
data = [{'id': f.id, 'name': f.name, 'qr_code_numbers': ", ".join(str(q.qr_code_number) for q in f.QR_code.all())} for f in qs]
|
||||||
return JsonResponse({'ingredients': data})
|
return JsonResponse({'ingredients': data})
|
||||||
|
|||||||
@@ -4718,6 +4718,201 @@
|
|||||||
"description": "Voir l'adresse mail des membres de son club"
|
"description": "Voir l'adresse mail des membres de son club"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 331,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"dish"
|
||||||
|
],
|
||||||
|
"query": "{\"activity__organizer\": [\"club\"]}",
|
||||||
|
"type": "create",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Créer un plat vendu par son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 332,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"dish"
|
||||||
|
],
|
||||||
|
"query": "{\"activity__organizer\": [\"club\"]}",
|
||||||
|
"type": "change",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Modifier un plat vendu par son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 333,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"dish"
|
||||||
|
],
|
||||||
|
"query": "{\"activity__organizer\": [\"club\"]}",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir les plats vendus par son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 334,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"dish"
|
||||||
|
],
|
||||||
|
"query": "[\"AND\", {\"activity__open\": true}, {\"available\": true}]",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 1,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir les plats disponibles"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 335,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"supplement"
|
||||||
|
],
|
||||||
|
"query": "{\"dish__main__owner\": [\"club\"]}",
|
||||||
|
"type": "create",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Ajouter un supplément à un plat de son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 336,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"supplement"
|
||||||
|
],
|
||||||
|
"query": "{\"dish__main__owner\": [\"club\"]}",
|
||||||
|
"type": "change",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Modifier un supplément d'un plat de son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 337,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"supplement"
|
||||||
|
],
|
||||||
|
"query": "{\"dish__main__owner\": [\"club\"]}",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir les suppléments des plats de son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 337,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"supplement"
|
||||||
|
],
|
||||||
|
"query": "[\"AND\", {\"dish__activity__open\": true}, {\"dish__available\": true}]",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 1,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir les suppléments des plats disponibles"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 338,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"supplement"
|
||||||
|
],
|
||||||
|
"query": "{\"dish__main__owner\": [\"club\"]}",
|
||||||
|
"type": "delete",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Supprimer un supplément d'un plat de son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 339,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"order"
|
||||||
|
],
|
||||||
|
"query": "[\"AND\", {\"dish__activity__open\": true, \"dish__available\": true}, {\"user\": [\"user\"]}]",
|
||||||
|
"type": "create",
|
||||||
|
"mask": 1,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Commander un plat"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 340,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"order"
|
||||||
|
],
|
||||||
|
"query": "[\"AND\", {\"dish__activity__open\": true}, {\"user\": [\"user\"]}]",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 1,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir ses commandes pour les activités ouvertes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 341,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"order"
|
||||||
|
],
|
||||||
|
"query": "{\"activity__open\": true, \"activity__organizer\": [\"club\"]}",
|
||||||
|
"type": "view",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Voir toutes les commandes pour les activités ouvertes de son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "permission.permission",
|
||||||
|
"pk": 342,
|
||||||
|
"fields": {
|
||||||
|
"model": [
|
||||||
|
"food",
|
||||||
|
"order"
|
||||||
|
],
|
||||||
|
"query": "{\"activity__open\": true, \"activity__organizer\": [\"club\"]}",
|
||||||
|
"type": "change",
|
||||||
|
"mask": 2,
|
||||||
|
"permanent": false,
|
||||||
|
"description": "Modifier un commande non servie d'une activité de son club"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "permission.role",
|
"model": "permission.role",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
|
|||||||
Reference in New Issue
Block a user