Contest Entry class management foo

py3
Sebastian Lohff 7 years ago
parent 97b43db428
commit 625bd0f072

@ -4,7 +4,6 @@
- register users still has "reference" labels, make form better
- contest log add deadline
- cbr parser zum hochladen
- contest teilnahme klassen
- "Please register with your (uppercase) Callsign as Usernames. For DN-Calls, /[A-Z] is allowed." gibt es wohl noch wo
(Partially) Done
@ -24,6 +23,7 @@
- beim qso log kann noch vorne die uhrzeit dran
- bastla will anderen regex
- align log button with log
- contest teilnahme klassen
Glaube nich, dass ich das mache
- call dupe validation könnte ins model wandern

@ -1,5 +1,5 @@
from django.contrib import admin
from .models import Frequency, Band, Reference, QSO, User, Contest, ShadowCall
from .models import Frequency, Band, Reference, QSO, User, Contest, ShadowCall, EntryCategory
admin.site.register(User)
admin.site.register(QSO)
@ -8,3 +8,4 @@ admin.site.register(Frequency)
admin.site.register(Reference)
admin.site.register(Contest)
admin.site.register(ShadowCall)
admin.site.register(EntryCategory)

@ -5,7 +5,7 @@ from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout
from django.urls import reverse
from .models import User, Reference, QSO, ShadowCall
from .models import User, Reference, QSO, ShadowCall, EntryCategory
from .validators import CallUsernameValidator, CallLogValidator
class CustomUserCreationForm(UserCreationForm):
@ -37,6 +37,19 @@ class UpdateRefForm(forms.Form):
if not existingRef and not newRefName:
raise forms.ValidationError("Select either an existing ref or create a new one!")
class UpdateCategoryForm(forms.Form):
entry = forms.ModelChoiceField(label="Entry category", queryset=EntryCategory.objects.all())
def __init__(self, *args, **kwargs):
super(UpdateCategoryForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = "form-inline "
self.helper.form_style = 'inline'
self.helper.field_template = "bootstrap3/layout/inline_field.html"
self.helper.action = reverse("profile")
self.helper.add_input(Submit('submit', 'Set category'))
self.helper.layout = Layout('entry')
class QSOForm(forms.ModelForm):
class Meta:
model = QSO

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2017-01-26 18:52
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contest', '0011_auto_20170125_0126'),
]
operations = [
migrations.CreateModel(
name='EntryCategory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=40, unique=True)),
('description', models.TextField(blank=True)),
],
),
migrations.AddField(
model_name='user',
name='cat',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='contest.EntryCategory'),
),
]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2017-01-26 19:09
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('contest', '0012_auto_20170126_1852'),
]
operations = [
migrations.AlterField(
model_name='entrycategory',
name='name',
field=models.CharField(max_length=64, unique=True),
),
]

@ -24,6 +24,13 @@ class Reference(models.Model):
def __str__(self):
return self.name
class EntryCategory(models.Model):
name = models.CharField(max_length=64, unique=True)
description = models.TextField(blank=True)
def __str__(self):
return self.name
class ShadowCall(models.Model):
username = models.CharField(max_length=20, unique=True, db_index=True, validators=[CallUsernameValidator()])
ref = models.ForeignKey(Reference, models.SET_NULL,null=True, blank=True)
@ -32,7 +39,8 @@ class ShadowCall(models.Model):
return self.username
class User(AbstractUser):
ref = models.ForeignKey(Reference, models.SET_NULL,null=True, blank=True)
ref = models.ForeignKey(Reference, models.SET_NULL, null=True, blank=True)
cat = models.ForeignKey(EntryCategory, models.SET_NULL, null=True, blank=True)
def __init__(self, *args, **kwargs):
super(User, self).__init__(*args, **kwargs)

@ -14,7 +14,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
import datetime
from .models import User, Contest, Frequency, Reference, QSO, ShadowCall
from .forms import UpdateRefForm, QSOForm, QSOFormWithTime, CustomUserCreationForm, ShadowCallAddForm
from .forms import UpdateRefForm, QSOForm, QSOFormWithTime, CustomUserCreationForm, ShadowCallAddForm, UpdateCategoryForm
def index(request):
if request.user.is_authenticated():
@ -208,13 +208,30 @@ def register(request):
@login_required
def profile(request):
pwForm = None
catForm = None
if request.method == 'POST':
pwForm = PasswordChangeForm(user=request.user, data=request.POST)
if pwForm.is_valid():
pwForm.save()
auth_login(request, pwForm.user)
messages.success(request, "Password changed")
else:
if request.POST.get("submit", None) == "pwchange":
pwForm = PasswordChangeForm(user=request.user, data=request.POST)
if pwForm.is_valid():
pwForm.save()
auth_login(request, pwForm.user)
messages.success(request, "Password changed")
return HttpResponseRedirect(reverse("profile"))
else:
catForm = UpdateCategoryForm(data=request.POST)
if catForm.is_valid():
request.user.cat = catForm.cleaned_data["entry"]
request.user.save()
messages.success(request, "Entry category set")
return HttpResponseRedirect(reverse("profile"))
if not pwForm:
pwForm = PasswordChangeForm(user=request.user)
return render(request, 'registration/profile.html', {"pwForm": pwForm})
if not catForm:
catForm = UpdateCategoryForm(initial={'entry': request.user.cat})
return render(request, 'registration/profile.html', {"pwForm": pwForm, "catForm": catForm})

@ -40,15 +40,28 @@
</div>
{% endif %}
{% if not user.cat %}
<div class="row">
<div class="col-sm-12">
<div class="panel panel-warning">
<div class="panel-heading">You don't have a category!</div>
<div class="panel-body">
<p>
You don't have an <strong>entry category</strong>! Please set one in your <a href="{% url "profile" %}">profile</a>.
</p>
</div>
</div>
</div>
</div>
{% endif %}
{% if user.is_staff %}
<div class="row">
<div class="col-sm-12">
<div class="panel panel-primary">
<div class="panel-heading">You are staff!</div>
<div class="panel-body">
<p>
<p>Hey, you are <strong>staff</strong>. Do you want to start <a href="{% url "contest:registerRefs" %}">registering people</a>?</p>
</p>
</div>
</div>
</div>

@ -9,13 +9,19 @@
<div class="panel-heading">User Info</div>
<div class="panel-body">
<div class="form-group">
<label class="control-label">User</label>
<label class="control-label">User <span class="glyphicon glyphicon-ok-sign text-success"></span></label>
<p class="form-control-static">{{ user }}</p>
</div>
<div class="form-group">
<label class="control-label">Exchange</label>
<label class="control-label">Exchange <span class="glyphicon {% if user.ref %}glyphicon-ok-sign text-success{% else %}glyphicon-remove-sign text-danger{% endif %}"></span></label>
<p class="form-control-static">{{ user.ref|default:"Not registered" }}</p>
</div>
<div class="form-group">
<label class="control-label">Contest Entry <span class="glyphicon {% if user.cat %}glyphicon-ok-sign text-success{% else %}glyphicon-remove-sign text-danger{% endif %}"></span></label>
<p>
{% crispy catForm %}
</p>
</div>
</div>
</div>
</div>
@ -26,7 +32,7 @@
<form method="POST" action="{% url "profile" %}">
{% csrf_token %}
{{ pwForm|crispy }}
<button type="submit" class="btn btn-primary" name="form" value="pwchange">Change Password</button>
<button type="submit" class="btn btn-primary" name="submit" value="pwchange">Change Password</button>
</form>
</div>
</div>

Loading…
Cancel
Save