95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
from datetime import date
|
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.views.decorators.http import require_POST
|
|
from plants.models import Plant, Species, PruningLog
|
|
from plants.forms import PlantForm, PruningLogForm
|
|
from plants.utils.pruning import pruning_status
|
|
|
|
|
|
def plant_list(request):
|
|
qs = Plant.objects.select_related('species').all()
|
|
q = request.GET.get('q', '')
|
|
indoor_filter = request.GET.get('filter', '')
|
|
|
|
if q:
|
|
qs = qs.filter(name__icontains=q) | qs.filter(location__icontains=q)
|
|
if indoor_filter == 'indoor':
|
|
qs = qs.filter(is_indoor=True)
|
|
elif indoor_filter == 'outdoor':
|
|
qs = qs.filter(is_indoor=False)
|
|
|
|
template = (
|
|
'plants/partials/plant_list_results.html'
|
|
if request.htmx
|
|
else 'plants/plant_list.html'
|
|
)
|
|
return render(request, template, {'plants': qs, 'q': q, 'filter': indoor_filter})
|
|
|
|
|
|
def plant_detail(request, pk):
|
|
plant = get_object_or_404(
|
|
Plant.objects.select_related('species').prefetch_related('pruning_logs'),
|
|
pk=pk,
|
|
)
|
|
today = date.today()
|
|
return render(request, 'plants/plant_detail.html', {
|
|
'plant': plant,
|
|
'pruning_status': pruning_status(plant, today),
|
|
'log_form': PruningLogForm(initial={'pruned_on': today}),
|
|
'today': today,
|
|
})
|
|
|
|
|
|
@require_POST
|
|
def log_pruning(request, pk):
|
|
plant = get_object_or_404(
|
|
Plant.objects.prefetch_related('pruning_logs'), pk=pk
|
|
)
|
|
form = PruningLogForm(request.POST)
|
|
if form.is_valid():
|
|
log = form.save(commit=False)
|
|
log.plant = plant
|
|
log.save()
|
|
today = date.today()
|
|
return render(request, 'plants/partials/pruning_strip.html', {
|
|
'plant': plant,
|
|
'pruning_status': pruning_status(plant, today),
|
|
'log_form': PruningLogForm(initial={'pruned_on': today}),
|
|
})
|
|
|
|
|
|
def plant_add(request):
|
|
species_id = request.GET.get('species_id') or request.POST.get('species_id')
|
|
species = None
|
|
|
|
if species_id and species_id != 'skip':
|
|
species = get_object_or_404(Species, pk=species_id)
|
|
|
|
if species_id is None and request.method == 'GET':
|
|
return render(request, 'plants/species_search.html')
|
|
|
|
if request.method == 'POST':
|
|
form = PlantForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
plant = form.save(commit=False)
|
|
plant.species = species
|
|
plant.save()
|
|
return redirect('plant_detail', pk=plant.pk)
|
|
else:
|
|
initial = {'pruning_months': species.pruning_months} if species else {}
|
|
form = PlantForm(initial=initial)
|
|
|
|
return render(request, 'plants/plant_form.html', {
|
|
'form': form,
|
|
'species': species,
|
|
'species_id': species_id,
|
|
'title': 'Add Plant',
|
|
})
|
|
|
|
|
|
def plant_edit(request, pk):
|
|
pass
|
|
|
|
|
|
def plant_delete(request, pk):
|
|
pass
|