def _send_payment_received_email(invoice, locale): user = get_user_model().objects.get(stripe_customer_id=invoice.customer) subscription_info = retrieve_and_synchronize_subscription_info(user) locale = locale or settings.WIKI_DEFAULT_LANGUAGE context = { "payment_date": datetime.fromtimestamp(invoice.created), "next_payment_date": subscription_info["next_payment_at"], "invoice_number": invoice.number, "cost": invoice.total / 100, "credit_card_brand": subscription_info["brand"], "manage_subscription_url": absolutify(reverse("payment_management")), "faq_url": absolutify(reverse("payments_index")), "contact_email": settings.CONTRIBUTION_SUPPORT_EMAIL, } with translation.override(locale): subject = render_email("users/email/payment_received/subject.ltxt", context) # Email subject *must not* contain newlines subject = "".join(subject.splitlines()) plain = render_email("users/email/payment_received/plain.ltxt", context) send_mail_retrying( subject, plain, settings.DEFAULT_FROM_EMAIL, [user.email], attachment={ "name": os.path.basename(urlparse(invoice.invoice_pdf).path), "bytes": _download_from_url(invoice.invoice_pdf), "mime": "application/pdf", }, )
def subscriptions(request): if not request.user.is_authenticated or not flag_is_active(request, "subscription"): return Response(None, status=status.HTTP_403_FORBIDDEN) if request.method == "POST": create_stripe_customer_and_subscription_for_user( request.user, request.user.email, request.data["stripe_token"] ) return Response(None, status=status.HTTP_201_CREATED) elif request.method == "DELETE": cancelled = cancel_stripe_customer_subscriptions(request.user) if cancelled: return Response(None, status=status.HTTP_204_NO_CONTENT) else: return Response("nothing to cancel", status=status.HTTP_410_GONE) all_subscriptions = [] subscription_info = retrieve_and_synchronize_subscription_info(request.user) if subscription_info: all_subscriptions.append(subscription_info) return Response({"subscriptions": all_subscriptions})