Commit ab4b9a7d by Waheed Ahmed

Fixed organization queryset and team admin issues.

ECOM-6969
parent e8847a17
......@@ -12,7 +12,7 @@ from opaque_keys.edx.keys import CourseKey
from course_discovery.apps.course_metadata.choices import CourseRunPacing
from course_discovery.apps.course_metadata.models import Person, Organization, Subject
from course_discovery.apps.ietf_language_tags.models import LanguageTag
from course_discovery.apps.publisher.mixins import LanguageModelSelect2Multiple
from course_discovery.apps.publisher.mixins import LanguageModelSelect2Multiple, check_roles_access
from course_discovery.apps.publisher.models import (
Course, CourseRun, Seat, User, OrganizationExtension, OrganizationUserRole, CourseUserRole
)
......@@ -144,11 +144,18 @@ class CustomCourseForm(CourseForm):
self.declared_fields['team_admin'].queryset = User.objects.filter(groups__name=org_extension.group)
if user:
self.declared_fields['organization'].queryset = Organization.objects.filter(
organization_extension__organization_id__isnull=False,
organizations = Organization.objects.filter(
organization_extension__organization_id__isnull=False
)
if not check_roles_access(user):
# If not internal user return only those organizations which belongs to user.
organizations = organizations.filter(
organization_extension__group__in=user.groups.all()
)
self.declared_fields['organization'].queryset = organizations
super(CustomCourseForm, self).__init__(*args, **kwargs)
if edit_mode:
self.fields['title'].widget = forms.HiddenInput()
......
......@@ -216,11 +216,41 @@ class CreateCourseViewTests(TestCase):
"""Verify that if there are more than one organization then there will be
a drop down of organization choices.
"""
self.user.groups.remove(self.internal_user_group)
organization_extension = factories.OrganizationExtensionFactory()
self.user.groups.add(organization_extension.group)
response = self.client.get(reverse('publisher:publisher_courses_new'))
self.assertContains(response,
'<select class="field-input input-select" id="id_organization" name="organization">')
self.assertContains(
response,
'<select class="field-input input-select" id="id_organization" name="organization">'
)
new_organization_extension = factories.OrganizationExtensionFactory()
response = self.client.get(reverse('publisher:publisher_courses_new'))
# Verify that course team user cannot see newly created organization in options.
self.assertNotContains(
response,
'<option value="{value}">{key}: {name}</option>'.format(
value=new_organization_extension.organization.id,
key=new_organization_extension.organization.key,
name=new_organization_extension.organization.name
)
)
self.user.groups.add(self.internal_user_group)
response = self.client.get(reverse('publisher:publisher_courses_new'))
# Verify that internal user can see newly created organization in options.
self.assertContains(
response,
'<option value="{value}">{key}: {name}</option>'.format(
value=new_organization_extension.organization.id,
key=new_organization_extension.organization.key,
name=new_organization_extension.organization.name
)
)
@ddt.data('contacted_partner_manager', 'pacing_type')
def test_create_without_selecting_radio_buttons(self, button_field):
......
......@@ -101,14 +101,26 @@ function loadAdminUsers(org_id) {
$.getJSON({
url: '/publisher/api/admins/organizations/'+ org_id +'/users/',
success: function (data) {
var teamAdminDropDown = $('#id_team_admin');
var teamAdminDropDown = $('#id_team_admin'),
selectedTeamAdmin = $('#id_team_admin option:selected').val(),
organizationInputType = $('#id_organization').attr('type');
teamAdminDropDown.empty();
if (organizationInputType == 'hidden' ) {
teamAdminDropDown.append('<option>---------</option>');
} else {
// it will looks same like other django model choice fields
teamAdminDropDown.append('<option selected="selected">---------</option>');
}
$.each(data.results, function (i, user) {
if (selectedTeamAdmin == user.id && organizationInputType === 'hidden' ) {
teamAdminDropDown.append(
$('<option selected="selected"> </option>').val(user.id).html(user.full_name)
);
} else {
teamAdminDropDown.append($('<option> </option>').val(user.id).html(user.full_name));
}
});
}
});
......
......@@ -87,10 +87,10 @@
{{ course_form.team_admin }}
</div>
</div>
{% if parent_course.team_admin %}
{% if parent_course.course_team_admin %}
<div class="field-admin-name margin-top20 {% if course_form.team_admin.errors %}hidden{% endif %}">
<span class="field-readonly">{{ parent_course.team_admin.username }}</span>
<input id="team-admin-id" type="hidden" value="{{ parent_course.team_admin.id }}">
<span class="field-readonly">{{ parent_course.course_team_admin.full_name }}</span>
<input id="team-admin-id" type="hidden" value="{{ parent_course.course_team_admin.id }}">
<div>
<a id="change-admin" href="#">{% trans "Change" %}</a>
</div>
......
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