From 8f53b399c60d5db5915dc85b5da4df854be95d52 Mon Sep 17 00:00:00 2001 From: Sriyukthika <148747664+Sriyukthika26@users.noreply.github.com> Date: Sat, 9 Dec 2023 23:58:26 +0530 Subject: [PATCH 1/9] Update truenas_portainer.md --- docs/install/truenas_portainer.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/install/truenas_portainer.md b/docs/install/truenas_portainer.md index 03b288fdd..9ff0525f6 100644 --- a/docs/install/truenas_portainer.md +++ b/docs/install/truenas_portainer.md @@ -76,7 +76,8 @@ Basic guide to setup Docker and Portainer TrueNAS Core. ![Screenshot of Stack List](https://2914113074-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiZWHJxqQsgWYd9sI88sO%2Fuploads%2FnBx62EIPhmUy1L0S1iKI%2F2.15-docker_add_stack_web_editor.gif?alt=media&token=c45c0151-9c15-4d79-b229-1a90a7a86b84) -Use the below code and input it into the Web Editor: -`version: "3" +```yaml +version: "3" services: db_recipes: restart: always @@ -87,13 +88,13 @@ services: - stack.env web_recipes: -# image: vabene1111/recipes:latest + # image: vabene1111/recipes:latest image: vabene1111/recipes:beta env_file: - stack.env volumes: - staticfiles:/opt/recipes/staticfiles - # Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes-vs-bind-mounts + # Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes-vs-bind-mounts - nginx_config:/opt/recipes/nginx/conf.d - ./mediafiles:/opt/recipes/mediafiles depends_on: @@ -116,7 +117,8 @@ services: volumes: nginx_config: - staticfiles:` + staticfiles: +``` -Download the .env template from [HERE](https://raw.githubusercontent.com/vabene1111/recipes/develop/.env.template) and load this file by pressing the "Load Variables from .env File" button: ![Screenshot of Add Stack screen](https://www.portainer.io/hubfs/image-png-Feb-21-2022-06-21-15-88-PM.png) From 044ed1ec1883addf250af41dc99073e9bbb6e35d Mon Sep 17 00:00:00 2001 From: Sriyukthika <148747664+Sriyukthika26@users.noreply.github.com> Date: Sun, 10 Dec 2023 00:44:15 +0530 Subject: [PATCH 2/9] Update truenas_portainer.md Spelling Error --- docs/install/truenas_portainer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/install/truenas_portainer.md b/docs/install/truenas_portainer.md index 9ff0525f6..fde9e41a3 100644 --- a/docs/install/truenas_portainer.md +++ b/docs/install/truenas_portainer.md @@ -71,7 +71,7 @@ Basic guide to setup Docker and Portainer TrueNAS Core. -Select "Get Started" to use the Enviroment Portainer is running in ![Screenshot of Enviroment Wizard](https://2914113074-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiZWHJxqQsgWYd9sI88sO%2Fuploads%2Fsig45vFliINvOKGKVStk%2F2.15-install-server-setup-wizard.png?alt=media&token=cd21d9e8-0632-40db-af9a-581365f98209) -### 3. Install Tandoor Recipies VIA Portainer Web Editor +### 3. Install Tandoor Recipes VIA Portainer Web Editor -From the menu select Stacks, click Add stack, give the stack a descriptive name then select Web editor. ![Screenshot of Stack List](https://2914113074-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiZWHJxqQsgWYd9sI88sO%2Fuploads%2FnBx62EIPhmUy1L0S1iKI%2F2.15-docker_add_stack_web_editor.gif?alt=media&token=c45c0151-9c15-4d79-b229-1a90a7a86b84) -Use the below code and input it into the Web Editor: From 4058c997deca82b97a45635b757f615135b8aa9d Mon Sep 17 00:00:00 2001 From: smilerz Date: Wed, 20 Dec 2023 15:46:28 -0600 Subject: [PATCH 3/9] updates to admin pages --- cookbook/admin.py | 52 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/cookbook/admin.py b/cookbook/admin.py index d2b5c31aa..b9287ce20 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -60,7 +60,7 @@ admin.site.register(UserSpace, UserSpaceAdmin) class UserPreferenceAdmin(admin.ModelAdmin): - list_display = ('name', 'theme', 'nav_color', 'default_page',) + list_display = ('name', 'theme', 'nav_color', 'default_page') search_fields = ('user__username',) list_filter = ('theme', 'nav_color', 'default_page',) date_hierarchy = 'created_at' @@ -75,7 +75,7 @@ admin.site.register(UserPreference, UserPreferenceAdmin) class SearchPreferenceAdmin(admin.ModelAdmin): - list_display = ('name', 'search', 'trigram_threshold',) + list_display = ('name', 'search', 'trigram_threshold', ) search_fields = ('user__username',) list_filter = ('search',) @@ -108,11 +108,16 @@ class SupermarketCategoryInline(admin.TabularInline): class SupermarketAdmin(admin.ModelAdmin): + list_display = ('name', 'space',) inlines = (SupermarketCategoryInline,) +class SupermarketCategoryAdmin(admin.ModelAdmin): + list_display = ('name', 'space',) + + admin.site.register(Supermarket, SupermarketAdmin) -admin.site.register(SupermarketCategory) +admin.site.register(SupermarketCategory, SupermarketCategoryAdmin) class SyncLogAdmin(admin.ModelAdmin): @@ -163,10 +168,18 @@ def delete_unattached_steps(modeladmin, request, queryset): class StepAdmin(admin.ModelAdmin): - list_display = ('name', 'order',) - search_fields = ('name',) + list_display = ('recipe_and_name', 'order', 'space') + ordering = ('recipe__name', 'name', 'space', ) + search_fields = ('name', 'recipe__name') actions = [delete_unattached_steps] + @staticmethod + @admin.display(description="Name") + def recipe_and_name(obj): + if not obj.recipe_set.exists(): + return f"Orphaned Step{'':s if not obj.name else f': {obj.name}'}" + return f"{obj.recipe_set.first().name}: {obj.name}" if obj.name else obj.recipe_set.first().name + admin.site.register(Step, StepAdmin) @@ -183,7 +196,7 @@ def rebuild_index(modeladmin, request, queryset): class RecipeAdmin(admin.ModelAdmin): - list_display = ('name', 'internal', 'created_by', 'storage') + list_display = ('name', 'internal', 'created_by', 'storage', 'space') search_fields = ('name', 'created_by__username') list_filter = ('internal',) date_hierarchy = 'created_at' @@ -198,7 +211,14 @@ class RecipeAdmin(admin.ModelAdmin): admin.site.register(Recipe, RecipeAdmin) -admin.site.register(Unit) + +class UnitAdmin(admin.ModelAdmin): + list_display = ('name', 'space') + ordering = ('name', 'space', ) + search_fields = ('name',) + + +admin.site.register(Unit, UnitAdmin) # admin.site.register(FoodInheritField) @@ -229,10 +249,16 @@ def delete_unattached_ingredients(modeladmin, request, queryset): class IngredientAdmin(admin.ModelAdmin): - list_display = ('food', 'amount', 'unit') - search_fields = ('food__name', 'unit__name') + list_display = ('recipe_name', 'amount', 'unit', 'food', 'space') + search_fields = ('food__name', 'unit__name', 'step__recipe__name') actions = [delete_unattached_ingredients] + @staticmethod + @admin.display(description="Recipe") + def recipe_name(obj): + recipes = obj.step_set.first().recipe_set.all() if obj.step_set.exists() else None + return recipes.first().name if recipes else 'Orphaned Ingredient' + admin.site.register(Ingredient, IngredientAdmin) @@ -258,7 +284,7 @@ admin.site.register(RecipeImport, RecipeImportAdmin) class RecipeBookAdmin(admin.ModelAdmin): - list_display = ('name', 'user_name') + list_display = ('name', 'user_name', 'space') search_fields = ('name', 'created_by__username') @staticmethod @@ -334,11 +360,11 @@ class ShoppingListEntryAdmin(admin.ModelAdmin): admin.site.register(ShoppingListEntry, ShoppingListEntryAdmin) -class ShoppingListAdmin(admin.ModelAdmin): - list_display = ('id', 'created_by', 'created_at') +# class ShoppingListAdmin(admin.ModelAdmin): +# list_display = ('id', 'created_by', 'created_at') -admin.site.register(ShoppingList, ShoppingListAdmin) +# admin.site.register(ShoppingList, ShoppingListAdmin) class ShareLinkAdmin(admin.ModelAdmin): From 7a5b744ff00addbac65ea03cbab1a14950e9ba1d Mon Sep 17 00:00:00 2001 From: smilerz Date: Wed, 20 Dec 2023 15:49:54 -0600 Subject: [PATCH 4/9] order recipes in admin --- cookbook/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cookbook/admin.py b/cookbook/admin.py index b9287ce20..bed49ca81 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -198,6 +198,7 @@ def rebuild_index(modeladmin, request, queryset): class RecipeAdmin(admin.ModelAdmin): list_display = ('name', 'internal', 'created_by', 'storage', 'space') search_fields = ('name', 'created_by__username') + ordering = ('name', 'created_by__username', ) list_filter = ('internal',) date_hierarchy = 'created_at' From 26f694576a1afd81842688ed68111a540a296bfb Mon Sep 17 00:00:00 2001 From: smilerz Date: Wed, 20 Dec 2023 15:55:02 -0600 Subject: [PATCH 5/9] update __str__() on Step and Ingredient models --- cookbook/models.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cookbook/models.py b/cookbook/models.py index c40bb41f2..b09963edb 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -718,6 +718,10 @@ class Ingredient(ExportModelOperationsMixin('ingredient'), models.Model, Permiss space = models.ForeignKey(Space, on_delete=models.CASCADE) objects = ScopedManager(space='space') + def __str__(self): + recipes = self.step_set.first().recipe_set.all() if self.step_set.exists() else None + return f'{recipes.first().name}: {self.pk}' if recipes else f'Orphaned Ingredient: {self.pk}' + class Meta: ordering = ['order', 'pk'] indexes = ( @@ -745,7 +749,9 @@ class Step(ExportModelOperationsMixin('step'), models.Model, PermissionModelMixi return render_instructions(self) def __str__(self): - return f'{self.pk} {self.name}' + if not self.recipe_set.exists(): + return f"Orphaned Step{'':s if not obj.name else f': {self.pk} {self.name}'}" + return f"{self.recipe_set.first().name}: {self.name}" if self.name else self.recipe_set.first().name class Meta: ordering = ['order', 'pk'] From 7ca5a34b28f4cf50ecd75da6e103581624aa6b41 Mon Sep 17 00:00:00 2001 From: smilerz Date: Thu, 28 Dec 2023 10:00:15 -0600 Subject: [PATCH 6/9] fixed recursion in Step.__str__() --- cookbook/models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cookbook/models.py b/cookbook/models.py index b09963edb..d4deed1fe 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -749,9 +749,7 @@ class Step(ExportModelOperationsMixin('step'), models.Model, PermissionModelMixi return render_instructions(self) def __str__(self): - if not self.recipe_set.exists(): - return f"Orphaned Step{'':s if not obj.name else f': {self.pk} {self.name}'}" - return f"{self.recipe_set.first().name}: {self.name}" if self.name else self.recipe_set.first().name + return f"{self.pk}: {self.name}" if self.name else f"Step: {self.pk}" class Meta: ordering = ['order', 'pk'] From cb63bb26157495f308e25323bb38e3c6218a12d6 Mon Sep 17 00:00:00 2001 From: smilerz Date: Thu, 28 Dec 2023 10:44:51 -0600 Subject: [PATCH 7/9] avoid recursion in ingredient.__str__ --- cookbook/models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cookbook/models.py b/cookbook/models.py index d4deed1fe..b7c3e3c81 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -719,8 +719,7 @@ class Ingredient(ExportModelOperationsMixin('ingredient'), models.Model, Permiss objects = ScopedManager(space='space') def __str__(self): - recipes = self.step_set.first().recipe_set.all() if self.step_set.exists() else None - return f'{recipes.first().name}: {self.pk}' if recipes else f'Orphaned Ingredient: {self.pk}' + return f'{self.pk}: {self.amount} {self.food.name} {self.unit.name}' class Meta: ordering = ['order', 'pk'] @@ -749,6 +748,8 @@ class Step(ExportModelOperationsMixin('step'), models.Model, PermissionModelMixi return render_instructions(self) def __str__(self): + if not self.recipe_set.exists(): + return f"{self.pk}: {_('Orphaned Step')}" return f"{self.pk}: {self.name}" if self.name else f"Step: {self.pk}" class Meta: From 5059abc232e389fab19ffa18831ea3fad9173b6e Mon Sep 17 00:00:00 2001 From: Jaan Date: Fri, 29 Dec 2023 15:17:56 +0000 Subject: [PATCH 8/9] Translated using Weblate (Russian) Currently translated at 63.4% (344 of 542 strings) Translation: Tandoor/Recipes Frontend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/ --- vue/src/locales/ru.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vue/src/locales/ru.json b/vue/src/locales/ru.json index 7c1d0e3ad..b29b3e1cc 100644 --- a/vue/src/locales/ru.json +++ b/vue/src/locales/ru.json @@ -345,5 +345,6 @@ "GroupBy": "Сгруппировать по", "food_inherit_info": "Поля для продуктов питания, которые должны наследоваться по умолчанию.", "warning_space_delete": "Вы можете удалить свое пространство, включая все рецепты, списки покупок, планы питания и все остальное, что вы создали. Этого нельзя отменить! Вы уверены, что хотите это сделать?", - "Description_Replace": "Изменить описание" + "Description_Replace": "Изменить описание", + "err_importing_recipe": "Произошла ошибка при импортировании рецепта!" } From bf61b6474e22576f78f6e3ab9f7fac64f0638382 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Mon, 1 Jan 2024 14:51:20 +0100 Subject: [PATCH 9/9] fixed ingredient note field to high --- vue/src/apps/RecipeEditView/RecipeEditView.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/vue/src/apps/RecipeEditView/RecipeEditView.vue b/vue/src/apps/RecipeEditView/RecipeEditView.vue index 2649c0371..7fd5dbe71 100644 --- a/vue/src/apps/RecipeEditView/RecipeEditView.vue +++ b/vue/src/apps/RecipeEditView/RecipeEditView.vue @@ -506,7 +506,6 @@