def send_async_template_mail(self, request, queryset):
     """ Sends template email asynchronously.
     """
     return mail.send_template_mail_admin_action(
             lambda obj: [
                 (obj.email, {'obj': obj, 'info': info.as_dict()})
                 ],
             True, request, queryset)
 def send_mail(self, request, queryset):
     """ Allows to send email.
     """
     return mail.send_mail_admin_action(
             lambda obj: [
                 (obj.email, {'obj': obj, 'info': info.as_dict()})
                 ],
             request,
             queryset)
 def create_context(base_info):
     """ Creates invitation object and returns context.
     """
     invitation = models.Invitation()
     invitation.base = base_info
     invitation.payment = base_info.payment
     invitation.save()
     return [(base_info.email, {
         'base_info': base_info,
         'info': info.as_dict(),
         'invitation': invitation,
         'invitation_id': invitation.id,
         'current_site': unicode(Site.objects.get_current()),
         })]
    def download_sheet(self, request, queryset, default_div, template):
        """ Download registration sheet as pdf.
        """
        from collections import defaultdict
        groups = defaultdict(list)
        if not info.session_is_program_based:
            def add(student):
                if student.assigned_session_group:
                    title = student.assigned_session_group.title
                else:
                    title = _(u'Unknown')
                groups[title].append(student)

        else:
            raise NotImplemented
        for student in queryset:
            add(student)
        sorted_groups = {}
        for title, group in sorted(groups.items()):
            students = list(enumerate(sorted(
                    group,
                    key=lambda x: (x.last_name, x.first_name))))
            length = len(students)
            div = default_div
            if length > div:
                while 0 < (length % div) < 3:
                    div -= 1
            sgroup = []
            for i in range(0, length, div):
                sgroup.append(students[i:i+div])
            sorted_groups[title] = sgroup
        return render_to_pdf(
                template,
                {
                    'info': info.as_dict(),
                    'logo_path': settings.NMA_LOGO_IMAGE,
                    'font_path': settings.UBUNTU_FONT,
                    'pagesize':'A4',
                    'students': queryset,
                    'groups': sorted_groups,
                })