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
249d6479
Commit
249d6479
authored
Jun 16, 2016
by
Matt Drayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mattdrayer/WL-530: Allow Enrollment Code purchases for enrolled users
parent
8184d2b3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
41 additions
and
26 deletions
+41
-26
ecommerce/extensions/basket/views.py
+41
-26
No files found.
ecommerce/extensions/basket/views.py
View file @
249d6479
...
@@ -46,19 +46,45 @@ class BasketSingleItemView(View):
...
@@ -46,19 +46,45 @@ class BasketSingleItemView(View):
try
:
try
:
product
=
StockRecord
.
objects
.
get
(
partner
=
partner
,
partner_sku
=
sku
)
.
product
product
=
StockRecord
.
objects
.
get
(
partner
=
partner
,
partner_sku
=
sku
)
.
product
except
StockRecord
.
DoesNotExist
:
return
HttpResponseBadRequest
(
_
(
'SKU [{sku}] does not exist.'
)
.
format
(
sku
=
sku
))
# If the product isn't available then there's no reason to continue with the basket addition
purchase_info
=
request
.
strategy
.
fetch_for_product
(
product
)
if
not
purchase_info
.
availability
.
is_available_to_buy
:
msg
=
_
(
'Product [{product}] not available to buy.'
)
.
format
(
product
=
product
.
title
)
return
HttpResponseBadRequest
(
msg
)
# If the product is not an Enrollment Code, we check to see if the user is already
# enrolled to prevent double-enrollment and/or accidental coupon usage
if
product
.
get_product_class
()
.
name
!=
ENROLLMENT_CODE_PRODUCT_CLASS_NAME
:
course_key
=
product
.
attr
.
course_key
course_key
=
product
.
attr
.
course_key
api
=
EdxRestApiClient
(
# Submit a query to the LMS Enrollment API
get_lms_enrollment_base_api_url
(),
try
:
oauth_access_token
=
request
.
user
.
access_token
,
api
=
EdxRestApiClient
(
append_slash
=
False
get_lms_enrollment_base_api_url
(),
)
oauth_access_token
=
request
.
user
.
access_token
,
logger
.
debug
(
append_slash
=
False
'Getting enrollment information for [
%
s] in [
%
s].'
,
)
request
.
user
.
username
,
logger
.
debug
(
course_key
'Getting enrollment information for [
%
s] in [
%
s].'
,
)
request
.
user
.
username
,
status
=
api
.
enrollment
(
','
.
join
([
request
.
user
.
username
,
course_key
]))
.
get
()
course_key
)
status
=
api
.
enrollment
(
','
.
join
([
request
.
user
.
username
,
course_key
]))
.
get
()
except
(
ConnectionError
,
SlumberBaseException
,
Timeout
)
as
ex
:
logger
.
exception
(
'Failed to retrieve enrollment details for [
%
s] in course [
%
s], Because of [
%
s]'
,
request
.
user
.
username
,
course_key
,
ex
,
)
msg
=
_
(
'An error occurred while retrieving enrollment details. Please try again.'
)
return
HttpResponseBadRequest
(
msg
)
# Enrollment API response received, now perform the actual enrollment check
username
=
request
.
user
.
username
username
=
request
.
user
.
username
seat_type
=
mode_for_seat
(
product
)
seat_type
=
mode_for_seat
(
product
)
if
status
and
status
.
get
(
'mode'
)
==
seat_type
and
status
.
get
(
'is_active'
):
if
status
and
status
.
get
(
'mode'
)
==
seat_type
and
status
.
get
(
'is_active'
):
...
@@ -68,22 +94,11 @@ class BasketSingleItemView(View):
...
@@ -68,22 +94,11 @@ class BasketSingleItemView(View):
seat_type
,
seat_type
,
course_key
course_key
)
)
return
HttpResponseBadRequest
(
_
(
'You are already enrolled in {course}.'
)
.
format
(
msg
=
_
(
'You are already enrolled in {course}.'
)
.
format
(
course
=
product
.
course
.
name
)
course
=
product
.
course
.
name
))
return
HttpResponseBadRequest
(
msg
)
except
StockRecord
.
DoesNotExist
:
return
HttpResponseBadRequest
(
_
(
'SKU [{sku}] does not exist.'
)
.
format
(
sku
=
sku
))
except
(
ConnectionError
,
SlumberBaseException
,
Timeout
)
as
ex
:
logger
.
exception
(
'Failed to retrieve enrollment details for [
%
s] in course [
%
s], Because of [
%
s]'
,
request
.
user
.
username
,
course_key
,
ex
,
)
return
HttpResponseBadRequest
(
_
(
'An error occurred while retrieving enrollment details. Please try again.'
))
purchase_info
=
request
.
strategy
.
fetch_for_product
(
product
)
if
not
purchase_info
.
availability
.
is_available_to_buy
:
return
HttpResponseBadRequest
(
_
(
'Product [{product}] not available to buy.'
)
.
format
(
product
=
product
.
title
))
# At this point we're either adding an Enrollment Code product to the basket,
# or the user is adding a Seat product for which they are not already enrolled
prepare_basket
(
request
,
product
,
voucher
)
prepare_basket
(
request
,
product
,
voucher
)
return
HttpResponseRedirect
(
reverse
(
'basket:summary'
),
status
=
303
)
return
HttpResponseRedirect
(
reverse
(
'basket:summary'
),
status
=
303
)
...
...
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