Moved question<>item relation to the question side

Cleared migration history
This commit is contained in:
Raphael Michel
2015-10-06 00:00:38 +02:00
parent eb1c166c4e
commit e6767afbd1
27 changed files with 272 additions and 741 deletions

View File

@@ -13,9 +13,11 @@ from pretix.base.models import * # NOQA
if Organizer.objects.exists():
print("There already is data in your DB!")
sys.exit(0)
user = User.objects.get(
identifier='admin@localhost',
)
user = User.objects.get_or_create(
email='admin@localhost',
)[0]
user.set_password('admin')
user.save()
organizer = Organizer.objects.create(
name='MRMCD e.V', slug='mrmcd'
)

View File

@@ -1,26 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uuid
import django.core.validators
import django.db.models.deletion
import versions.models
from django.conf import settings
from django.contrib.auth.hashers import make_password
from django.db import migrations, models
import pretix.base.i18n
import pretix.base.models
def initial_user(apps, schema_editor):
User = apps.get_model("pretixbase", "User")
user = User(identifier='admin@localhost', email='admin@localhost')
user.is_staff = True
user.is_superuser = True
user.password = make_password('admin')
user.save()
class Migration(migrations.Migration):
dependencies = [
@@ -31,38 +23,58 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='User',
fields=[
('id', models.AutoField(serialize=False, primary_key=True, auto_created=True, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, verbose_name='last login', null=True)),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('identifier', models.CharField(max_length=255, unique=True)),
('username', models.CharField(max_length=120, blank=True, help_text='Letters, digits and ./+/-/_ only.', null=True)),
('email', models.EmailField(max_length=254, blank=True, verbose_name='E-mail', db_index=True, null=True)),
('givenname', models.CharField(max_length=255, blank=True, verbose_name='Given name', null=True)),
('familyname', models.CharField(max_length=255, blank=True, verbose_name='Family name', null=True)),
('is_active', models.BooleanField(default=True, verbose_name='Is active')),
('is_staff', models.BooleanField(default=False, verbose_name='Is site admin')),
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('password', models.CharField(verbose_name='password', max_length=128)),
('last_login', models.DateTimeField(verbose_name='last login', blank=True, null=True)),
('is_superuser', models.BooleanField(verbose_name='superuser status', help_text='Designates that this user has all permissions without explicitly assigning them.', default=False)),
('email', models.EmailField(verbose_name='E-mail', null=True, unique=True, db_index=True, max_length=254, blank=True)),
('givenname', models.CharField(verbose_name='Given name', blank=True, null=True, max_length=255)),
('familyname', models.CharField(verbose_name='Family name', blank=True, null=True, max_length=255)),
('is_active', models.BooleanField(verbose_name='Is active', default=True)),
('is_staff', models.BooleanField(verbose_name='Is site admin', default=False)),
('date_joined', models.DateTimeField(verbose_name='Date joined', auto_now_add=True)),
('locale', models.CharField(max_length=50, choices=[('en', 'English'), ('de', 'German')], default='en', verbose_name='Language')),
('timezone', models.CharField(max_length=100, default='UTC', verbose_name='Timezone')),
('locale', models.CharField(verbose_name='Language', choices=[('en', 'English'), ('de', 'German'), ('de-informal', 'German (informal)')], default='en', max_length=50)),
('timezone', models.CharField(verbose_name='Timezone', default='UTC', max_length=100)),
('groups', models.ManyToManyField(verbose_name='groups', related_query_name='user', help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', to='auth.Group', blank=True)),
('user_permissions', models.ManyToManyField(verbose_name='user permissions', related_query_name='user', help_text='Specific permissions for this user.', related_name='user_set', to='auth.Permission', blank=True)),
],
options={
'verbose_name_plural': 'Users',
'verbose_name': 'User',
},
),
migrations.CreateModel(
name='CachedFile',
fields=[
('id', models.UUIDField(primary_key=True, default=uuid.uuid4, serialize=False)),
('expires', models.DateTimeField(blank=True, null=True)),
('date', models.DateTimeField(blank=True, null=True)),
('filename', models.CharField(max_length=255)),
('type', models.CharField(max_length=255)),
('file', models.FileField(upload_to=pretix.base.models.cachedfile_name, blank=True, null=True)),
],
),
migrations.CreateModel(
name='CachedTicket',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('provider', models.CharField(max_length=255)),
('cachedfile', models.ForeignKey(to='pretixbase.CachedFile')),
],
),
migrations.CreateModel(
name='CartPosition',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Price')),
('session', models.CharField(verbose_name='Session', blank=True, null=True, max_length=255)),
('price', models.DecimalField(verbose_name='Price', max_digits=10, decimal_places=2)),
('datetime', models.DateTimeField(verbose_name='Date', auto_now_add=True)),
('expires', models.DateTimeField(verbose_name='Expiration date')),
('attendee_name', models.CharField(max_length=255, blank=True, verbose_name='Attendee name', help_text='Empty, if this product is not an admission ticket', null=True)),
('attendee_name', models.CharField(verbose_name='Attendee name', blank=True, help_text='Empty, if this product is not an admission ticket', null=True, max_length=255)),
],
options={
'verbose_name_plural': 'Cart positions',
@@ -73,40 +85,49 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Event',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('name', pretix.base.i18n.I18nCharField(max_length=200, verbose_name='Name')),
('slug', models.SlugField(validators=[django.core.validators.RegexValidator(regex='^[a-zA-Z0-9.-]+$', message='The slug may only contain letters, numbers, dots and dashes.')], help_text='Should be short, only contain lowercase letters and numbers, and must be unique among your events. This is being used in addresses and bank transfer references.', verbose_name='Slug')),
('currency', models.CharField(max_length=10, default='EUR', verbose_name='Default currency')),
('name', pretix.base.i18n.I18nCharField(verbose_name='Name', max_length=200)),
('slug', models.SlugField(verbose_name='Slug', help_text='Should be short, only contain lowercase letters and numbers, and must be unique among your events. This is being used in addresses and bank transfer references.', validators=[django.core.validators.RegexValidator(message='The slug may only contain letters, numbers, dots and dashes.', regex='^[a-zA-Z0-9.-]+$')])),
('currency', models.CharField(verbose_name='Default currency', default='EUR', max_length=10)),
('date_from', models.DateTimeField(verbose_name='Event start time')),
('date_to', models.DateTimeField(blank=True, verbose_name='Event end time', null=True)),
('presale_end', models.DateTimeField(blank=True, verbose_name='End of presale', help_text='No products will be sold after this date.', null=True)),
('presale_start', models.DateTimeField(blank=True, verbose_name='Start of presale', help_text='No products will be sold before this date.', null=True)),
('plugins', models.TextField(blank=True, verbose_name='Plugins', null=True)),
('date_to', models.DateTimeField(verbose_name='Event end time', blank=True, null=True)),
('presale_end', models.DateTimeField(verbose_name='End of presale', blank=True, help_text='No products will be sold after this date.', null=True)),
('presale_start', models.DateTimeField(verbose_name='Start of presale', blank=True, help_text='No products will be sold before this date.', null=True)),
('plugins', models.TextField(verbose_name='Plugins', blank=True, null=True)),
],
options={
'verbose_name_plural': 'Events',
'ordering': ('date_from', 'name'),
'verbose_name': 'Event',
'ordering': ('date_from', 'name'),
},
),
migrations.CreateModel(
name='EventLock',
fields=[
('event', models.CharField(primary_key=True, serialize=False, max_length=36)),
('date', models.DateTimeField(auto_now=True)),
('token', models.UUIDField(default=uuid.uuid4)),
],
),
migrations.CreateModel(
name='EventPermission',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('can_change_settings', models.BooleanField(default=True, verbose_name='Can change event settings')),
('can_change_items', models.BooleanField(default=True, verbose_name='Can change product settings')),
('can_view_orders', models.BooleanField(default=True, verbose_name='Can view orders')),
('can_change_orders', models.BooleanField(default=True, verbose_name='Can change orders')),
('can_change_settings', models.BooleanField(verbose_name='Can change event settings', default=True)),
('can_change_items', models.BooleanField(verbose_name='Can change product settings', default=True)),
('can_view_orders', models.BooleanField(verbose_name='Can view orders', default=True)),
('can_change_permissions', models.BooleanField(verbose_name='Can change permissions', default=True)),
('can_change_orders', models.BooleanField(verbose_name='Can change orders', default=True)),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_perms')),
('user', models.ForeignKey(related_name='event_perms', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name_plural': 'Event permissions',
@@ -116,14 +137,14 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='EventSetting',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('key', models.CharField(max_length=255)),
('value', models.TextField()),
('object', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='setting_objects')),
('object', versions.models.VersionedForeignKey(related_name='setting_objects', to='pretixbase.Event')),
],
options={
'abstract': False,
@@ -132,53 +153,55 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Item',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('name', pretix.base.i18n.I18nCharField(max_length=255, verbose_name='Item name')),
('active', models.BooleanField(default=True, verbose_name='Active')),
('short_description', pretix.base.i18n.I18nTextField(blank=True, verbose_name='Short description', help_text='This is shown below the product name in lists.', null=True)),
('long_description', pretix.base.i18n.I18nTextField(blank=True, verbose_name='Long description', null=True)),
('default_price', models.DecimalField(blank=True, verbose_name='Default price', max_digits=7, decimal_places=2, null=True)),
('tax_rate', models.DecimalField(blank=True, verbose_name='Taxes included in percent', max_digits=7, decimal_places=2, null=True)),
('admission', models.BooleanField(default=False, help_text='Whether or not buying this product allows a person to enter your event', verbose_name='Is an admission ticket')),
('name', pretix.base.i18n.I18nCharField(verbose_name='Item name', max_length=255)),
('active', models.BooleanField(verbose_name='Active', default=True)),
('description', pretix.base.i18n.I18nTextField(verbose_name='Description', blank=True, help_text='This is shown below the product name in lists.', null=True)),
('default_price', models.DecimalField(verbose_name='Default price', max_digits=7, null=True, decimal_places=2)),
('tax_rate', models.DecimalField(verbose_name='Taxes included in percent', blank=True, max_digits=7, null=True, decimal_places=2)),
('admission', models.BooleanField(verbose_name='Is an admission ticket', help_text='Whether or not buying this product allows a person to enter your event', default=False)),
('position', models.IntegerField(default=0)),
('picture', models.ImageField(upload_to=pretix.base.models.itempicture_upload_to, verbose_name='Product picture', blank=True, null=True)),
],
options={
'verbose_name_plural': 'Products',
'verbose_name': 'Product',
'ordering': ('category__position', 'category', 'position'),
},
),
migrations.CreateModel(
name='ItemCategory',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('name', pretix.base.i18n.I18nCharField(max_length=255, verbose_name='Category name')),
('name', pretix.base.i18n.I18nCharField(verbose_name='Category name', max_length=255)),
('position', models.IntegerField(default=0)),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='categories')),
('event', versions.models.VersionedForeignKey(related_name='categories', to='pretixbase.Event')),
],
options={
'verbose_name_plural': 'Product categories',
'ordering': ('position', 'id'),
'verbose_name': 'Product category',
'ordering': ('position', 'version_birth_date'),
},
),
migrations.CreateModel(
name='ItemVariation',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('active', models.BooleanField(default=True, verbose_name='Active')),
('default_price', models.DecimalField(blank=True, verbose_name='Default price', max_digits=7, decimal_places=2, null=True)),
('item', versions.models.VersionedForeignKey(to='pretixbase.Item', related_name='variations')),
('active', models.BooleanField(verbose_name='Active', default=True)),
('default_price', models.DecimalField(verbose_name='Default price', blank=True, max_digits=7, null=True, decimal_places=2)),
('item', versions.models.VersionedForeignKey(related_name='variations', to='pretixbase.Item')),
],
options={
'verbose_name_plural': 'Product variations',
@@ -188,42 +211,45 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Order',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('code', models.CharField(max_length=16, verbose_name='Order code')),
('status', models.CharField(max_length=3, choices=[('n', 'pending'), ('p', 'paid'), ('e', 'expired'), ('c', 'cancelled'), ('r', 'refunded')], verbose_name='Status')),
('code', models.CharField(verbose_name='Order code', max_length=16)),
('status', models.CharField(verbose_name='Status', choices=[('n', 'pending'), ('p', 'paid'), ('e', 'expired'), ('c', 'cancelled'), ('r', 'refunded')], max_length=3)),
('email', models.EmailField(verbose_name='E-mail', blank=True, null=True, max_length=254)),
('locale', models.CharField(verbose_name='Locale', blank=True, null=True, max_length=32)),
('secret', models.CharField(max_length=32, default=pretix.base.models.generate_secret)),
('datetime', models.DateTimeField(verbose_name='Date')),
('expires', models.DateTimeField(verbose_name='Expiration date')),
('payment_date', models.DateTimeField(blank=True, verbose_name='Payment date', null=True)),
('payment_provider', models.CharField(max_length=255, blank=True, verbose_name='Payment provider', null=True)),
('payment_fee', models.DecimalField(decimal_places=2, max_digits=10, default=0, verbose_name='Payment method fee')),
('payment_info', models.TextField(blank=True, verbose_name='Payment information', null=True)),
('payment_manual', models.BooleanField(default=False, verbose_name='Payment state was manually modified')),
('total', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Total amount')),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='orders', verbose_name='Event')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='User', related_name='orders', blank=True, null=True)),
('payment_date', models.DateTimeField(verbose_name='Payment date', blank=True, null=True)),
('payment_provider', models.CharField(verbose_name='Payment provider', blank=True, null=True, max_length=255)),
('payment_fee', models.DecimalField(verbose_name='Payment method fee', max_digits=10, default=0, decimal_places=2)),
('payment_info', models.TextField(verbose_name='Payment information', blank=True, null=True)),
('payment_manual', models.BooleanField(verbose_name='Payment state was manually modified', default=False)),
('total', models.DecimalField(verbose_name='Total amount', max_digits=10, decimal_places=2)),
('event', versions.models.VersionedForeignKey(verbose_name='Event', related_name='orders', to='pretixbase.Event')),
],
options={
'verbose_name_plural': 'Orders',
'verbose_name': 'Order',
'ordering': ('-datetime',),
},
),
migrations.CreateModel(
name='OrderPosition',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Price')),
('attendee_name', models.CharField(max_length=255, blank=True, verbose_name='Attendee name', help_text='Empty, if this product is not an admission ticket', null=True)),
('item', versions.models.VersionedForeignKey(to='pretixbase.Item', verbose_name='Item')),
('order', versions.models.VersionedForeignKey(to='pretixbase.Order', related_name='positions', verbose_name='Order')),
('variation', versions.models.VersionedForeignKey(to='pretixbase.ItemVariation', verbose_name='Variation', blank=True, null=True)),
('price', models.DecimalField(verbose_name='Price', max_digits=10, decimal_places=2)),
('attendee_name', models.CharField(verbose_name='Attendee name', blank=True, help_text='Empty, if this product is not an admission ticket', null=True, max_length=255)),
('item', versions.models.VersionedForeignKey(verbose_name='Item', related_name='positions', to='pretixbase.Item')),
('order', versions.models.VersionedForeignKey(verbose_name='Order', related_name='positions', to='pretixbase.Order')),
('variation', versions.models.VersionedForeignKey(verbose_name='Variation', to='pretixbase.ItemVariation', null=True, blank=True)),
],
options={
'verbose_name_plural': 'Order positions',
@@ -234,31 +260,31 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Organizer',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('name', models.CharField(max_length=200, verbose_name='Name')),
('slug', models.SlugField(unique=True, verbose_name='Slug')),
('name', models.CharField(verbose_name='Name', max_length=200)),
('slug', models.SlugField(verbose_name='Slug', help_text='Should be short, only contain lowercase letters and numbers, and must be unique among your events. This is being used in addresses and bank transfer references.', validators=[django.core.validators.RegexValidator(message='The slug may only contain letters, numbers, dots and dashes.', regex='^[a-zA-Z0-9.-]+$')])),
],
options={
'verbose_name_plural': 'Organizers',
'ordering': ('name',),
'verbose_name': 'Organizer',
'ordering': ('name',),
},
),
migrations.CreateModel(
name='OrganizerPermission',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('can_create_events', models.BooleanField(default=True, verbose_name='Can create events')),
('can_create_events', models.BooleanField(verbose_name='Can create events', default=True)),
('organizer', versions.models.VersionedForeignKey(to='pretixbase.Organizer')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='organizer_perms')),
('user', models.ForeignKey(related_name='organizer_perms', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name_plural': 'Organizer permissions',
@@ -268,14 +294,14 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='OrganizerSetting',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('key', models.CharField(max_length=255)),
('value', models.TextField()),
('object', versions.models.VersionedForeignKey(to='pretixbase.Organizer', related_name='setting_objects')),
('object', versions.models.VersionedForeignKey(related_name='setting_objects', to='pretixbase.Organizer')),
],
options={
'abstract': False,
@@ -284,13 +310,13 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Property',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('name', pretix.base.i18n.I18nCharField(max_length=250, verbose_name='Property name')),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='properties')),
('name', pretix.base.i18n.I18nCharField(verbose_name='Property name', max_length=250)),
('event', versions.models.VersionedForeignKey(related_name='properties', to='pretixbase.Event')),
],
options={
'verbose_name_plural': 'Product properties',
@@ -300,33 +326,34 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='PropertyValue',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('value', pretix.base.i18n.I18nCharField(max_length=250, verbose_name='Value')),
('value', pretix.base.i18n.I18nCharField(verbose_name='Value', max_length=250)),
('position', models.IntegerField(default=0)),
('prop', versions.models.VersionedForeignKey(to='pretixbase.Property', related_name='values')),
('prop', versions.models.VersionedForeignKey(related_name='values', to='pretixbase.Property')),
],
options={
'verbose_name_plural': 'Property values',
'ordering': ('position',),
'verbose_name': 'Property value',
'ordering': ('position', 'version_birth_date'),
},
),
migrations.CreateModel(
name='Question',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('question', pretix.base.i18n.I18nTextField(verbose_name='Question')),
('type', models.CharField(max_length=5, choices=[('N', 'Number'), ('S', 'Text (one line)'), ('T', 'Multiline text'), ('B', 'Yes/No')], verbose_name='Question type')),
('required', models.BooleanField(default=False, verbose_name='Required question')),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='questions')),
('type', models.CharField(verbose_name='Question type', choices=[('N', 'Number'), ('S', 'Text (one line)'), ('T', 'Multiline text'), ('B', 'Yes/No')], max_length=5)),
('required', models.BooleanField(verbose_name='Required question', default=False)),
('event', versions.models.VersionedForeignKey(related_name='questions', to='pretixbase.Event')),
('items', versions.models.VersionedManyToManyField(verbose_name='Products', blank=True, help_text='This question will be asked to buyers of the selected products', related_name='questions', to='pretixbase.Item')),
],
options={
'verbose_name_plural': 'Questions',
@@ -336,15 +363,15 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='QuestionAnswer',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('answer', models.TextField()),
('cartposition', models.ForeignKey(to='pretixbase.CartPosition', null=True, blank=True, related_name='answers')),
('orderposition', models.ForeignKey(to='pretixbase.OrderPosition', null=True, blank=True, related_name='answers')),
('question', versions.models.VersionedForeignKey(to='pretixbase.Question', related_name='answers')),
('cartposition', models.ForeignKey(related_name='answers', to='pretixbase.CartPosition', null=True, blank=True)),
('orderposition', models.ForeignKey(related_name='answers', to='pretixbase.OrderPosition', null=True, blank=True)),
('question', versions.models.VersionedForeignKey(related_name='answers', to='pretixbase.Question')),
],
options={
'abstract': False,
@@ -353,17 +380,16 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Quota',
fields=[
('id', models.CharField(max_length=36, serialize=False, primary_key=True)),
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('name', models.CharField(max_length=200, verbose_name='Name')),
('name', models.CharField(verbose_name='Name', max_length=200)),
('size', models.PositiveIntegerField(verbose_name='Total capacity')),
('locked', models.DateTimeField(blank=True, null=True)),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='quotas', verbose_name='Event')),
('items', versions.models.VersionedManyToManyField(blank=True, related_name='quotas', to='pretixbase.Item', verbose_name='Item')),
('variations', pretix.base.models.VariationsField(blank=True, related_name='quotas', to='pretixbase.ItemVariation', verbose_name='Variations')),
('event', versions.models.VersionedForeignKey(verbose_name='Event', related_name='quotas', to='pretixbase.Event')),
('items', versions.models.VersionedManyToManyField(verbose_name='Item', blank=True, related_name='quotas', to='pretixbase.Item')),
('variations', pretix.base.models.VariationsField(verbose_name='Variations', blank=True, related_name='quotas', to='pretixbase.ItemVariation')),
],
options={
'verbose_name_plural': 'Quotas',
@@ -373,81 +399,56 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='organizer',
name='permitted',
field=models.ManyToManyField(through='pretixbase.OrganizerPermission', to=settings.AUTH_USER_MODEL, related_name='organizers'),
field=models.ManyToManyField(through='pretixbase.OrganizerPermission', related_name='organizers', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='itemvariation',
name='values',
field=versions.models.VersionedManyToManyField(to='pretixbase.PropertyValue', related_name='variations'),
field=versions.models.VersionedManyToManyField(related_name='variations', to='pretixbase.PropertyValue'),
),
migrations.AddField(
model_name='item',
name='category',
field=versions.models.VersionedForeignKey(on_delete=django.db.models.deletion.PROTECT, to='pretixbase.ItemCategory', verbose_name='Category', related_name='items', blank=True, null=True),
field=versions.models.VersionedForeignKey(verbose_name='Category', related_name='items', to='pretixbase.ItemCategory', null=True, blank=True, on_delete=django.db.models.deletion.PROTECT),
),
migrations.AddField(
model_name='item',
name='event',
field=versions.models.VersionedForeignKey(on_delete=django.db.models.deletion.PROTECT, to='pretixbase.Event', related_name='items', verbose_name='Event'),
field=versions.models.VersionedForeignKey(verbose_name='Event', related_name='items', to='pretixbase.Event', on_delete=django.db.models.deletion.PROTECT),
),
migrations.AddField(
model_name='item',
name='properties',
field=versions.models.VersionedManyToManyField(blank=True, related_name='items', to='pretixbase.Property', 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.", verbose_name='Properties'),
),
migrations.AddField(
model_name='item',
name='questions',
field=versions.models.VersionedManyToManyField(blank=True, related_name='items', to='pretixbase.Question', help_text='The user will be asked to fill in answers for the selected questions', verbose_name='Questions'),
field=versions.models.VersionedManyToManyField(verbose_name='Properties', blank=True, 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.", related_name='items', to='pretixbase.Property'),
),
migrations.AddField(
model_name='event',
name='organizer',
field=versions.models.VersionedForeignKey(on_delete=django.db.models.deletion.PROTECT, to='pretixbase.Organizer', related_name='events'),
field=versions.models.VersionedForeignKey(related_name='events', to='pretixbase.Organizer', on_delete=django.db.models.deletion.PROTECT),
),
migrations.AddField(
model_name='event',
name='permitted',
field=models.ManyToManyField(through='pretixbase.EventPermission', to=settings.AUTH_USER_MODEL, related_name='events'),
field=models.ManyToManyField(through='pretixbase.EventPermission', related_name='events', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='cartposition',
name='event',
field=versions.models.VersionedForeignKey(to='pretixbase.Event', verbose_name='Event'),
field=versions.models.VersionedForeignKey(verbose_name='Event', to='pretixbase.Event'),
),
migrations.AddField(
model_name='cartposition',
name='item',
field=versions.models.VersionedForeignKey(to='pretixbase.Item', verbose_name='Item'),
),
migrations.AddField(
model_name='cartposition',
name='user',
field=models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='User', blank=True, null=True),
field=versions.models.VersionedForeignKey(verbose_name='Item', to='pretixbase.Item'),
),
migrations.AddField(
model_name='cartposition',
name='variation',
field=versions.models.VersionedForeignKey(to='pretixbase.ItemVariation', verbose_name='Variation', blank=True, null=True),
field=versions.models.VersionedForeignKey(verbose_name='Variation', to='pretixbase.ItemVariation', null=True, blank=True),
),
migrations.AddField(
model_name='user',
name='event',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='pretixbase.Event', null=True, blank=True, related_name='users'),
model_name='cachedticket',
name='order',
field=versions.models.VersionedForeignKey(to='pretixbase.Order'),
),
migrations.AddField(
model_name='user',
name='groups',
field=models.ManyToManyField(to='auth.Group', help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', blank=True, related_query_name='user', verbose_name='groups'),
),
migrations.AddField(
model_name='user',
name='user_permissions',
field=models.ManyToManyField(to='auth.Permission', help_text='Specific permissions for this user.', related_name='user_set', blank=True, related_query_name='user', verbose_name='user permissions'),
),
migrations.AlterUniqueTogether(
name='user',
unique_together=set([('event', 'username')]),
),
migrations.RunPython(initial_user),
]

View File

@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='organizer',
name='slug',
field=models.SlugField(verbose_name='Slug'),
),
]

