TandoorRecipes/cookbook/views/batch.py
2018-05-25 16:49:10 +02:00

87 lines
2.7 KiB
Python

from datetime import datetime
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from django_tables2 import RequestConfig
from cookbook.forms import SyncForm, BatchEditForm, RecipeImport
from cookbook.models import Recipe, Category, Sync
from cookbook.tables import SyncTable
from django.utils.translation import gettext as _, ngettext
@login_required
def batch_monitor(request):
if request.method == "POST":
form = SyncForm(request.POST)
if form.is_valid():
new_path = Sync()
new_path.path = form.cleaned_data['path']
new_path.storage = form.cleaned_data['storage']
new_path.last_checked = datetime.now()
new_path.save()
return redirect('batch_monitor')
else:
form = SyncForm()
monitored_paths = SyncTable(Sync.objects.all())
RequestConfig(request, paginate={'per_page': 25}).configure(monitored_paths)
return render(request, 'batch/monitor.html', {'form': form, 'monitored_paths': monitored_paths})
@login_required
def sync_wait(request):
return render(request, 'batch/waiting.html')
@login_required
def batch_import_all(request):
imports = RecipeImport.objects.all()
for new_recipe in imports:
recipe = Recipe(name=new_recipe.name, path=new_recipe.path, storage=new_recipe.storage)
recipe.save()
new_recipe.delete()
return redirect('list_import')
@login_required
def batch_edit(request):
if request.method == "POST":
form = BatchEditForm(request.POST)
if form.is_valid():
word = form.cleaned_data['search']
category = form.cleaned_data['category']
keyword = form.cleaned_data['keyword']
recipes = Recipe.objects.filter(name__contains=word)
count = 0
for recipe in recipes:
edit = False
if category is not None:
recipe.category = Category.objects.get(name=category)
edit = True
if keyword.__sizeof__() > 0:
recipe.keywords.add(*list(keyword))
edit = True
if edit:
count = count + 1
recipe.save()
msg = ngettext(
'Batch edit done. %(count)d recipe where updated.',
'Batch edit done. %(count)d Recipes where updated.',
count) % {
'count': count,
}
messages.add_message(request, messages.SUCCESS, msg)
return redirect('batch_edit')
else:
form = BatchEditForm()
return render(request, 'batch/edit.html', {'form': form})