Changeset e8550be for remit/vouchers


Ignore:
Timestamp:
Mar 20, 2010, 5:31:07 AM (15 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, client
Children:
c020a3b
Parents:
14adb6b
git-author:
Alex Dehnert <adehnert@…> (03/20/10 05:31:07)
git-committer:
Alex Dehnert <adehnert@…> (03/20/10 05:31:07)
Message:

Allow sending certain stock emails (Closes: #10)

Location:
remit/vouchers
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • remit/vouchers/models.py

    r6054f18 re8550be  
    3636            ('can_list', 'Can list requests',),
    3737            ('can_approve', 'Can approve requests',),
     38            ('can_email', 'Can send mail about requests',),
    3839        )
    3940
     
    107108        )
    108109
     110
     111class StockEmail:
     112    def __init__(self, name, label, recipients, template, subject_template, context, ):
     113        """
     114        Initialize a stock email object.
     115       
     116        Each argument is required.
     117       
     118        name:       Short name. Letters, numbers, and hyphens only.
     119        label:      User-readable label. Briefly describe what the email says
     120        recipients: Who receives the email. List of "recipient" (check recipient), "area" (area owner), "admins" (site admins)
     121        template:   Django template filename with the actual text
     122        subject_template: Django template string with the subject
     123        context:    Type of context the email needs. Must be 'request' currently.
     124        """
     125
     126        self.name       = name
     127        self.label      = label
     128        self.recipients = recipients
     129        self.template   = template
     130        self.subject_template = subject_template
     131        self.context    = context
     132
     133    def send_email_request(self, request,):
     134        """
     135        Send an email that requires context "request".
     136        """
     137
     138        assert self.context == 'request'
     139
     140        # Generate text
     141        from django.template import Context, Template
     142        from django.template.loader import get_template
     143        ctx = Context({
     144            'prefix': settings.EMAIL_SUBJECT_PREFIX,
     145            'request': request,
     146            'sender': settings.USER_EMAIL_SIGNATURE,
     147        })
     148        tmpl = get_template(self.template)
     149        body = tmpl.render(ctx)
     150        subject_tmpl = Template(self.subject_template)
     151        subject = subject_tmpl.render(ctx)
     152
     153        # Generate recipients
     154        recipients = []
     155        for rt in self.recipients:
     156            if rt == 'recipient':
     157                recipients.append(request.check_to_email)
     158            elif rt == 'area':
     159                recipients.append(request.budget_area.owner_address())
     160            elif rt == 'admins':
     161                pass # you don't *actually* have a choice...
     162        for name, addr in settings.ADMINS:
     163            recipients.append(addr)
     164
     165        # Send mail!
     166        from django.core.mail import send_mail
     167        send_mail(
     168            subject,
     169            body,
     170            settings.SERVER_EMAIL,
     171            recipients,
     172        )
     173
     174stock_emails = {
     175    'nodoc': StockEmail(
     176        name='nodoc',
     177        label='No documentation',
     178        recipients=['recipient', 'area',],
     179        template='vouchers/emails/no_docs_user.txt',
     180        subject_template='{{prefix}}Missing documentation for reimbursement',
     181        context = 'request',
     182    ),
     183    'voucher-sao': StockEmail(
     184        name='voucher-sao',
     185        label='Voucher submitted to SAO',
     186        recipients=['recipient', ],
     187        template='vouchers/emails/voucher_sao_user.txt',
     188        subject_template='{{prefix}}Reimbursement sent to SAO for processing',
     189        context = 'request',
     190    ),
     191}
  • remit/vouchers/views.py

    r14adb6b re8550be  
    173173            new = False
    174174
     175    show_email = http_request.user.has_perm('vouchers.can_email')
     176    if show_email:
     177        email_message = ''
     178        if http_request.method == 'POST' and 'send_email' in http_request.REQUEST:
     179            mail = vouchers.models.stock_emails[http_request.REQUEST['email_name']]
     180            assert mail.context == 'request'
     181            mail.send_email_request(request_obj)
     182            email_message = 'Sent email "%s".' % (mail.label, )
     183        email_options = []
     184        for mail in vouchers.models.stock_emails.values():
     185            if mail.context == 'request':
     186                email_options.append({
     187                    'label': mail.label,
     188                    'name' : mail.name,
     189                })
     190
    175191    show_approve = (http_request.user.has_perm('vouchers.can_approve')
    176192        and request_obj.approval_status == vouchers.models.APPROVAL_STATE_PENDING)
     
    232248        context['approve_form'] = approve_form
    233249        context['approve_message'] = approve_message
     250    if show_email:
     251        context['email_options'] = email_options
     252        context['email_message'] = email_message
    234253    return render_to_response('vouchers/ReimbursementRequest_review.html', context, context_instance=RequestContext(http_request), )
    235254
Note: See TracChangeset for help on using the changeset viewer.