Merge branch 'events-form'
This commit is contained in:
commit
8ef4b0a4ea
9 changed files with 106 additions and 48 deletions
18
.editorconfig
Normal file
18
.editorconfig
Normal file
|
@ -0,0 +1,18 @@
|
|||
# https://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = tab
|
||||
|
||||
[*.py]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# 2 spaces in YAML
|
||||
[*.{yaml,yml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
|
@ -1,3 +1,6 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from .models import Event, EventRegistration
|
||||
|
||||
admin.site.register(Event)
|
||||
admin.site.register(EventRegistration)
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
# Generated by Django 3.0.8 on 2020-07-22 00:49
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Event',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateTimeField()),
|
||||
('capacity', models.IntegerField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='EventRegistration',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('state', models.CharField(choices=[('I', 'Interested'), ('A', 'Admitted'), ('D', 'Denied')], max_length=1)),
|
||||
('event_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.Event')),
|
||||
('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -4,19 +4,32 @@ from users.models import CustomUser
|
|||
|
||||
|
||||
class Event(models.Model):
|
||||
date = models.DateTimeField()
|
||||
capacity = models.IntegerField()
|
||||
MORNING, AFTERNOON, EVENING = range(3)
|
||||
TIME_SLOTS = {
|
||||
MORNING: "Voormiddag",
|
||||
AFTERNOON: "Namiddag",
|
||||
EVENING: "Avond",
|
||||
}
|
||||
date = models.DateField()
|
||||
time = models.IntegerField(choices=TIME_SLOTS.items(), default=MORNING)
|
||||
capacity = models.IntegerField(default=6)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.date} {self.TIME_SLOTS[self.time]}"
|
||||
|
||||
|
||||
class EventRegistration(models.Model):
|
||||
INTERESTED = "I"
|
||||
ADMITTED = "A"
|
||||
DENIED = "D"
|
||||
REGISTRATION_STATE = (
|
||||
('I', 'Interested'),
|
||||
('A', 'Admitted'),
|
||||
('D', 'Denied'),
|
||||
(INTERESTED, "Interested"),
|
||||
(ADMITTED, "Admitted"),
|
||||
(DENIED, "Denied"),
|
||||
)
|
||||
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
|
||||
state = models.CharField(max_length=1, choices=REGISTRATION_STATE)
|
||||
|
||||
def __str__(self):
|
||||
return f'Reservation[{self.user.username}:{self.event.date}:{self.state}]'
|
||||
return f"Reservation[{self.user.username}:{self.event.date}:{self.state}]"
|
||||
|
|
10
events/templates/events/detail.html
Normal file
10
events/templates/events/detail.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{{ event.date }} (maximum {{ event.capacity }} mensen)</h2>
|
||||
<ul>
|
||||
{% for regi in event.registration %}
|
||||
{{ regi.user.username }}: {{regi.state}}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
19
events/templates/events/index.html
Normal file
19
events/templates/events/index.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<ul>
|
||||
{% for event in events %}
|
||||
<li>{{ event.date }} {{ event.time }} (maximum {{ event.capacity }} mensen)
|
||||
<ul>
|
||||
<form action="{% url 'events:register' event.id %}" method="post">
|
||||
{% csrf_token %}
|
||||
{% for regi in event.registration %}
|
||||
{{ regi.user.username }}: {{regi.state}}
|
||||
{% endfor %}
|
||||
<li><input type="submit" value="Ik wil komen"></li>
|
||||
</form>
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
|
@ -2,7 +2,9 @@ from django.urls import path
|
|||
|
||||
from . import views
|
||||
|
||||
app_name = "events"
|
||||
urlpatterns = [
|
||||
path('', views.index, name='index'),
|
||||
path('test/', views.view_score_stuff, name='score_stuff'),
|
||||
path("", views.index, name="index"),
|
||||
path("<int:event_id>/", views.register, name="register"),
|
||||
path("test/", views.view_score_stuff, name="score_stuff"),
|
||||
]
|
||||
|
|
|
@ -1,17 +1,32 @@
|
|||
from django.shortcuts import render
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.utils import timezone
|
||||
from django.urls import reverse
|
||||
import datetime
|
||||
|
||||
# Create your views here.
|
||||
from django.http import HttpResponse
|
||||
from .models import Event, EventRegistration, CustomUser
|
||||
|
||||
from events.tasks import assign_reservations
|
||||
|
||||
|
||||
def index(request):
|
||||
return HttpResponse(
|
||||
events = Event.objects.filter(date__gte=timezone.now().date()).order_by("date")[:20]
|
||||
return render(request, "events/index.html", {"events": events})
|
||||
|
||||
)
|
||||
|
||||
def view_score_stuff(request):
|
||||
return HttpResponse(
|
||||
assign_reservations()
|
||||
)
|
||||
|
||||
|
||||
def register(request, event_id):
|
||||
if request.method == "POST":
|
||||
event = get_object_or_404(Event, id=event_id)
|
||||
|
||||
# registration = Event.entry_set.create(
|
||||
# state=EventRegistration.INTERESTED,
|
||||
# event=event,
|
||||
# user=CustomUser.objects.get(),
|
||||
# )
|
||||
return HttpResponseRedirect(reverse("events:index", args=(event.id,)))
|
||||
|
|
12
templates/base.html
Normal file
12
templates/base.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width"/>
|
||||
<title>Zeus WPI Kelderregistratiesysteem™</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Zeus WPI Kelderregistratiesysteem™</h1>
|
||||
{% block content %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue