Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx-platform
Commits
c9593f20
Commit
c9593f20
authored
Aug 28, 2013
by
Diana Huang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow for the creation of a specialized receipt when
there is only one item in the order
parent
248b5a94
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
112 additions
and
11 deletions
+112
-11
lms/djangoapps/shoppingcart/models.py
+14
-0
lms/djangoapps/shoppingcart/tests/test_models.py
+11
-0
lms/djangoapps/shoppingcart/tests/test_views.py
+18
-7
lms/djangoapps/shoppingcart/views.py
+9
-4
lms/templates/shoppingcart/verified_cert_receipt.html
+60
-0
No files found.
lms/djangoapps/shoppingcart/models.py
View file @
c9593f20
...
...
@@ -179,6 +179,13 @@ class OrderItem(models.Model):
"""
raise
NotImplementedError
@property
def
single_item_receipt_template
(
self
):
"""
the template that should be used when there's
only one item in the order
"""
return
'shoppingcart/receipt.html'
class
PaidCourseRegistration
(
OrderItem
):
"""
...
...
@@ -320,3 +327,10 @@ class CertificateItem(OrderItem):
self
.
course_enrollment
.
mode
=
self
.
mode
self
.
course_enrollment
.
save
()
self
.
course_enrollment
.
activate
()
@property
def
single_item_receipt_template
(
self
):
if
self
.
mode
==
'verified'
:
return
'shoppingcart/verified_cert_receipt.html'
else
:
return
super
(
CertificateItem
,
self
)
.
single_item_receipt_template
lms/djangoapps/shoppingcart/tests/test_models.py
View file @
c9593f20
...
...
@@ -183,3 +183,14 @@ class CertificateItemTest(TestCase):
cart
.
purchase
()
enrollment
=
CourseEnrollment
.
objects
.
get
(
user
=
self
.
user
,
course_id
=
self
.
course_id
)
self
.
assertEquals
(
enrollment
.
mode
,
u'verified'
)
def
test_single_item_template
(
self
):
cart
=
Order
.
get_cart_for_user
(
user
=
self
.
user
)
cert_item
=
CertificateItem
.
add_to_order
(
cart
,
self
.
course_id
,
self
.
cost
,
'verified'
)
self
.
assertEquals
(
cert_item
.
single_item_receipt_template
,
'shoppingcart/verified_cert_receipt.html'
)
cert_item
=
CertificateItem
.
add_to_order
(
cart
,
self
.
course_id
,
self
.
cost
,
'honor'
)
self
.
assertEquals
(
cert_item
.
single_item_receipt_template
,
'shoppingcart/receipt.html'
)
lms/djangoapps/shoppingcart/tests/test_views.py
View file @
c9593f20
...
...
@@ -159,7 +159,7 @@ class ShoppingCartViewsTests(ModuleStoreTestCase):
self
.
assertEqual
(
resp
.
status_code
,
200
)
self
.
assertIn
(
'ERROR_TEST!!!'
,
resp
.
content
)
((
template
,
context
),
_
)
=
render_mock
.
call_args
((
template
,
context
),
_
tmp
)
=
render_mock
.
call_args
self
.
assertEqual
(
template
,
'shoppingcart/error.html'
)
self
.
assertEqual
(
context
[
'order'
],
self
.
cart
)
self
.
assertEqual
(
context
[
'error_html'
],
'ERROR_TEST!!!'
)
...
...
@@ -194,11 +194,11 @@ class ShoppingCartViewsTests(ModuleStoreTestCase):
self
.
assertIn
(
'StreetTesting123'
,
resp
.
content
)
self
.
assertIn
(
'80.00'
,
resp
.
content
)
((
template
,
context
),
_
)
=
render_mock
.
call_args
((
template
,
context
),
_
tmp
)
=
render_mock
.
call_args
self
.
assertEqual
(
template
,
'shoppingcart/receipt.html'
)
self
.
assertEqual
(
context
[
'order'
],
self
.
cart
)
self
.
assertIn
(
reg_item
.
orderitem_ptr
,
context
[
'order_items'
])
self
.
assertIn
(
cert_item
.
orderitem_ptr
,
context
[
'order_items'
])
self
.
assertIn
(
reg_item
,
context
[
'order_items'
])
self
.
assertIn
(
cert_item
,
context
[
'order_items'
])
self
.
assertFalse
(
context
[
'any_refunds'
])
@patch
(
'shoppingcart.views.render_to_response'
,
render_mock
)
...
...
@@ -214,9 +214,20 @@ class ShoppingCartViewsTests(ModuleStoreTestCase):
self
.
assertEqual
(
resp
.
status_code
,
200
)
self
.
assertIn
(
'40.00'
,
resp
.
content
)
((
template
,
context
),
_
)
=
render_mock
.
call_args
((
template
,
context
),
_
tmp
)
=
render_mock
.
call_args
self
.
assertEqual
(
template
,
'shoppingcart/receipt.html'
)
self
.
assertEqual
(
context
[
'order'
],
self
.
cart
)
self
.
assertIn
(
reg_item
.
orderitem_ptr
,
context
[
'order_items'
])
self
.
assertIn
(
cert_item
.
orderitem_ptr
,
context
[
'order_items'
])
self
.
assertIn
(
reg_item
,
context
[
'order_items'
])
self
.
assertIn
(
cert_item
,
context
[
'order_items'
])
self
.
assertTrue
(
context
[
'any_refunds'
])
@patch
(
'shoppingcart.views.render_to_response'
,
render_mock
)
def
test_show_receipt_success_custom_receipt_page
(
self
):
cert_item
=
CertificateItem
.
add_to_order
(
self
.
cart
,
self
.
course_id
,
self
.
cost
,
'verified'
)
self
.
cart
.
purchase
()
self
.
login_user
()
receipt_url
=
reverse
(
'shoppingcart.views.show_receipt'
,
args
=
[
self
.
cart
.
id
])
resp
=
self
.
client
.
get
(
receipt_url
)
self
.
assertEqual
(
resp
.
status_code
,
200
)
((
template
,
_context
),
_tmp
)
=
render_mock
.
call_args
self
.
assertEqual
(
template
,
cert_item
.
single_item_receipt_template
)
lms/djangoapps/shoppingcart/views.py
View file @
c9593f20
...
...
@@ -99,8 +99,13 @@ def show_receipt(request, ordernum):
if
order
.
user
!=
request
.
user
or
order
.
status
!=
'purchased'
:
raise
Http404
(
'Order not found!'
)
order_items
=
order
.
orderitem_set
.
all
()
order_items
=
OrderItem
.
objects
.
filter
(
order
=
order
)
.
select_subclasses
()
any_refunds
=
any
(
i
.
status
==
"refunded"
for
i
in
order_items
)
return
render_to_response
(
'shoppingcart/receipt.html'
,
{
'order'
:
order
,
'order_items'
:
order_items
,
'any_refunds'
:
any_refunds
})
receipt_template
=
'shoppingcart/receipt.html'
# we want to have the ability to override the default receipt page when
# there is only one item in the order
if
order_items
.
count
()
==
1
:
receipt_template
=
order_items
[
0
]
.
single_item_receipt_template
return
render_to_response
(
receipt_template
,
{
'order'
:
order
,
'order_items'
:
order_items
,
'any_refunds'
:
any_refunds
})
lms/templates/shoppingcart/verified_cert_receipt.html
0 → 100644
View file @
c9593f20
<
%!
from
django
.
utils
.
translation
import
ugettext
as
_
%
>
<
%!
from
django
.
core
.
urlresolvers
import
reverse
%
>
<
%!
from
django
.
conf
import
settings
%
>
<
%
inherit
file=
"../main.html"
/>
<
%
block
name=
"title"
><title>
${_("Receipt for Order")} ${order.id}
</title></
%
block>
% if notification is not UNDEFINED:
<section
class=
"notification"
>
${notification}
</section>
% endif
<section
class=
"container cart-list"
>
<p><h1>
${_(settings.PLATFORM_NAME + " (" + settings.SITE_NAME + ")" + " Electronic Receipt")}
</h1></p>
<h2>
${_("Order #")}${order.id}
</h2>
<h2>
${_("Date:")} ${order.purchase_time.date().isoformat()}
</h2>
<h2>
${_("Items ordered:")}
</h2>
<table>
<thead>
<tr>
${_("
<td>
Qty
</td><td>
Description
</td><td>
Unit Price
</td><td>
Price
</td><td>
Currency
</td>
")}
</tr>
</thead>
<tbody>
% for item in order_items:
<tr>
% if item.status == "purchased":
<td>
${item.qty}
</td><td>
${item.line_desc}
</td>
<td>
${"{0:0.2f}".format(item.unit_cost)}
</td>
<td>
${"{0:0.2f}".format(item.line_cost)}
</td>
<td>
${item.currency.upper()}
</td></tr>
% elif item.status == "refunded":
<td><del>
${item.qty}
</del></td><td><del>
${item.line_desc}
</del></td>
<td><del>
${"{0:0.2f}".format(item.unit_cost)}
</del></td>
<td><del>
${"{0:0.2f}".format(item.line_cost)}
</del></td>
<td><del>
${item.currency.upper()}
</del></td></tr>
% endif
% endfor
<tr><td></td><td></td><td></td><td>
${_("Total Amount")}
</td></tr>
<tr><td></td><td></td><td></td><td>
${"{0:0.2f}".format(order.total_cost)}
</td></tr>
</tbody>
</table>
% if any_refunds:
<p>
${_("Note: items with strikethough like ")}
<del>
this
</del>
${_(" have been refunded.")}
</p>
% endif
<h2>
${_("Billed To:")}
</h2>
<p>
${order.bill_to_cardtype} ${_("#:")} ${order.bill_to_ccnum}
<br
/>
${order.bill_to_first} ${order.bill_to_last}
<br
/>
${order.bill_to_street1}
<br
/>
${order.bill_to_street2}
<br
/>
${order.bill_to_city}, ${order.bill_to_state} ${order.bill_to_postalcode}
<br
/>
${order.bill_to_country.upper()}
<br
/>
</p>
</section>
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