Implement a homepage for yeast.
Dynamic batch info display.
This commit is contained in:
parent
3b9bf53da9
commit
0981ad63bc
@ -17,7 +17,7 @@
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
|
||||
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
{% block script %}{% endblock %}
|
||||
<style>
|
||||
{% block style %}{% endblock %}
|
||||
body {
|
||||
@ -115,5 +115,5 @@
|
||||
<!-- Copyright -->
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
{% block endscript %}{% endblock %}
|
||||
</html>
|
||||
|
128
yeast/templates/yeast/home.html
Normal file
128
yeast/templates/yeast/home.html
Normal file
@ -0,0 +1,128 @@
|
||||
{% extends "base.html" %}
|
||||
{% load mathfilters %}
|
||||
{% load funcs %}
|
||||
|
||||
{% block style %}
|
||||
input, label {
|
||||
display:block;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}Yeast{% endblock %}
|
||||
|
||||
{% block jumbotron %}Yeast Bank{% endblock %}
|
||||
{% block jumbotronsub %}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="container" id="main">
|
||||
|
||||
<h3>Batches</h3>
|
||||
|
||||
<form action="{% url 'yeast:get_batch' %}" method="post">
|
||||
{% csrf_token %}
|
||||
<div class="container" style="border:1px solid #cecece;">
|
||||
|
||||
<div class="container m-2">
|
||||
<label for="strain-select">Choose a strain:</label>
|
||||
<select name="strain" id="strain-select">
|
||||
<option value="">--Please choose an option--</option>
|
||||
{% for strain in strains %}
|
||||
{% if strain.batches_available|length > 0 %}
|
||||
<option value="{{ strain.batches_available|get_value_in_qs:strain }}">{{ strain }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="container m-2">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<label for="batch-select">Choose a batch:</label>
|
||||
<select name="batch" id="batch-select" size="10" style="min-width:100%;">
|
||||
{% for batch in batches %}
|
||||
{% if not batch.consumed %}
|
||||
<option value="{{ batch.id }}">{{ batch.id }} {{ batch.production_date|date:"Y-m-d" }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
{% for batch in batches %}
|
||||
{% if not batch.consumed %}
|
||||
<div id="data-{{ batch.id }}" style="display: none;" class="datatable">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
{% if batch.source == 'SL' %}
|
||||
<th>Yeast Source</th><td>{{ batch.get_source_display }} <a href="{{ batch.beer_url }}">#{{ batch.beer_num }} {{ batch.beer_name }}</a></td>
|
||||
{% elif batch.source == 'ST' %}
|
||||
<th>Batch Source</th><td>Purchased from Store</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Generation</th><td>{{ batch.generation }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Production Date</th><td>{{ batch.production_date }}, {{ batch.age }} days old</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Samples Remaining</th><td>{{ batch.remaining_samples|length }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Sample Viability</th><td>
|
||||
{% if batch.max_viability == batch.min_viability %}
|
||||
{{ batch.max_viability }} %
|
||||
{% else %}
|
||||
{{ batch.min_viability }} - {{ batch.max_viability }} %
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container m-2">
|
||||
<input type="submit" value="Go to Batch Page">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div> <!-- /container -->
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
{% block endscript %}
|
||||
<script>
|
||||
const batch = document.getElementById('batch-select');
|
||||
const batchOpts = [...batch.children];
|
||||
const elements = document.getElementsByClassName("datatable");
|
||||
|
||||
document.getElementById('strain-select').addEventListener(
|
||||
'change',
|
||||
function(e){
|
||||
for(var i = 0; i < elements.length; i++) {
|
||||
elements[i].style.display = 'none';
|
||||
}
|
||||
batch.innerHTML = batchOpts.filter(
|
||||
o => e.target.value.includes(o.value)
|
||||
).map(o => o.outerHTML).join('');
|
||||
});
|
||||
|
||||
document.getElementById('batch-select').addEventListener(
|
||||
'click',
|
||||
function(e){
|
||||
var batch_id = e.target.value;
|
||||
for(var i = 0; i < elements.length; i++) {
|
||||
elements[i].style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById('data-' + batch_id).style.display = 'block';
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
0
yeast/templatetags/__init__.py
Normal file
0
yeast/templatetags/__init__.py
Normal file
14
yeast/templatetags/funcs.py
Normal file
14
yeast/templatetags/funcs.py
Normal file
@ -0,0 +1,14 @@
|
||||
from django import template
|
||||
|
||||
register = template.Library()
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger('django')
|
||||
|
||||
@register.filter
|
||||
def get_value_in_qs(queryset, key):
|
||||
batch_list = ','.join([str(x.id) for x in queryset if x.strain.id==key.id])
|
||||
|
||||
if batch_list:
|
||||
return batch_list
|
||||
return ''
|
@ -2,7 +2,7 @@ from django.urls import include, path
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib import admin
|
||||
|
||||
from yeast.views import YeastListView, BatchListView, home, sample, batch, batch_labels, addBatch, addStrain
|
||||
from yeast.views import YeastListView, BatchListView, home, sample, batch, batch_labels, addBatch, addStrain, get_batch
|
||||
|
||||
# app_name = 'yeast'
|
||||
|
||||
@ -14,6 +14,7 @@ urlpatterns = [
|
||||
path('batches/addstrain/', login_required(addStrain.as_view()), name='addstrain'),
|
||||
path('batches/<int:batch_id>/', batch, name='batch'),
|
||||
path('batches/', BatchListView.as_view(), name='batches'),
|
||||
path('batch_lookup/', get_batch, name='get_batch'),
|
||||
path('batch_labels/<int:batch_id>/', login_required(batch_labels), name='labels'),
|
||||
path('', home, name='home'),
|
||||
]
|
||||
|
@ -1,8 +1,10 @@
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.views.generic import ListView
|
||||
from django.views.generic.edit import CreateView
|
||||
from django.http import HttpResponse, HttpRequest
|
||||
from django.urls import reverse
|
||||
from django.http import JsonResponse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
from yeast.models import Yeast, Batch, Strain
|
||||
from config.extras import AveryLabel
|
||||
@ -24,8 +26,24 @@ def sample(request, yeast_id):
|
||||
sample_batch = get_object_or_404(Batch, pk=sample.batch_id)
|
||||
return render(request, 'yeast/sample.html', {'sample': sample, 'batch':sample_batch})
|
||||
|
||||
# @login_required
|
||||
# def get_batches(request):
|
||||
# strains = {}
|
||||
# for strain in Strain.objects.all():
|
||||
# batches = [x.id for x in Batch.objects.filter(strain=strain)]
|
||||
# if batches:
|
||||
# strains[strain.id] = batches
|
||||
|
||||
# return JsonResponse(
|
||||
# {'data': [strains]})
|
||||
|
||||
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',{})
|
||||
return render(request, 'yeast/home.html',{'batches': Batch.objects.all, 'strains': Strain.objects.all})
|
||||
|
||||
def batch(request, batch_id):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user