mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Basic item settings
This commit is contained in:
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-09-16 22:52+0200\n"
|
||||
"POT-Creation-Date: 2014-09-27 12:36+0200\n"
|
||||
"PO-Revision-Date: 2014-09-11 11:05+200\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: Raphael Michel <michel@rami.io>\n"
|
||||
@@ -26,31 +26,31 @@ msgstr "Deutsch"
|
||||
msgid "English"
|
||||
msgstr "Englisch"
|
||||
|
||||
#: tixlbase/admin.py:18
|
||||
#: tixlbase/admin.py:19
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Die beiden eingegebenen Passwörter stimmen nicht überein."
|
||||
|
||||
#: tixlbase/admin.py:20 tixlcontrol/views/auth.py:16
|
||||
#: tixlbase/admin.py:21 tixlcontrol/views/auth.py:16
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: tixlbase/admin.py:22
|
||||
#: tixlbase/admin.py:23
|
||||
msgid "Password confirmation"
|
||||
msgstr "Passwort bestätigen"
|
||||
|
||||
#: tixlbase/admin.py:24
|
||||
#: tixlbase/admin.py:25
|
||||
msgid "Enter the same password as above, for verification."
|
||||
msgstr "Geben Sie zur Bestätigung das selbe Passwort wie oben ein"
|
||||
|
||||
#: tixlbase/admin.py:52
|
||||
#: tixlbase/admin.py:53
|
||||
msgid "Personal info"
|
||||
msgstr "Persönliche Daten"
|
||||
|
||||
#: tixlbase/admin.py:53
|
||||
#: tixlbase/admin.py:54
|
||||
msgid "Locale"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: tixlbase/admin.py:54
|
||||
#: tixlbase/admin.py:55
|
||||
msgid "Permissions"
|
||||
msgstr "Berechtigungen"
|
||||
|
||||
@@ -111,7 +111,7 @@ msgstr "Veranstalter"
|
||||
msgid "Can create events"
|
||||
msgstr "Kann Veranstaltungen erstellen"
|
||||
|
||||
#: tixlbase/models.py:178 tixlbase/models.py:314
|
||||
#: tixlbase/models.py:178 tixlbase/models.py:318
|
||||
#, python-format
|
||||
msgid "%(name)s on %(object)s"
|
||||
msgstr "%(name)s für %(object)s"
|
||||
@@ -219,7 +219,7 @@ msgstr ""
|
||||
"Das Datum, bis zu dem Zahlungseingänge akzeptiert werden. Diese Einstellung "
|
||||
"hat Vorrang über der oben eingestellten Anzahl an Tagen"
|
||||
|
||||
#: tixlbase/models.py:294
|
||||
#: tixlbase/models.py:294 tixlbase/models.py:409
|
||||
msgid "Event"
|
||||
msgstr "Veranstaltung"
|
||||
|
||||
@@ -233,55 +233,99 @@ msgstr "Veranstaltungen"
|
||||
msgid "Can change event settings"
|
||||
msgstr "Kann Veranstaltungseinstellungen ändern"
|
||||
|
||||
#: tixlbase/models.py:320
|
||||
#: tixlbase/models.py:314
|
||||
msgid "Can change item settings"
|
||||
msgstr "Kann Produkte ändern"
|
||||
|
||||
#: tixlbase/models.py:324
|
||||
msgid "Event permission"
|
||||
msgstr "Veranstaltungs-Berechtigung"
|
||||
|
||||
#: tixlbase/models.py:321
|
||||
#: tixlbase/models.py:325
|
||||
msgid "Event permissions"
|
||||
msgstr "Veranstaltungs-Berechtigungen"
|
||||
|
||||
#: tixlbase/models.py:333
|
||||
#: tixlbase/models.py:337
|
||||
msgid "Category name"
|
||||
msgstr "Bezeichnung"
|
||||
|
||||
#: tixlbase/models.py:343
|
||||
#: tixlbase/models.py:347
|
||||
msgid "Item category"
|
||||
msgstr "Produktkategorie"
|
||||
|
||||
#: tixlbase/models.py:344
|
||||
#: tixlbase/models.py:348
|
||||
msgid "Item categories"
|
||||
msgstr "Produktkategorien"
|
||||
|
||||
#: tixlbase/models.py:361
|
||||
#: tixlbase/models.py:362
|
||||
msgid "Property name"
|
||||
msgstr "Bezeichnung"
|
||||
|
||||
#: tixlbase/models.py:369
|
||||
msgid "Item property"
|
||||
msgstr "Eigenschaft"
|
||||
|
||||
#: tixlbase/models.py:370
|
||||
msgid "Item properties"
|
||||
msgstr "Eigenschaften"
|
||||
|
||||
#: tixlbase/models.py:386
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#: tixlbase/models.py:416
|
||||
msgid "Category"
|
||||
msgstr "Kategorie"
|
||||
|
||||
#: tixlbase/models.py:420 tixlcontrol/templates/tixlcontrol/items/index.html:9
|
||||
msgid "Item name"
|
||||
msgstr "Produktbezeichnung"
|
||||
|
||||
#: tixlbase/models.py:366
|
||||
#: tixlbase/models.py:424
|
||||
msgid "Active"
|
||||
msgstr "aktiviert"
|
||||
|
||||
#: tixlbase/models.py:428
|
||||
msgid "Short description"
|
||||
msgstr "Kurze Beschreibung"
|
||||
|
||||
#: tixlbase/models.py:367
|
||||
#: tixlbase/models.py:429
|
||||
msgid "This is shown below the item name in lists."
|
||||
msgstr "Wird in Listen unter dem Name angezeigt."
|
||||
|
||||
#: tixlbase/models.py:371
|
||||
#: tixlbase/models.py:433
|
||||
msgid "Long description"
|
||||
msgstr "Lange Beschreibung"
|
||||
|
||||
#: tixlbase/models.py:376
|
||||
#: tixlbase/models.py:438 tixlbase/models.py:503
|
||||
msgid "Default price"
|
||||
msgstr "Basispreis"
|
||||
|
||||
#: tixlbase/models.py:381
|
||||
msgid "Included taxes in percent"
|
||||
#: tixlbase/models.py:443
|
||||
msgid "Taxes included in percent"
|
||||
msgstr "Steuern inklusive in Prozent"
|
||||
|
||||
#: tixlbase/models.py:394
|
||||
#: tixlbase/models.py:449 tixlcontrol/templates/tixlcontrol/items/base.html:8
|
||||
msgid "Properties"
|
||||
msgstr "Eigenschaften"
|
||||
|
||||
#: tixlbase/models.py:451
|
||||
msgid ""
|
||||
"The selected properties will be available for the user to select. After "
|
||||
"saving this field, move to the 'Variations' tab to configure the details."
|
||||
msgstr ""
|
||||
"Die hier ausgewählten Eigenschaften stehen für dieses Produkt zur Verfügung. "
|
||||
"Nach der Auswahl können Sie im Tab 'Varianten' die Details konfigurieren:"
|
||||
|
||||
#: tixlbase/models.py:466 tixlcontrol/templates/tixlcontrol/item/base.html:3
|
||||
msgid "Item"
|
||||
msgstr "Produkt"
|
||||
|
||||
#: tixlbase/models.py:395
|
||||
#: tixlbase/models.py:467 tixlcontrol/templates/tixlcontrol/event/base.html:20
|
||||
#: tixlcontrol/templates/tixlcontrol/items/base.html:3
|
||||
#: tixlcontrol/templates/tixlcontrol/items/base.html:6
|
||||
#: tixlcontrol/templates/tixlcontrol/items/index.html:3
|
||||
#: tixlcontrol/templates/tixlcontrol/items/index.html:5
|
||||
msgid "Items"
|
||||
msgstr "Produkte"
|
||||
|
||||
@@ -329,10 +373,14 @@ msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/event/settings.html:9
|
||||
#: tixlcontrol/templates/tixlcontrol/item/index.html:9
|
||||
msgid "Your changes have been saved."
|
||||
msgstr "Die Änderungen wurden gespeichert."
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/event/settings.html:15
|
||||
#: tixlcontrol/templates/tixlcontrol/item/base.html:7
|
||||
#: tixlcontrol/templates/tixlcontrol/item/index.html:5
|
||||
#: tixlcontrol/templates/tixlcontrol/item/index.html:15
|
||||
msgid "General information"
|
||||
msgstr "Allgemeine Informationen"
|
||||
|
||||
@@ -349,6 +397,7 @@ msgid "Payment settings"
|
||||
msgstr "Zahlungseinstellungen"
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/event/settings.html:42
|
||||
#: tixlcontrol/templates/tixlcontrol/item/index.html:34
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
@@ -373,6 +422,22 @@ msgstr "Beginn"
|
||||
msgid "End date"
|
||||
msgstr "Ende"
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/item/base.html:5
|
||||
msgid "Modify item:"
|
||||
msgstr ""
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/item/index.html:23
|
||||
msgid "Price settings"
|
||||
msgstr "Preis"
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/item/index.html:28
|
||||
msgid "Variations"
|
||||
msgstr "Varianten"
|
||||
|
||||
#: tixlcontrol/templates/tixlcontrol/items/base.html:7
|
||||
msgid "Categories"
|
||||
msgstr "Kategorien"
|
||||
|
||||
#: tixlcontrol/views/auth.py:15
|
||||
msgid "E-mail address"
|
||||
msgstr "E-Mail-Adresse"
|
||||
|
||||
@@ -406,18 +406,23 @@ class Item(models.Model):
|
||||
Event,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="items",
|
||||
verbose_name=_("Event"),
|
||||
)
|
||||
category = models.ForeignKey(
|
||||
ItemCategory,
|
||||
on_delete=models.PROTECT,
|
||||
related_name="items",
|
||||
blank=True, null=True
|
||||
blank=True, null=True,
|
||||
verbose_name=_("Category"),
|
||||
)
|
||||
name = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Item name")
|
||||
)
|
||||
active = models.BooleanField(default=True)
|
||||
active = models.BooleanField(
|
||||
default=True,
|
||||
verbose_name=_("Active"),
|
||||
)
|
||||
deleted = models.BooleanField(default=False)
|
||||
short_description = models.TextField(
|
||||
verbose_name=_("Short description"),
|
||||
@@ -435,12 +440,18 @@ class Item(models.Model):
|
||||
)
|
||||
tax_rate = models.DecimalField(
|
||||
null=True, blank=True,
|
||||
verbose_name=_("Included taxes in percent"),
|
||||
verbose_name=_("Taxes included in percent"),
|
||||
max_digits=7, decimal_places=2
|
||||
)
|
||||
properties = models.ManyToManyField(
|
||||
Property,
|
||||
related_name='items',
|
||||
verbose_name=_("Properties"),
|
||||
help_text=_(
|
||||
'The selected properties will be available for the user '
|
||||
+ 'to select. After saving this field, move to the '
|
||||
+ '\'Variations\' tab to configure the details.'
|
||||
)
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
|
||||
@@ -17,4 +17,5 @@
|
||||
</li>
|
||||
<li {% if url_name == "event.index" %}class="active"{% endif %}><a href="{% url 'control:event.index' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Dashboard" %}</a></li>
|
||||
<li {% if url_name == "event.settings" %}class="active"{% endif %}><a href="{% url 'control:event.settings' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Settings" %}</a></li>
|
||||
<li {% if "event.item" in url_name %}class="active"{% endif %}><a href="{% url 'control:event.items' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Items" %}</a></li>
|
||||
{% endblock %}
|
||||
|
||||
11
src/tixlcontrol/templates/tixlcontrol/item/base.html
Normal file
11
src/tixlcontrol/templates/tixlcontrol/item/base.html
Normal file
@@ -0,0 +1,11 @@
|
||||
{% extends "tixlcontrol/event/base.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}{{ item.name }} :: {% trans "Item" %}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>{% trans "Modify item:" %} {{ item.name }}</h1>
|
||||
<ul class="nav nav-pills">
|
||||
<li {% if "event.item" == url_name %}class="active"{% endif %}><a href="{% url 'control:event.item' organizer=request.event.organizer.slug event=request.event.slug item=item.pk %}">{% trans "General information" %}</a></li>
|
||||
</ul>
|
||||
{% block inside %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
39
src/tixlcontrol/templates/tixlcontrol/item/index.html
Normal file
39
src/tixlcontrol/templates/tixlcontrol/item/index.html
Normal file
@@ -0,0 +1,39 @@
|
||||
{% extends "tixlcontrol/item/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
{% block inside %}
|
||||
<h2>{% trans "General information" %}</h2>
|
||||
|
||||
{% if "success" in request.GET %}
|
||||
<div class="alert alert-success">
|
||||
{% trans "Your changes have been saved." %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<form action="" method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
<fieldset>
|
||||
<legend>{% trans "General information" %}</legend>
|
||||
{% bootstrap_field form.name layout="horizontal" %}
|
||||
{% bootstrap_field form.active layout="horizontal" %}
|
||||
{% bootstrap_field form.category layout="horizontal" %}
|
||||
{% bootstrap_field form.short_description layout="horizontal" %}
|
||||
{% bootstrap_field form.long_description layout="horizontal" %}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{% trans "Price settings" %}</legend>
|
||||
{% bootstrap_field form.default_price layout="horizontal" %}
|
||||
{% bootstrap_field form.tax_rate layout="horizontal" %}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{% trans "Variations" %}</legend>
|
||||
{% bootstrap_field form.properties layout="horizontal" %}
|
||||
</fieldset>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{% trans "Save" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
12
src/tixlcontrol/templates/tixlcontrol/items/base.html
Normal file
12
src/tixlcontrol/templates/tixlcontrol/items/base.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% extends "tixlcontrol/event/base.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "Items" %}{% endblock %}
|
||||
{% block content %}
|
||||
<ul class="nav nav-pills">
|
||||
<li {% if "event.items" == url_name %}class="active"{% endif %}><a href="{% url 'control:event.items' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Items" %}</a></li>
|
||||
<li {% if "event.items.categories" in url_name %}class="active"{% endif %}><a href="{% url 'control:event.items.categories' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Categories" %}</a></li>
|
||||
<li {% if "event.items.properties" in url_name %}class="active"{% endif %}><a href="{% url 'control:event.items.properties' organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Properties" %}</a></li>
|
||||
</ul>
|
||||
{% block inside %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
20
src/tixlcontrol/templates/tixlcontrol/items/index.html
Normal file
20
src/tixlcontrol/templates/tixlcontrol/items/index.html
Normal file
@@ -0,0 +1,20 @@
|
||||
{% extends "tixlcontrol/items/base.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "Items" %}{% endblock %}
|
||||
{% block inside %}
|
||||
<h1>{% trans "Items" %}</h1>
|
||||
<table class="table table-condensed table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans "Item name" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for i in items %}
|
||||
<tr>
|
||||
<td><strong><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=i.pk %}">{{ i.name }}</a></strong></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock %}
|
||||
@@ -1,5 +1,5 @@
|
||||
from django.conf.urls import patterns, url, include
|
||||
from tixlcontrol.views import main, event
|
||||
from tixlcontrol.views import main, event, item
|
||||
|
||||
urlpatterns = patterns('',)
|
||||
urlpatterns += patterns(
|
||||
@@ -16,9 +16,13 @@ urlpatterns += patterns(
|
||||
'tixlcontrol.views.event',
|
||||
url(r'^event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/', include(
|
||||
patterns(
|
||||
'tixlcontrol.views.event',
|
||||
url(r'^$', 'index', name='event.index'),
|
||||
'tixlcontrol.views',
|
||||
url(r'^$', 'event.index', name='event.index'),
|
||||
url(r'^settings$', event.EventUpdate.as_view(), name='event.settings'),
|
||||
url(r'^items$', item.ItemList.as_view(), name='event.items'),
|
||||
url(r'^items/(?P<item>\d+)/$', item.ItemUpdateGeneral.as_view(), name='event.item'),
|
||||
url(r'^categories$', item.CategoryList.as_view(), name='event.items.categories'),
|
||||
url(r'^properties$', item.PropertyList.as_view(), name='event.items.properties'),
|
||||
)
|
||||
))
|
||||
)
|
||||
|
||||
78
src/tixlcontrol/views/item.py
Normal file
78
src/tixlcontrol/views/item.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from django.views.generic import ListView
|
||||
from django.views.generic.edit import UpdateView
|
||||
from django.core.urlresolvers import resolve, reverse
|
||||
from django import forms
|
||||
|
||||
from tixlbase.models import Item, ItemCategory, Property
|
||||
from tixlcontrol.permissions import EventPermissionRequiredMixin
|
||||
|
||||
|
||||
class ItemList(ListView):
|
||||
model = Item
|
||||
context_object_name = 'items'
|
||||
template_name = 'tixlcontrol/items/index.html'
|
||||
|
||||
def get_queryset(self):
|
||||
return Item.objects.filter(
|
||||
event=self.request.event
|
||||
)
|
||||
|
||||
|
||||
class CategoryList(ListView):
|
||||
model = ItemCategory
|
||||
context_object_name = 'items'
|
||||
template_name = 'tixlcontrol/items/index.html'
|
||||
|
||||
def get_queryset(self):
|
||||
return ItemCategory.objects.filter(
|
||||
event=self.request.event
|
||||
)
|
||||
|
||||
|
||||
class PropertyList(ListView):
|
||||
model = Property
|
||||
context_object_name = 'items'
|
||||
template_name = 'tixlcontrol/items/index.html'
|
||||
|
||||
def get_queryset(self):
|
||||
return Property.objects.filter(
|
||||
event=self.request.event
|
||||
)
|
||||
|
||||
|
||||
class ItemUpdateFormGeneral(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Item
|
||||
localized_fields = '__all__'
|
||||
fields = [
|
||||
'category',
|
||||
'name',
|
||||
'active',
|
||||
'short_description',
|
||||
'long_description',
|
||||
'default_price',
|
||||
'tax_rate',
|
||||
'properties',
|
||||
]
|
||||
|
||||
|
||||
class ItemUpdateGeneral(EventPermissionRequiredMixin, UpdateView):
|
||||
model = Item
|
||||
form_class = ItemUpdateFormGeneral
|
||||
template_name = 'tixlcontrol/item/index.html'
|
||||
permission = 'can_change_items'
|
||||
context_object_name = 'item'
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
url = resolve(self.request.path_info)
|
||||
return self.request.event.items.get(
|
||||
id=url.kwargs['item']
|
||||
)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('control:event.item', kwargs={
|
||||
'organizer': self.request.event.organizer.slug,
|
||||
'event': self.request.event.slug,
|
||||
'item': self.get_object().pk,
|
||||
}) + '?success=true'
|
||||
Reference in New Issue
Block a user