Skip to content

Commit

Permalink
Merge 3db6ac7 into d61bec4
Browse files Browse the repository at this point in the history
  • Loading branch information
ckleemann committed Mar 20, 2017
2 parents d61bec4 + 3db6ac7 commit 927a041
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 146 deletions.
116 changes: 33 additions & 83 deletions src/feedback/tests/test_views_intern.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from feedback.forms import UploadFileForm
from feedback.models import Semester, Person, Veranstaltung, Fragebogen2009, Mailvorlage, Einstellung, \
Fachgebiet, FachgebietEmail, Tutor
Fachgebiet, FachgebietEmail
from feedback.tests.tools import NonSuTestMixin, get_veranstaltung

from feedback import tests
Expand Down Expand Up @@ -424,128 +424,78 @@ def test_get(self):

def test_post(self):
self.client.login(username='supers', password='pw')

get_veranstaltung('v')
s, v1 = get_veranstaltung('vu')
v1.anzahl = 42
v1.sprache = 'de'
v1.save()

default_params = {
'semester': s, 'status': Veranstaltung.STATUS_BESTELLUNG_LIEGT_VOR, 'grundstudium': False,
'evaluieren': True, 'sprache': 'de', 'anzahl': 44, 'lv_nr': '234vu'
}
v2 = Veranstaltung.objects.create(typ='vu', name='Stoning III', **default_params)
v2.save()

fg1 = Fachgebiet.objects.create(name="Fachgebiet1", kuerzel="FB1")
fg2 = Fachgebiet.objects.create(name="Fachgebiet2", kuerzel="FB2")
FachgebietEmail.objects.create(fachgebiet=fg1, email_suffix="fg1.com", email_sekretaerin="sek@fg1.com")
FachgebietEmail.objects.create(fachgebiet=fg2, email_suffix="fg2.com", email_sekretaerin="sek@fg2.com")

p1 = Person.objects.create(vorname='Peter', nachname='Pan', email='peter@fg1.com', fachgebiet=fg1)
p2 = Person.objects.create(vorname='Pan', nachname='Peter', email='pan@fg2.com', fachgebiet=fg2)
fb = Fachgebiet.objects.create(name="Fachgebiet1", kuerzel="FB1")
FachgebietEmail.objects.create(fachgebiet=fb, email_suffix="ul.bla", email_sekretaerin="sek@ul.bla")
p1 = Person.objects.create(vorname='Pe', nachname='Ter', email='pe@ter.bla')
p2 = Person.objects.create(vorname='Pa', nachname='Ul', email='pa@ul.bla', fachgebiet=fb)

v1.veranstalter.add(p1)
v2.veranstalter.add(p2)

v1.veranstalter.add(p2)
mv = Mailvorlage.objects.create(subject='Testmail', body='Dies ist eine Testmail.')
Einstellung.objects.create(name='bestellung_erlaubt', wert='0')
Tutor.objects.create(nummer=1, vorname='Max', nachname='Mux', email='max@fg1.com', anmerkung='',
veranstaltung=v1)

