brewery-website/yeast/views.py

144 lines
4.6 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView
from django.views.generic.edit import CreateView, FormView
from django.views import View
from django.http import HttpResponse, HttpRequest, HttpResponseRedirect
from django.urls import reverse
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from yeast.models import Yeast, Propogation, Strain, Storage
from config.extras import AveryLabel
from yeast.forms import BatchAddForm, StrainAddForm, PropogateSampleForm, PitchIntoBeerForm
import logging
logger = logging.getLogger('django')
class YeastListView(ListView):
model = Yeast
class BatchListView(ListView):
model = Propogation
def sample(request, yeast_id):
if request.method == 'POST':
if 'pitch' in request.POST:
pitch_form = PitchIntoBeerForm(request.POST)
if pitch_form.is_valid():
logger.critical(pitch_form.cleaned_data)
sample = get_object_or_404(Yeast, pk=yeast_id)
pitch_form.pitch_sample()
return HttpResponseRedirect(reverse('yeast:yeast', kwargs={'yeast_id': sample.id}))
elif 'propogate' in request.POST:
propogate_form = PropogateSampleForm(request.POST)
if propogate_form.is_valid():
new_prop = propogate_form.create_propogation()
return HttpResponseRedirect(reverse('yeast:batches', kwargs={'propogation_id': new_prop.id}))
else:
return redirect('yeast:samples', kwargs={'yeast_id':yeast_id})
else:
propogate_form = PropogateSampleForm(initial={'sample': get_object_or_404(Yeast, pk=yeast_id)})
pitch_form = PitchIntoBeerForm()
sample = get_object_or_404(Yeast, pk=yeast_id)
return render(request, 'yeast/sample.html', {
'sample': sample,
'batch': get_object_or_404(Propogation, pk=sample.propogation_id),
'storage': list(Storage.objects.all()),
'propogate_form': propogate_form,
'pitch_form': pitch_form,
})
def get_batch(request):
batch_id = int(request.POST.get('batch'))
re_url = reverse('yeast:batch', kwargs={'batch_id': batch_id})
return redirect(re_url)
def home(request):
return render(request, 'yeast/home.html',{'batches': Propogation.objects.all, 'strains': Strain.objects.all})
def batch(request, batch_id):
"""
Display a batch of yeast samples.
``Propogation``
An instance of :model:`yeast.Propogation`.
``Template``
:template:`yeast/batch.html`
"""
batch = get_object_or_404(Propogation, pk=batch_id)
return render(request, 'yeast/batch.html', {'batch': batch})
def batch_labels(request, batch_id):
"""
Create label PDF for samples in a batch.
**Context**
``Batch``
An instance of :model:`yeast.Propogation`.
"""
skip_count = request.POST.get("skip_count", "")
samples = request.POST.getlist("samples", "")
batch = get_object_or_404(Propogation, pk=batch_id)
to_print = list(filter(lambda d: str(d.id) in samples, batch.yeast_set.all()))
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type ='application/pdf')
response['Content-Disposition'] = 'attachment; filename=samplelabels.pdf'
labelSheet = AveryLabel(18294, debug=False)
logger.critical(samples)
logger.critical(to_print)
labels = []
for sample in to_print:
labels.append({
'id': sample.id,
'title': '{} {}'.format(sample.propogation.strain.manufacturer.name, sample.propogation.strain.name),
'data': ['ID: {}'.format(sample.id), 'Date: {}'.format(sample.propogation.production_date)],
'blank': False,
'host': request.get_host(),
'template': 'yeast',
'ns': 'yeast'
})
labelSheet.render(labels, response, skip_count)
return response
class addBatch(CreateView):
model = Propogation
form_class = BatchAddForm
def get_success_url(self):
id = self.object.id #gets id from created object
return reverse('yeast:batches', kwargs={'batch_id': id})
class addStrain(CreateView):
model = Strain
form_class = StrainAddForm
def get_success_url(self):
id = self.object.id #gets id from created object
return reverse('yeast:batches')
@login_required
class NewPropogation(FormView):
# ~ template_name = "contact.html"
form_class = PropogateSampleForm
success_url = "/"
def form_valid(self, form):
form.create_propogation()
return super().form_valid(form)