diff --git a/jdav_web/mailer/mailutils.py b/jdav_web/mailer/mailutils.py index cf50b04..389ec3a 100644 --- a/jdav_web/mailer/mailutils.py +++ b/jdav_web/mailer/mailutils.py @@ -17,7 +17,7 @@ def send(subject, content, sender, recipients, reply_to=None, else: kwargs = {} with mail.get_connection() as connection: - for recipient in recipients: + for recipient in set(recipients): email = EmailMessage(subject, content, sender, [recipient], connection=connection, **kwargs) if attachments is not None: diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index 5af5916..36a76b5 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -87,9 +87,12 @@ class Message(models.Model): print("sending mail to", filtered) attach = [a.f.path for a in Attachment.objects.filter(msg__id=self.pk) if a.f.name] + emails = [member.email for member in filtered] + emails.extend([member.email_parents for member in filtered + if member.email_parents]) success = send(self.subject, get_content(self.content), SENDING_ADDRESS, - [member.email for member in filtered], + emails, attachments=attach, reply_to=self.reply_to.email if self.reply_to else None) for a in Attachment.objects.filter(msg__id=self.pk): diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index bd78be1..23084e9 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -23,7 +23,7 @@ from easy_select2 import apply_select2 # Register your models here. class MemberAdmin(admin.ModelAdmin): - fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', + fields = ['prename', 'lastname', 'email', 'email_parents', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', 'gets_newsletter', 'queue', 'registration_form', 'comments'] list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments') list_filter = ('group', 'gets_newsletter', 'queue') diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index eeccf59..0a61a8d 100644 --- a/jdav_web/members/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/members/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-05 10:46+0000\n" +"POT-Creation-Date: 2017-07-12 18:16+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,193 +18,195 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: members/admin.py:58 +#: admin.py:58 msgid "Difficulty" msgstr "Schwierigkeit" -#: members/admin.py:62 +#: admin.py:62 msgid "Tour type" msgstr "Art der Tour" -#: members/apps.py:7 members/models.py:103 +#: apps.py:7 models.py:105 msgid "members" msgstr "Teilnehmer" -#: members/models.py:16 +#: models.py:16 msgid "Name" msgstr "Name" -#: members/models.py:17 +#: models.py:17 msgid "Description" msgstr "Beschreibung" -#: members/models.py:23 members/models.py:119 -#: members/templates/members/change_member.html:9 +#: models.py:23 models.py:121 templates/members/change_member.html:9 msgid "Activity" msgstr "Aktivität" -#: members/models.py:24 +#: models.py:24 msgid "Activities" msgstr "Aktivitäten" -#: members/models.py:32 +#: models.py:32 msgid "name" msgstr "Name" -#: members/models.py:34 +#: models.py:34 msgid "minimum age (years)" msgstr "Mindestalter (Jahre)" -#: members/models.py:41 members/models.py:58 +#: models.py:41 models.py:60 msgid "group" msgstr "Gruppe" -#: members/models.py:42 +#: models.py:42 msgid "groups" msgstr "Gruppen" -#: members/models.py:50 +#: models.py:50 msgid "prename" msgstr "Vorname" -#: members/models.py:51 +#: models.py:51 msgid "last name" msgstr "Nachname" -#: members/models.py:52 +#: models.py:52 msgid "street" msgstr "Straße" -#: members/models.py:53 +#: models.py:53 msgid "town" msgstr "Stadt" -#: members/models.py:54 +#: models.py:54 msgid "phone number" msgstr "Telefonnummer" -#: members/models.py:55 +#: models.py:55 msgid "parents phone number" msgstr "Telefonnummer der Eltern" -#: members/models.py:57 +#: models.py:58 +msgid "Parents' Email" +msgstr "Email der Eltern" + +#: models.py:59 msgid "birth date" msgstr "Geburtsdatum" -#: members/models.py:59 +#: models.py:61 msgid "receives newsletter" msgstr "Erhält den Newsletter" -#: members/models.py:63 +#: models.py:65 msgid "comments" msgstr "Kommentare" -#: members/models.py:64 +#: models.py:66 msgid "created" msgstr "erstellt" -#: members/models.py:65 +#: models.py:67 msgid "queue" msgstr "Warteliste" -#: members/models.py:66 +#: models.py:68 msgid "registration form" msgstr "Anmeldeformular" -#: members/models.py:99 members/models.py:183 +#: models.py:101 models.py:185 msgid "Group" msgstr "Gruppe" -#: members/models.py:102 +#: models.py:104 msgid "member" msgstr "Teilnehmer" -#: members/models.py:121 +#: models.py:123 msgid "Place" msgstr "Ort" -#: members/models.py:122 +#: models.py:124 msgid "Destination (optional)" msgstr "Ziel (optional)" -#: members/models.py:124 members/models.py:179 +#: models.py:126 models.py:181 msgid "Date" msgstr "Datum" -#: members/models.py:125 +#: models.py:127 msgid "End (optional)" msgstr "Ende" -#: members/models.py:127 +#: models.py:129 msgid "Groups" msgstr "Gruppen" -#: members/models.py:135 +#: models.py:137 msgid "Categories" msgstr "Kategorien" -#: members/models.py:136 +#: models.py:138 msgid "easy" msgstr "leicht" -#: members/models.py:136 +#: models.py:138 msgid "medium" msgstr "mittel" -#: members/models.py:136 +#: models.py:138 msgid "hard" msgstr "schwer" -#: members/models.py:145 +#: models.py:147 msgid "Memberlist" msgstr "Teilnehmerliste" -#: members/models.py:146 +#: models.py:148 msgid "Memberlists" msgstr "Teilnehmerlisten" -#: members/models.py:161 members/models.py:169 members/models.py:214 -#: members/models.py:221 +#: models.py:163 models.py:171 models.py:216 models.py:223 msgid "Member" msgstr "Teilnehmer" -#: members/models.py:163 +#: models.py:165 msgid "Comment" msgstr "Kommentar" -#: members/models.py:170 members/models.py:222 +#: models.py:172 models.py:224 msgid "Members" msgstr "Teilnehmer" -#: members/models.py:180 +#: models.py:182 msgid "Location" msgstr "Ort" -#: members/models.py:181 +#: models.py:183 msgid "Topic" msgstr "Thema" -#: members/models.py:205 +#: models.py:207 msgid "Jugendleiter" msgstr "Jugendleiter" -#: members/models.py:208 +#: models.py:210 msgid "Klettertreff" msgstr "Klettertreff" -#: members/models.py:209 +#: models.py:211 msgid "Klettertreffs" msgstr "Klettertreffs" -#: members/templates/admin/klettertreff_overview.html:9 +#: templates/admin/klettertreff_overview.html:9 msgid "date" msgstr "Datum" -#: members/templates/members/change_member.html:6 +#: templates/members/change_member.html:6 msgid "Qualities:" msgstr "Fähigkeiten:" -#: members/templates/members/change_member.html:10 +#: templates/members/change_member.html:10 msgid "Skill level" msgstr "Fähigkeitsniveau" diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 6a08f0e..ecc1d0e 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -54,6 +54,8 @@ class Member(models.Model): phone_number = models.CharField(max_length=12, verbose_name=_('phone number'), default='', blank=True) phone_number_parents = models.CharField(max_length=12, verbose_name=_('parents phone number'), default='', blank=True) email = models.EmailField(max_length=100, default="") + email_parents = models.EmailField(max_length=100, default="", blank=True, + verbose_name=_("Parents' Email")) birth_date = models.DateField(_('birth date')) # to determine the age group = models.ManyToManyField(Group, verbose_name=_('group')) gets_newsletter = models.BooleanField(_('receives newsletter'),