post_data = {
data = {
'uebernehmen': 'x',
'recipient': [Veranstaltung.STATUS_BESTELLUNG_GEOEFFNET],
'tutoren': 'False',
'subject': 'abc',
'body': 'xyz'
}

# ----- kein Semester angegeben ----- #
response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

# kein Semester angegeben
response = self.client.post(self.path, data, **{'REMOTE_USER': 'super'})
self.assertEqual(response.status_code, 302)
self.assertTrue(response['Location'].endswith('/intern/sendmail/'))

# ----- Vorlage übernehmen; Vorlage nicht angegeben ----- #
post_data['semester'] = s.semester

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

# Vorlage übernehmen; Vorlage nicht angegeben
data['semester'] = s.semester
response = self.client.post(self.path, data, **{'REMOTE_USER': 'super'})
self.assertEqual(response.status_code, 302)
self.assertTrue(response['Location'].endswith('/intern/sendmail/'))

# ----- Vorlage übernehmen; Vorlage ist angegeben ----- #
post_data['vorlage'] = mv.id

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

# Vorlage übernehmen; Vorlage ist angegeben
data['vorlage'] = mv.id
response = self.client.post(self.path, data, **{'REMOTE_USER': 'super'})
self.assertEqual(response.templates[0].name, 'intern/sendmail.html')
self.assertEqual(response.context['subject'], mv.subject)
self.assertEqual(response.context['body'], mv.body)

# ----- Vorschau; Empfänger ist auf Veranstalter mit fehlenden Bestellungen eingestellt ----- #
del post_data['uebernehmen']
post_data['vorschau'] = 'x'

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

# Vorschau; Empfänger ist auf Veranstalter mit fehlenden Bestellungen eingestellt
del data['uebernehmen']
data['vorschau'] = 'x'
response = self.client.post(self.path, data, **{'REMOTE_USER': 'super'})
self.assertIn('intern/sendmail_preview.html', (t.name for t in response.templates))
self.assertTrue(response.context['vorschau'])

# ----- Vorschau; Empfänger ist auf Veranstaltungen mit Ergebnissen eingestellt ----- #
post_data['recipient'] = [Veranstaltung.STATUS_ERGEBNISSE_VERSANDT]

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

# Vorschau; Empfänger ist auf Veranstaltungen mit Ergebnissen eingestellt
data['recipient'] = [Veranstaltung.STATUS_ERGEBNISSE_VERSANDT]
response = self.client.post(self.path, data, **{'REMOTE_USER': 'super'})
self.assertIn('intern/sendmail_preview.html', (t.name for t in response.templates))
self.assertTrue(response.context['vorschau'])

# ----- Vorschau: Check if the replacements are highlighted ----- #
# Vorschau: Check if the replacements are highlighted
color_span = '<span style="color:blue">{}</span>'
self.assertEqual(color_span.format('Grundlagen der Agrarphilosophie I'), response.context['veranstaltung'])
self.assertEqual(color_span.format('Grundlagen der Agrarphilosophie I') , response.context['veranstaltung'])
link_veranstalter = 'https://www.fachschaft.informatik.tu-darmstadt.de%s' % reverse('veranstalter-login')
link_suffix_format = '?vid=%d&token=%s'
self.assertEqual(color_span.format(link_veranstalter + (link_suffix_format % (1337, '0123456789abcdef'))),
response.context['link_veranstalter'])

# ----- Senden an alle Veranstaltungen ohne Tutoren ----- #
del post_data['vorschau']
post_data['senden'] = 'x'
post_data['recipient'] = [0] # 0 ist hierbei der Code für alle Veranstaltungen
del post_data['vorlage']

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})
# Senden
del data['vorschau']
data['senden'] = 'x'
data['recipient'] = [0] # 0 ist hierbei der Code für alle Veranstaltungen
del data['vorlage']
response = self.client.post(self.path, data, **{'REMOTE_USER': 'super'})
self.assertEqual(response.status_code, 302)
self.assertTrue(response['Location'], tests.LOGIN_URL)

# Hier wird in Eclipse ein Fehler angezeigt; mail.outbox gibt es während der Testläufe
# aber wirklich (siehe https://docs.djangoproject.com/en/1.4/topics/testing/#email-services)
self.assertEqual(len(mail.outbox), 2)
self.assertEqual(len(mail.outbox[0].to), 3) # an zwei veranstalter und sekretaerin

self.assertEqual(len(mail.outbox), 3) # an 2 Veranstalter und Kopie an Feedback-Team
self.assertEqual(len(mail.outbox[0].to), 2) # an Veranstalter und Sekretaerin
self.assertEqual(len(mail.outbox[1].to), 2)

# ----- Senden an eine bestimmte Veranstaltung ohne Tutoren ----- #
del mail.outbox[:]
post_data['recipient'] = Veranstaltung.STATUS_BESTELLUNG_GEOEFFNET

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

self.assertEqual(response.status_code, 302)
self.assertTrue(response['Location'], tests.LOGIN_URL)
self.assertEqual(len(mail.outbox), 2) # an 1 Veranstalter und Kopie an Feedback-Team
self.assertEqual(len(mail.outbox[0].to), 2) # an Veranstalter und Sekretaerin

