diff --git a/junior/views.py b/junior/views.py index b4a9d1d..e7f5815 100644 --- a/junior/views.py +++ b/junior/views.py @@ -47,7 +47,7 @@ from account.utils import custom_response, custom_error_response from guardian.utils import upload_image_to_alibaba from .utils import update_positions_based_on_points from notifications.utils import send_notification -from notifications.constants import REMOVE_JUNIOR +from notifications.constants import REMOVE_JUNIOR, ARTICLE_REWARD_POINTS from web_admin.models import Article, ArticleSurvey, SurveyOption, ArticleCard from web_admin.serializers.article_serializer import (ArticleSerializer, ArticleListSerializer, StartAssessmentSerializer) @@ -666,6 +666,8 @@ class CompleteArticleAPIView(views.APIView): is_answer_correct=True).aggregate( total_earn_points=Sum('earn_points'))['total_earn_points'] data = {"total_earn_points":total_earn_points} + send_notification.delay(ARTICLE_REWARD_POINTS, None, None, + request.user.id, {'points': total_earn_points}) return custom_response(SUCCESS_CODE['3042'], data, response_status=status.HTTP_200_OK) except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) diff --git a/notifications/constants.py b/notifications/constants.py index dc6ea75..503e0f2 100644 --- a/notifications/constants.py +++ b/notifications/constants.py @@ -17,7 +17,8 @@ IN_PROGRESS_TASK_EXPIRING = 13 TOP_JUNIOR = 14 NEW_ARTICLE_PUBLISHED = 15 -REMOVE_JUNIOR = 16 +ARTICLE_REWARD_POINTS = 16 +REMOVE_JUNIOR = 17 TEST_NOTIFICATION = 99 @@ -66,7 +67,7 @@ NOTIFICATION_DICT = { # as junior send task for approval TASK_ACTION: { "title": "Task completion approval!", - "body": "{from_user} completed her task {task_name}." + "body": "{from_user} completed their task {task_name}." }, # Juniors will receive notification as soon # as their task is rejected by custodians @@ -105,6 +106,11 @@ NOTIFICATION_DICT = { "title": "Time to read!", "body": "A new article has been published." }, + # Juniors will receive notification when they earn points by reading financial Learning + ARTICLE_REWARD_POINTS: { + "title": "Article reward points!", + "body": "You are rewarded with {points} points for reading article and answering questions. " + }, # Juniors will receive notification as soon as their custodians remove them from account REMOVE_JUNIOR: { "title": "Disassociate by guardian!", diff --git a/notifications/utils.py b/notifications/utils.py index a2759e0..aad37c0 100644 --- a/notifications/utils.py +++ b/notifications/utils.py @@ -77,6 +77,7 @@ def get_notification_data(notification_type, from_user_id, from_user_type, to_us push_data = NOTIFICATION_DICT[notification_type].copy() notification_data = push_data.copy() task_name = None + points = extra_data.get('points', None) if 'task_id' in extra_data: task = JuniorTask.objects.filter(id=extra_data.get('task_id')).first() task_name = task.task_name @@ -85,8 +86,9 @@ def get_notification_data(notification_type, from_user_id, from_user_type, to_us from_user_name, from_user_image, from_user = get_from_user_details(from_user_id, from_user_type) - push_data['body'] = push_data['body'].format(from_user=from_user_name, task_name=task_name) - notification_data['body'] = notification_data['body'].format(from_user=from_user_name, task_name=task_name) + push_data['body'] = push_data['body'].format(from_user=from_user_name, task_name=task_name, points=points) + notification_data['body'] = notification_data['body'].format(from_user=from_user_name, + task_name=task_name, points=points) notification_data['from_user'] = from_user_name notification_data['from_user_image'] = from_user_image diff --git a/notifications/views.py b/notifications/views.py index 54adf5a..670635a 100644 --- a/notifications/views.py +++ b/notifications/views.py @@ -36,7 +36,7 @@ class NotificationViewSet(viewsets.GenericViewSet): paginator = self.pagination_class() paginated_queryset = paginator.paginate_queryset(queryset, request) serializer = self.serializer_class(paginated_queryset, many=True) - return custom_response(None, serializer.data) + return custom_response(None, serializer.data, count=queryset.count()) @action(methods=['post'], detail=False, url_path='device', url_name='device', serializer_class=RegisterDevice) def fcm_registration(self, request): diff --git a/zod_bank/celery.py b/zod_bank/celery.py index cf71dc8..039ea03 100644 --- a/zod_bank/celery.py +++ b/zod_bank/celery.py @@ -35,11 +35,11 @@ app.conf.beat_schedule = { }, 'notify_task_expiry': { 'task': 'base.tasks.notify_task_expiry', - 'schedule': crontab(minute='5', hour='12'), + 'schedule': crontab(minute='0', hour='18'), }, 'notify_top_junior': { 'task': 'base.tasks.notify_top_junior', - 'schedule': crontab(minute='*/5',), + 'schedule': crontab(minute='0', hour='*/2'), }, }