def test_waiting_list(self): self.invite = ActivityInvite( activity=self.activity, person=self.person ) self.invite.save() self.assertFalse(WaitingList.objects.filter(pk=self.waitinglist_id).exists())
def test_clean_age_limit_inbounds(self): self.person.birthday = datetime.now() - timedelta(days=365 * 6) self.activity.min_age = 4 self.activity.max_age = 8 self.invite = ActivityInvite( activity=self.activity, person=self.person ) self.invite.clean()
def test_clean_age_limit_max(self): self.person.birthday = datetime.now() - timedelta(days=365 * 10) self.activity.min_age = 4 self.activity.max_age = 6 self.invite = ActivityInvite( activity=self.activity, person=self.person ) with self.assertRaises(ValidationError): self.invite.clean()
def test_email_only_once(self): self.invite = ActivityInvite( activity=self.activity, person=self.person ) self.invite.save() EmailSendCronJob().do() mail.outbox.clear() self.invite.save() EmailSendCronJob().do() self.assertEqual(len(mail.outbox), 0)
def test_family_email(self): self.person.email = '' self.person.save() self.invite = ActivityInvite( activity=self.activity, person=self.person ) self.invite.save() EmailSendCronJob().do() self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].to, ['*****@*****.**'])
def test_own_email(self): self.person.email = '*****@*****.**' self.person.save() self.invite = ActivityInvite( activity=self.activity, person=self.person ) self.invite.save() EmailSendCronJob().do() self.assertEqual(len(mail.outbox), 2) self.assertEqual(len(list(filter(lambda email: email.to == ['*****@*****.**'], mail.outbox))), 1, msg="No email was send to the persons email address") self.assertEqual(len(list(filter(lambda email: email.to == ['*****@*****.**'], mail.outbox))), 1, msg="No email wes send to the families email address")
def invite_many_to_activity_action(self,request, queryset): # Get list of available departments if request.user.is_superuser or request.user.has_perm('members.view_all_persons'): deparment_list_query = Department.objects.all() else: deparment_list_query = Department.objects.filter(adminuserinformation__user=request.user) deparment_list=[('-', '-')] for department in deparment_list_query: deparment_list.append((department.id, department.name)) # Get list of active and future activities department_ids = deparment_list_query.values_list('id', flat=True) activity_list_query = Activity.objects.filter(end_date__gt=timezone.now()) if not request.user.is_superuser: activity_list_query = activity_list_query.filter(department__in=department_ids) activity_list=[('-', '-')] for activity in activity_list_query: activity_list.append((activity.id, activity.department.name + ", " + activity.name)) # Form used to select department and activity - redundant department is for double check class MassInvitationForm(forms.Form): department = forms.ChoiceField(label='Afdeling', choices=deparment_list) activity = forms.ChoiceField(label='Aktivitet', choices=activity_list) expire = forms.DateField(label='Udløber', widget=AdminDateWidget(), initial=timezone.now() + timedelta(days=30*3)) # Lookup all the selected persons - to show confirmation list persons = queryset context = admin.site.each_context(request) context['persons'] = persons context['queryset'] = queryset if request.method == 'POST' and 'department' in request.POST: # Post request with data mass_invitation_form = MassInvitationForm(request.POST) context['mass_invitation_form'] = mass_invitation_form if mass_invitation_form.is_valid() and mass_invitation_form.cleaned_data['activity'] != '-' and mass_invitation_form.cleaned_data['department'] != '-': activity = Activity.objects.get(pk=mass_invitation_form.cleaned_data['activity']) # validate activity belongs to user and matches selected department if int(mass_invitation_form.cleaned_data['department']) in department_ids: if activity.department.id == int(mass_invitation_form.cleaned_data['department']): invited_counter = 0 # get list of already created invitations on selected persons already_invited = Person.objects.filter(activityinvite__activity=mass_invitation_form.cleaned_data['activity'], activityinvite__person__in=queryset).all() list(already_invited) # force lookup already_invited_ids = already_invited.values_list('id', flat=True) # only save if all succeeds try: with transaction.atomic(): for current_person in queryset: if(current_person.id not in already_invited_ids): invited_counter = invited_counter + 1 invitation = ActivityInvite(activity=activity, person=current_person, expire_dtm=mass_invitation_form.cleaned_data['expire']) invitation.save() except Exception as e: messages.error(request, "Fejl - ingen personer blev inviteret! Der var problemer med " + invitation.person.name + ". Vær sikker på personen ikke allerede er inviteret og opfylder alderskravet.") return # return ok message already_invited_text="" if(already_invited.count()): already_invited_text = ". Dog var : " + str.join(', ', already_invited.values_list('name', flat=True)) + " allerede inviteret!" messages.success(request, str(invited_counter) + " af " + str(queryset.count()) + " valgte personer blev inviteret til " + str(activity) + already_invited_text) return else: messages.error(request, "Valgt aktivitet stemmer ikke overens med valgt afdeling") return else: messages.error(request, "Du kan kun invitere til egne afdelinger") return else: context['mass_invitation_form'] = MassInvitationForm() return render(request, 'admin/invite_many_to_activity.html', context)