# ----- Senden an eine bestimmte Veranstaltung mit Tutoren ==> ohne Sekretaerin ----- #
del mail.outbox[:]
post_data['recipient'] = Veranstaltung.STATUS_BESTELLUNG_GEOEFFNET
post_data['tutoren'] = 'True'

response = self.client.post(self.path, post_data, **{'REMOTE_USER': 'super'})

self.assertEqual(response.status_code, 302)
self.assertTrue(response['Location'], tests.LOGIN_URL)
self.assertEqual(len(mail.outbox), 2) # an 1 Veranstalter und Kopie an Feedback-Team
self.assertEqual(len(mail.outbox[0].to), 2) # an Veranstalter und Tutor
self.assertEqual(mail.outbox[0].to[1], 'max@fg1.com') # E-Mail Adresse des Tutors
53 changes: 15 additions & 38 deletions src/feedback/views/intern/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,9 @@
from feedback.models import Veranstaltung, Semester, Einstellung, Mailvorlage, get_model, long_not_ordert, FachgebietEmail

from feedback.forms import UploadFileForm
from feedback.models import Veranstaltung, Semester, Einstellung, Mailvorlage, get_model, long_not_ordert, FachgebietEmail
from feedback.parser.ergebnisse import parse_ergebnisse
from feedback.views import public
from feedback.models import Veranstaltung, Semester, Einstellung, Mailvorlage, get_model, long_not_ordert, \
FachgebietEmail, Tutor



Expand Down Expand Up @@ -287,23 +286,6 @@ def get_demo_context(request):
return demo_context, link_suffix_format, link_veranstalter


def set_up_choices():
tutoren_choices = [(False, 'Nein'), (True, 'Ja')]
status_choices = [(0, 'Alle Veranstaltungen')]
for choice_key, choice in Veranstaltung.STATUS_CHOICES:
status_choices.append((choice_key, choice))
return status_choices, tutoren_choices


def add_sekretaerin_mail(recipients, veranstaltung):
for person in veranstaltung.veranstalter.all():
fachgebiet = person.fachgebiet
if fachgebiet is not None:
mails = FachgebietEmail.objects.filter(fachgebiet=fachgebiet)
for mail in mails:
if (mail.email_sekretaerin is not None) and (mail.email_sekretaerin not in recipients):
recipients.append(mail.email_sekretaerin)


@user_passes_test(lambda u: u.is_superuser)
@require_http_methods(('HEAD', 'GET', 'POST'))
Expand All @@ -313,17 +295,17 @@ def sendmail(request):
'vorlagen': Mailvorlage.objects.all(),
}

status_choises = [(0, 'Alle Veranstaltungen')]
for choise_key, choise in Veranstaltung.STATUS_CHOICES:
status_choises.append((choise_key, choise))

status_choices, tutoren_choices = set_up_choices()
data['veranstaltung_status_choices'] = status_choices
data['tutoren_choices'] = tutoren_choices

data["veranstaltung_status_choises"] = status_choises

if request.method == 'POST':
try:
semester = Semester.objects.get(semester=request.POST['semester'])
data['subject'] = request.POST['subject']
data['body'] = request.POST['body']
data['tutoren'] = request.POST['tutoren']

if 'recipient' in request.POST.keys():
data['recipient'] = process_status_post_data_from(request.POST.getlist('recipient'))
Expand Down Expand Up @@ -351,7 +333,6 @@ def sendmail(request):
data['vorschau'] = True
data['from'] = settings.DEFAULT_FROM_EMAIL
data['to'] = "Veranstalter von %d Veranstaltungen" % len(veranstaltungen)
data['is_tutoren'] = "und den Tutoren dieser Veranstaltungen"
data['body_rendered'] = tools.render_email(data['body'], demo_context)

for status in data['recipient']:
Expand All @@ -376,6 +357,7 @@ def sendmail(request):
mails = []

