From 48df5dc3749cca9c7ebc20e2936eee00e9c3c436 Mon Sep 17 00:00:00 2001 From: Mostafa Allam Date: Sat, 29 Apr 2023 10:04:44 +0300 Subject: [PATCH 1/4] adding user update on application status change signal --- .../signals/handlers.py | 21 ++++++++++++++++++- agriwise/agriculture_specialist/views.py | 14 ++++--------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/agriwise/agriculture_specialist/signals/handlers.py b/agriwise/agriculture_specialist/signals/handlers.py index 332c832..b99b8f5 100644 --- a/agriwise/agriculture_specialist/signals/handlers.py +++ b/agriwise/agriculture_specialist/signals/handlers.py @@ -1,6 +1,7 @@ import os -from django.db.models.signals import pre_delete +from django.contrib.auth import get_user_model +from django.db.models.signals import post_save, pre_delete from django.dispatch import receiver from agriwise.agriculture_specialist.models import ProfileUpgradeApplication @@ -15,3 +16,21 @@ def _delete_document_file(path): def delete_document_file(sender, instance, *args, **kwargs): if instance.documents: _delete_document_file(instance.documents.path) + + +@receiver(post_save, sender=ProfileUpgradeApplication) +def update_user_on_application_acceptance(sender, instance, *args, **kwargs): + if not kwargs["created"]: + if instance.status == "A": + user = ( + get_user_model() + .objects.filter(profileupgradeapplication=instance.id) + .first() + ) + user.is_agriculture_specialist = True + user.save() + # sending acceptance email to the user + + elif instance.status == "R": + # sending reject email to the user + pass diff --git a/agriwise/agriculture_specialist/views.py b/agriwise/agriculture_specialist/views.py index 5efabb2..b2f429b 100644 --- a/agriwise/agriculture_specialist/views.py +++ b/agriwise/agriculture_specialist/views.py @@ -1,4 +1,3 @@ -from django.contrib.auth import get_user_model from django.http import Http404 from django.shortcuts import get_object_or_404 from rest_framework import permissions, status @@ -46,14 +45,6 @@ def put(self, request, pk, *args, **kwargs): ) application_serializer.is_valid(raise_exception=True) application_serializer.save() - if application_serializer.data["status"] == "A": - user = ( - get_user_model() - .objects.filter(profileupgradeapplication=application.id) - .first() - ) - user.is_agriculture_specialist = True - user.save() return Response(application_serializer.data, status=status.HTTP_202_ACCEPTED) @@ -71,7 +62,10 @@ def get(self, request, *args, **kwargs): def post(self, request, *args, **kwargs): application_serializer = ProfileUpgradeApplicationUserSerializer( - data={"user": request.user.id, "documents": request.data["documents"]} + data={ + "user": request.user.id, + "documents": request.data.get("documents", ""), + } ) application_serializer.is_valid(raise_exception=True) application_serializer.save() From 56cb660d36b4ec1d446657b9fc1745f2bdd2e9be Mon Sep 17 00:00:00 2001 From: shroukhegazi Date: Sun, 30 Apr 2023 03:03:45 +0300 Subject: [PATCH 2/4] sending approval and rejection emails --- agriwise/agriculture_specialist/helpers.py | 16 +++++++++++ .../signals/handlers.py | 28 +++++++++++++++---- 2 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 agriwise/agriculture_specialist/helpers.py diff --git a/agriwise/agriculture_specialist/helpers.py b/agriwise/agriculture_specialist/helpers.py new file mode 100644 index 0000000..f47b6c1 --- /dev/null +++ b/agriwise/agriculture_specialist/helpers.py @@ -0,0 +1,16 @@ +from django.core.mail import EmailMessage +from rest_framework.exceptions import APIException +from rest_framework.response import Response +from rest_framework.status import HTTP_200_OK, HTTP_400_BAD_REQUEST + +def send_email(subject, message, recipient_list): + try: + email = EmailMessage( + subject=subject, + body=message, + to=recipient_list, + ) + email.send() + return Response({"message": "Email sent successfully."}, status=HTTP_200_OK) + except Exception as e: + raise APIException(detail=str(e), code=HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/agriwise/agriculture_specialist/signals/handlers.py b/agriwise/agriculture_specialist/signals/handlers.py index b99b8f5..8b1cf60 100644 --- a/agriwise/agriculture_specialist/signals/handlers.py +++ b/agriwise/agriculture_specialist/signals/handlers.py @@ -1,5 +1,6 @@ import os +from agriculture_specialist.helpers import send_email from django.contrib.auth import get_user_model from django.db.models.signals import post_save, pre_delete from django.dispatch import receiver @@ -20,17 +21,32 @@ def delete_document_file(sender, instance, *args, **kwargs): @receiver(post_save, sender=ProfileUpgradeApplication) def update_user_on_application_acceptance(sender, instance, *args, **kwargs): + user = ( + get_user_model().objects.filter(profileupgradeapplication=instance.id).first() + ) if not kwargs["created"]: if instance.status == "A": - user = ( - get_user_model() - .objects.filter(profileupgradeapplication=instance.id) - .first() - ) user.is_agriculture_specialist = True user.save() # sending acceptance email to the user + subject = "Congratulations on Upgrading Your Account" + message = ( + f"Dear {user.username},\n\nCongratulations on upgrading your account with us! " + f"With your new account, you'll have access to a variety of features and capabilities " + f"that will help you get the most out of our platform. Thank you for choosing us, and " + f"we look forward to continuing to serve you.\n\nBest regards,\n[Agriwise Team]" + ) + recipient_list = [user.email] + send_email(subject=subject, message=message, recipient_list=recipient_list) elif instance.status == "R": # sending reject email to the user - pass + subject = "Rejection of Upgrading Your Account" + message = ( + f"Dear {user.username},\n\nUnfortunately, We regret to inform you that we are" + f" unable to process your request to upgrade your account at this time due to " + f"not enough application. Please contact us for more information." + f"\n\nBest regards,\n[Agriwise Team]" + ) + recipient_list = [user.email] + send_email(subject=subject, message=message, recipient_list=recipient_list) From 4738efecb2c2b25951f7f08bbf924d73e8e66fac Mon Sep 17 00:00:00 2001 From: shroukhegazi Date: Sun, 30 Apr 2023 03:06:37 +0300 Subject: [PATCH 3/4] fixed linter issuse --- agriwise/agriculture_specialist/helpers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/agriwise/agriculture_specialist/helpers.py b/agriwise/agriculture_specialist/helpers.py index f47b6c1..25fb3fe 100644 --- a/agriwise/agriculture_specialist/helpers.py +++ b/agriwise/agriculture_specialist/helpers.py @@ -3,6 +3,7 @@ from rest_framework.response import Response from rest_framework.status import HTTP_200_OK, HTTP_400_BAD_REQUEST + def send_email(subject, message, recipient_list): try: email = EmailMessage( @@ -13,4 +14,4 @@ def send_email(subject, message, recipient_list): email.send() return Response({"message": "Email sent successfully."}, status=HTTP_200_OK) except Exception as e: - raise APIException(detail=str(e), code=HTTP_400_BAD_REQUEST) \ No newline at end of file + raise APIException(detail=str(e), code=HTTP_400_BAD_REQUEST) From efc4bd576a07dc9a72140a1b0819681c7de8bc82 Mon Sep 17 00:00:00 2001 From: shroukhegazi Date: Sun, 30 Apr 2023 13:22:35 +0300 Subject: [PATCH 4/4] removed unneeded code --- agriwise/agriculture_specialist/helpers.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/agriwise/agriculture_specialist/helpers.py b/agriwise/agriculture_specialist/helpers.py index 25fb3fe..61f4fe8 100644 --- a/agriwise/agriculture_specialist/helpers.py +++ b/agriwise/agriculture_specialist/helpers.py @@ -1,7 +1,5 @@ from django.core.mail import EmailMessage from rest_framework.exceptions import APIException -from rest_framework.response import Response -from rest_framework.status import HTTP_200_OK, HTTP_400_BAD_REQUEST def send_email(subject, message, recipient_list): @@ -12,6 +10,5 @@ def send_email(subject, message, recipient_list): to=recipient_list, ) email.send() - return Response({"message": "Email sent successfully."}, status=HTTP_200_OK) except Exception as e: - raise APIException(detail=str(e), code=HTTP_400_BAD_REQUEST) + raise APIException(detail=str(e))