Skip to content
This repository has been archived by the owner on Feb 12, 2022. It is now read-only.

Commit

Permalink
added settings model to disable clothing ordering
Browse files Browse the repository at this point in the history
  • Loading branch information
exploide committed Aug 24, 2016
1 parent 37f598b commit 155142d
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 2 deletions.
6 changes: 5 additions & 1 deletion clothing/admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from clothing.models import Type, Size, Color, Order
from clothing.models import Type, Size, Color, Order, Settings
from django.contrib import admin


Expand All @@ -25,3 +25,7 @@ class OrderAdmin(admin.ModelAdmin):
ordering = ['person', 'type', 'size']
list_display_links = ['type', 'size', 'color']
list_filter = ['additional', 'color']

@admin.register(Settings)
class SettingsAdmin(admin.ModelAdmin):
list_display = ('clothing_ordering_enabled',)
36 changes: 36 additions & 0 deletions clothing/migrations/0004_auto_20160824_1724.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-08-24 15:24
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('clothing', '0003_auto_20160822_1559'),
]

operations = [
migrations.CreateModel(
name='Settings',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('clothing_ordering_enabled', models.BooleanField(default=False, verbose_name='Kleiderbestellung aktiv')),
],
options={
'verbose_name_plural': 'Einstellungen',
'verbose_name': 'Einstellungen',
},
),
migrations.AlterField(
model_name='order',
name='additional',
field=models.BooleanField(verbose_name='Selbst bezahltes Kleidungsstück'),
),
migrations.AlterField(
model_name='type',
name='additional_only',
field=models.BooleanField(default=False, verbose_name='Nur als selbst bezahltes Kleidungsstück möglich'),
),
]
28 changes: 28 additions & 0 deletions clothing/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError

from ophasebase.models import Ophase
from staff.models import Person
Expand Down Expand Up @@ -64,3 +65,30 @@ def __str__(self):
@staticmethod
def get_current(**kwargs):
return Order.objects.filter(person__ophase=Ophase.current(), **kwargs)


class Settings(models.Model):
"""Configuration for clothing app."""
class Meta:
verbose_name = _("Einstellungen")
verbose_name_plural = _("Einstellungen")

clothing_ordering_enabled = models.BooleanField(default=False, verbose_name=_("Kleiderbestellung aktiv"))

def get_name(self):
return '%s' % _("Clothing Einstellungen")

def __str__(self):
return self.get_name()

def clean(self, *args, **kwargs):
super().clean(*args, **kwargs)
if Settings.objects.count() > 0 and self.id != Settings.objects.get().id:
raise ValidationError(_("Es ist nur sinnvoll und möglich eine Instanz des Einstellungsobjekts anzulegen."))

@staticmethod
def instance():
try:
return Settings.objects.get()
except Settings.DoesNotExist:
return None
8 changes: 8 additions & 0 deletions clothing/templates/clothing/order.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

{% block content %}
<h2>{% trans "Kleidung bestellen" %}</h2>

{% if clothing_ordering_enabled %}
<div id="mainForm">
<form role="form" action="{{action}}" method="POST">
{% csrf_token %}
Expand All @@ -22,4 +24,10 @@ <h2>{% trans "Kleidung bestellen" %}</h2>
</form>
<div class="clearfix"></div>
</div>
{% else %}
<p>
{% trans "Aktuell ist die Kleiderbestellung nicht geöffnet." %}
</p>
{% endif %}

{% endblock %}
16 changes: 15 additions & 1 deletion clothing/views.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
from django.urls import reverse_lazy
from django.views.generic import TemplateView
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect, HttpResponseForbidden

from formtools.wizard.views import SessionWizardView

from clothing.forms import OrderAskMailForm, OrderClothingFormSet
from clothing.models import Settings
from staff.models import Person


class OrderClothingView(SessionWizardView):
form_list = [OrderAskMailForm, OrderClothingFormSet]
template_name = "clothing/order.html"

def get_context_data(self, form, **kwargs):
context = super().get_context_data(form=form, **kwargs)
settings = Settings.instance()
if settings is not None:
context['clothing_ordering_enabled'] = settings.clothing_ordering_enabled
else:
context['clothing_ordering_enabled'] = False
return context

def get_form_kwargs(self, step=None):
if step == "1":
email = self.get_cleaned_data_for_step("0")['email']
Expand All @@ -21,6 +31,10 @@ def get_form_kwargs(self, step=None):
return super().get_form_kwargs(step)

def done(self, form_list, form_dict, **kwargs):
settings = Settings.instance()
if settings is None or not settings.clothing_ordering_enabled:
return HttpResponseForbidden()

for form in form_dict.get('1'):
if 'type' in form.cleaned_data:
form.save()
Expand Down

0 comments on commit 155142d

Please sign in to comment.