def handle(self, *args, **options): msgs = Message.objects.filter(unread=True) for msg in msgs: if msg.thread.closed_by_sender or msg.thread.closed_by_receiver: msg.unread = False msg.save() msgs = Message.objects.filter(unread=True) user_digests = {} for msg in msgs: user_digests.setdefault(msg.receiver, OrderedSet()).add(msg) for user, mails in user_digests.items(): message = render_to_string('messages/mail/digest.txt', { 'count': len(mails), 'mails': mails, 'user': user, }) print message deliver(subject=_('unread ECS messages for %(user)s' % {'user':user,}), message=message, from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=[user.email]) print 'MAIL SENT'
def submission_billing(request): unbilled_submissions = list(Submission.objects.filter(billed_at=None, current_submission_form__acknowledged=True)) for submission in unbilled_submissions: submission.price = Price.objects.get_for_submission(submission) if request.method == 'POST': selected_for_billing = [] for submission in unbilled_submissions: if request.POST.get('bill_%s' % submission.pk, False): selected_for_billing.append(submission) xls = SimpleXLS() xls.write_row(0, (_(u'amt.'), _(u'EC-Number'), _(u'company'), _(u'Eudract-Nr.'), _(u'applicant'), _(u'clinic'), _(u'sum'))) for i, submission in enumerate(selected_for_billing): r = i + 1 submission_form = submission.current_submission_form xls.write_row(i + 1, [ "%s." % r, submission.get_ec_number_display(), _get_address(submission_form, submission_form.invoice_name and 'invoice' or 'sponsor'), submission_form.eudract_number or '?', submission_form.submitter_contact.full_name, _get_organizations(submission_form), submission.price.price, ]) r = len(selected_for_billing) + 1 xls.write(r, 6, xlwt.Formula('SUM(G2:G%s)' % r)) xls_buf = StringIO() xls.save(xls_buf) now = datetime.datetime.now() doc = Document.objects.create_from_buffer(xls_buf.getvalue(), mimetype='application/vnd.ms-excel', date=now) Submission.objects.filter(pk__in=[s.pk for s in selected_for_billing]).update(billed_at=now) htmlmail = unicode(render_html(request, 'billing/email/submissions.html', {})) plainmail = whitewash(htmlmail) deliver(subject=_(u'Billing request'), message=plainmail, message_html=htmlmail, attachments=[('billing-%s.xls' % now.strftime('%Y%m%d-%H%I%S'), xls_buf.getvalue(), 'application/vnd.ms-excel'),], from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=settings.BILLING_RECIPIENT_LIST, ) summary, total = collect_submission_billing_stats(selected_for_billing) return render(request, 'billing/submission_summary.html', { 'summary': summary, 'xls_doc': doc, 'total': total, }) return HttpResponseRedirect(reverse('ecs.billing.views.submission_billing')) return render(request, 'billing/submissions.html', { 'submissions': unbilled_submissions, })
def external_review_payment(request): submissions = Submission.objects.filter(external_reviewer=True, external_reviewer_billed_at=None, external_reviewer_name__isnull=False) price = Price.objects.get_review_price() if request.method == 'POST': selected_for_payment = [] for submission in submissions: if request.POST.get('pay_%s' % submission.pk, False): selected_for_payment.append(submission) reviewers = User.objects.filter(reviewed_submissions__in=selected_for_payment).distinct() xls = SimpleXLS() xls.write_row(0, (_(u'amt.'), _(u'reviewer'), _(u'EC-Nr.'), _(u'sum'))) for i, reviewer in enumerate(reviewers): submissions = reviewer.reviewed_submissions.filter(pk__in=[s.pk for s in selected_for_payment]) xls.write_row(i + 1, [ len(submissions), reviewer.get_full_name(), ", ".join(s.get_ec_number_display() for s in submissions), len(submissions) * price.price, ]) r = len(reviewers) + 1 xls.write_row(r, [ xlwt.Formula('SUM(A2:A%s)' % r), "", "", xlwt.Formula('SUM(D2:D%s)' % r), ]) xls_buf = StringIO() xls.save(xls_buf) now = datetime.datetime.now() doc = Document.objects.create_from_buffer(xls_buf.getvalue(), mimetype='application/vnd.ms-excel', date=now) Submission.objects.filter(pk__in=[s.pk for s in selected_for_payment]).update(external_reviewer_billed_at=now) htmlmail = unicode(render_html(request, 'billing/email/external_review.html', {})) plainmail = whitewash(htmlmail) deliver(subject=_(u'Payment request'), message=plainmail, message_html=htmlmail, attachments=[('externalreview-%s.xls' % now.strftime('%Y%m%d-%H%I%S'), xls_buf.getvalue(), 'application/vnd.ms-excel'),], from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=settings.BILLING_RECIPIENT_LIST, ) return render(request, 'billing/external_review_summary.html', { 'reviewers': reviewers, 'xls_doc': doc, }) return render(request, 'billing/external_review.html', { 'submissions': submissions, 'price': price, })
def register(request): form = RegistrationForm(request.POST or None) if form.is_valid(): token = _registration_token_factory.generate_token(form.cleaned_data) activation_url = request.build_absolute_uri(reverse('ecs.users.views.activate', kwargs={'token': token})) htmlmail = unicode(render_html(request, 'users/registration/activation_email.html', { 'activation_url': activation_url, 'form': form, })) deliver(subject=_(u'ECS - Registration'), message=None, message_html=htmlmail, from_email= settings.DEFAULT_FROM_EMAIL, recipient_list=form.cleaned_data['email']) return render(request, 'users/registration/registration_complete.html', {}) return render(request, 'users/registration/registration_form.html', { 'form': form, })
def request_password_reset(request): form = RequestPasswordResetForm(request.POST or None) if form.is_valid(): token = _password_reset_token_factory.generate_token(form.cleaned_data['email']) reset_url = request.build_absolute_uri(reverse('ecs.users.views.do_password_reset', kwargs={'token': token})) htmlmail = unicode(render_html(request, 'users/password_reset/reset_email.html', { 'reset_url': reset_url, })) deliver(subject=_(u'ECS - Password Reset'), message=None, message_html=htmlmail, from_email= settings.DEFAULT_FROM_EMAIL, recipient_list=form.cleaned_data['email']) return render(request, 'users/password_reset/request_complete.html', { 'email': form.cleaned_data['email'], }) return render(request, 'users/password_reset/request_form.html', { 'form': form, })
def invite_user(request, email): comment = None try: sid = transaction.savepoint() user, created = User.objects.get_or_create(email=email, defaults={'username': email[:30]}) if not created: raise ValueError(_(u'There is already a user with this email address.')) user.ecs_profile.phantom = True user.ecs_profile.save() invitation = Invitation.objects.create(user=user) subject = _(u'ECS account creation') link = request.build_absolute_uri(reverse('ecs.users.views.accept_invitation', kwargs={'invitation_uuid': invitation.uuid})) htmlmail = unicode(render_html(request, 'users/invitation/invitation_email.html', { 'link': link, })) transferlist = deliver(subject, None, settings.DEFAULT_FROM_EMAIL, email, message_html=htmlmail) try: msgid, rawmail = transferlist[0] print rawmail except IndexError: raise ValueError(_(u'The email could not be delivered.')) except ValueError, e: transaction.savepoint_rollback(sid) comment = unicode(e)
def save(self, *args, **kwargs): if self.smtp_delivery_state=='new': try: msg_list = deliver(subject=_('New ECS-Mail: from %(sender)s to %(receiver)s.' % {'sender': self.sender, 'receiver': self.receiver}), message=_('Subject: %(subject)s%(linesep)s%(text)s' % {'subject': self.thread.subject, 'text': self.text,'linesep':os.linesep}), from_email=self.return_address, recipient_list=self.receiver.email,) # FIXME callback=subtask(update_smtp_delivery)) does not work, because it never finds a valid communication.message object, maybe we should try with post-save self.smtp_delivery_state = "pending" self.rawmsg_msgid, self.rawmsg = msg_list[0] self.rawmsg_digest_hex=hashlib.md5(unicode(self.rawmsg)).hexdigest() except: traceback.print_exc() self.smtp_delivery_state = 'failure' super(Message, self).save(*args, **kwargs)
def agenda_htmlemail(request, meeting_pk=None): meeting = get_object_or_404(Meeting, pk=meeting_pk) filename = '%s-%s-%s.pdf' % ( meeting.title, meeting.start.strftime('%d-%m-%Y'), _('agenda') ) pdf = render_pdf(request, 'db/meetings/xhtml2pdf/agenda.html', { 'meeting': meeting, }) for recipient in settings.AGENDA_RECIPIENT_LIST: htmlmail = unicode(render_html(request, 'meetings/email/invitation-with-agenda.html', { 'meeting': meeting, 'recipient': recipient, })) plainmail = whitewash(htmlmail) deliver(subject=_('Invitation to meeting'), message=plainmail, message_html=htmlmail, attachments=[(filename, pdf,'application/pdf'),], from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=settings.AGENDA_RECIPIENT_LIST) return HttpResponseRedirect(reverse('ecs.meetings.views.upcoming_meetings'))