diff --git a/accounts/migrations/0005_user_organization.py b/accounts/migrations/0005_user_organization.py new file mode 100644 index 00000000..12c9908c --- /dev/null +++ b/accounts/migrations/0005_user_organization.py @@ -0,0 +1,20 @@ +# Generated by Django 4.1.5 on 2023-10-05 09:20 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('datahub', '0055_remove_datasets_user_map_and_more'), + ('accounts', '0004_alter_user_approval_status'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='organization', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='datahub.organization'), + ), + ] diff --git a/accounts/models.py b/accounts/models.py index f4b519bb..88bd7c30 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -6,6 +6,7 @@ # from utils.validators import validate_file_size from core.base_models import TimeStampMixin +from datahub.models import Organization from utils.validators import validate_file_size @@ -77,6 +78,11 @@ class User(AbstractBaseUser, TimeStampMixin): """ id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + organization = models.ForeignKey( + Organization, + on_delete=models.CASCADE, + null=True + ) password = None last_login = None is_superuser = None diff --git a/accounts/views.py b/accounts/views.py index bddb64a1..26534550 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -335,7 +335,7 @@ def create(self, request, *args, **kwargs): email = serializer.validated_data["email"] otp_entered = serializer.validated_data["otp"] # user = User.objects.filter(user__email=email).select_related() - user_map = UserOrganizationMap.objects.select_related("user").filter(user__email=email).first() + # user_map = UserOrganizationMap.objects.select_related("user").filter(user__email=email).first() user = User.objects.filter(email=email) user = user.first() @@ -363,13 +363,13 @@ def create(self, request, *args, **kwargs): if (correct_otp == int(otp_entered) and cache.get(email)["email"] == email) or email == "imran+1@digitalgreen.org": cache.delete(email) refresh = RefreshToken.for_user(user) - refresh["org_id"] = str(user_map.organization_id) if user_map else None - refresh["map_id"] = str(user_map.id) if user_map else None + refresh["org_id"] = str(user.organization_id) if user.organization_id else None + # refresh["map_id"] = str(user_map.id) if user_map else None refresh["role"] = str(user.role_id) refresh["onboarded_by"] = str(user.on_boarded_by_id) - refresh.access_token["org_id"] = str(user_map.organization_id) if user_map else None - refresh.access_token["map_id"] = str(user_map.id) if user_map else None + refresh.access_token["org_id"] = str(user.organization_id) if user.organization_id else None + # refresh.access_token["map_id"] = str(user_map.id) if user_map else None refresh.access_token["role"] = str(user.role_id) refresh.access_token["onboarded_by"] = str(user.on_boarded_by_id) @@ -377,8 +377,8 @@ def create(self, request, *args, **kwargs): return Response( { "user": user.id, - "user_map": user_map.id if user_map else None, - "org_id": user_map.organization_id if user_map else None, + # "user_map": user_map.id if user_map else None, + "org_id": str(user.organization_id) if user.organization_id else None, "email": user.email, "status": user.status, "on_boarded": user.on_boarded, diff --git a/datahub/migrations/0055_remove_datasets_user_map_and_more.py b/datahub/migrations/0055_remove_datasets_user_map_and_more.py new file mode 100644 index 00000000..99ae4d0c --- /dev/null +++ b/datahub/migrations/0055_remove_datasets_user_map_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 4.1.5 on 2023-10-05 09:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('datahub', '0054_usagepolicy_configs'), + ] + + operations = [ + migrations.RemoveField( + model_name='datasets', + name='user_map', + ), + migrations.RemoveField( + model_name='userorganizationmap', + name='user', + ), + ] diff --git a/datahub/models.py b/datahub/models.py index 258479bd..60f3d5dc 100644 --- a/datahub/models.py +++ b/datahub/models.py @@ -7,7 +7,8 @@ from django.db import models from django.utils import timezone -from accounts.models import User +# from accounts.models import User +# from accounts.models import User from core.base_models import TimeStampMixin from core.constants import Constants from utils.validators import ( @@ -76,7 +77,7 @@ class UserOrganizationMap(TimeStampMixin): """UserOrganizationMap model for mapping User and Organization model""" id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - user = models.ForeignKey(User, on_delete=models.CASCADE) + # user = models.ForeignKey(User, on_delete=models.CASCADE) organization = models.ForeignKey(Organization, on_delete=models.CASCADE) @@ -119,7 +120,8 @@ class Datasets(TimeStampMixin): """Datasets model of all the users""" id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - user_map = models.ForeignKey(UserOrganizationMap, on_delete=models.PROTECT) + # user_map = models.ForeignKey(UserOrganizationMap, on_delete=models.PROTECT) + # user = models.ForeignKey(User, on_delete=models.PROTECT) added user and commenting because this is causing another circular import name = models.CharField(max_length=255, unique=True) description = models.CharField(max_length=500) category = models.JSONField() diff --git a/datahub/serializers.py b/datahub/serializers.py index 7419952a..932e5d3b 100644 --- a/datahub/serializers.py +++ b/datahub/serializers.py @@ -221,6 +221,26 @@ class Meta: profile_picture = serializers.FileField() status = serializers.BooleanField() on_boarded = serializers.BooleanField() + organization = serializers.UUIDField() + +class TeamMemberListAllSerializer(serializers.Serializer): + """ + Create Team Member Serializer. + """ + organization = OrganizationSerializer() + + class Meta: + model = User + + id = serializers.UUIDField() + email = serializers.EmailField() + first_name = serializers.CharField() + last_name = serializers.CharField() + role = serializers.PrimaryKeyRelatedField(queryset=UserRole.objects.all(), read_only=False) + profile_picture = serializers.FileField() + status = serializers.BooleanField() + on_boarded = serializers.BooleanField() + class TeamMemberCreateSerializer(serializers.ModelSerializer): @@ -230,7 +250,7 @@ class TeamMemberCreateSerializer(serializers.ModelSerializer): class Meta: model = User - fields = ("email", "first_name", "last_name", "role", "on_boarded_by", "on_boarded") + fields = ("email", "first_name", "last_name", "role", "on_boarded_by", "on_boarded","organization") class TeamMemberDetailsSerializer(serializers.ModelSerializer): @@ -240,7 +260,7 @@ class TeamMemberDetailsSerializer(serializers.ModelSerializer): class Meta: model = User - fields = ("id", "email", "first_name", "last_name", "role", "on_boarded_by", "on_boarded") + fields = ("id", "email", "first_name", "last_name", "role", "on_boarded_by", "on_boarded","organization") class TeamMemberUpdateSerializer(serializers.ModelSerializer): @@ -250,7 +270,7 @@ class TeamMemberUpdateSerializer(serializers.ModelSerializer): class Meta: model = User - fields = ("id", "email", "first_name", "last_name", "role", "on_boarded_by", "on_boarded") + fields = ("id", "email", "first_name", "last_name", "role", "on_boarded_by", "on_boarded","organization") class DatasetSerializer(serializers.ModelSerializer): diff --git a/datahub/views.py b/datahub/views.py index b6cf82bf..a05fb36e 100644 --- a/datahub/views.py +++ b/datahub/views.py @@ -118,7 +118,7 @@ TeamMemberUpdateSerializer, UsageUpdatePolicySerializer, UserOrganizationCreateSerializer, - UserOrganizationMapSerializer, + UserOrganizationMapSerializer, TeamMemberListAllSerializer, ) from participant.models import SupportTicket from participant.serializers import ( @@ -167,11 +167,13 @@ class TeamMemberViewSet(GenericViewSet): def create(self, request, *args, **kwargs): """POST method: create action to save an object by sending a POST request""" try: + LOGGER.info("Creating a new team member.") serializer = TeamMemberCreateSerializer(data=request.data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) except ValidationError as e: + LOGGER.error("ValidationError",e.detail) return Response(e.detail, status=status.HTTP_400_BAD_REQUEST) except Exception as e: LOGGER.error(e,exc_info=True) @@ -180,13 +182,16 @@ def create(self, request, *args, **kwargs): def list(self, request, *args, **kwargs): """GET method: query all the list of objects from the Product model""" # queryset = self.filter_queryset(self.get_queryset()) - queryset = User.objects.filter(Q(status=True) & (Q(role__id=2) | Q(role__id=5))) + + LOGGER.info("Listing for team member.") + org_id = request.data.get("organization") + queryset = User.objects.filter(organization=org_id,status=True,role_id=2) page = self.paginate_queryset(queryset) if page is not None: - serializer = self.get_serializer(page, many=True) + serializer = TeamMemberListAllSerializer(page, many=True) return self.get_paginated_response(serializer.data) - serializer = self.get_serializer(queryset, many=True) + serializer = TeamMemberListAllSerializer(queryset, many=True) return Response(serializer.data, status=status.HTTP_200_OK) def retrieve(self, request, pk): @@ -206,6 +211,7 @@ def update(self, request, *args, **kwargs): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) except ValidationError as e: + LOGGER.error("ValidationError", e.detail) return Response(e.detail, status=status.HTTP_400_BAD_REQUEST) except Exception as e: LOGGER.error(e,exc_info=True) @@ -214,10 +220,12 @@ def update(self, request, *args, **kwargs): def destroy(self, request, pk): """DELETE method: delete an object""" team_member = self.get_object() - team_member.status = False - # team_member.delete() + # team_member.status = False + team_member.delete() team_member.save() - return Response(status=status.HTTP_204_NO_CONTENT) + return Response(status=status.HTTP_200_OK,data={ + "message":"Resource Deleted" + }) class OrganizationViewSet(GenericViewSet): @@ -245,8 +253,8 @@ def create(self, request, *args, **kwargs): """POST method: create action to save an organization object using User ID (IMPORTANT: Using USER ID instead of Organization ID)""" try: user_obj = User.objects.get(id=request.data.get(Constants.USER_ID)) - user_org_queryset = UserOrganizationMap.objects.filter(user_id=request.data.get(Constants.USER_ID)).first() - if user_org_queryset: + # user_org_queryset = UserOrganizationMap.objects.filter(user_id=request.data.get(Constants.USER_ID)).first() + if user_obj: return Response( {"message": ["User is already associated with an organization"]}, status=status.HTTP_400_BAD_REQUEST, @@ -285,7 +293,7 @@ def list(self, request, *args, **kwargs): """GET method: query the list of Organization objects""" try: user_org_queryset = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.ORGANIZATION) .filter(organization__status=True) .all() ) @@ -300,15 +308,15 @@ def retrieve(self, request, pk): """GET method: retrieve an object of Organization using User ID of the User (IMPORTANT: Using USER ID instead of Organization ID)""" try: user_obj = User.objects.get(id=pk, status=True) - user_org_queryset = UserOrganizationMap.objects.prefetch_related( - Constants.USER, Constants.ORGANIZATION - ).filter(user=pk) + # user_org_queryset = UserOrganizationMap.objects.prefetch_related( + # Constants.USER, Constants.ORGANIZATION + # ).filter(user=pk) - if not user_org_queryset: + if not user_obj: data = {Constants.USER: {"id": user_obj.id}, Constants.ORGANIZATION: "null"} return Response(data, status=status.HTTP_200_OK) - org_obj = Organization.objects.get(id=user_org_queryset.first().organization_id) + org_obj = Organization.objects.get(id=user_obj.organization_id) user_org_serializer = OrganizationSerializer(org_obj) data = { Constants.USER: {"id": user_obj.id}, @@ -322,15 +330,15 @@ def retrieve(self, request, pk): def update(self, request, pk): """PUT method: update or PUT request for Organization using User ID of the User (IMPORTANT: Using USER ID instead of Organization ID)""" user_obj = User.objects.get(id=pk, status=True) - user_org_queryset = ( - UserOrganizationMap.objects.prefetch_related(Constants.USER, Constants.ORGANIZATION).filter(user=pk).all() - ) + # user_org_queryset = ( + # UserOrganizationMap.objects.prefetch_related(Constants.USER, Constants.ORGANIZATION).filter(user=pk).all() + # ) - if not user_org_queryset: + if not user_obj: return Response({}, status=status.HTTP_404_NOT_FOUND) # 310-360 not covered 4 OrganizationSerializerValidator.validate_website(request.data) organization_serializer = OrganizationSerializer( - Organization.objects.get(id=user_org_queryset.first().organization_id), + Organization.objects.get(id=user_obj.organization_id), data=request.data, partial=True, ) @@ -340,8 +348,8 @@ def update(self, request, pk): data = { Constants.USER: {"id": pk}, Constants.ORGANIZATION: organization_serializer.data, - "user_map": user_org_queryset.first().id, - "org_id": user_org_queryset.first().organization_id, + # "user_map": user_org_queryset.first().id, + "org_id": user_obj.organization_id, } return Response( data, @@ -357,8 +365,8 @@ def destroy(self, request, pk): """DELETE method: delete an object""" try: user_obj = User.objects.get(id=pk, status=True) - user_org_queryset = UserOrganizationMap.objects.select_related(Constants.ORGANIZATION).get(user_id=pk) - org_queryset = Organization.objects.get(id=user_org_queryset.organization_id) + # user_org_queryset = UserOrganizationMap.objects.select_related(Constants.ORGANIZATION).get(user_id=pk) + org_queryset = Organization.objects.get(id=user_obj.organization_id) org_queryset.status = False self.perform_create(org_queryset) return Response(status=status.HTTP_204_NO_CONTENT) @@ -456,12 +464,12 @@ def list(self, request, *args, **kwargs): filter = {Constants.ORGANIZATION_NAME_ICONTAINS: name} if name else {} if on_boarded_by: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.ORGANIZATION) .filter( - user__status=True, - user__on_boarded_by=on_boarded_by, - user__role=3, - user__approval_status=approval_status, + status=True, + on_boarded_by=on_boarded_by, + role=3, + approval_status=approval_status, **filter, ) .order_by("-user__updated_at") @@ -469,19 +477,19 @@ def list(self, request, *args, **kwargs): ) elif co_steward: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) - .filter(user__status=True, user__role=6, **filter) + User.objects.select_related(Constants.ORGANIZATION) + .filter(status=True, role=6, **filter) .order_by("-user__updated_at") .all() ) else: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.ORGANIZATION) .filter( - user__status=True, - user__role=3, - user__on_boarded_by=None, - user__approval_status=approval_status, + status=True, + role=3, + on_boarded_by=None, + approval_status=approval_status, **filter, ) .order_by("-user__updated_at") @@ -495,8 +503,8 @@ def list(self, request, *args, **kwargs): def retrieve(self, request, pk): """GET method: retrieve an object or instance of the Product model""" roles = ( - UserOrganizationMap.objects.prefetch_related(Constants.USER, Constants.ORGANIZATION) - .filter(user__status=True, user=pk) + User.objects.prefetch_related(Constants.ORGANIZATION) + .filter(status=True, id=pk) .first() ) @@ -562,7 +570,7 @@ def destroy(self, request, pk): """DELETE method: delete an object""" participant = self.get_object() user_organization = ( - UserOrganizationMap.objects.select_related(Constants.ORGANIZATION).filter(user_id=pk).first() + User.objects.select_related(Constants.ORGANIZATION).filter(id=pk).first() ) organization = Organization.objects.get(id=user_organization.organization_id) if participant.status: @@ -1231,8 +1239,8 @@ def update(self, request, *args, **kwargs): instance = self.get_object() # trigger email to the participant - user_map_queryset = UserOrganizationMap.objects.select_related(Constants.USER).get(id=instance.user_map_id) - user_obj = user_map_queryset.user + user_map_queryset = User.objects.get(id=instance.user_id) + user_obj = user_map_queryset # reset the approval status b/c the user modified the dataset after an approval if getattr(instance, Constants.APPROVAL_STATUS) == Constants.APPROVED and ( @@ -1480,9 +1488,10 @@ def dashboard(self, request): """Retrieve datahub dashboard details""" try: # total_participants = User.objects.filter(role_id=3, status=True).count() + # explain is_temp not in child not in parent class total_participants = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) - .filter(user__role=3, user__status=True, is_temp=False) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) + .filter(role=3, status=True) .count() ) total_datasets = ( @@ -2261,20 +2270,21 @@ def datasets_join_condition(self, request, *args, **kwargs): @action(detail=False, methods=["get"]) def organization(self, request, *args, **kwargs): + #assist """GET method: query the list of Organization objects""" on_boarded_by = request.GET.get("on_boarded_by", "") user_id = request.GET.get("user_id", "") try: user_org_queryset = ( - UserOrganizationMap.objects.prefetch_related("user_org_map") - .select_related("organization", "user") - .annotate(dataset_count=Count("user_org_map__id")) + User.objects + .select_related("organization") + .annotate(dataset_count=Count("user_id")) .values( name=F("organization__name"), org_id=F("organization_id"), org_description=F("organization__org_description"), ) - .filter(user__status=True, dataset_count__gt=0) + .filter(status=True, dataset_count__gt=0) .all() ) if on_boarded_by: @@ -2925,39 +2935,39 @@ def participant_metics(self, data): try: if on_boarded_by != "None" or role_id == str(6): result["participants_count"] = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) .filter( - user__status=True, - user__on_boarded_by=on_boarded_by if on_boarded_by != "None" else user_id, - user__role=3, - user__approval_status=True, + status=True, + on_boarded_by=on_boarded_by if on_boarded_by != "None" else user_id, + role=3, + approval_status=True, ) .count() ) elif role_id == str(1): result["co_steward_count"] = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) - .filter(user__status=True, user__role=6) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) + .filter(status=True,role=6) .count() ) result["participants_count"] = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) .filter( - user__status=True, - user__role=3, - user__on_boarded_by=None, - user__approval_status=True, + status=True, + role=3, + on_boarded_by=None, + approval_status=True, ) .count() ) else: result["participants_count"] = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) .filter( - user__status=True, - user__role=3, - user__on_boarded_by=None, - user__approval_status=True, + status=True, + role=3, + on_boarded_by=None, + approval_status=True, ) .count() ) @@ -3089,11 +3099,11 @@ def dashboard(self, request): dataset_category_metrics[key] = dataset_count recent_datasets = DatasetV2ListNewSerializer(dataset_query.order_by("-updated_at")[0:3], many=True).data data = { - "user": UserOrganizationMap.objects.select_related("user", "organization") - .filter(id=data.get("map_id")) + "user": User.objects.select_related("organization") + .filter(id=data.get("user_id")) .values( - first_name=F("user__first_name"), - last_name=F("user__last_name"), + first_name=F("first_name"), + last_name=F("last_name"), logo=Concat( Value("media/"), F("organization__logo"), diff --git a/microsite/views.py b/microsite/views.py index 04881842..2c46d2e8 100644 --- a/microsite/views.py +++ b/microsite/views.py @@ -96,9 +96,8 @@ def admin_organization(self, request): user_queryset = datahub_admin.first() user_serializer = UserSerializer(user_queryset) - user_org_queryset = UserOrganizationMap.objects.prefetch_related( - Constants.USER, Constants.ORGANIZATION - ).filter(user=user_queryset.id) + user_org_queryset = User.objects.prefetch_related(Constants.ORGANIZATION + ).filter(id=user_queryset.id) if not user_org_queryset: data = { @@ -108,7 +107,7 @@ def admin_organization(self, request): } return Response(data, status=status.HTTP_200_OK) - org_obj = Organization.objects.get(id=user_org_queryset.first().organization_id) + org_obj = Organization.objects.get(id=user_org_queryset.organization_id) org_seriliazer = OrganizationMicrositeSerializer(org_obj) data = { Constants.USER: user_serializer.data, @@ -626,12 +625,12 @@ def list(self, request, *args, **kwargs): try: if on_boarded_by: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.ORGANIZATION) .filter( - user__status=True, - user__on_boarded_by=on_boarded_by, - user__role=3, - user__approval_status=approval_status, + status=True, + on_boarded_by=on_boarded_by, + role=3, + approval_status=approval_status, **filter, ) .order_by("-user__updated_at") @@ -639,19 +638,19 @@ def list(self, request, *args, **kwargs): ) elif co_steward: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) - .filter(user__status=True, user__role=6, **filter) + User.objects.select_related(Constants.ORGANIZATION) + .filter(status=True, role=6, **filter) .order_by("-user__updated_at") .all() ) else: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) .filter( - user__status=True, - user__role=3, - user__on_boarded_by=None, - user__approval_status=approval_status, + status=True, + role=3, + on_boarded_by=None, + approval_status=approval_status, **filter, ) .order_by("-user__updated_at") @@ -667,8 +666,8 @@ def list(self, request, *args, **kwargs): def retrieve(self, request, pk): """GET method: retrieve an object or instance of the Product model""" roles = ( - UserOrganizationMap.objects.prefetch_related(Constants.USER, Constants.ORGANIZATION) - .filter(user__status=True, user=pk) + User.objects.prefetch_related(Constants.ORGANIZATION) + .filter(status=True, id=pk) .all() ) participant_serializer = ParticipantSerializer(roles, many=True) @@ -687,14 +686,14 @@ def organizations(self, request, *args, **kwargs): try: if co_steward: roles = ( - UserOrganizationMap.objects.select_related(Constants.ORGANIZATION) - .filter(user__status=True, user__role=6) + User.objects.select_related(Constants.ORGANIZATION) + .filter(status=True, role=6) .all() ) else: roles = ( - UserOrganizationMap.objects.select_related(Constants.USER, Constants.ORGANIZATION) - .filter((Q(user__role=3) | Q(user__role=1)), user__status=True) + User.objects.select_related(Constants.USER, Constants.ORGANIZATION) + .filter((Q(role=3) | Q(role=1)), status=True) .all() ) page = self.paginate_queryset(roles) diff --git a/participant/migrations/0006_remove_connectors_user_map.py b/participant/migrations/0006_remove_connectors_user_map.py new file mode 100644 index 00000000..2f43d9e6 --- /dev/null +++ b/participant/migrations/0006_remove_connectors_user_map.py @@ -0,0 +1,17 @@ +# Generated by Django 4.1.5 on 2023-10-05 09:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('participant', '0005_alter_supportticketv2_status'), + ] + + operations = [ + migrations.RemoveField( + model_name='connectors', + name='user_map', + ), + ] diff --git a/participant/models.py b/participant/models.py index 6620dafd..cf20084c 100644 --- a/participant/models.py +++ b/participant/models.py @@ -5,7 +5,7 @@ # import black from django.db import models -from accounts.models import User +# from accounts.models import User # causing circular import from core import settings from core.base_models import TimeStampMixin from datahub.models import Datasets, Organization, UserOrganizationMap @@ -90,7 +90,8 @@ class Connectors(TimeStampMixin): """Connectors model of all the users""" id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - user_map = models.ForeignKey(UserOrganizationMap, on_delete=models.PROTECT, blank=True, default="") + # user_map = models.ForeignKey(UserOrganizationMap, on_delete=models.PROTECT, blank=True, default="") + # user = models.ForeignKey(User, on_delete=models.PROTECT) project = models.ForeignKey(Project, on_delete=models.PROTECT, null=True) department = models.ForeignKey( Department, on_delete=models.PROTECT, default="e459f452-2b4b-4129-ba8b-1e1180c87888" diff --git a/participant/views.py b/participant/views.py index c6949406..dbcf22f4 100644 --- a/participant/views.py +++ b/participant/views.py @@ -242,9 +242,9 @@ def create(self, request, *args, **kwargs): setattr(request.data, "_mutable", True) data = request.data - user_org_map = UserOrganizationMap.objects.get( - id=data.get(Constants.USER_MAP)) - user = User.objects.get(id=user_org_map.user_id) + user = User.objects.get( + id=data.get(Constants.USER_ID)) + # user = User.objects.get(id=user_org_map.user_id) if not data.get("is_public"): if not csv_and_xlsx_file_validatation(request.data.get(Constants.SAMPLE_DATASET)): @@ -426,9 +426,8 @@ def update(self, request, *args, **kwargs): instance = self.get_object() # trigger email to the participant - user_map_queryset = UserOrganizationMap.objects.select_related( - Constants.USER).get(id=instance.user_map_id) - user_obj = user_map_queryset.user + user_map_queryset = User.objects.get(id=instance.user_id) + user_obj = user_map_queryset # reset the approval status b/c the user modified the dataset after an approval if getattr(instance, Constants.APPROVAL_STATUS) == Constants.APPROVED and ( @@ -700,17 +699,18 @@ def perform_create(self, serializer): """ return serializer.save() - def trigger_email(self, request, template, subject, user_org_map, connector_data, dataset): + def trigger_email(self, request, template, subject, user_id, connector_data, dataset): """trigger email to the respective users""" try: datahub_admin = User.objects.filter(role_id=1).first() admin_full_name = string_functions.get_full_name( datahub_admin.first_name, datahub_admin.last_name) + participant = User.objects.get(id=user_id) participant_org = Organization.objects.get( - id=user_org_map.organization_id) if user_org_map else None + id=participant.organization_id) participant_org_address = string_functions.get_full_address( participant_org.address) - participant = User.objects.get(id=user_org_map.user_id) + participant_full_name = string_functions.get_full_name( participant.first_name, participant.last_name) @@ -762,8 +762,8 @@ def create(self, request, *args, **kwargs): serializer.is_valid(raise_exception=True) self.perform_create(serializer) - user_org_map = UserOrganizationMap.objects.select_related(Constants.ORGANIZATION).get( - id=serializer.data.get(Constants.USER_MAP) + user_org_map = User.objects.select_related(Constants.ORGANIZATION).get( + id=serializer.data.get(Constants.USER_ID) ) dataset = Datasets.objects.get( id=serializer.data.get(Constants.DATASET)) @@ -910,8 +910,8 @@ def update(self, request, *args, **kwargs): self.perform_create(serializer) if request.data.get(Constants.CERTIFICATE): - user_org_map = UserOrganizationMap.objects.select_related(Constants.ORGANIZATION).get( - id=serializer.data.get(Constants.USER_MAP) + user_org_map = User.objects.select_related(Constants.ORGANIZATION).get( + id=serializer.data.get(Constants.USER_ID) ) dataset = Datasets.objects.get( id=serializer.data.get(Constants.DATASET)) @@ -942,8 +942,8 @@ def destroy(self, request, pk): ["Connector status should be either unpaired or rejected to delete"], status=400, ) - user_org_map = UserOrganizationMap.objects.select_related(Constants.ORGANIZATION).get( - id=connector.user_map_id + user_org_map = User.objects.get( + id=connector.user_id ) dataset = Datasets.objects.get(id=connector.dataset_id) self.trigger_email( @@ -1102,6 +1102,7 @@ def perform_create(self, serializer): return serializer.save() def trigger_email_for_pairing(self, request, template, subject, consumer_connector, provider_connector): + #assist-> here token is not being used to extract # trigger email to the participant as they are being added try: consumer_org_map = ( @@ -2139,8 +2140,8 @@ def retrieve(self, request, pk): "message": "No ticket found for this id.", }, status=status.HTTP_404_NOT_FOUND) try: - current_user = UserOrganizationMap.objects.select_related( - "organization").get(id=request.META.get("map_id")) + current_user = User.objects.select_related( + "organization").get(id=request.META.get("user_id")) except UserOrganizationMap.DoesNotExist: return Response( {