Merge branch 'develop' into create_inputList

This commit is contained in:
vabene1111
2021-09-09 05:44:43 +02:00
committed by GitHub
6 changed files with 29 additions and 16 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

@@ -109,16 +109,16 @@ class FuzzyFilterMixin(ViewSetMixin):
if fuzzy: if fuzzy:
self.queryset = ( self.queryset = (
self.queryset self.queryset
.annotate(exact=Case(When(name__iexact=query, then=(Value(100))), default=Value(0))) # put exact matches at the top of the result set .annotate(exact=Case(When(name__iexact=query, then=(Value(100))), default=Value(0))) # put exact matches at the top of the result set
.annotate(trigram=TrigramSimilarity('name', query)).filter(trigram__gt=0.2) .annotate(trigram=TrigramSimilarity('name', query)).filter(trigram__gt=0.2)
.order_by('-exact').order_by("-trigram") .order_by('-exact').order_by("-trigram")
) )
else: else:
# TODO have this check unaccent search settings or other search preferences? # TODO have this check unaccent search settings or other search preferences?
self.queryset = ( self.queryset = (
self.queryset self.queryset
.annotate(exact=Case(When(name__iexact=query, then=(Value(100))), default=Value(0))) # put exact matches at the top of the result set .annotate(exact=Case(When(name__iexact=query, then=(Value(100))), default=Value(0))) # put exact matches at the top of the result set
.filter(name__icontains=query).order_by('-exact') .filter(name__icontains=query).order_by('-exact')
) )
updated_at = self.request.query_params.get('updated_at', None) updated_at = self.request.query_params.get('updated_at', None)
@@ -140,7 +140,7 @@ class FuzzyFilterMixin(ViewSetMixin):
class MergeMixin(ViewSetMixin): # TODO update Units to use merge API class MergeMixin(ViewSetMixin): # TODO update Units to use merge API
@decorators.action(detail=True, url_path='merge/(?P<target>[^/.]+)', methods=['PUT'],) @decorators.action(detail=True, url_path='merge/(?P<target>[^/.]+)', methods=['PUT'], )
@decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer)) @decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def merge(self, request, pk, target): def merge(self, request, pk, target):
self.description = f"Merge {self.basename} onto target {self.basename} with ID of [int]." self.description = f"Merge {self.basename} onto target {self.basename} with ID of [int]."
@@ -228,7 +228,7 @@ class TreeMixin(MergeMixin, FuzzyFilterMixin):
return super().get_queryset() return super().get_queryset()
return self.queryset.filter(space=self.request.space) return self.queryset.filter(space=self.request.space)
@decorators.action(detail=True, url_path='move/(?P<parent>[^/.]+)', methods=['PUT'],) @decorators.action(detail=True, url_path='move/(?P<parent>[^/.]+)', methods=['PUT'], )
@decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer)) @decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def move(self, request, pk, parent): def move(self, request, pk, parent):
self.description = f"Move {self.basename} to be a child of {self.basename} with ID of [int]. Use ID: 0 to move {self.basename} to the root." self.description = f"Move {self.basename} to be a child of {self.basename} with ID of [int]. Use ID: 0 to move {self.basename} to the root."
@@ -418,7 +418,7 @@ class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet):
permission_classes = [CustomIsOwner] permission_classes = [CustomIsOwner]
def get_queryset(self): def get_queryset(self):
queryset = self.queryset.filter(Q(book__created_by=self.request.user) | Q(book__shared=self.request.user)).filter(book__space=self.request.space) queryset = self.queryset.filter(Q(book__created_by=self.request.user) | Q(book__shared=self.request.user)).filter(book__space=self.request.space).distinct()
recipe_id = self.request.query_params.get('recipe', None) recipe_id = self.request.query_params.get('recipe', None)
if recipe_id is not None: if recipe_id is not None:
@@ -574,7 +574,7 @@ class ShoppingListRecipeViewSet(viewsets.ModelViewSet):
def get_queryset(self): def get_queryset(self):
return self.queryset.filter( return self.queryset.filter(
Q(shoppinglist__created_by=self.request.user) | Q(shoppinglist__shared=self.request.user)).filter( Q(shoppinglist__created_by=self.request.user) | Q(shoppinglist__shared=self.request.user)).filter(
shoppinglist__space=self.request.space).all() shoppinglist__space=self.request.space).distinct().all()
class ShoppingListEntryViewSet(viewsets.ModelViewSet): class ShoppingListEntryViewSet(viewsets.ModelViewSet):
@@ -585,7 +585,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
def get_queryset(self): def get_queryset(self):
return self.queryset.filter( return self.queryset.filter(
Q(shoppinglist__created_by=self.request.user) | Q(shoppinglist__shared=self.request.user)).filter( Q(shoppinglist__created_by=self.request.user) | Q(shoppinglist__shared=self.request.user)).filter(
shoppinglist__space=self.request.space).all() shoppinglist__space=self.request.space).distinct().all()
class ShoppingListViewSet(viewsets.ModelViewSet): class ShoppingListViewSet(viewsets.ModelViewSet):

