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
908f5e0a
Commit
908f5e0a
authored
Dec 22, 2014
by
Zia Fazal
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added course_complete status
return grades instead of complete status added complete_status too
parent
ba0fb0a0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
2 deletions
+68
-2
lms/djangoapps/organizations/tests.py
+39
-1
lms/djangoapps/organizations/views.py
+29
-1
No files found.
lms/djangoapps/organizations/tests.py
View file @
908f5e0a
...
...
@@ -16,7 +16,7 @@ from django.test.utils import override_settings
from
gradebook.models
import
StudentGradebook
from
student.models
import
UserProfile
from
student.tests.factories
import
CourseEnrollmentFactory
from
student.tests.factories
import
CourseEnrollmentFactory
,
UserFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
from
courseware.tests.modulestore_config
import
TEST_DATA_MIXED_MODULESTORE
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
...
@@ -345,6 +345,44 @@ class OrganizationsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
0
][
'id'
],
self
.
test_user
.
id
)
self
.
assertEqual
(
response
.
data
[
0
][
'course_count'
],
2
)
def
test_organizations_users_get_with_grades
(
self
):
# Create 4 users
user_course
=
4
users_completed
=
2
users
=
[
UserFactory
.
create
(
username
=
"testuser"
+
str
(
__
),
profile
=
'test'
)
for
__
in
xrange
(
user_course
)]
for
i
,
user
in
enumerate
(
users
):
CourseEnrollmentFactory
.
create
(
user
=
user
,
course_id
=
self
.
course
.
id
)
grades
=
(
0.75
,
0.85
)
# mark 3 users as who completed course and 1 who did not
if
i
<
users_completed
:
grades
=
(
0.90
,
0.91
)
StudentGradebook
.
objects
.
create
(
user
=
user
,
course_id
=
self
.
course
.
id
,
grade
=
grades
[
0
],
proforma_grade
=
grades
[
1
])
data
=
{
'name'
:
self
.
test_organization_name
,
'display_name'
:
self
.
test_organization_display_name
,
'contact_name'
:
self
.
test_organization_contact_name
,
'contact_email'
:
self
.
test_organization_contact_email
,
'contact_phone'
:
self
.
test_organization_contact_phone
}
response
=
self
.
do_post
(
self
.
base_organizations_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
test_uri
=
'{}{}/'
.
format
(
self
.
base_organizations_uri
,
str
(
response
.
data
[
'id'
]))
users_uri
=
'{}users/'
.
format
(
test_uri
)
for
user
in
users
:
data
=
{
"id"
:
user
.
id
}
response
=
self
.
do_post
(
users_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
'{}?{}&course_id={}'
.
format
(
users_uri
,
'include_grades=True'
,
self
.
course
.
id
))
self
.
assertEqual
(
response
.
status_code
,
200
)
complete_count
=
len
([
user
for
user
in
response
.
data
if
user
[
'complete_status'
]])
self
.
assertEqual
(
complete_count
,
users_completed
)
grade_sum
=
sum
([
user
[
'grade'
]
for
user
in
response
.
data
])
proforma_grade_sum
=
sum
([
user
[
'proforma_grade'
]
for
user
in
response
.
data
])
self
.
assertEqual
(
grade_sum
,
0.75
+
0.75
+
0.9
+
0.9
)
self
.
assertEqual
(
proforma_grade_sum
,
0.85
+
0.85
+
0.91
+
0.91
)
def
test_organizations_metrics_get
(
self
):
users
=
[]
for
i
in
xrange
(
1
,
6
):
...
...
lms/djangoapps/organizations/views.py
View file @
908f5e0a
...
...
@@ -73,11 +73,30 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
@action
(
methods
=
[
'get'
,
'post'
])
def
users
(
self
,
request
,
pk
):
"""
Add a User to an Organization
- URI: ```/api/organizations/{org_id}/users/```
- GET: Returns users in an organization
* course_id parameter should filter user by course
* include_course_counts parameter should be `true` to get user's enrollment count
* include_grades parameter should be `true` to get user's grades
* for the course given in the course_id parameter
- POST: Adds a User to an Organization
"""
if
request
.
method
==
'GET'
:
include_course_counts
=
request
.
QUERY_PARAMS
.
get
(
'include_course_counts'
,
None
)
include_grades
=
request
.
QUERY_PARAMS
.
get
(
'include_grades'
,
None
)
course_id
=
request
.
QUERY_PARAMS
.
get
(
'course_id'
,
None
)
grade_complete_match_range
=
getattr
(
settings
,
'GRADEBOOK_GRADE_COMPLETE_PROFORMA_MATCH_RANGE'
,
0.01
)
course_key
=
None
if
course_id
:
course_key
=
get_course_key
(
course_id
)
users
=
User
.
objects
.
filter
(
organizations
=
pk
)
if
course_key
:
users
=
users
.
filter
(
courseenrollment__course_id__exact
=
course_key
,
courseenrollment__is_active
=
True
)
if
str2bool
(
include_grades
):
users
=
users
.
select_related
(
'studentgradebook'
)
response_data
=
[]
if
users
:
for
user
in
users
:
...
...
@@ -86,6 +105,15 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
if
str2bool
(
include_course_counts
):
enrollments
=
CourseEnrollment
.
enrollments_for_user
(
user
)
.
count
()
user_data
[
'course_count'
]
=
enrollments
if
str2bool
(
include_grades
)
and
course_key
:
user_grades
=
{
'grade'
:
0
,
'proforma_grade'
:
0
}
gradebook
=
user
.
studentgradebook_set
.
filter
(
course_id
=
course_key
)
if
gradebook
:
user_grades
[
'grade'
]
=
gradebook
[
0
]
.
grade
user_grades
[
'proforma_grade'
]
=
gradebook
[
0
]
.
proforma_grade
user_grades
[
'complete_status'
]
=
True
if
0
<
gradebook
[
0
]
.
proforma_grade
<=
\
gradebook
[
0
]
.
grade
+
grade_complete_match_range
else
False
user_data
.
update
(
user_grades
)
response_data
.
append
(
user_data
)
return
Response
(
response_data
,
status
=
status
.
HTTP_200_OK
)
else
:
...
...
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