def handle(self, *args, **options): reset_classes_json("management command") reset_tools_json("management_command") products = products_json(None) f = open(os.path.join(settings.STATIC_ROOT,"products.js"),'w') f.write(products.content) f.close()
def handle(self, *args, **options): reset_classes_json("management command") reset_tools_json("management_command") products = products_json(None) f = open(os.path.join(settings.STATIC_ROOT, "products.js"), 'w') f.write(products.content) f.close()
def handle_successful_payment(sender, **kwargs): from course.models import Enrollment, Session, reset_classes_json # these two errors occurred because of the donate button on the front page. # they can be removed by checking for that if not sender.txn_type == "cart": # handled by membership.listeners return params = QueryDict(sender.query) _uid = str(params.get('custom', None)) user, new_user = get_or_create_student(params) user.active = True user.save() if params.get('invoice', None): return handle_successful_store_payment(sender, user) if not "num_cart_items" in params: mail_admins("No cart items found for %s" % sender.txn_id, "") return item_count = int(params['num_cart_items']) enrollments = [] error_sessions = [] fails = [] for i in range(1, item_count + 1): pp_amount = float(params['mc_gross_%d' % i]) quantity = int(params['quantity%s' % i]) try: session = Session.objects.get(id=int(params['item_number%d' % (i, )])) except Session.DoesNotExist: fails.append(("Session not found", traceback.format_exc())) continue except ValueError: fails.append( ("Non-integer session number", traceback.format_exc())) continue enrollment, new = Enrollment.objects.get_or_create(user=user, session=session) if enrollment.transaction_ids and (sender.txn_id in enrollment.transaction_ids): fails.append( ("Multiple transaction ids blocked for enrollment #%s" % enrollment.id, "")) continue enrollment.transaction_ids = (enrollment.transaction_ids or "") + sender.txn_id + "|" NotifyCourse.objects.filter(user=user, course=session.course).delete() if new: enrollment.quantity = quantity else: enrollment.quantity += quantity enrollment.save() enrollments.append(enrollment) price_multiplier = (100 - user.level.discount_percentage) / 100. # We're ignoring people who overpay since this happens when a member doesn't login (no discount) if pp_amount < price_multiplier * session.course.fee * int(quantity): l = [ "PP cost: %s" % pp_amount, "Expected Cost: %s" % (price_multiplier * session.course.fee * int(quantity)), "discount: %s" % user.level.discount_percentage, "Session Fee: %s" % session.course.fee, "Session Id: %s" % session.id, "Quantity: %s" % enrollment.quantity, "PP Email: %s" % sender.payer_email, "U Email: %s" % user.email, "u_id: %s" % _uid, #if this is none they won't get a discount ] error_sessions.append("\n".join(l)) if enrollment.session.total_students > enrollment.session.course.max_students: s = "Session #%s overfilled. Please see https://txrxlabs.org/admin/course/session/%s/" mail_admins("My Course over floweth", s % (enrollment.session.pk, enrollment.session.pk)) if fails: body = "=======\n\n".join(["%s\n%s\n\n" % (s, b) for s, b in fails]) mail_admins("%s fails in purchasing process" % len(fails), body) values = { 'enrollments': enrollments, 'user': user, 'new_user': new_user, 'settings': settings } if enrollments: body = render_to_string("email/course_enrollment.html", values) subject = "Course enrollment confirmation" send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [user.email]) if error_sessions: mail_admins("Enrollment Error", "\n\n".join(error_sessions)) reset_classes_json("classes reset during course enrollment")
def handle_successful_payment(sender, **kwargs): from course.models import Enrollment, Session, reset_classes_json # these two errors occurred because of the donate button on the front page. # they can be removed by checking for that if not sender.txn_type == "cart": # handled by membership.listeners return params = QueryDict(sender.query) _uid = str(params.get('custom',None)) user,new_user = get_or_create_student(params) user.active = True user.save() if params.get('invoice',None): return handle_successful_store_payment(sender,user) if not "num_cart_items" in params: mail_admins("No cart items found for %s"%sender.txn_id,"") return item_count = int(params['num_cart_items']) enrollments = [] error_sessions = [] fails = [] for i in range(1, item_count+1): pp_amount = float(params['mc_gross_%d'%i]) quantity = int(params['quantity%s'%i]) try: session = Session.objects.get(id=int(params['item_number%d' % (i, )])) except Session.DoesNotExist: fails.append(("Session not found",traceback.format_exc())) continue except ValueError: fails.append(("Non-integer session number",traceback.format_exc())) continue enrollment,new = Enrollment.objects.get_or_create(user=user, session=session) if enrollment.transaction_ids and (sender.txn_id in enrollment.transaction_ids): fails.append(("Multiple transaction ids blocked for enrollment #%s"%enrollment.id,"")) continue enrollment.transaction_ids = (enrollment.transaction_ids or "") + sender.txn_id + "|" NotifyCourse.objects.filter(user=user,course=session.course).delete() if new: enrollment.quantity = quantity else: enrollment.quantity += quantity enrollment.save() enrollments.append(enrollment) price_multiplier = (100-user.level.discount_percentage) / 100. # We're ignoring people who overpay since this happens when a member doesn't login (no discount) if pp_amount < price_multiplier*session.course.fee * int(quantity): l = [ "PP cost: %s"%pp_amount, "Expected Cost: %s"%(price_multiplier*session.course.fee * int(quantity)), "discount: %s"%user.level.discount_percentage, "Session Fee: %s"%session.course.fee, "Session Id: %s"%session.id, "Quantity: %s"%enrollment.quantity, "PP Email: %s"%sender.payer_email, "U Email: %s"%user.email, "u_id: %s"%_uid, #if this is none they won't get a discount ] error_sessions.append("\n".join(l)) if enrollment.session.total_students > enrollment.session.course.max_students: s = "Session #%s overfilled. Please see https://txrxlabs.org/admin/course/session/%s/" mail_admins("My Course over floweth",s%(enrollment.session.pk,enrollment.session.pk)) if fails: body = "=======\n\n".join(["%s\n%s\n\n"%(s,b) for s,b in fails]) mail_admins("%s fails in purchasing process"%len(fails),body) values = { 'enrollments': enrollments, 'user': user, 'new_user': new_user, 'settings': settings } if enrollments: body = render_to_string("email/course_enrollment.html",values) subject = "Course enrollment confirmation" send_mail(subject,body,settings.DEFAULT_FROM_EMAIL,[user.email]) if error_sessions: mail_admins("Enrollment Error","\n\n".join(error_sessions)) reset_classes_json("classes reset during course enrollment")
def handle(self, *args, **options): reset_classes_json("management command") reset_tools_json("management_command")