Commit 74f6380e by Chris Dodge Committed by Muhammad Shoaib

Change coupon CSV download to only include counts for coupons redeemed all the way through purchase

updated the failed unit test case and removed the unnessary import
parent 3d4a853e
......@@ -3406,7 +3406,7 @@ class TestCourseRegistrationCodes(ModuleStoreTestCase):
self.assertEqual(response.status_code, 200, response.content)
# filter all the coupons
for coupon in Coupon.objects.all():
self.assertIn('"{code}","{course_id}","{discount}","0","{description}","{expiration_date}"'.format(
self.assertIn('"{code}","{course_id}","{discount}","0","{description}","{expiration_date}","True"'.format(
code=coupon.code,
course_id=coupon.course_id,
discount=coupon.percentage_discount,
......
......@@ -18,7 +18,6 @@ from django.views.decorators.cache import cache_control
from django.core.exceptions import ValidationError, PermissionDenied
from django.core.mail.message import EmailMessage
from django.db import IntegrityError
from django.db.models import Q
from django.core.urlresolvers import reverse
from django.core.validators import validate_email
from django.utils.translation import ugettext as _
......@@ -1044,16 +1043,12 @@ def get_coupon_codes(request, course_id): # pylint: disable=unused-argument
Respond with csv which contains a summary of all Active Coupons.
"""
course_id = SlashSeparatedCourseKey.from_deprecated_string(course_id)
active_coupons = Coupon.objects.filter(
Q(course_id=course_id),
Q(is_active=True),
Q(expiration_date__gt=datetime.datetime.now(pytz.UTC)) |
Q(expiration_date__isnull=True)
)
coupons = Coupon.objects.filter(course_id=course_id)
query_features = [
'code', 'course_id', 'percentage_discount', 'code_redeemed_count', 'description', 'expiration_date'
'code', 'course_id', 'percentage_discount', 'code_redeemed_count', 'description', 'expiration_date', 'is_active'
]
coupons_list = instructor_analytics.basic.coupon_codes_features(query_features, active_coupons)
coupons_list = instructor_analytics.basic.coupon_codes_features(query_features, coupons)
header, data_rows = instructor_analytics.csvs.format_dictlist(coupons_list, query_features)
return instructor_analytics.csvs.create_csv_response('Coupons.csv', header, data_rows)
......
......@@ -33,7 +33,7 @@ SALE_ORDER_FEATURES = ('id', 'company_name', 'company_contact_name', 'company_co
AVAILABLE_FEATURES = STUDENT_FEATURES + PROFILE_FEATURES
COURSE_REGISTRATION_FEATURES = ('code', 'course_id', 'created_by', 'created_at')
COUPON_FEATURES = ('code', 'course_id', 'percentage_discount', 'description', 'expiration_date')
COUPON_FEATURES = ('code', 'course_id', 'percentage_discount', 'description', 'expiration_date', 'is_active')
def sale_order_record_features(course_id, features):
......@@ -225,7 +225,9 @@ def coupon_codes_features(features, coupons_list):
coupon_features = [x for x in COUPON_FEATURES if x in features]
coupon_dict = dict((feature, getattr(coupon, feature)) for feature in coupon_features)
coupon_dict['code_redeemed_count'] = coupon.couponredemption_set.all().count()
coupon_dict['code_redeemed_count'] = coupon.couponredemption_set.filter(
order__status="purchased"
).count()
# we have to capture the redeemed_by value in the case of the downloading and spent registration
# codes csv. In the case of active and generated registration codes the redeemed_by value will be None.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment