def test_recipient_list_filtering(self): evaluation = mommy.make(Evaluation) contributor1 = mommy.make(UserProfile) contributor2 = mommy.make(UserProfile, delegates=[contributor1]) mommy.make(Contribution, evaluation=evaluation, contributor=contributor1) mommy.make(Contribution, evaluation=evaluation, contributor=contributor2) # no-one should get filtered. recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.CONTRIBUTORS], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [contributor1, contributor2]) # contributor1 is in cc of contributor2 and gets filtered. recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.CONTRIBUTORS], filter_users_in_cc=True) self.assertCountEqual(recipient_list, [contributor2]) contributor3 = mommy.make(UserProfile, delegates=[contributor2]) mommy.make(Contribution, evaluation=evaluation, contributor=contributor3) # again, no-one should get filtered. recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.CONTRIBUTORS], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [contributor1, contributor2, contributor3]) # contributor1 is in cc of contributor2 and gets filtered. # contributor2 is in cc of contributor3 but is not filtered since contributor1 wouldn't get an email at all then. recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.CONTRIBUTORS], filter_users_in_cc=True) self.assertCountEqual(recipient_list, [contributor2, contributor3])
class EvaluationEmailForm(forms.Form): recipients = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=EmailTemplate.Recipients.choices, label=_("Send email to")) subject = forms.CharField(label=_("Subject")) body = forms.CharField(widget=forms.Textarea(), label=_("Message")) def __init__(self, *args, evaluation, export=False, **kwargs): super().__init__(*args, **kwargs) self.template = EmailTemplate() self.evaluation = evaluation self.recipient_groups = None self.fields['subject'].required = not export self.fields['body'].required = not export def clean(self): self.recipient_groups = self.cleaned_data.get('recipients') if not self.recipient_groups: raise forms.ValidationError(_("No recipient selected. Choose at least one group of recipients.")) return self.cleaned_data def email_addresses(self): recipients = self.template.recipient_list_for_evaluation(self.evaluation, self.recipient_groups, filter_users_in_cc=False) return set(user.email for user in recipients if user.email) def send(self, request): self.template.subject = self.cleaned_data.get('subject') self.template.body = self.cleaned_data.get('body') self.template.send_to_users_in_evaluations([self.evaluation], self.recipient_groups, use_cc=True, request=request)
class EvaluationEmailForm(forms.Form): recipients = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=EmailTemplate.EMAIL_RECIPIENTS, label=_("Send email to")) subject = forms.CharField(label=_("Subject")) body = forms.CharField(widget=forms.Textarea(), label=_("Message")) def __init__(self, *args, evaluation, export=False, **kwargs): super().__init__(*args, **kwargs) self.template = EmailTemplate() self.evaluation = evaluation self.fields['subject'].required = not export self.fields['body'].required = not export def clean(self): self.recipient_groups = self.cleaned_data.get('recipients') if not self.recipient_groups: raise forms.ValidationError(_("No recipient selected. Choose at least one group of recipients.")) return self.cleaned_data def email_addresses(self): recipients = self.template.recipient_list_for_evaluation(self.evaluation, self.recipient_groups, filter_users_in_cc=False) return set(user.email for user in recipients if user.email) def send(self, request): self.template.subject = self.cleaned_data.get('subject') self.template.body = self.cleaned_data.get('body') EmailTemplate.send_to_users_in_evaluations(self.template, [self.evaluation], self.recipient_groups, use_cc=True, request=request)
def test_recipient_list(self): evaluation = mommy.make(Evaluation) responsible = mommy.make(UserProfile) editor = mommy.make(UserProfile) contributor = mommy.make(UserProfile) evaluation.course.responsibles.set([responsible]) mommy.make(Contribution, evaluation=evaluation, contributor=editor, can_edit=True) mommy.make(Contribution, evaluation=evaluation, contributor=contributor) participant1 = mommy.make(UserProfile, evaluations_participating_in=[evaluation]) participant2 = mommy.make(UserProfile, evaluations_participating_in=[evaluation]) evaluation.voters.set([participant1]) recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [], filter_users_in_cc=False) self.assertCountEqual(recipient_list, []) recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.RESPONSIBLE], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [responsible]) recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.EDITORS], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [responsible, editor]) recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.CONTRIBUTORS], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [responsible, editor, contributor]) recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.ALL_PARTICIPANTS], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [participant1, participant2]) recipient_list = EmailTemplate.recipient_list_for_evaluation(evaluation, [EmailTemplate.DUE_PARTICIPANTS], filter_users_in_cc=False) self.assertCountEqual(recipient_list, [participant2])