Sendmail: Use multi-select for product selection

This commit is contained in:
Raphael Michel
2019-03-08 11:59:00 +01:00
parent 2e6f5d0f32
commit 461b0b639c
4 changed files with 28 additions and 10 deletions

View File

@@ -12,11 +12,13 @@ class MailForm(forms.Form):
sendto = forms.MultipleChoiceField() # overridden later
subject = forms.CharField(label=_("Subject"))
message = forms.CharField(label=_("Message"))
item = forms.ModelChoiceField(
Item.objects.none(),
items = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple(
attrs={'class': 'scrolling-multiple-choice'}
),
label=_('Only send to people who bought'),
required=False,
empty_label=_('Any product')
required=True,
queryset=Item.objects.none()
)
subevent = forms.ModelChoiceField(
SubEvent.objects.none(),
@@ -53,10 +55,18 @@ class MailForm(forms.Form):
)
self.fields['sendto'] = forms.MultipleChoiceField(
label=_("Send to customers with order status"),
widget=forms.CheckboxSelectMultiple,
widget=forms.CheckboxSelectMultiple(
attrs={'class': 'scrolling-multiple-choice'}
),
choices=choices
)
self.fields['item'].queryset = event.items.all()
if not self.initial.get('sendto'):
self.initial['sendto'] = ['p', 'n']
self.fields['items'].queryset = event.items.all()
if not self.initial.get('items'):
self.initial['items'] = event.items.all()
if event.has_subevents:
self.fields['subevent'].queryset = event.subevents.all()
self.fields['subevent'].widget = Select2(

View File

@@ -11,7 +11,7 @@
{% if form.subevent %}
{% bootstrap_field form.subevent layout='horizontal' %}
{% endif %}
{% bootstrap_field form.item layout='horizontal' %}
{% bootstrap_field form.items layout='horizontal' %}
{% bootstrap_field form.subject layout='horizontal' %}
{% bootstrap_field form.message layout='horizontal' %}
{% if request.method == "POST" %}

View File

@@ -42,6 +42,7 @@ class SenderView(EventPermissionRequiredMixin, FormView):
'message': LazyI18nString(logentry.parsed_data['message']),
'subject': LazyI18nString(logentry.parsed_data['subject']),
'sendto': logentry.parsed_data['sendto'],
'items': self.request.event.items.filter(id__in=[a['id'] for a in logentry.parsed_data['items']]),
}
if logentry.parsed_data.get('subevent'):
try:
@@ -64,9 +65,8 @@ class SenderView(EventPermissionRequiredMixin, FormView):
if 'overdue' in form.cleaned_data['sendto']:
statusq |= Q(status=Order.STATUS_PENDING, expires__lt=now())
orders = qs.filter(statusq)
if form.cleaned_data.get('item'):
orders = orders.filter(all_positions__item=form.cleaned_data.get('item'),
all_positions__canceled=False)
orders = orders.filter(all_positions__item_id__in=[i.pk for i in form.cleaned_data.get('items')],
all_positions__canceled=False)
if form.cleaned_data.get('subevent'):
orders = orders.filter(all_positions__subevent__in=(form.cleaned_data.get('subevent'),),
all_positions__canceled=False)

View File

@@ -76,6 +76,7 @@ def test_sendmail_simple_case(logged_in_client, sendmail_url, event, order):
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'n',
'items': order.positions.first().item_id,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.'
},
@@ -100,6 +101,7 @@ def test_sendmail_email_not_sent_if_order_not_match(logged_in_client, sendmail_u
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'p',
'items': order.positions.first().item_id,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.'
},
@@ -114,6 +116,7 @@ def test_sendmail_preview(logged_in_client, sendmail_url, event, order):
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'n',
'items': order.positions.first().item_id,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
'action': 'preview'
@@ -130,6 +133,7 @@ def test_sendmail_invalid_data(logged_in_client, sendmail_url, event, order):
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'n',
'items': order.positions.first().item_id,
'subject_0': 'Test subject',
},
follow=True)
@@ -154,6 +158,7 @@ def test_sendmail_multi_locales(logged_in_client, sendmail_url, event, item):
response = logged_in_client.post(sendmail_url,
{'sendto': 'p',
'items': item.pk,
'subject_0': 'Test subject',
'message_0': 'Test message',
'subject_1': 'Benutzer',
@@ -189,6 +194,7 @@ def test_sendmail_subevents(logged_in_client, sendmail_url, event, order):
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'n',
'items': order.positions.first().item_id,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
'subevent': se1.pk
@@ -201,6 +207,7 @@ def test_sendmail_subevents(logged_in_client, sendmail_url, event, order):
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'n',
'items': order.positions.first().item_id,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
'subevent': se2.pk
@@ -220,6 +227,7 @@ def test_sendmail_placeholder(logged_in_client, sendmail_url, event, order):
djmail.outbox = []
response = logged_in_client.post(sendmail_url,
{'sendto': 'n',
'items': order.positions.first().item_id,
'subject_0': '{code} Test subject',
'message_0': 'This is a test file for sending mails.',
'action': 'preview'