Commit a9abc69c by Ivan Ivic Committed by Marko Jevtić

Fixed coupon redemption report for programs only lists one course id

LEARNER-1823
parent d69be03c
...@@ -483,6 +483,9 @@ class UtilTests(CouponMixin, CourseCatalogMockMixin, CourseCatalogTestMixin, Lms ...@@ -483,6 +483,9 @@ class UtilTests(CouponMixin, CourseCatalogMockMixin, CourseCatalogTestMixin, Lms
self.assertIn('Redeemed For Course ID', field_names) self.assertIn('Redeemed For Course ID', field_names)
self.assertNotIn('Redeemed For Course ID', rows[0]) self.assertNotIn('Redeemed For Course ID', rows[0])
self.assertIn('Redeemed For Course IDs', field_names)
self.assertNotIn('Redeemed For Course IDs', rows[0])
def test_get_voucher_discount_info(self): def test_get_voucher_discount_info(self):
""" Verify that get_voucher_discount_info() returns correct info. """ """ Verify that get_voucher_discount_info() returns correct info. """
benefits = self.create_benefits() benefits = self.create_benefits()
...@@ -581,6 +584,32 @@ class UtilTests(CouponMixin, CourseCatalogMockMixin, CourseCatalogTestMixin, Lms ...@@ -581,6 +584,32 @@ class UtilTests(CouponMixin, CourseCatalogMockMixin, CourseCatalogTestMixin, Lms
self.assertEqual(rows[-1]['Redeemed By Username'], self.user.username) self.assertEqual(rows[-1]['Redeemed By Username'], self.user.username)
self.assertEqual(rows[-1]['Redeemed For Course ID'], self.course.id) self.assertEqual(rows[-1]['Redeemed For Course ID'], self.course.id)
def test_generate_coupon_report_for_query_coupon_with_multi_line_order(self):
"""
Test that coupon report for a query coupon that was used on multi-line order
contains ids from all courses in that order.
"""
course1 = CourseFactory()
course2 = CourseFactory()
order = OrderFactory(number='TESTORDER')
order.lines.add(
OrderLineFactory(product=course1.create_or_update_seat('verified', False, 101, self.partner))
)
order.lines.add(
OrderLineFactory(product=course2.create_or_update_seat('verified', False, 110, self.partner))
)
query_coupon = self.create_catalog_coupon(catalog_query='*:*')
query_coupon.history.all().update(history_user=self.user)
voucher = query_coupon.attr.coupon_vouchers.vouchers.first()
voucher.record_usage(order, self.user)
field_names, rows = generate_coupon_report([query_coupon.attr.coupon_vouchers])
expected_redemed_course_ids = '{}, {}'.format(course1, course2)
self.assertEqual(rows[-1]['Redeemed For Course IDs'], expected_redemed_course_ids)
self.assertEqual(rows[-1].get('Redeemed For Course ID'), None)
self.assertIn('Redeemed For Course ID', field_names)
self.assertIn('Redeemed For Course IDs', field_names)
def test_update_voucher_offer(self): def test_update_voucher_offer(self):
"""Test updating a voucher.""" """Test updating a voucher."""
self.data['email_domains'] = 'example.com' self.data['email_domains'] = 'example.com'
......
...@@ -41,6 +41,14 @@ Voucher = get_model('voucher', 'Voucher') ...@@ -41,6 +41,14 @@ Voucher = get_model('voucher', 'Voucher')
VoucherApplication = get_model('voucher', 'VoucherApplication') VoucherApplication = get_model('voucher', 'VoucherApplication')
def _add_redemption_course_ids(new_row_to_append, header_row, redemption_course_ids):
if any(row in ['Catalog Query', 'Program UUID'] for row in header_row):
if len(redemption_course_ids) > 1:
new_row_to_append['Redeemed For Course IDs'] = ', '.join(redemption_course_ids)
else:
new_row_to_append['Redeemed For Course ID'] = redemption_course_ids[0]
def _get_voucher_status(voucher, offer): def _get_voucher_status(voucher, offer):
"""Retrieve the status of a voucher. """Retrieve the status of a voucher.
...@@ -225,6 +233,7 @@ def generate_coupon_report(coupon_vouchers): ...@@ -225,6 +233,7 @@ def generate_coupon_report(coupon_vouchers):
_('Order Number'), _('Order Number'),
_('Redeemed By Username'), _('Redeemed By Username'),
_('Redeemed For Course ID'), _('Redeemed For Course ID'),
_('Redeemed For Course IDs'),
_('Created By'), _('Created By'),
_('Create Date'), _('Create Date'),
_('Coupon Start Date'), _('Coupon Start Date'),
...@@ -246,18 +255,20 @@ def generate_coupon_report(coupon_vouchers): ...@@ -246,18 +255,20 @@ def generate_coupon_report(coupon_vouchers):
row[item] = '' row[item] = ''
rows.append(row) rows.append(row)
if voucher.num_orders > 0: if voucher.num_orders > 0:
voucher_applications = VoucherApplication.objects.filter( voucher_applications = VoucherApplication.objects.filter(
voucher=voucher).prefetch_related('user', 'order__lines') voucher=voucher).prefetch_related('user', 'order__lines')
for application in voucher_applications: for application in voucher_applications:
redemption_course_ids = []
redemption_user_username = application.user.username redemption_user_username = application.user.username
redemption_course_id = application.order.lines.first().product.course_id
new_row = row.copy()
if 'Catalog Query' in rows[0]: for line in application.order.lines.all():
new_row['Redeemed For Course ID'] = redemption_course_id redemption_course_ids.append(line.product.course_id)
new_row = row.copy()
_add_redemption_course_ids(new_row, rows[0], redemption_course_ids)
new_row.update({ new_row.update({
'Status': _('Redeemed'), 'Status': _('Redeemed'),
'Order Number': application.order.number, 'Order Number': application.order.number,
...@@ -281,6 +292,7 @@ def generate_coupon_report(coupon_vouchers): ...@@ -281,6 +292,7 @@ def generate_coupon_report(coupon_vouchers):
field_names.remove('Catalog Query') field_names.remove('Catalog Query')
field_names.remove('Course Seat Types') field_names.remove('Course Seat Types')
field_names.remove('Redeemed For Course ID') field_names.remove('Redeemed For Course ID')
field_names.remove('Redeemed For Course IDs')
field_names.remove('Program UUID') field_names.remove('Program UUID')
return field_names, rows return field_names, rows
......
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