View File

@@ -1,29 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0002_auto_20150524_1148'),
]
operations = [
migrations.AlterModelOptions(
name='item',
options={'verbose_name_plural': 'Products', 'ordering': ('category__position', 'category', 'position'), 'verbose_name': 'Product'},
),
migrations.AddField(
model_name='item',
name='position',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='organizer',
name='slug',
field=models.SlugField(help_text='Should be short, only contain lowercase letters and numbers, and must be unique among your events. This is being used in addresses and bank transfer references.', validators=[django.core.validators.RegexValidator(message='The slug may only contain letters, numbers, dots and dashes.', regex='^[a-zA-Z0-9.-]+$')], verbose_name='Slug'),
),
]

View File

@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0003_auto_20150602_2232'),
]
operations = [
migrations.AddField(
model_name='eventpermission',
name='can_change_permissions',
field=models.BooleanField(default=True, verbose_name='Can change permissions'),
),
]

View File

@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0004_eventpermission_can_change_permissions'),
]
operations = [
migrations.AddField(
model_name='item',
name='picture',
field=models.ImageField(upload_to='', null=True, verbose_name='Product picture', blank=True),
),
]

View File

@@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import pretix.base.models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0005_item_picture'),
]
operations = [
migrations.AlterField(
model_name='item',
name='picture',
field=models.ImageField(upload_to=pretix.base.models.itempicture_upload_to, null=True, verbose_name='Product picture', blank=True),
),
]

View File

@@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0006_auto_20150726_1420'),
]
operations = [
migrations.AlterField(
model_name='item',
name='default_price',
field=models.DecimalField(verbose_name='Default price', default=0, decimal_places=2, max_digits=7),
preserve_default=False,
),
]

View File

@@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0007_auto_20150726_1430'),
]
operations = [
migrations.AlterModelOptions(
name='order',
options={'verbose_name_plural': 'Orders', 'verbose_name': 'Order', 'ordering': ('-datetime',)},
),
migrations.AlterField(
model_name='item',
name='default_price',
field=models.DecimalField(max_digits=7, decimal_places=2, verbose_name='Default price', null=True),
),
]

View File

@@ -1,59 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import versions.models
from django.db import migrations, models
import pretix.base.models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0008_auto_20150804_1357'),
]
operations = [
migrations.CreateModel(
name='CachedFile',
fields=[
('id', models.UUIDField(primary_key=True, serialize=False)),
('expires', models.DateTimeField(null=True, blank=True)),
('date', models.DateTimeField(null=True, blank=True)),
('filename', models.CharField(max_length=255)),
('file', models.FileField(null=True, upload_to=pretix.base.models.cachedfile_name, blank=True)),
],
),
migrations.CreateModel(
name='CachedTicket',
fields=[
('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)),
('provider', models.CharField(max_length=255)),
('cachedfile', models.ForeignKey(to='pretixbase.CachedFile')),
('order', models.ForeignKey(to='pretixbase.Order')),
],
),
migrations.AlterModelOptions(
name='itemcategory',
options={'verbose_name_plural': 'Product categories', 'ordering': ('position', 'version_birth_date'), 'verbose_name': 'Product category'},
),
migrations.AlterModelOptions(
name='propertyvalue',
options={'verbose_name_plural': 'Property values', 'ordering': ('position', 'version_birth_date'), 'verbose_name': 'Property value'},
),
migrations.AlterField(
model_name='orderposition',
name='item',
field=versions.models.VersionedForeignKey(to='pretixbase.Item', verbose_name='Item', related_name='positions'),
),
migrations.AlterField(
model_name='user',
name='locale',
field=models.CharField(choices=[('en', 'English'), ('de', 'German'), ('de-informal', 'German (informal)')], max_length=50, default='en', verbose_name='Language'),
),
migrations.AddField(
model_name='order',
name='tickets',
field=models.ManyToManyField(to='pretixbase.CachedFile', through='pretixbase.CachedTicket'),
),
]

View File

@@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0009_auto_20150915_2003'),
]
operations = [
migrations.AddField(
model_name='cachedfile',
name='type',
field=models.CharField(default='text/plain', max_length=255),
preserve_default=False,
),
]

