getUserPreference available for all UserPreferences

This commit is contained in:
smilerz 2021-10-16 13:32:27 -05:00
parent fbd17b48fe
commit c5c76cadea
7 changed files with 110 additions and 32 deletions

View 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'),
),
]

View 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
),
]

View File

@ -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)

View File

@ -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', )

View File

@ -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)

View File

@ -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):

View File

@ -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
},
}