forked from CGM_Public/pretix_original
Prevent deletion of ordered variations
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
import copy
|
import copy
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.forms import BooleanField, ModelMultipleChoiceField
|
from django.forms import BooleanField, ModelMultipleChoiceField
|
||||||
|
from django.forms.formsets import DELETION_FIELD_NAME
|
||||||
from django.utils.translation import ugettext as __, ugettext_lazy as _
|
from django.utils.translation import ugettext as __, ugettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.forms import I18nModelForm
|
from pretix.base.forms import I18nFormSet, I18nModelForm
|
||||||
from pretix.base.i18n import I18nFormField, I18nTextarea
|
from pretix.base.i18n import I18nFormField, I18nTextarea
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Item, ItemCategory, ItemVariation, Question, QuestionOption, Quota,
|
Item, ItemCategory, ItemVariation, Question, QuestionOption, Quota,
|
||||||
@@ -153,6 +155,27 @@ class ItemUpdateForm(I18nModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ItemVariationsFormSet(I18nFormSet):
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
super().clean()
|
||||||
|
for f in self.forms:
|
||||||
|
if hasattr(f, '_delete_fail'):
|
||||||
|
f.fields['DELETE'].initial = False
|
||||||
|
f.fields['DELETE'].disabled = True
|
||||||
|
raise ValidationError(
|
||||||
|
message=_('The variation "%s" cannot be deleted because it has already been ordered by a user or '
|
||||||
|
'currently is in a users\'s cart. Please set the variation as "inactive" instead.'),
|
||||||
|
params=(str(f.instance),)
|
||||||
|
)
|
||||||
|
|
||||||
|
def _should_delete_form(self, form):
|
||||||
|
if form.instance.orderposition_set.exists() or form.instance.cartposition_set.exists():
|
||||||
|
form._delete_fail = True
|
||||||
|
return False
|
||||||
|
return form.cleaned_data.get(DELETION_FIELD_NAME, False)
|
||||||
|
|
||||||
|
|
||||||
class ItemVariationForm(I18nModelForm):
|
class ItemVariationForm(I18nModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ItemVariation
|
model = ItemVariation
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ from pretix.base.models import (
|
|||||||
)
|
)
|
||||||
from pretix.control.forms.item import (
|
from pretix.control.forms.item import (
|
||||||
CategoryForm, ItemCreateForm, ItemUpdateForm, ItemVariationForm,
|
CategoryForm, ItemCreateForm, ItemUpdateForm, ItemVariationForm,
|
||||||
QuestionForm, QuestionOptionForm, QuotaForm,
|
ItemVariationsFormSet, QuestionForm, QuestionOptionForm, QuotaForm,
|
||||||
)
|
)
|
||||||
from pretix.control.permissions import (
|
from pretix.control.permissions import (
|
||||||
EventPermissionRequiredMixin, event_permission_required,
|
EventPermissionRequiredMixin, event_permission_required,
|
||||||
@@ -803,7 +803,7 @@ class ItemVariations(ItemDetailMixin, EventPermissionRequiredMixin, TemplateView
|
|||||||
def formset(self):
|
def formset(self):
|
||||||
formsetclass = inlineformset_factory(
|
formsetclass = inlineformset_factory(
|
||||||
Item, ItemVariation,
|
Item, ItemVariation,
|
||||||
form=ItemVariationForm, formset=I18nFormSet,
|
form=ItemVariationForm, formset=ItemVariationsFormSet,
|
||||||
can_order=True, can_delete=True, extra=0
|
can_order=True, can_delete=True, extra=0
|
||||||
)
|
)
|
||||||
return formsetclass(self.request.POST if self.request.method == "POST" else None,
|
return formsetclass(self.request.POST if self.request.method == "POST" else None,
|
||||||
|
|||||||
Reference in New Issue
Block a user