View File

@@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0010_cachedfile_type'),
]
operations = [
migrations.AlterField(
model_name='cachedfile',
name='id',
field=models.UUIDField(serialize=False, primary_key=True, default=uuid.uuid4),
),
]

View File

@@ -1,18 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0011_auto_20150915_2020'),
]
operations = [
migrations.RemoveField(
model_name='order',
name='tickets',
),
]

View File

@@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import versions.models
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0012_remove_order_tickets'),
]
operations = [
migrations.AlterField(
model_name='cachedticket',
name='order',
field=versions.models.VersionedForeignKey(to='pretixbase.Order'),
),
]

View File

@@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0013_auto_20150916_0941'),
]
operations = [
migrations.CreateModel(
name='EventLock',
fields=[
('event', models.CharField(primary_key=True, max_length=36, serialize=False)),
('date', models.DateTimeField(auto_now=True)),
],
),
migrations.RemoveField(
model_name='quota',
name='locked',
),
]

View File

@@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import pretix.base.models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0014_auto_20150916_1319'),
]
operations = [
migrations.AddField(
model_name='cartposition',
name='session',
field=models.CharField(max_length=255, verbose_name='Session', null=True, blank=True),
),
migrations.AddField(
model_name='order',
name='secret',
field=models.CharField(max_length=32, default=pretix.base.models.generate_secret),
),
migrations.AlterField(
model_name='user',
name='email',
field=models.EmailField(max_length=254, verbose_name='E-mail', blank=True, db_index=True, unique=True, null=True),
),
migrations.AlterUniqueTogether(
name='user',
unique_together=set([]),
),
migrations.RemoveField(
model_name='user',
name='event',
),
migrations.RemoveField(
model_name='user',
name='identifier',
),
migrations.RemoveField(
model_name='user',
name='username',
),
]

View File

@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0015_auto_20150916_2219'),
]
operations = [
migrations.AddField(
model_name='order',
name='guest_email',
field=models.EmailField(max_length=254, verbose_name='E-mail', blank=True, null=True),
),
]

View File

@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0016_order_guest_email'),
]
operations = [
migrations.AddField(
model_name='order',
name='guest_locale',
field=models.CharField(max_length=32, null=True, blank=True, verbose_name='Locale'),
),
]

View File

@@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0017_order_guest_locale'),
]
operations = [
migrations.AddField(
model_name='eventlock',
name='token',
field=models.UUIDField(default=uuid.uuid4),
),
]

View File

@@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0018_eventlock_token'),
]
operations = [
migrations.RenameField(
model_name='order',
old_name='guest_email',
new_name='email',
),
migrations.RenameField(
model_name='order',
old_name='guest_locale',
new_name='locale',
),
migrations.RemoveField(
model_name='cartposition',
name='user',
),
migrations.RemoveField(
model_name='order',
name='user',
),
]

View File

@@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import pretix.base.i18n
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0019_auto_20151004_1233'),
]
operations = [
migrations.RemoveField(
model_name='item',
name='long_description',
),
migrations.RenameField(
model_name='item',
old_name='short_description',
new_name='description'
),
migrations.AlterField(
model_name='item',
name='description',
field=pretix.base.i18n.I18nTextField(null=True, verbose_name='Description', blank=True,
help_text='This is shown below the product name in lists.'),
),
]

View File

@@ -647,72 +647,6 @@ class PropertyValue(Versionable):
return self.sortkey < other.sortkey
class Question(Versionable):
"""
A question is an input field that can be used to extend a ticket
by custom information, e.g. "Attendee age". A question can allow one o several
input types, currently:
* a number (``TYPE_NUMBER``)
* a one-line string (``TYPE_STRING``)
* a multi-line string (``TYPE_TEXT``)
* a boolean (``TYPE_BOOLEAN``)
:param event: The event this question belongs to
:type event: Event
:param question: The question text. This will be displayed next to the input field.
:type question: str
:param type: One of the above types
:param required: Whether answering this question is required for submiting an order including
items associated with this question.
:type required: bool
"""
TYPE_NUMBER = "N"
TYPE_STRING = "S"
TYPE_TEXT = "T"
TYPE_BOOLEAN = "B"
TYPE_CHOICES = (
(TYPE_NUMBER, _("Number")),
(TYPE_STRING, _("Text (one line)")),
(TYPE_TEXT, _("Multiline text")),
(TYPE_BOOLEAN, _("Yes/No")),
)
event = VersionedForeignKey(
Event,
related_name="questions",
)
question = I18nTextField(
verbose_name=_("Question"),
)
type = models.CharField(
max_length=5,
choices=TYPE_CHOICES,
verbose_name=_("Question type"),
)
required = models.BooleanField(
default=False,
verbose_name=_("Required question"),
)
class Meta:
verbose_name = _("Question")
verbose_name_plural = _("Questions")
def __str__(self):
return str(self.question)
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)
if self.event:
self.event.get_cache().clear()
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.event:
self.event.get_cache().clear()
def itempicture_upload_to(instance, filename):
return '%s/%s/item-%s.%s' % (
instance.event.organizer.slug, instance.event.slug, instance.identity,
@@ -735,16 +669,13 @@ class Item(Versionable):
:type name: str
:param active: Whether this item is being sold
:type active: bool
:param short_description: A short description
:type short_description: str
:param long_description: A long description
:type long_description: str
:param description: A short description
:type description: str
:param default_price: The item's default price
:type default_price: decimal.Decimal
:param tax_rate: The VAT tax that is included in this item's price (in %)
:type tax_rate: decimal.Decimal
:param properties: A set of ``Property`` objects that should be applied to this item
:param questions: A set of ``Question`` objects that should be applied to this item
:param admission: ``True``, if this item allows persons to enter the event (as opposed to e.g. merchandise)
:type admission: bool
:param picture: A product picture to be shown next to the product description.
@@ -798,16 +729,6 @@ class Item(Versionable):
'\'Variations\' tab to configure the details.'
)
)
questions = VersionedManyToManyField(
Question,
related_name='items',
verbose_name=_("Questions"),
blank=True,
help_text=_(
'The user will be asked to fill in answers for the '
'selected questions'
)
)
admission = models.BooleanField(
verbose_name=_("Is an admission ticket"),
help_text=_(
@@ -1173,6 +1094,80 @@ class VariationsField(VersionedManyToManyField):
return super(RelatedField, self).formfield(**defaults)
class Question(Versionable):
"""
A question is an input field that can be used to extend a ticket
by custom information, e.g. "Attendee age". A question can allow one o several
input types, currently:
* a number (``TYPE_NUMBER``)
* a one-line string (``TYPE_STRING``)
* a multi-line string (``TYPE_TEXT``)
* a boolean (``TYPE_BOOLEAN``)
:param event: The event this question belongs to
:type event: Event
:param question: The question text. This will be displayed next to the input field.
:type question: str
:param type: One of the above types
:param required: Whether answering this question is required for submiting an order including
items associated with this question.
:type required: bool
:param items: A set of ``Items`` objects that this question should be applied to
"""
TYPE_NUMBER = "N"
TYPE_STRING = "S"
TYPE_TEXT = "T"
TYPE_BOOLEAN = "B"
TYPE_CHOICES = (
(TYPE_NUMBER, _("Number")),
(TYPE_STRING, _("Text (one line)")),
(TYPE_TEXT, _("Multiline text")),
(TYPE_BOOLEAN, _("Yes/No")),
)
event = VersionedForeignKey(
Event,
related_name="questions"
)
question = I18nTextField(
verbose_name=_("Question")
)
type = models.CharField(
max_length=5,
choices=TYPE_CHOICES,
verbose_name=_("Question type")
)
required = models.BooleanField(
default=False,
verbose_name=_("Required question")
)
items = VersionedManyToManyField(
Item,
related_name='questions',
verbose_name=_("Products"),
blank=True,
help_text=_('This question will be asked to buyers of the selected products')
)
class Meta:
verbose_name = _("Question")
verbose_name_plural = _("Questions")
def __str__(self):
return str(self.question)
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)
if self.event:
self.event.get_cache().clear()
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.event:
self.event.get_cache().clear()
class BaseRestriction(Versionable):
"""
A restriction is the abstract concept of a rule that limits the availability

View File

@@ -1,5 +1,6 @@
import copy
from django import forms
from django.db import models
from django.forms import BooleanField
from django.utils.translation import ugettext_lazy as _
@@ -40,6 +41,10 @@ class PropertyValueForm(TolerantFormsetModelForm):
class QuestionForm(VersionedModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['items'].queryset = self.instance.event.items.current.all()
class Meta:
model = Question
localized_fields = '__all__'
@@ -47,7 +52,11 @@ class QuestionForm(VersionedModelForm):
'question',
'type',
'required',
'items'
]
widgets = {
'items': forms.CheckboxSelectMultiple
}
class QuotaForm(I18nModelForm):
@@ -116,7 +125,6 @@ class ItemFormGeneral(VersionedModelForm):
super().__init__(*args, **kwargs)
self.fields['category'].queryset = self.instance.event.categories.current.all()
self.fields['properties'].queryset = self.instance.event.properties.current.all()
self.fields['questions'].queryset = self.instance.event.questions.current.all()
class Meta:
model = Item
@@ -126,13 +134,11 @@ class ItemFormGeneral(VersionedModelForm):
'name',
'active',
'admission',
'short_description',
'long_description',
'description',
'picture',
'default_price',
'tax_rate',
'properties',
'questions',
]

View File

@@ -21,7 +21,6 @@
<fieldset>
<legend>{% trans "Advanced settings" %}</legend>
{% bootstrap_field form.properties layout="horizontal" %}
{% bootstrap_field form.questions layout="horizontal" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -3,36 +3,41 @@
{% load bootstrap3 %}
{% block title %}{% trans "Question" %}{% endblock %}
{% block inside %}
<h1>{% trans "Question" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.question layout="horizontal" %}
{% bootstrap_field form.type layout="horizontal" %}
{% bootstrap_field form.required layout="horizontal" %}
</fieldset>
<h1>{% trans "Question" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.question layout="horizontal" %}
{% bootstrap_field form.type layout="horizontal" %}
{% bootstrap_field form.required layout="horizontal" %}
</fieldset>
<fieldset>
<legend>{% trans "Apply to products" %}</legend>
{% bootstrap_field form.items layout="horizontal" %}
</fieldset>
<div class="alert alert-info alert-required-boolean">
{% blocktrans trimmed %}
If you mark a Yes/No question as required, it means that the user has to select Yes and No is not
accepted. If you want to allow both options, do not make this field required.
{% endblocktrans %}
</div>
<div class="form-group submit-group">
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</form>
</div>
</form>
<script type="text/javascript">
$(function() {
function alert_required_boolean() {
var show = $("#id_type").val() == "B" && $("#id_required").prop("checked");
$(".alert-required-boolean").toggle(show);
}
$("#id_type").change(alert_required_boolean);
$("#id_required").change(alert_required_boolean);
alert_required_boolean();
});
$(function () {
function alert_required_boolean() {
var show = $("#id_type").val() == "B" && $("#id_required").prop("checked");
$(".alert-required-boolean").toggle(show);
}
$("#id_type").change(alert_required_boolean);
$("#id_required").change(alert_required_boolean);
alert_required_boolean();
});
</script>
{% endblock %}

View File

@@ -466,6 +466,11 @@ class QuestionCreate(EventPermissionRequiredMixin, CreateView):
permission = 'can_change_items'
context_object_name = 'question'
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['instance'] = Question(event=self.request.event)
return kwargs
def get_success_url(self) -> str:
return reverse('control:event.items.questions', kwargs={
'organizer': self.request.event.organizer.slug,
@@ -473,7 +478,6 @@ class QuestionCreate(EventPermissionRequiredMixin, CreateView):
})
def form_valid(self, form):
form.instance.event = self.request.event
messages.success(self.request, _('The new question has been created.'))
return super().form_valid(form)

View File

@@ -20,14 +20,14 @@ class Migration(migrations.Migration):
('id', models.CharField(primary_key=True, serialize=False, max_length=36)),
('identity', models.CharField(max_length=36)),
('version_start_date', models.DateTimeField()),
('version_end_date', models.DateTimeField(blank=True, null=True, default=None)),
('version_end_date', models.DateTimeField(blank=True, default=None, null=True)),
('version_birth_date', models.DateTimeField()),
('timeframe_from', models.DateTimeField(verbose_name='Start of time frame')),
('timeframe_to', models.DateTimeField(verbose_name='End of time frame')),
('price', models.DecimalField(max_digits=7, verbose_name='Price in time frame', decimal_places=2, null=True, blank=True)),
('event', versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='restrictions_timerestriction_timerestriction', verbose_name='Event')),
('item', versions.models.VersionedForeignKey(to='pretixbase.Item', related_name='restrictions_timerestriction_timerestriction', verbose_name='Item', null=True, blank=True)),
('variations', pretix.base.models.VariationsField(related_name='restrictions_timerestriction_timerestriction', to='pretixbase.ItemVariation', verbose_name='Variations', blank=True)),
('price', models.DecimalField(verbose_name='Price in time frame', blank=True, max_digits=7, null=True, decimal_places=2)),
('event', versions.models.VersionedForeignKey(verbose_name='Event', related_name='restrictions_timerestriction_timerestriction', to='pretixbase.Event')),
('item', versions.models.VersionedForeignKey(verbose_name='Item', related_name='restrictions_timerestriction_timerestriction', to='pretixbase.Item', null=True, blank=True)),
('variations', pretix.base.models.VariationsField(verbose_name='Variations', blank=True, related_name='restrictions_timerestriction_timerestriction', to='pretixbase.ItemVariation')),
],
options={
'verbose_name_plural': 'Restrictions',