View File

@@ -57,7 +57,7 @@ def recipe_import(request):
@group_required('user') @group_required('user')
def shopping_list(request): def shopping_list(request):
f = ShoppingListFilter(request.GET, queryset=ShoppingList.objects.filter(space=request.space).filter( f = ShoppingListFilter(request.GET, queryset=ShoppingList.objects.filter(space=request.space).filter(
Q(created_by=request.user) | Q(shared=request.user)).all().order_by('finished', 'created_at')) Q(created_by=request.user) | Q(shared=request.user)).distinct().all().order_by('finished', 'created_at'))
table = ShoppingListTable(f.qs) table = ShoppingListTable(f.qs)
RequestConfig(request, paginate={'per_page': 25}).configure(table) RequestConfig(request, paginate={'per_page': 25}).configure(table)

View File

@@ -604,7 +604,12 @@ def offline(request):
def test(request): def test(request):
if not settings.DEBUG: if not settings.DEBUG:
return HttpResponseRedirect(reverse('index')) return HttpResponseRedirect(reverse('index'))
return JsonResponse(parse('Pane (raffermo o secco) 80 g'), safe=False)
with scopes_disabled():
result = ShoppingList.objects.filter(
Q(created_by=request.user) | Q(shared=request.user)).filter(
space=request.space).values().distinct()
return JsonResponse(list(result), safe=False, json_dumps_params={'indent': 2})
def test2(request): def test2(request):

View File

@@ -48,6 +48,11 @@
<template v-slot:upper-right> <template v-slot:upper-right>
<b-button v-if="i.recipe" v-b-tooltip.hover :title="i.recipe.name" <b-button v-if="i.recipe" v-b-tooltip.hover :title="i.recipe.name"
class=" btn fas fa-book-open p-0 border-0" variant="link" :href="i.recipe.url"/> class=" btn fas fa-book-open p-0 border-0" variant="link" :href="i.recipe.url"/>
<!-- keywords can have icons - if it exists, display it -->
<b-button v-if="i.icon"
class=" btn p-0 border-0" variant="link">
{{i.icon}}
</b-button>
</template> </template>
</generic-horizontal-card> </generic-horizontal-card>
</template> </template>
@@ -177,10 +182,10 @@ export default {
this.saveThis(update) this.saveThis(update)
break; break;
case this.Actions.MERGE: case this.Actions.MERGE:
this.mergeThis(this.this_item.id, e.form_data.target) this.mergeThis(this.this_item.id, e.form_data.target.id)
break; break;
case this.Actions.MOVE: case this.Actions.MOVE:
this.moveThis(this.this_item.id, e.form_data.target) this.moveThis(this.this_item.id, e.form_data.target.id)
break; break;
} }
} }