getUserPreference available for all UserPreferences
This commit is contained in:
parent
fbd17b48fe
commit
c5c76cadea
43
cookbook/migrations/0162_food_inherit.py
Normal file
43
cookbook/migrations/0162_food_inherit.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Generated by Django 3.2.7 on 2021-10-14 22:36
|
||||||
|
|
||||||
|
import cookbook.models
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cookbook', '0161_alter_shoppinglistentry_list_recipe'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FoodParentIgnore',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('field', models.CharField(max_length=32, unique=True)),
|
||||||
|
('name', models.CharField(max_length=64, unique=True)),
|
||||||
|
],
|
||||||
|
bases=(models.Model, cookbook.models.PermissionModelMixin),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='food',
|
||||||
|
name='child_inherit',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userpreference',
|
||||||
|
name='food_inherit',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userpreference',
|
||||||
|
name='mealplan_autoinclude_related',
|
||||||
|
field=models.BooleanField(default=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='food',
|
||||||
|
name='ignore_parent',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='ignore_parent', to='cookbook.FoodParentIgnore'),
|
||||||
|
),
|
||||||
|
]
|
24
cookbook/migrations/0163_create_food_ignore_fields.py
Normal file
24
cookbook/migrations/0163_create_food_ignore_fields.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
from cookbook.models import FoodParentIgnore
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
def create_ignorefields(apps, schema_editor):
|
||||||
|
FoodParentIgnore.objects.create(name='Supermarket Category', field='name')
|
||||||
|
FoodParentIgnore.objects.create(name='Ignore Shopping', field='ignore_shopping')
|
||||||
|
FoodParentIgnore.objects.create(name='Diet', field='diet')
|
||||||
|
FoodParentIgnore.objects.create(name='Substitute', field='substitute')
|
||||||
|
FoodParentIgnore.objects.create(name='Substitute Children', field='substitute_children')
|
||||||
|
FoodParentIgnore.objects.create(name='Substitute Siblings', field='substitute_siblings')
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cookbook', '0162_food_inherit'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(
|
||||||
|
create_ignorefields
|
||||||
|
),
|
||||||
|
]
|
@ -329,8 +329,7 @@ class UserPreference(models.Model, PermissionModelMixin):
|
|||||||
mealplan_autoadd_shopping = models.BooleanField(default=False)
|
mealplan_autoadd_shopping = models.BooleanField(default=False)
|
||||||
mealplan_autoexclude_onhand = models.BooleanField(default=True)
|
mealplan_autoexclude_onhand = models.BooleanField(default=True)
|
||||||
mealplan_autoinclude_related = models.BooleanField(default=True)
|
mealplan_autoinclude_related = models.BooleanField(default=True)
|
||||||
filter_to_supermarket = models.BooleanField(default=False)
|
food_inherit = models.BooleanField(default=False)
|
||||||
default_delay = models.IntegerField(default=4)
|
|
||||||
|
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
space = models.ForeignKey(Space, on_delete=models.CASCADE, null=True)
|
space = models.ForeignKey(Space, on_delete=models.CASCADE, null=True)
|
||||||
@ -474,6 +473,18 @@ class Unit(ExportModelOperationsMixin('unit'), models.Model, PermissionModelMixi
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class FoodParentIgnore(models.Model, PermissionModelMixin):
|
||||||
|
field = models.CharField(max_length=32, unique=True)
|
||||||
|
name = models.CharField(max_length=64, unique=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return _(self.name)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_name(self):
|
||||||
|
return _(self.name)
|
||||||
|
|
||||||
|
|
||||||
class Food(ExportModelOperationsMixin('food'), TreeModel, PermissionModelMixin):
|
class Food(ExportModelOperationsMixin('food'), TreeModel, PermissionModelMixin):
|
||||||
# exclude fields not implemented yet
|
# exclude fields not implemented yet
|
||||||
inherit_fields = FoodInheritField.objects.exclude(field__in=['diet', 'substitute', 'substitute_children', 'substitute_siblings'])
|
inherit_fields = FoodInheritField.objects.exclude(field__in=['diet', 'substitute', 'substitute_children', 'substitute_siblings'])
|
||||||
@ -487,6 +498,8 @@ class Food(ExportModelOperationsMixin('food'), TreeModel, PermissionModelMixin):
|
|||||||
ignore_shopping = models.BooleanField(default=False)
|
ignore_shopping = models.BooleanField(default=False)
|
||||||
description = models.TextField(default='', blank=True)
|
description = models.TextField(default='', blank=True)
|
||||||
on_hand = models.BooleanField(default=False)
|
on_hand = models.BooleanField(default=False)
|
||||||
|
child_inherit = models.BooleanField(default=False)
|
||||||
|
ignore_parent = models.ManyToManyField(FoodParentIgnore, related_name="ignore_parent", blank=True)
|
||||||
|
|
||||||
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
||||||
objects = ScopedManager(space='space', _manager_class=TreeManager)
|
objects = ScopedManager(space='space', _manager_class=TreeManager)
|
||||||
|
@ -12,13 +12,12 @@ from drf_writable_nested import UniqueFieldsMixin, WritableNestedModelSerializer
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import NotFound, ValidationError
|
from rest_framework.exceptions import NotFound, ValidationError
|
||||||
|
|
||||||
from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Food,
|
from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Food, ImportLog,
|
||||||
FoodInheritField, ImportLog, Ingredient, Keyword, MealPlan, MealType,
|
Ingredient, Keyword, MealPlan, MealType, NutritionInformation, Recipe,
|
||||||
NutritionInformation, Recipe, RecipeBook, RecipeBookEntry,
|
RecipeBook, RecipeBookEntry, RecipeImport, ShareLink, ShoppingList,
|
||||||
RecipeImport, ShareLink, ShoppingList, ShoppingListEntry,
|
ShoppingListEntry, ShoppingListRecipe, Step, Storage, Supermarket,
|
||||||
ShoppingListRecipe, Step, Storage, Supermarket, SupermarketCategory,
|
SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, Unit,
|
||||||
SupermarketCategoryRelation, Sync, SyncLog, Unit, UserFile,
|
UserFile, UserPreference, ViewLog)
|
||||||
UserPreference, ViewLog)
|
|
||||||
from cookbook.templatetags.custom_tags import markdown
|
from cookbook.templatetags.custom_tags import markdown
|
||||||
|
|
||||||
|
|
||||||
@ -163,8 +162,7 @@ class UserPreferenceSerializer(serializers.ModelSerializer):
|
|||||||
fields = (
|
fields = (
|
||||||
'user', 'theme', 'nav_color', 'default_unit', 'default_page',
|
'user', 'theme', 'nav_color', 'default_unit', 'default_page',
|
||||||
'search_style', 'show_recent', 'plan_share', 'ingredient_decimals',
|
'search_style', 'show_recent', 'plan_share', 'ingredient_decimals',
|
||||||
'comments', 'shopping_auto_sync', 'mealplan_autoadd_shopping', 'food_ignore_default', 'default_delay',
|
'comments', 'shopping_auto_sync', 'mealplan_autoadd_shopping'
|
||||||
'mealplan_autoinclude_related', 'mealplan_autoexclude_onhand', 'shopping_share'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -404,7 +402,10 @@ class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedR
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Food
|
model = Food
|
||||||
fields = ('id', 'name', 'description', 'recipe', 'ignore_shopping', 'supermarket_category', 'image', 'parent', 'numchild', 'numrecipe', 'on_hand')
|
fields = (
|
||||||
|
'id', 'name', 'description', 'shopping', 'recipe', 'ignore_shopping', 'supermarket_category',
|
||||||
|
'image', 'parent', 'numchild', 'numrecipe', 'on_hand', 'child_inherit', 'ignore_parent'
|
||||||
|
)
|
||||||
read_only_fields = ('id', 'numchild', 'parent', 'image', 'numrecipe')
|
read_only_fields = ('id', 'numchild', 'parent', 'image', 'numrecipe')
|
||||||
|
|
||||||
|
|
||||||
@ -930,3 +931,13 @@ class FoodShoppingUpdateSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Recipe
|
model = Recipe
|
||||||
fields = ['id', 'amount', 'unit', 'delete', ]
|
fields = ['id', 'amount', 'unit', 'delete', ]
|
||||||
|
|
||||||
|
|
||||||
|
class FoodParentIgnoreSerializer(serializers.ModelSerializer):
|
||||||
|
field = serializers.CharField()
|
||||||
|
name = serializers.CharField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Recipe
|
||||||
|
fields = ['id', 'name', 'field', ]
|
||||||
|
read_only_fields = ('id', 'name', 'field', )
|
||||||
|
@ -19,7 +19,7 @@ router.register(r'automation', api.AutomationViewSet)
|
|||||||
router.register(r'bookmarklet-import', api.BookmarkletImportViewSet)
|
router.register(r'bookmarklet-import', api.BookmarkletImportViewSet)
|
||||||
router.register(r'cook-log', api.CookLogViewSet)
|
router.register(r'cook-log', api.CookLogViewSet)
|
||||||
router.register(r'food', api.FoodViewSet)
|
router.register(r'food', api.FoodViewSet)
|
||||||
router.register(r'food-inherit-field', api.FoodInheritFieldViewSet)
|
router.register(r'food-inherit-ignore', api.FoodParentIgnoreViewSet)
|
||||||
router.register(r'import-log', api.ImportLogViewSet)
|
router.register(r'import-log', api.ImportLogViewSet)
|
||||||
router.register(r'ingredient', api.IngredientViewSet)
|
router.register(r'ingredient', api.IngredientViewSet)
|
||||||
router.register(r'keyword', api.KeywordViewSet)
|
router.register(r'keyword', api.KeywordViewSet)
|
||||||
|
@ -39,7 +39,7 @@ from cookbook.helper.recipe_html_import import get_recipe_from_source
|
|||||||
from cookbook.helper.recipe_search import get_facet, old_search, search_recipes
|
from cookbook.helper.recipe_search import get_facet, old_search, search_recipes
|
||||||
from cookbook.helper.recipe_url_import import get_from_scraper
|
from cookbook.helper.recipe_url_import import get_from_scraper
|
||||||
from cookbook.helper.shopping_helper import shopping_helper
|
from cookbook.helper.shopping_helper import shopping_helper
|
||||||
from cookbook.models import (Automation, BookmarkletImport, CookLog, Food, FoodInheritField,
|
from cookbook.models import (Automation, BookmarkletImport, CookLog, Food, FoodParentIgnore,
|
||||||
ImportLog, Ingredient, Keyword, MealPlan, MealType, Recipe, RecipeBook,
|
ImportLog, Ingredient, Keyword, MealPlan, MealType, Recipe, RecipeBook,
|
||||||
RecipeBookEntry, ShareLink, ShoppingList, ShoppingListEntry,
|
RecipeBookEntry, ShareLink, ShoppingList, ShoppingListEntry,
|
||||||
ShoppingListRecipe, Step, Storage, Supermarket, SupermarketCategory,
|
ShoppingListRecipe, Step, Storage, Supermarket, SupermarketCategory,
|
||||||
@ -50,7 +50,7 @@ from cookbook.provider.local import Local
|
|||||||
from cookbook.provider.nextcloud import Nextcloud
|
from cookbook.provider.nextcloud import Nextcloud
|
||||||
from cookbook.schemas import FilterSchema, QueryParam, QueryParamAutoSchema, TreeSchema
|
from cookbook.schemas import FilterSchema, QueryParam, QueryParamAutoSchema, TreeSchema
|
||||||
from cookbook.serializer import (AutomationSerializer, BookmarkletImportSerializer,
|
from cookbook.serializer import (AutomationSerializer, BookmarkletImportSerializer,
|
||||||
CookLogSerializer, FoodInheritFieldSerializer, FoodSerializer,
|
CookLogSerializer, FoodParentIgnoreSerializer, FoodSerializer,
|
||||||
FoodShoppingUpdateSerializer, ImportLogSerializer,
|
FoodShoppingUpdateSerializer, ImportLogSerializer,
|
||||||
IngredientSerializer, KeywordSerializer, MealPlanSerializer,
|
IngredientSerializer, KeywordSerializer, MealPlanSerializer,
|
||||||
MealTypeSerializer, RecipeBookEntrySerializer,
|
MealTypeSerializer, RecipeBookEntrySerializer,
|
||||||
@ -393,14 +393,14 @@ class UnitViewSet(viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
|
|||||||
pagination_class = DefaultPagination
|
pagination_class = DefaultPagination
|
||||||
|
|
||||||
|
|
||||||
class FoodInheritFieldViewSet(viewsets.ReadOnlyModelViewSet):
|
class FoodParentIgnoreViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = FoodInheritField.objects
|
queryset = FoodParentIgnore.objects
|
||||||
serializer_class = FoodInheritFieldSerializer
|
serializer_class = FoodParentIgnoreSerializer
|
||||||
permission_classes = [CustomIsUser]
|
permission_classes = [CustomIsUser]
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
# exclude fields not yet implemented
|
# exclude fields not yet implemented
|
||||||
return Food.inherit_fields
|
return self.queryset.exclude(field__in=['diet', 'substitute', 'substitute_children', 'substitute_siblings'])
|
||||||
|
|
||||||
|
|
||||||
class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
|
class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
|
||||||
|
@ -220,11 +220,6 @@ export const ApiMixin = {
|
|||||||
return {
|
return {
|
||||||
Models: Models,
|
Models: Models,
|
||||||
Actions: Actions,
|
Actions: Actions,
|
||||||
FoodCreateDefault: function (form) {
|
|
||||||
form.inherit_ignore = getUserPreference("food_ignore_default")
|
|
||||||
form.inherit = form.supermarket_category.length > 0
|
|
||||||
return form
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -536,11 +531,3 @@ const specialCases = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const formFunctions = {
|
|
||||||
FoodCreateDefault: function (form) {
|
|
||||||
form.fields.filter((x) => x.field === "ignore_inherit")[0].value = getUserPreference("food_ignore_default")
|
|
||||||
form.fields.filter((x) => x.field === "inherit")[0].value = getUserPreference("food_ignore_default").length > 0
|
|
||||||
return form
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user