# Mails für die Veranstaltungen
print "VERANSTALTUNGEN ===> ", veranstaltungen
for v in veranstaltungen:
subject = data['subject']
context = RequestContext(request, {
Expand All @@ -385,12 +367,13 @@ def sendmail(request):
body = tools.render_email(data['body'], context)
recipients = [person.email for person in v.veranstalter.all() if person.email]

if data['tutoren'] == 'True':
emails = Tutor.objects.filter(veranstaltung=v).values('email')
for dic in emails:
recipients.append(dic['email'])
else:
add_sekretaerin_mail(recipients, v)
for person in v.veranstalter.all():
fg = person.fachgebiet
if fg is not None:
fg_mails = FachgebietEmail.objects.filter(fachgebiet=fg)
for fg_mail in fg_mails:
if (fg_mail.email_sekretaerin is not None) and (fg_mail.email_sekretaerin not in recipients):
recipients.append(fg_mail.email_sekretaerin)

for p in v.veranstalter.all():
fg = p.fachgebiet
Expand All @@ -406,7 +389,6 @@ def sendmail(request):
(u'An die Veranstalter von "%s" wurde keine Mail ' +
u'verschickt, da keine Adressen hinterlegt waren.') % v.name)
continue

mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, recipients))

# Kopie für das Feedback-Team
Expand All @@ -416,12 +398,7 @@ def sendmail(request):

# Mails senden
send_mass_mail(mails)

if data['tutoren'] == 'True':
messages.success(request,
'%d Veranstaltungen wurden erfolgreich, samt Tutoren, benachrichtigt.' % (len(mails)-1))
else:
messages.success(request, '%d Veranstaltungen wurden erfolgreich benachrichtigt.' % (len(mails) - 1))
messages.success(request, '%d E-Mails wurden erfolgreich versandt!' % (len(mails)-1))
return HttpResponseRedirect(reverse('intern-index'))

return render(request, 'intern/sendmail.html', data)
Expand Down
17 changes: 3 additions & 14 deletions src/templates/intern/sendmail.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,10 @@ <h1>Mail an Veranstalter versenden</h1>
<p>{% include 'includes/semesterauswahl.html' %}</p>
<p>
<label for="selectRecipient" >
Mail senden an Veranstalter der Veranstaltung mit Bestellstatus:
Mail senden an Veranstaltung mit dem Status:
<select multiple class="chosen-select" style="width: 175px;" data-placeholder="Wähle einen Status..." id="selectRecipient" name="recipient">
{% for choice in veranstaltung_status_choices %}
<option value="{{ choice.0 }}">{{ choice.1 }}</option>
{% endfor %}
</select>
</label>
</p>

<p>
<label for="selectTutoren">
Mail auch an die Tutoren der jeweiligen Veranstaltungen schicken?
<select id="selectTutoren" name="tutoren">
{% for choice in tutoren_choices %}
<option value="{{ choice.0 }}">{{ choice.1 }}</option>
{% for choise in veranstaltung_status_choises %}
<option value="{{ choise.0 }}">{{ choise.1 }}</option>
{% endfor %}
</select>
</label>
Expand Down
14 changes: 3 additions & 11 deletions src/templates/intern/sendmail_preview.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,9 @@ <h1>Mail an Veranstalter versenden</h1>
{% csrf_token %}
<h2>Vorschau (Ersetzte Begriffe sind <span style="color: blue;">blau markiert</span>)</h2>
<p>
<label><em>Absender:</em></label>
{{ from }}

<br>

<label><em>Empfänger:</em></label>
{{ to }} aus dem {{ semester_selected }}
{% if tutoren == 'True' %}
{{ is_tutoren }}
{% endif %}
<em>Absender:</em> {{ from }}
<br/>
<em>Empfänger:</em> {{ to }} aus dem {{ semester_selected }}
</p>

<pre>
Expand All @@ -30,7 +23,6 @@ <h2>Vorschau (Ersetzte Begriffe sind <span style="color: blue;">blau markiert</s
<input type="hidden" name="status_values" value="{{ recipient }}" />
<input type="hidden" name="subject" value="{{ subject }}" />
<input type="hidden" name="body" value="{{ body }}" />
<input type="hidden" name="tutoren" value="{{ tutoren }}" />

<input type="submit" name="aendern" value="Ändern" />
<input type="submit" name="senden" value="Mails senden" />
Expand Down

0 comments on commit 927a041

Please sign in to comment.