def index(request): if request.user.username != settings.USERNAME_VERANSTALTER: return render(request, 'veranstalter/not_authenticated.html') data = {} veranst = Veranstaltung.objects.get(id=request.session['vid']) # TODO: statt Betrachtung der Sichtbarkeit automatisch aktuelles Semester (-> Kalender) annehmen if veranst.semester.sichtbarkeit == 'ADM' and Einstellung.get( 'bestellung_erlaubt') == '1': if request.method == 'POST': order_form = BestellungModelForm(request.POST, instance=veranst) if order_form.is_valid(): order_form.save() return redirect('VerantwortlicherUpdate') else: order_form = BestellungModelForm(instance=veranst) data['order_form'] = order_form data['paper_dict'] = past_semester_orders(veranst) if veranst.semester.sichtbarkeit != 'ADM': try: kommentar = Kommentar.objects.get(veranstaltung=veranst) except Kommentar.DoesNotExist: kommentar = None if request.method == 'POST': comment_form = KommentarModelForm(request.POST, instance=kommentar, veranstaltung=veranst) if comment_form.is_valid(): # TODO: löschen ermöglichen kommentar = comment_form.save(commit=False) kommentar.veranstaltung = veranst kommentar.save() messages.success(request, 'Ihre Änderungen wurden gespeichert.') else: comment_form = KommentarModelForm(instance=kommentar, veranstaltung=veranst) data['comment_form'] = comment_form data['veranstaltung'] = veranst return render(request, 'veranstalter/index.html', data)
def index(request): if request.user.username != settings.USERNAME_VERANSTALTER: return render(request, 'veranstalter/not_authenticated.html') data = {} veranst = Veranstaltung.objects.get(id=request.session['vid']) #TODO: statt Betrachtung der Sichtbarkeit automatisch aktuelles Semester (-> Kalender) annehmen if veranst.semester.sichtbarkeit == 'ADM' and Einstellung.get('bestellung_erlaubt') == '1': if request.method == 'POST': order_form = BestellungModelForm(request.POST, instance=veranst) if order_form.is_valid(): order_form.save() return redirect('VerantwortlicherUpdate') else: order_form = BestellungModelForm(instance=veranst) data['order_form'] = order_form data['paper_dict'] = past_semester_orders(veranst) if veranst.semester.sichtbarkeit != 'ADM': try: kommentar = Kommentar.objects.get(veranstaltung=veranst) except Kommentar.DoesNotExist: kommentar = None if request.method == 'POST': comment_form = KommentarModelForm(request.POST, instance=kommentar, veranstaltung=veranst) if comment_form.is_valid(): #TODO: löschen ermöglichen kommentar = comment_form.save(commit=False) kommentar.veranstaltung = veranst kommentar.save() messages.success(request, 'Ihre Änderungen wurden gespeichert.') else: comment_form = KommentarModelForm(instance=kommentar, veranstaltung=veranst) data['comment_form'] = comment_form data['veranstaltung'] = veranst return render(request, 'veranstalter/index.html', data)
def sendmail(request): data = {} data["semester"] = Semester.objects.order_by("-semester") data["vorlagen"] = Mailvorlage.objects.all() if request.method == "POST": try: semester = Semester.objects.get(semester=request.POST["semester"]) data["recipient"] = request.POST["recipient"] data["subject"] = request.POST["subject"] data["body"] = request.POST["body"] except (Semester.DoesNotExist, KeyError): return HttpResponseRedirect(reverse("sendmail")) data["semester_selected"] = semester data["subject_rendered"] = "Evaluation: %s" % data["subject"] veranstaltungen = Veranstaltung.objects.filter(semester=semester) if data["recipient"] == "cur_sem_missing_order": veranstaltungen = veranstaltungen.filter(anzahl=None, evaluieren=True) elif data["recipient"] == "cur_sem_ordert": veranstaltungen = veranstaltungen.filter(evaluieren=True, anzahl__gt=0) elif data["recipient"] == "cur_sem_results": # Veranstaltungen ohne Ergebnisse ausfiltern flt = {str("ergebnis" + data["semester_selected"].fragebogen): None} veranstaltungen = veranstaltungen.exclude(**flt) link_veranstalter = "https://www.fachschaft.informatik.tu-darmstadt.de%s" % reverse("veranstalter-login") link_suffix_format = "?vid=%d&token=%s" demo_context = RequestContext( request, { "veranstaltung": "Grundlagen der Agrarphilosophie I", "link_veranstalter": link_veranstalter + (link_suffix_format % (1337, "0123456789abcdef")), }, ) if "uebernehmen" in request.POST: try: vorlage = Mailvorlage.objects.get(id=int(request.POST["vorlage"])) data["subject"] = vorlage.subject data["body"] = vorlage.body except (Mailvorlage.DoesNotExist, KeyError, ValueError): return HttpResponseRedirect(reverse("sendmail")) elif "vorschau" in request.POST: data["vorschau"] = True data["from"] = settings.DEFAULT_FROM_EMAIL data["to"] = "Veranstalter von %d Veranstaltungen" % veranstaltungen.count() data["body_rendered"] = tools.render_email(data["body"], demo_context) if data["recipient"] == "cur_sem_missing_order": if Einstellung.get("bestellung_erlaubt") == "0": messages.warning( request, u"Bestellungen sind aktuell nicht erlaubt! Bist du " + u"sicher, dass du trotzdem die Dozenten anschreiben willst, " + u"die noch nicht bestellt haben?", ) elif data["recipient"] == "cur_sem_results": if semester.sichtbarkeit != "VER": messages.warning( request, u"Die Sichtbarkeit der Ergebnisse des ausgewählten " + u'Semesters ist aktuell nicht auf "Veranstalter" ' + u"eingestellt! Bist du sicher, dass du trotzdem die " + u"Dozenten anschreiben willst, für deren Veranstaltungen " u"Ergebnisse vorliegen?", ) return render(request, "intern/sendmail_preview.html", data) elif "senden" in request.POST: mails = [] # Mails für die Veranstaltungen for v in veranstaltungen: subject = data["subject"] context = RequestContext( request, { "veranstaltung": v.name, "link_veranstalter": link_veranstalter + (link_suffix_format % (v.id, v.access_token)), }, ) body = tools.render_email(data["body"], context) recipients = [p.email for p in v.veranstalter.all() if p.email] if not recipients: messages.warning( 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 subject = data["subject_rendered"] body = tools.render_email(data["body"], demo_context) mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL])) # Mails senden send_mass_mail(mails) messages.success(request, "%d E-Mails wurden erfolgreich versandt!" % (len(mails) - 1)) return HttpResponseRedirect(reverse("intern-index")) return render(request, "intern/sendmail.html", data)
def test_get(self): self.assertEqual(Einstellung.get('spam'), self.a.wert) self.assertEqual(Einstellung.get('sausage'), self.b.wert)
def sendmail(request): data = {} data['semester'] = Semester.objects.order_by('-semester') data['vorlagen'] = Mailvorlage.objects.all() if request.method == 'POST': try: semester = Semester.objects.get(semester=request.POST['semester']) data['recipient'] = request.POST['recipient'] data['subject'] = request.POST['subject'] data['body'] = request.POST['body'] except (Semester.DoesNotExist, KeyError): return HttpResponseRedirect(reverse('sendmail')) data['semester_selected'] = semester data['subject_rendered'] = "Evaluation: %s" % data['subject'] veranstaltungen = Veranstaltung.objects.filter(semester=semester) if data['recipient'] == 'cur_sem_missing_order': veranstaltungen = veranstaltungen.filter(anzahl=None, evaluieren=True) elif data['recipient'] == 'cur_sem_ordert': veranstaltungen = veranstaltungen.filter(evaluieren=True, anzahl__gt=0) elif data['recipient'] == 'cur_sem_results': # Veranstaltungen ohne Ergebnisse ausfiltern flt = {str('ergebnis'+data['semester_selected'].fragebogen): None} veranstaltungen = veranstaltungen.exclude(**flt) link_veranstalter = 'https://www.fachschaft.informatik.tu-darmstadt.de%s' % reverse('veranstalter-login') link_suffix_format = '?vid=%d&token=%s' demo_context = RequestContext(request, { 'veranstaltung': 'Grundlagen der Agrarphilosophie I', 'link_veranstalter': link_veranstalter + (link_suffix_format % (1337, '0123456789abcdef')), }) if 'uebernehmen' in request.POST: try: vorlage = Mailvorlage.objects.get(id=int(request.POST['vorlage'])) data['subject'] = vorlage.subject data['body'] = vorlage.body except (Mailvorlage.DoesNotExist, KeyError, ValueError): return HttpResponseRedirect(reverse('sendmail')) elif 'vorschau' in request.POST: data['vorschau'] = True data['from'] = settings.DEFAULT_FROM_EMAIL data['to'] = "Veranstalter von %d Veranstaltungen" % veranstaltungen.count() data['body_rendered'] = tools.render_email(data['body'], demo_context) if data['recipient'] == 'cur_sem_missing_order': if Einstellung.get('bestellung_erlaubt') == '0': messages.warning(request, u'Bestellungen sind aktuell nicht erlaubt! Bist du ' + u'sicher, dass du trotzdem die Dozenten anschreiben willst, ' + u'die noch nicht bestellt haben?') elif data['recipient'] == 'cur_sem_results': if semester.sichtbarkeit != 'VER': messages.warning(request, u'Die Sichtbarkeit der Ergebnisse des ausgewählten ' + u'Semesters ist aktuell nicht auf "Veranstalter" ' + u'eingestellt! Bist du sicher, dass du trotzdem die ' + u'Dozenten anschreiben willst, für deren Veranstaltungen ' u'Ergebnisse vorliegen?') return render(request, 'intern/sendmail_preview.html', data) elif 'senden' in request.POST: mails = [] # Mails für die Veranstaltungen for v in veranstaltungen: subject = data['subject'] context = RequestContext(request, { 'veranstaltung': v.name, 'link_veranstalter': link_veranstalter + (link_suffix_format % (v.id, v.access_token)), }) body = tools.render_email(data['body'], context) recipients = [p.email for p in v.veranstalter.all() if p.email] if not recipients: messages.warning(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 subject = data['subject_rendered'] body = tools.render_email(data['body'], demo_context) mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL])) # Mails senden send_mass_mail(mails) messages.success(request, '%d E-Mails wurden erfolgreich versandt!' % (len(mails)-1)) return HttpResponseRedirect(reverse('intern-index')) return render(request, 'intern/sendmail.html', data)
def sendmail(request): """Die View-Funktion für den Mailversand.""" data = { 'semester': Semester.objects.order_by('-semester'), 'vorlagen': Mailvorlage.objects.all(), } status_choices, tutoren_choices = set_up_choices() data['veranstaltung_status_choices'] = status_choices data['tutoren_choices'] = tutoren_choices 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')) data['recipient_selected'] = data['recipient'] elif 'status_values' in request.POST.keys(): data['recipient'] = ast.literal_eval(request.POST.get('status_values')) elif 'uebernehmen' not in request.POST: return HttpResponseRedirect(reverse('sendmail')) except (Semester.DoesNotExist, KeyError): return HttpResponseRedirect(reverse('sendmail')) data['semester_selected'] = semester data['subject_rendered'] = "Evaluation: %s" % data['subject'] if 'uebernehmen' in request.POST: try: vorlage = Mailvorlage.objects.get(id=int(request.POST['vorlage'])) data['subject'] = vorlage.subject data['body'] = vorlage.body except (Mailvorlage.DoesNotExist, KeyError, ValueError): return HttpResponseRedirect(reverse('sendmail')) return render(request, 'intern/sendmail.html', data) veranstaltungen = get_relevant_veranstaltungen(data['recipient'], semester) demo_context, link_suffix_format, link_veranstalter = get_demo_context(request) if 'vorschau' in request.POST: 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']: if status <= Veranstaltung.STATUS_BESTELLUNG_LIEGT_VOR: if Einstellung.get('bestellung_erlaubt') == '0': messages.warning(request, 'Bestellungen sind aktuell nicht erlaubt! Bist du ' + 'sicher, dass du trotzdem die Dozenten anschreiben willst, ' + 'die noch nicht bestellt haben?') elif status == Veranstaltung.STATUS_ERGEBNISSE_VERSANDT: if semester.sichtbarkeit != 'VER': messages.warning(request, 'Die Sichtbarkeit der Ergebnisse des ausgewählten ' + 'Semesters ist aktuell nicht auf "Veranstalter" ' + 'eingestellt! Bist du sicher, dass du trotzdem die ' + 'Dozenten anschreiben willst, für deren Veranstaltungen ' 'Ergebnisse vorliegen?') return render(request, 'intern/sendmail_preview.html', data) elif 'senden' in request.POST: mails = [] # Mails für die Veranstaltungen for v in veranstaltungen: subject = data['subject'] context = RequestContext(request, { 'veranstaltung': v.name, 'link_veranstalter': link_veranstalter + (link_suffix_format % (v.id, v.access_token)), }) 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) if not recipients: messages.warning(request, ('An die Veranstalter von "%s" wurde keine Mail ' + 'verschickt, da keine Adressen hinterlegt waren.') % v.name) continue mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, recipients)) # Kopie für das Feedback-Team subject = data['subject_rendered'] body = tools.render_email(data['body'], demo_context) mails.append((subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL])) # 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)) return HttpResponseRedirect(reverse('intern-index')) return render(request, 'intern/sendmail.html', data)