From 222b9ab428125b1c26544face42a97f91bffce32 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 20 Nov 2016 12:05:04 +0100 Subject: [PATCH 1/4] add gets_newsletter field to members --- jdav_web/mailer/models.py | 2 ++ jdav_web/members/admin.py | 7 ++++--- jdav_web/members/models.py | 8 ++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index edabb55..49e40a3 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -26,6 +26,8 @@ class Message(models.Model): for group in self.to_groups.all(): group_members = group.member_set.all() for member in group_members: + if not member.gets_newsletter: + continue members.add(member) data = [ (self.subject, self.content, self.from_addr, [member.email]) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 0a35d1c..bf7291c 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -18,9 +18,10 @@ from .models import Member, Group, MemberList, MemberOnList # Register your models here. class MemberAdmin(admin.ModelAdmin): - fields = ['prename', 'lastname', 'email', 'birth_date', 'group'] - list_display = ('name', 'birth_date') - list_filter = ('group',) + fields = ['prename', 'lastname', 'email', 'birth_date', 'group', + 'gets_newsletter'] + list_display = ('name', 'birth_date', 'gets_newsletter') + list_filter = ('group', 'gets_newsletter') class GroupAdmin(admin.ModelAdmin): diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 0dc545a..d2fcf42 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -31,6 +31,8 @@ class Member(models.Model): email = models.EmailField(max_length=100, default="") birth_date = models.DateField(_('birth date')) # to determine the age group = models.ManyToManyField(Group) + gets_newsletter = models.BooleanField(_('receives newsletter'), + default=True) def __str__(self): """String representation""" @@ -45,9 +47,11 @@ class Member(models.Model): verbose_name = _('member') verbose_name_plural = _('members') + class MemberList(models.Model): """Lets the user create a list of members in pdf format. """ - name = models.CharField(verbose_name='List Name', default='', max_length=50) + name = models.CharField(verbose_name='List Name', default='', + max_length=50) date = models.DateField(default=datetime.today) comment = models.TextField(_('Comments'), default='') @@ -61,5 +65,5 @@ class MemberOnList(models.Model): Connects members to a list of members. """ member = models.ForeignKey(Member) - memberlist = models.ForeignKey(MemberList) + memberlist = models.ForeignKey(MemberList) comments = models.TextField(_('Comment'), default='') From ab2868db41cead937cc5911857b19e84c5bb348b Mon Sep 17 00:00:00 2001 From: Paul Schiffers Date: Sun, 20 Nov 2016 12:18:34 +0100 Subject: [PATCH 2/4] add real quantity --- jdav_web/material/admin.py | 2 +- jdav_web/material/materials.json | 12 ++++++++---- jdav_web/material/models.py | 12 ++++++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/jdav_web/material/admin.py b/jdav_web/material/admin.py index 986ab8d..f285118 100644 --- a/jdav_web/material/admin.py +++ b/jdav_web/material/admin.py @@ -36,7 +36,7 @@ class NotTooOldFilter(SimpleListFilter): class MaterialAdmin(admin.ModelAdmin): """Edit view of a MaterialPart""" - list_display = ('name', 'buy_date', 'lifetime', 'not_too_old', 'photo') + list_display = ('name', 'quantity_real', 'buy_date', 'lifetime', 'not_too_old', 'photo') inlines = [OwnershipInline] list_filter = (NotTooOldFilter,) diff --git a/jdav_web/material/materials.json b/jdav_web/material/materials.json index 32c2bac..da53968 100644 --- a/jdav_web/material/materials.json +++ b/jdav_web/material/materials.json @@ -5,7 +5,8 @@ "fields": { "name": "Seil 40m grĂ¼n", "buy_date": "2016-01-01", - "lifetime": "3" + "lifetime": "3", + "quantity": "3" } }, { @@ -14,7 +15,8 @@ "fields": { "name": "Seil 40m blau", "buy_date": "2012-01-01", - "lifetime": "3" + "lifetime": "3", + "quantity": "10" } }, { @@ -23,7 +25,8 @@ "fields": { "name": "Seil 60m gelb", "buy_date": "2013-01-01", - "lifetime": "3" + "lifetime": "3", + "quantity": "5" } }, { @@ -32,7 +35,8 @@ "fields": { "name": "Seil 60m blau", "buy_date": "2016-01-01", - "lifetime": "3" + "lifetime": "3", + "quantity": "2" } } ] \ No newline at end of file diff --git a/jdav_web/material/models.py b/jdav_web/material/models.py index 131eec9..cc6226b 100644 --- a/jdav_web/material/models.py +++ b/jdav_web/material/models.py @@ -15,15 +15,23 @@ class MaterialPart(models.Model): members of the association (Ownership) """ name = models.CharField(_('name'), max_length=30) + quantity = models.IntegerField(_('quantity'), default=0) buy_date = models.DateField(_('purchase date'), editable=True) - lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, - max_digits=3) + lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, max_digits=3) photo = models.ImageField(_('photo'), upload_to='images', blank=True) def __str__(self): """String representation""" return self.name + def quantity_real(self): + real = sum([o.count for o in Ownership.objects.filter(material__id = self.pk)]) + return str(real) + '/' + str(self.quantity) + + quantity_real.admin_order_field = 'quantity' + quantity_real.short_description = _('Quantity') + + def not_too_old(self): """Returns wether the part should be replaced cause of age""" buy_time = timezone.make_aware(datetime.combine(self.buy_date, From deca8dcb84edc3133842e7ad02e41a267f7fd60e Mon Sep 17 00:00:00 2001 From: Paul Schiffers Date: Sun, 20 Nov 2016 13:00:26 +0100 Subject: [PATCH 3/4] updated member model --- jdav_web/members/admin.py | 6 +++--- jdav_web/members/models.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index bf7291c..69561bb 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -18,9 +18,9 @@ from .models import Member, Group, MemberList, MemberOnList # Register your models here. class MemberAdmin(admin.ModelAdmin): - fields = ['prename', 'lastname', 'email', 'birth_date', 'group', - 'gets_newsletter'] - list_display = ('name', 'birth_date', 'gets_newsletter') + fields = ['prename', 'lastname', 'email', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', + 'gets_newsletter', 'comments'] + list_display = ('name', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'gets_newsletter', 'comments') list_filter = ('group', 'gets_newsletter') diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index d2fcf42..6bfce44 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -28,11 +28,16 @@ class Member(models.Model): """ prename = models.CharField(max_length=20, verbose_name=_('prename')) lastname = models.CharField(max_length=20, verbose_name=_('last name')) + street = models.CharField(max_length=30, verbose_name=_('street'), default='', blank=True) + town = models.CharField(max_length=30, verbose_name=_('town'), default='', blank=True) + 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="") birth_date = models.DateField(_('birth date')) # to determine the age group = models.ManyToManyField(Group) gets_newsletter = models.BooleanField(_('receives newsletter'), default=True) + comments = models.TextField(_('comments'), default='', blank=True) def __str__(self): """String representation""" From 42fed9ed67c60907a0e35bb0db29cac2a1c2f8a6 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 20 Nov 2016 13:39:47 +0100 Subject: [PATCH 4/4] add subscribe option --- .../mailer/templates/mailer/subscribe.html | 44 ++++++++++++ .../mailer/templates/mailer/subscribed.html | 3 + jdav_web/mailer/urls.py | 3 +- jdav_web/mailer/views.py | 71 ++++++++++++------- 4 files changed, 92 insertions(+), 29 deletions(-) create mode 100644 jdav_web/mailer/templates/mailer/subscribe.html create mode 100644 jdav_web/mailer/templates/mailer/subscribed.html diff --git a/jdav_web/mailer/templates/mailer/subscribe.html b/jdav_web/mailer/templates/mailer/subscribe.html new file mode 100644 index 0000000..66b4223 --- /dev/null +++ b/jdav_web/mailer/templates/mailer/subscribe.html @@ -0,0 +1,44 @@ + + + +{% load i18n %} +

{% trans "Here you can register yourself to the newsletter" %}

+ +{% if error_message %} +

{{ error_message }}

+{% endif %} + +
+ {% csrf_token %} + + +

+ {% trans "Prename" %} + +

+ +

+ {% trans "Lastname" %} + +

+ +

+ {% trans "Birthdate" %} + +

+ + +

+ {% trans "Email address" %} + +

+ +

+ +

+
diff --git a/jdav_web/mailer/templates/mailer/subscribed.html b/jdav_web/mailer/templates/mailer/subscribed.html new file mode 100644 index 0000000..88d79c7 --- /dev/null +++ b/jdav_web/mailer/templates/mailer/subscribed.html @@ -0,0 +1,3 @@ +{% load i18n %} + +

{% trans "Subscribed successfully" %}

diff --git a/jdav_web/mailer/urls.py b/jdav_web/mailer/urls.py index 03ad286..3654aec 100644 --- a/jdav_web/mailer/urls.py +++ b/jdav_web/mailer/urls.py @@ -5,6 +5,5 @@ from . import views app_name = "mailer" urlpatterns = [ url(r'^$', views.index, name='index'), - url(r'^send_mail', views.send_mail, name='send_mail'), - url(r'^send', views.send, name='send') + url(r'^subscribe$', views.subscribe, name='subscribe'), ] diff --git a/jdav_web/mailer/views.py b/jdav_web/mailer/views.py index 9bc0fcb..a21e674 100644 --- a/jdav_web/mailer/views.py +++ b/jdav_web/mailer/views.py @@ -1,40 +1,57 @@ from django.shortcuts import render +from django import forms from django.utils.translation import ugettext_lazy as _ from django.urls import reverse from django.http import HttpResponseRedirect -from django.contrib.auth.decorators import permission_required -from members.models import Group +from members.models import Member -from .models import Message - -@permission_required('mailer.submit_mails', login_url='/admin/') def index(request): - """This is the main newsletter view""" - return render(request, 'mailer/index.html') + return HttpResponseRedirect(reverse('mailer:subscribe')) -@permission_required('mailer.submit_mails', login_url='/admin/') -def send(request): - return render(request, 'mailer/send.html', { - 'groups': Group.objects.all() - }) +def render_subscribe(request, error_message=""): + date_input = forms.DateInput(attrs={'required': True, + 'class': 'datepicker', + 'name': 'birthdate'}) + date_field = date_input.render(_("Birthdate"), "") + context = {'date_field': date_field} + if error_message: + context['error_message'] = error_message + return render(request, 'mailer/subscribe.html', context) -@permission_required('mailer.submit_mails', login_url='/admin/') -def send_mail(request): +def subscribe(request): try: - subject = request.POST['subject'] - content = request.POST['content'] - to_group = Group.objects.get(pk=request.POST['to_group']) - except (KeyError, Group.DoesNotExist): - return render(request, 'mailer/send.html', { - 'error_message': _("Please fill in every field!"), - 'groups': Group.objects.all() - }) - else: - msg = Message(subject=subject, content=content, to_group=to_group) - msg.submit() - msg.save() - return HttpResponseRedirect(reverse('mailer:index')) + request.POST['post'] + try: + print("trying to subscribe") + prename = request.POST['prename'] + lastname = request.POST['lastname'] + email = request.POST['email'] + print("email", email) + birth_date = request.POST['birthdate'] + print("birthdate", birth_date) + except KeyError: + return subscribe(request, _("Please fill in every field!")) + else: + # TODO: check whether member exists + exists = Member.objects.filter(prename=prename, + lastname=lastname) + if len(exists) > 0: + return render_subscribe(request, + error_message=_("Member already exists")) + member = Member(prename=prename, + lastname=lastname, + email=email, + birth_date=birth_date, + gets_newsletter=True) + member.save() + return subscribed(request) + except KeyError: + return render_subscribe(request) + + +def subscribed(request): + return render(request, 'mailer/subscribed.html')