Merge branch 'develop' into patch2

This commit is contained in:
vabene1111 2021-09-15 17:28:01 +02:00 committed by GitHub
commit 1fa9c806a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 80 additions and 30 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,7 +21,7 @@ from cookbook.helper.image_processing import handle_image
from cookbook.helper.permission_helper import group_required, has_group_permission
from cookbook.helper.recipe_url_import import parse_cooktime
from cookbook.models import (Comment, Food, Ingredient, Keyword, Recipe,
RecipeImport, Step, Sync, Unit, UserPreference)
RecipeImport, Step, Sync, Unit, UserPreference, Automation)
from cookbook.tables import SyncTable
@ -153,17 +153,20 @@ def import_url(request):
recipe.keywords.add(k)
for ing in data['recipeIngredient']:
ingredient = Ingredient(space=request.space,)
ingredient = Ingredient(space=request.space, )
if ing['ingredient']['text'] != '':
ingredient.food, f_created = Food.objects.get_or_create(
name=ing['ingredient']['text'].strip(), space=request.space
)
if food_text := ing['ingredient']['text'].strip() != '':
if automation := Automation.objects.filter(space=request.space, type=Automation.FOOD_ALIAS, param_1=food_text).first():
ingredient.food.id = automation.param_2
else:
ingredient.food, f_created = Food.objects.get_or_create(name=food_text, space=request.space)
if ing['unit'] and ing['unit']['text'] != '':
ingredient.unit, u_created = Unit.objects.get_or_create(
name=ing['unit']['text'].strip(), space=request.space
)
if ing['unit']:
if unit_text := ing['unit']['text'] != '':
if automation := Automation.objects.filter(space=request.space, type=Automation.UNIT_ALIAS, param_1=unit_text).first():
ingredient.unit.id = automation.param_2
else:
ingredient.unit, u_created = Unit.objects.get_or_create(name=unit_text, space=request.space)
# TODO properly handle no_amount recipes
if isinstance(ing['amount'], str):

View File

