Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
ecommerce
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
ecommerce
Commits
a9abc69c
Commit
a9abc69c
authored
Jul 18, 2017
by
Ivan Ivic
Committed by
Marko Jevtić
Jul 20, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed coupon redemption report for programs only lists one course id
LEARNER-1823
parent
d69be03c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
5 deletions
+46
-5
ecommerce/extensions/voucher/tests/test_utils.py
+29
-0
ecommerce/extensions/voucher/utils.py
+17
-5
No files found.
ecommerce/extensions/voucher/tests/test_utils.py
View file @
a9abc69c
...
@@ -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'
...
...
ecommerce/extensions/voucher/utils.py
View file @
a9abc69c
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment