Fix #163 -- Form to change orders (#191)

This commit is contained in:
Raphael Michel
2016-08-31 19:10:11 +02:00
committed by GitHub
parent 57374aec1a
commit b21ed4d99f
15 changed files with 751 additions and 16 deletions

View File

@@ -329,6 +329,12 @@ class MailSettingsForm(SettingsForm):
widget=I18nTextarea,
help_text=_("Available placeholders: {event}, {url}")
)
mail_text_order_changed = I18nFormField(
label=_("Changed order"),
required=False,
widget=I18nTextarea,
help_text=_("Available placeholders: {event}, {url}")
)
mail_text_resend_link = I18nFormField(
label=_("Resend link"),
required=False,

View File

@@ -1,8 +1,10 @@
from django import forms
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.translation import ugettext_lazy as _
from pretix.base.forms import I18nModelForm
from pretix.base.models import Order
from pretix.base.models import Item, Order
class ExtendForm(I18nModelForm):
@@ -35,3 +37,54 @@ class CommentForm(I18nModelForm):
'class': 'helper-width-100',
}),
}
class OrderPositionChangeForm(forms.Form):
itemvar = forms.ChoiceField()
price = forms.DecimalField(
required=False,
max_digits=10, decimal_places=2,
label=_('New price')
)
operation = forms.ChoiceField(
required=False,
widget=forms.RadioSelect,
choices=(
('product', 'Change product'),
('price', 'Change price'),
('cancel', 'Remove product')
)
)
def __init__(self, *args, **kwargs):
instance = kwargs.pop('instance')
initial = kwargs.get('initial', {})
if instance:
try:
if instance.variation:
initial['itemvar'] = '%d-%d' % (instance.item.pk, instance.variation.pk)
elif instance.item:
initial['itemvar'] = str(instance.item.pk)
except Item.DoesNotExist:
pass
initial['price'] = instance.price
kwargs['initial'] = initial
super().__init__(*args, **kwargs)
choices = []
for i in instance.order.event.items.prefetch_related('variations').all():
pname = i.name
if not i.is_available():
pname += ' ({})'.format(_('inactive'))
variations = list(i.variations.all())
if variations:
for v in variations:
choices.append(('%d-%d' % (i.pk, v.pk), '%s %s' % (pname, v.value)))
else:
choices.append((str(i.pk), pname))
self.fields['itemvar'].choices = choices
def clean(self):
if self.cleaned_data.get('operation') == 'price' and not self.cleaned_data.get('price', '') != '':
raise ValidationError(_('You need to enter a price if you want to change the product price.'))

View File

@@ -3,7 +3,6 @@ import copy
from django import forms
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import model_to_dict
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _