def clean_carts(): carts = Cart.objects.filter(created_at__lte=datetime.now()-timedelta(hours=12)) for cart in carts: archive_cart(cart, 'expired') message = '%s Carts Expired' % (carts.count()) group = Group.objects.get(name='Admin').user_set.only('email') if carts.count() > 0: group_mail = [ user.email for user in group ] send_mail('Hourly Carts Clean Up', message, settings.DEFAULT_FROM_EMAIL, group_mail , fail_silently=False)
def get_cart(request): if "session_key" not in request.session: request.session.save() if "cart" in request.session: cart = request.session["cart"] if request.user.is_authenticated(): if Cart.objects.filter(user=request.user) and cart != request.user.cart: archive_cart(request.user.cart, "expired") cart.user = request.user cart.save() else: if request.user.is_authenticated(): cart, created = Cart.objects.get_or_create(user=request.user) else: cart, created = Cart.objects.get_or_create(session=request.session.session_key) if cart.items.count() == 0: cart.net_total = 0 cart.save() request.session["cart"] = cart return cart
def success(request): from order.utils import generate_order_pdf from django.template.loader import render_to_string from django.core import mail from django.core.mail import EmailMultiAlternatives, EmailMessage from django.contrib.auth.models import Group try: order = request.session['order'] except KeyError: raise Http404 if order.user != request.user: raise Http404 cart = get_cart(request) cart = archive_cart(cart) order.cart = cart.id order.save() del request.session['cart'] voucher = request.session['voucher'] if 'voucher' in request.session else None items = ArchivedCartItem.objects.filter(archived_cart=cart) for item in items: order_item = OrderItem() order_item.order = order order_item.product = item.product order_item.quantity = item.quantity order_item.discount_total = item.discount_total order_item.gross_total = item.gross_total order_item.net_total = item.net_total order_item.save() #Update sold figure item.product.sold += item.quantity item.product.save() order.status = 1 order.save() pdf = generate_order_pdf(request.get_host(), order, voucher) subject = _('EMPOR Order Confirmation') html_content = render_to_string('order/email.html', { 'order': order, 'items': items, 'voucher': voucher, 'STATIC_URL': settings.STATIC_URL, 'host': request.get_host() }) text_content = render_to_string('order/email.txt', { 'order': order, 'voucher': voucher, 'items': items, 'host': request.get_host() }) connection = mail.get_connection() connection.open() message = EmailMultiAlternatives(subject, text_content, settings.DEFAULT_FROM_EMAIL, [order.user.email]) message.attach_alternative(html_content, 'text/html') filename = order.order_id message.attach(filename.encode('utf-8'), pdf, 'application/pdf') group = Group.objects.get(name='Service').user_set.only('email') subject = 'EMPOR - 新訂單 %s' % order.order_id group_email = [ user.email for user in group ] notification = EmailMessage(subject, html_content, settings.DEFAULT_FROM_EMAIL, group_email) notification.content_subtype = 'html' connection.send_messages([message, notification]) connection.close() if 'voucher' in request.session: del request.session['voucher'] return redirect('order-thankyou')
def confirm_payment(sender, **kwargs): user = User.objects.get(id=sender.custom) cart = archive_cart(user.cart) order = Order.objects.get(id=sender.invoice) order.cart = cart.id order.save() items = ArchivedCartItem.objects.filter(archived_cart=cart) for item in items: order_item = OrderItem() order_item.order = order order_item.product = item.product order_item.quantity = item.quantity order_item.discount_total = item.discount_total order_item.gross_total = item.gross_total order_item.net_total = item.net_total order_item.save() # Update sold figure item.product.sold += item.quantity item.product.save() order.status = 1 order.save() try: voucher = Voucher.objects.get(code=order.voucher_code) except Voucher.DoesNotExist: voucher = None pdf = generate_order_pdf("empor.com.tw", order, voucher) subject = _("EMPOR Order Confirmation") html_content = render_to_string( "order/email.html", { "order": order, "items": items, "voucher": voucher, "STATIC_URL": settings.STATIC_URL, "host": "http://empor.com.tw/", }, ) text_content = render_to_string( "order/email.txt", {"order": order, "voucher": voucher, "items": items, "host": "http://empor.com.tw/"} ) connection = mail.get_connection() connection.open() message = EmailMultiAlternatives(subject, text_content, settings.DEFAULT_FROM_EMAIL, [order.user.email]) message.attach_alternative(html_content, "text/html") filename = order.order_id message.attach(filename.encode("utf-8"), pdf, "application/pdf") group = Group.objects.get(name="Service").user_set.only("email") subject = "EMPOR - 新訂單".decode("utf-8") + " " + order.order_id group_email = [user.email for user in group] notification = EmailMessage(subject, html_content, settings.DEFAULT_FROM_EMAIL, group_email) notification.content_subtype = "html" connection.send_messages([message, notification]) connection.close()