parent
d20b8754ba
commit
ee05f845cb
@ -1,8 +1,9 @@
|
||||
from django.contrib import admin
|
||||
from .models import Frequency, Band, Reference, QSO, User
|
||||
from .models import Frequency, Band, Reference, QSO, User, Contest
|
||||
|
||||
admin.site.register(User)
|
||||
admin.site.register(QSO)
|
||||
admin.site.register(Band)
|
||||
admin.site.register(Frequency)
|
||||
admin.site.register(Reference)
|
||||
admin.site.register(Contest)
|
||||
|
@ -1,14 +1,141 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from django.contrib.admin.views.decorators import staff_member_required, login_required
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.admin.views.decorators import staff_member_required
|
||||
from django.db.models import Q
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.contrib import messages
|
||||
from django.urls import reverse
|
||||
|
||||
from .models import User
|
||||
import datetime
|
||||
|
||||
from .models import User, Contest, Frequency, Reference, QSO
|
||||
from .forms import UpdateRefForm, QSOForm
|
||||
|
||||
@login_required
|
||||
def index(request):
|
||||
return render(request, 'index.html', {})
|
||||
if request.user.is_authenticated():
|
||||
return HttpResponseRedirect(reverse("contest:index"))
|
||||
|
||||
return render(request, "index.html", {"loginForm": AuthenticationForm()})
|
||||
|
||||
@login_required
|
||||
def contestIndex(request):
|
||||
#messages.debug(request, "Debug GLITCHHHHH")
|
||||
#messages.info(request, "This info is very educational")
|
||||
#messages.warning(request, "You got a warning")
|
||||
#messages.error(request, "Error!!!")
|
||||
#messages.success(request, "Great Success")
|
||||
qsoform = QSOForm(request.user)
|
||||
|
||||
return render(request, 'contest/index.html', {"qsoform": qsoform})
|
||||
|
||||
@login_required
|
||||
def log(request):
|
||||
form = None
|
||||
|
||||
qsos = QSO.objects.filter(owner=request.user).order_by("-ownNo")
|
||||
|
||||
if request.method == 'POST':
|
||||
form = QSOForm(user=request.user, data=request.POST)
|
||||
if form.is_valid():
|
||||
l = form.instance
|
||||
if not l.time:
|
||||
# set current time
|
||||
l.time = datetime.datetime.now()
|
||||
|
||||
l.owner = request.user
|
||||
l.save()
|
||||
|
||||
messages.success(request, "QSO saved!")
|
||||
|
||||
return HttpResponseRedirect(reverse("contest:log"))
|
||||
else:
|
||||
# FIXME: data initial my qso number
|
||||
data = {
|
||||
"ownNo": qsos[0].ownNo + 1 if len(qsos) > 0 else 1,
|
||||
"reportRX": "59",
|
||||
"reportTX": "59",
|
||||
}
|
||||
form = QSOForm(request.user, initial=data)
|
||||
|
||||
|
||||
return render(request, 'contest/log.html', {'form': form, 'qsos': qsos})
|
||||
|
||||
@login_required
|
||||
def logEdit(request, qsoid):
|
||||
qso = QSO.objects.get(id=qsoid, owner=request.user)
|
||||
form = None
|
||||
|
||||
if request.method == 'POST':
|
||||
form = QSOForm(user=request.user, instance=qso, data=request.POST)
|
||||
if form.is_valid():
|
||||
form.instance.save()
|
||||
|
||||
messages.info(request, "QSO has been edited")
|
||||
return HttpResponseRedirect(reverse("contest:log"))
|
||||
else:
|
||||
form = QSOForm(user=request.user, instance=qso)
|
||||
|
||||
return render(request, 'contest/logEdit.html', {'form': form, "qso": qso})
|
||||
|
||||
def logDelete(request, qsoid):
|
||||
qso = QSO.objects.get(id=qsoid, owner=request.user)
|
||||
|
||||
if request.method == 'POST':
|
||||
if "delete" in request.POST:
|
||||
if request.POST["delete"] == "yes":
|
||||
qso.delete()
|
||||
messages.info(request, "QSO has been deleted")
|
||||
return HttpResponseRedirect(reverse("contest:log"))
|
||||
elif request.POST["delete"] == "no":
|
||||
return HttpResponseRedirect(reverse("contest:log"))
|
||||
|
||||
return render(request, 'contest/logDelete.html', {"qso": qso})
|
||||
|
||||
|
||||
|
||||
@staff_member_required
|
||||
def registerRefs(request):
|
||||
allUser = User.objects.all()
|
||||
refsMissingUser = User.objects.filter(ref=None).order_by("username")
|
||||
refsNotMissingUser = User.objects.filter(~Q(ref=None)).order_by("username")
|
||||
|
||||
qsos = QSO.objects.all().order_by("-time")
|
||||
|
||||
return render(request, 'contest/registerRefs.html', {'alluser': allUser, 'refsMissingUser': refsMissingUser, "refsNotMissinguser": refsNotMissingUser, "qsos": qsos})
|
||||
|
||||
@staff_member_required
|
||||
def updateRef(request, uid):
|
||||
user = User.objects.get(id=uid)
|
||||
form = None
|
||||
|
||||
if request.method == 'POST':
|
||||
form = UpdateRefForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
ref = None
|
||||
if form.cleaned_data["existingRef"]:
|
||||
print("Got an existing Ref")
|
||||
ref = form.cleaned_data["existingRef"]
|
||||
else:
|
||||
ref = Reference(name=form.cleaned_data["newRefName"])
|
||||
ref.save()
|
||||
messages.info(request, "New Ref '%s' created" % ref)
|
||||
|
||||
user.ref = ref
|
||||
user.save()
|
||||
messages.success(request, "%s ref set to %s" % (user, ref))
|
||||
return HttpResponseRedirect(reverse("contest:registerRefs"))
|
||||
else:
|
||||
form = UpdateRefForm()
|
||||
|
||||
return render(request, 'contest/updateRef.html', {'user': user, 'form': form})
|
||||
|
||||
def overview(request):
|
||||
# FIXME: Hardcoded for cqtu... everywhere
|
||||
c = Contest.objects.get(id=1)
|
||||
qrgs = Frequency.objects.filter(band__contest=c).order_by("channel")
|
||||
return render(request, 'contest/overview.html', {'contest': c, 'qrgs': qrgs})
|
||||
|
||||
return render(request, 'register_refs.html', {'alluser': User.objects.all()})
|
||||
def register(request):
|
||||
return render(request, 'registration/register.html', {})
|
||||
|
@ -1,7 +1,37 @@
|
||||
body {
|
||||
min-height: 2000px;
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.navbar-static-top {
|
||||
margin-bottom: 19px;
|
||||
}
|
||||
|
||||
html {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
}
|
||||
body {
|
||||
/* Margin bottom by footer height */
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
/* Set the fixed height of the footer here */
|
||||
height: 60px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
|
||||
.container {
|
||||
width: auto;
|
||||
padding: 0 15px;
|
||||
}
|
||||
.container .text-muted {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.asteriskField {
|
||||
display: none;
|
||||
}
|
||||
|
@ -1,29 +0,0 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Welcome!</h2>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
Register Someone!!!!
|
||||
Here be FORM for registering someone without a ref
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
Here is a Table with all OMs/YLs in the contest!
|
||||
<table>
|
||||
<tr>
|
||||
<th>Call</th>
|
||||
<th>Ref</th>
|
||||
</tr>
|
||||
{% for u in alluser %}
|
||||
<tr>
|
||||
<td>{{ u.username }}</td>
|
||||
<td>{{ u.ref|default:"unknown / unset" }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -1,19 +1,46 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Welcome!</h2>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
Please Login!
|
||||
<form action="#" method="post">
|
||||
{{ form.as_table }}
|
||||
<div class="col-sm-4 col-sm-offset-4">
|
||||
<h2 class="text-center">Please login</h2>
|
||||
<p>
|
||||
Don't have an account? <a href="{% url 'register' %}">Register here!</a>
|
||||
</p>
|
||||
<p>
|
||||
Trouble logging in? Remember that your call is all upper-case.
|
||||
</p>
|
||||
|
||||
<form action="{% url "login" %}" method="post" class="uniForm">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
|
||||
<input type="submit" class="btn btn-default" value="Login">
|
||||
<button type="submit" class="btn btn-default" value="Login">Login</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<blockquote>
|
||||
Serverbasierte Loesung finde ich nach eingem Ueberlegen doof.
|
||||
<footer>DL7BST</footer>
|
||||
</blockquote>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
Please Login! Don't have an account? <a href="{% url 'register' %}">Register here!</a>
|
||||
<form action="#" method="post" class="uniForm">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
|
||||
<button type="submit" class="btn btn-default" value="Login">Login</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
Loading…
Reference in new issue