@ -97,6 +97,7 @@ import GenericInfiniteCards from "@/components/GenericInfiniteCards";
import GenericHorizontalCard from "@/components/GenericHorizontalCard";
import GenericModalForm from "@/components/Modals/GenericModalForm";
import ModelMenu from "@/components/ModelMenu";
import {ApiApiFactory} from "@/utils/openapi/api";
Vue.use(BootstrapVue)
@ -179,9 +180,18 @@ export default {
this.this_action = this.Actions.MERGE
this.show_modal = true
} else {
this.mergeThis(e.source.id, e.target.id)
this.mergeThis(e.source, e.target, false)
}
break;
case 'merge-automate':
if (target == null) {
this.this_item = e.source
this.this_action = this.Actions.MERGE
this.show_modal = true
} else {
this.mergeThis(e.source, e.target, true)
}
break
case 'get-children':
if (source.show_children) {
Vue.set(source, 'show_children', false)
@ -219,7 +229,7 @@ export default {
this.saveThis(update)
break;
case this.Actions.MERGE:
this.mergeThis(this.this_item.id, e.form_data.target.id)
this.mergeThis(this.this_item, e.form_data.target, false)
break;
case this.Actions.MOVE:
this.moveThis(this.this_item.id, e.form_data.target.id)
@ -305,7 +315,9 @@ export default {
this.makeToast(this.$t('Error'), err.bodyText, 'danger')
})
},
mergeThis: function (source_id, target_id) {
mergeThis: function (source, target, automate) {
let source_id = source.id
let target_id = target.id
if (source_id === target_id) {
this.makeToast(this.$t('Error'), this.$t('Cannot merge item with itself'), 'danger')
this.clearState()
@ -331,6 +343,28 @@ export default {
this.makeToast(this.$t('Error'), err.bodyText, 'danger')
})
if (automate){
let apiClient = new ApiApiFactory()
let automation = {
name: `Merge ${source.name} with ${target.name}`,
param_1: source.name,
param_2: target.id
}
if (this.this_model === this.Models.FOOD){
automation.type = 'FOOD_ALIAS'
}
if (this.this_model === this.Models.UNIT){
automation.type = 'UNIT_ALIAS'
}
if (this.this_model === this.Models.KEYWORD){
automation.type = 'KEYWORD_ALIAS'
}
apiClient.createAutomation(automation)
}
},
getChildren: function (col, item) {
let parent = {}

View File

@ -1,6 +1,6 @@
<template>
<span>
<b-dropdown variant="link" toggle-class="text-decoration-none" no-caret style="boundary:window">
<b-dropdown variant="link" toggle-class="text-decoration-none" right no-caret style="boundary:window">
<template #button-content>
<i class="fas fa-ellipsis-v" ></i>
</template>
@ -20,6 +20,10 @@
<i class="fas fa-compress-arrows-alt fa-fw"></i> {{ $t('Merge') }}
</b-dropdown-item>
<b-dropdown-item v-if="show_merge" v-on:click="$emit('item-action', 'merge-automate')">
<i class="fas fa-robot fa-fw"></i> {{$t('Merge')}} & {{$t('Automate')}}
</b-dropdown-item>
</b-dropdown>
</span>
</template>

View File

@ -80,13 +80,16 @@
<!-- this should be made a generic component, would also require mixin for functions that generate the popup and put in parent container-->
<b-list-group ref="tooltip" variant="light" v-show="show_menu" v-on-clickaway="closeMenu" style="z-index:9999; cursor:pointer">
<b-list-group-item v-if="useMove" action v-on:click="$emit('item-action',{'action': 'move', 'target': item, 'source': source}); closeMenu()">
<i class="fas fa-expand-arrows-alt fa-fw"></i> {{$t('Move')}}: {{$t('move_confirmation', {'child': source.name,'parent':item.name})}}
<i class="fas fa-expand-arrows-alt fa-fw"></i> <b>{{$t('Move')}}</b>: <span v-html="$t('move_confirmation', {'child': source.name,'parent':item.name})"></span>
</b-list-group-item>
<b-list-group-item v-if="useMerge" action v-on:click="$emit('item-action',{'action': 'merge', 'target': item, 'source': source}); closeMenu()">
<i class="fas fa-compress-arrows-alt fa-fw"></i> {{$t('Merge')}}: {{ $t('merge_confirmation', {'source': source.name,'target':item.name}) }}
<i class="fas fa-compress-arrows-alt fa-fw"></i> <b>{{$t('Merge')}}</b>: <span v-html="$t('merge_confirmation', {'source': source.name,'target':item.name})"></span>
</b-list-group-item>
<b-list-group-item v-if="useMerge" action v-on:click="$emit('item-action',{'action': 'merge-automate', 'target': item, 'source': source}); closeMenu()">
<i class="fas fa-robot fa-fw"></i> <b>{{$t('Merge')}} & {{$t('Automate')}}</b>: <span v-html="$t('merge_confirmation', {'source': source.name,'target':item.name})"></span> {{$t('create_rule')}}
</b-list-group-item>
<b-list-group-item action v-on:click="closeMenu()">
{{$t('Cancel')}}
<i class="fas fa-times fa-fw"></i> <b>{{$t('Cancel')}}</b>
</b-list-group-item>
<!-- TODO add to shopping list -->
<!-- TODO add to and/or manage pantry -->

View File

@ -86,7 +86,9 @@ export default {
'new_value': function () {
let x = this?.new_value
// pass the unflattened attributes that can be restored when ready to save/update
if (this.form?.ordered) {
x['__override__'] = this.unflattenItem(this?.new_value)
}
this.$root.$emit('change', this.form.field, x)
},
},

View File

@ -27,7 +27,7 @@
</b-dropdown-item>
<b-dropdown-item :href="resolveDjangoUrl('list_automation')">
<i class="fas fa-cogs fa-fw"></i> {{ Models['AUTOMATION'].name }}
<i class="fas fa-robot fa-fw"></i> {{ Models['AUTOMATION'].name }}
</b-dropdown-item>
</b-dropdown>

View File

@ -111,8 +111,9 @@
"Merge": "Merge",
"Parent": "Parent",
"delete_confirmation": "Are you sure that you want to delete {source}?",
"move_confirmation": "Move {child} to parent {parent}",
"merge_confirmation": "Replace {source} with {target}",
"move_confirmation": "Move <i>{child}</i> to parent <i>{parent}</i>",
"merge_confirmation": "Replace <i>{source}</i> with <i>{target}</i>",
"create_rule": "and create automation",
"move_selection": "Select a parent {type} to move {source} to.",
"merge_selection": "Replace all occurrences of {source} with the selected {type}.",
"Root": "Root",
@ -152,6 +153,7 @@
"and_up": "& Up",
"Instructions": "Instructions",
"Unrated": "Unrated",
"Automate": "Automate",
"Key_Ctrl": "Ctrl",
"Key_Shift": "Shift",
"Time": "Time",

View File

@ -89,8 +89,8 @@
"Move": "Déplacer",
"Merge": "Fusionner",
"Parent": "Parent",
"move_confirmation": "Déplacer {child} vers le parent {parent}",
"merge_confirmation": "Remplacer {source} par {target}",
"move_confirmation": "Déplacer <i>{child}</i> vers le parent <i>{parent}</i>",
"merge_confirmation": "Remplacer <i>{source}</i> par <i>{target}</i>",
"Root": "Racine",
"delete_confirmation": "Êtes-vous sûr de vouloir supprimer {source} ?",
"Shopping_Category": "Catégorie de courses",

View File

@ -92,8 +92,8 @@
"Merge": "Unisci",
"Parent": "Primario",
"delete_confimation": "Sei sicuro di voler eliminare {kw} e tutti gli elementi dipendenti?",
"move_confirmation": "Sposta {child} al primario {parent}",
"merge_confirmation": "Sostituisci {source} con {target}",
"move_confirmation": "Sposta <i>{child}</i> al primario <i>{parent}</i>",
"merge_confirmation": "Sostituisci <i>{source}</i> con <i>{target}</i>",
"move_selection": "Scegli un primario {type} dove spostare {source}.",
"merge_selection": "Sostituisci tutte le voci di {source} con il {type} selezionato.",
"Root": "Radice",

View File

@ -82,8 +82,8 @@
"Recipes": "Recepten",
"Move": "Verplaats",
"Parent": "Ouder",
"move_confirmation": "Verplaats {child} naar ouder {parent}",
"merge_confirmation": "Vervang {source} with {target}",
"move_confirmation": "Verplaats <i>{child}</i> naar ouder <i>{parent}</i>",
"merge_confirmation": "Vervang <i>{source}</i> with <i>{target}</i>",
"move_selection": "Selecteer een ouder {type} om {source} naar te verplaatsen.",
"merge_selection": "Vervang alle voorvallen van {source} door het type {type}.",
"Root": "Bron",

View File

@ -17,7 +17,7 @@ export function makeToast(title, message, variant = null) {
toaster.$bvToast.toast(message, {
title: title,
variant: variant,
toaster: 'b-toaster-top-center',
toaster: 'b-toaster-bottom-right',
solid: true
})
}