diff --git a/edx_solutions_api_integration/courses/views.py b/edx_solutions_api_integration/courses/views.py index 93016d8..c014d42 100644 --- a/edx_solutions_api_integration/courses/views.py +++ b/edx_solutions_api_integration/courses/views.py @@ -1318,6 +1318,7 @@ def get_serializer_context(self): "last_login", "attributes", "organization_groups", + "main_organization", ] active_attributes = [] diff --git a/edx_solutions_api_integration/imports/views.py b/edx_solutions_api_integration/imports/views.py index caac666..0da8665 100644 --- a/edx_solutions_api_integration/imports/views.py +++ b/edx_solutions_api_integration/imports/views.py @@ -16,6 +16,7 @@ from edx_solutions_api_integration.permissions import SecureViewSet from edx_solutions_api_integration.users.views import _manage_role from edx_solutions_organizations.models import Organization +from edx_solutions_organizations.receivers import user_organization_updated from lms.djangoapps.discussion.notification_prefs.views import enable_notifications from opaque_keys.edx.keys import CourseKey from openedx.core.djangoapps.course_groups.cohorts import (add_cohort, @@ -186,6 +187,11 @@ def _create_user(self, data, errors, response): except Exception as exc: self._add_error(errors, str(exc.message), _('Enrolling Participant in Company'), email) + user_organization_updated.send( + sender=__name__, user_id=user.id, + organization_id=company.id + ) + def _enroll_user(self, data, errors, response={}): """Enroll user in a course and add him to a cohort.""" user = data.get('user_object') diff --git a/edx_solutions_api_integration/users/serializers.py b/edx_solutions_api_integration/users/serializers.py index 54670fc..e410ea3 100644 --- a/edx_solutions_api_integration/users/serializers.py +++ b/edx_solutions_api_integration/users/serializers.py @@ -4,6 +4,7 @@ from django.core.exceptions import ObjectDoesNotExist from edx_solutions_api_integration.models import APIUser from edx_solutions_api_integration.utils import get_profile_image_urls_by_username +from edx_solutions_organizations.models import Organization from edx_solutions_organizations.serializers import BasicOrganizationSerializer from rest_framework import serializers @@ -48,6 +49,18 @@ class UserSerializer(DynamicFieldsModelSerializer): attributes = serializers.SerializerMethodField('get_organization_attributes') course_groups = serializers.SerializerMethodField('get_user_course_groups') organization_groups = serializers.SerializerMethodField('get_user_organization_groups') + main_organization = serializers.SerializerMethodField('get_user_main_organization') + + def get_user_main_organization(self, user): + main_user_organization = None + mapped_user_organization = user.user_organizations.all().filter(is_main_company=True).first() + if mapped_user_organization: + try: + main_user_organization = Organization.objects.get(id=mapped_user_organization.organization_id) + except ObjectDoesNotExist: + pass + main_user_organization = [main_user_organization] if main_user_organization else [] + return BasicOrganizationSerializer(main_user_organization, many=True, context=self.context).data def get_user_organization_groups(self, user): """ @@ -164,6 +177,7 @@ class Meta: "attributes", "course_groups", "organization_groups", + "main_organization", ) read_only_fields = ("id", "email", "username") diff --git a/edx_solutions_api_integration/users/views.py b/edx_solutions_api_integration/users/views.py index cf8d430..8f6116f 100644 --- a/edx_solutions_api_integration/users/views.py +++ b/edx_solutions_api_integration/users/views.py @@ -16,7 +16,7 @@ from django.core.files.base import ContentFile from django.core.validators import validate_email, validate_slug from django.db import IntegrityError -from django.db.models import BooleanField, Case, Count, Q, Value, When +from django.db.models import BooleanField, Case, Count, F, Q, Value, When from django.http import Http404 from django.utils.translation import get_language from django.utils.translation import ugettext_lazy as _ @@ -1493,8 +1493,16 @@ def get_queryset(self): user = get_user_from_request_params(self.request, self.kwargs) if not user: return [] - - return user.organizations.all() + user_organizations_set = user.organizations.all() + if len(user_organizations_set) > 1: + q_object = Q() + q_object.add(Q(user_organizations__user_id=user.id), Q.AND) + q_object.add(Q(user_organizations__organization_id=F('id')), Q.AND) + q_object.add(Q(user_organizations__is_main_company=True), Q.AND) + user_organizations_set = user_organizations_set.annotate( + is_main_company_flag=Case(When(q_object, then=True), default=False, output_field=BooleanField()) + ).distinct().order_by('-is_main_company_flag') + return user_organizations_set class UsersWorkgroupsList(SecureListAPIView): diff --git a/setup.py b/setup.py index 501d0d2..3fd85e0 100755 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name='api-integration', - version='5.0.5', + version='5.0.6', description='RESTful api integration for edX platform', long_description=open('README.rst').read(), author='edX',