示例#1
0
def detail(request, course_id):
    """View for detail of a single course"""

    logger.debug('Course id=' + str(course_id) + ' view')
    course = get_object_or_404(Course, pk=course_id)
    course_type = ContentType.objects.get_for_model(Course)
    priced_item = get_object_or_404(PricedItem,
                                    content_type_id=course_type.id,
                                    object_id=course_id)
    fee_value = priced_item.fee_value
    user_can_edit = False
    history = None
    lessons = None
    attachments = None

    context = {
        'course': course,
        'fee_value': fee_value,
        'fee_value_cents': fee_value * 100,
        'currency': priced_item.currency,
    }

    if request.user.is_authenticated():
        try:
            uc = request.user.usercourse_set.get(course__id=course_id)
            status = 'auth_enrolled'
        except ObjectDoesNotExist:
            uc = None
            if (request.user == course.organiser
                    or request.user == course.instructor):
                status = 'auth_bar_enrol'
                user_can_edit = True
            else:
                status = 'auth_not_enrolled'
    else:
        uc = None
        status = 'noauth'

    if request.method == 'POST':
        if 'stripeToken' in request.POST and status == 'auth_not_enrolled':
            stripe.api_key = settings.STRIPE_SECRET_KEY
            token = request.POST['stripeToken']
            try:
                charge = stripe.Charge.create(
                    amount=int(fee_value * 100),  # amount in cents, again
                    currency=priced_item.currency,
                    source=token,
                    description="Example charge")
                current_time = datetime.utcnow().replace(tzinfo=timezone.utc)
                #Now record payment
                payment = Payment(content_object=course,
                                  paying_user=request.user,
                                  fee_value=fee_value,
                                  currency=priced_item.currency,
                                  datestamp=current_time)
                payment.save()
                #Enrol the student
                uc = UserCourse(user=request.user, course=course)
                uc.save()
                status = 'auth_enrolled'
                logger.info(str(uc) + 'enrols')
            except stripe.error.CardError, e:
                pass

        if 'course_enrol' in request.POST:
            course_type = ContentType.objects.get_for_model(course)
            if not (fee_value == 0):
                payment = Payment.objects.get(content_type__pk=course_type.id,
                                              object_id=course.id,
                                              paying_user=request.user)
            uc = UserCourse(user=request.user, course=course)
            uc.save()
            status = 'auth_enrolled'
            logger.info(str(uc) + 'enrols')

        if 'course_complete' in request.POST and status == 'auth_enrolled':
            if uc.active:
                uc.complete()
                logger.info(str(uc) + 'completes')
            else:
                logger.error("Can't complete course, reason: not active")
        if 'course_withdraw' in request.POST and status == 'auth_enrolled':
            if uc.active:
                uc.withdraw()
                logger.info(str(uc) + 'withdraws')
            else:
                logger.error("Can't withdraw, reason: not active")
        if 'course_reopen' in request.POST and status == 'auth_enrolled':
            if not uc.active:
                uc.reopen()
                logger.info(str(uc) + 'reopens')
            else:
                logger.error("Can't reopen, reason: already active")