Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CM-206 Create BenefitPlan Update Task Contribution BE #8

Merged
merged 2 commits into from
Jul 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions tasks_management/gql_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,10 @@ def _convert_to_serializable_json(entity):


def is_task_triage(user):
required_permissions = (
TasksManagementConfig.gql_task_group_create_perms +
TasksManagementConfig.gql_task_group_search_perms +
TasksManagementConfig.gql_task_group_update_perms +
TasksManagementConfig.gql_task_group_delete_perms
)
return all(user.has_perms(perm) for perm in required_permissions)
return user.has_perms(TasksManagementConfig.gql_task_group_create_perms
+ TasksManagementConfig.gql_task_group_search_perms
+ TasksManagementConfig.gql_task_group_update_perms
+ TasksManagementConfig.gql_task_group_delete_perms)


class TaskGQLType(DjangoObjectType):
Expand Down Expand Up @@ -82,8 +79,8 @@ def resolve_current_entity_data(self, info):
def get_queryset(cls, queryset, info):
user = info.context.user
if user.is_imis_admin or is_task_triage(user):
return Task.objects.filter(is_deleted=False)
return Task.objects.filter(
return queryset.filter(is_deleted=False)
return queryset.filter(
Q(task_group__taskexecutor__user=user) & ~Q(status=Task.Status.RECEIVED),
is_deleted=False
)
Expand Down
4 changes: 2 additions & 2 deletions tasks_management/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def complete_task(self, obj_data):
obj = self.OBJECT_TYPE.objects.get(id=obj_data['id'])
obj.status = Task.Status.FAILED if obj_data.get('failed', False) else Task.Status.COMPLETED
obj.save(username=self.user.login_name)
return output_result_success({'task': model_representation(obj)})
return output_result_success({'task': model_representation(obj), 'user': model_representation(self.user)})
except Exception as exc:
return output_exception(model_name=self.OBJECT_TYPE.__name__, method="complete", exception=exc)

Expand All @@ -60,7 +60,7 @@ def resolve_task(self, obj_data):
obj = self.OBJECT_TYPE.objects.get(id=obj_data['id'])
incoming_status = obj_data.get('business_status')
self._update_task_business_status(obj, incoming_status)
return output_result_success({'task': model_representation(obj)})
return output_result_success({'task': model_representation(obj), 'user': model_representation(self.user)})
except Exception as exc:
return output_exception(model_name=self.OBJECT_TYPE.__name__, method="resolve", exception=exc)

Expand Down
67 changes: 1 addition & 66 deletions tasks_management/signals.py
Original file line number Diff line number Diff line change
@@ -1,67 +1,2 @@
from typing import Dict

from core.service_signals import ServiceSignalBindType
from core.signals import bind_service_signal
from tasks_management.models import TaskGroup, Task
from tasks_management.utils import APPROVED


def resolve_task_any(task, business_status: Dict[str, str]):
return any(status == "APPROVED" for status in business_status.values())


def resolve_task_all(task, business_status: Dict[str, str]):
approve_count = sum(1 for status in business_status.values() if status == APPROVED)
group_members = TaskGroup.objects.get(task=task).taskexecutor_set.count()

return approve_count == group_members


def resolve_task_n(task, business_status: Dict[str, str]):
approve_count = sum(1 for status in business_status.values() if status == APPROVED)
n = 1 # hardcoded for now

return approve_count >= n


def executor_action_event_handler(**kwargs):
class_instance = kwargs.get("cls_")
data = kwargs.get("result").get("data")
task = Task.objects.get(id=data["task"]["id"])

executor_action_event = task.executor_action_event
business_status = task.business_status

func = {
"approve_all": resolve_task_all,
"approve_any": resolve_task_any,
"approve_n": resolve_task_n
}.get(executor_action_event, None)

if func:
if func(task, business_status):
class_instance.complete_task({"id": task.id})


def business_event_handler(**kwargs):
data = kwargs.get("result").get("data")
business_event = data["task"]["business_event"]
data = data["task"]["data"]

func = {}.get(business_event, None)

if func:
func(data)


def bind_service_signals():
bind_service_signal(
"task_service.resolve_task",
executor_action_event_handler,
bind_type=ServiceSignalBindType.AFTER
)
bind_service_signal(
"task_service.complete_task",
business_event_handler,
bind_type=ServiceSignalBindType.AFTER
)
pass
4 changes: 4 additions & 0 deletions tasks_management/tests/task_service_tests.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import copy
from unittest import skip

from django.test import TestCase

Expand Down Expand Up @@ -113,6 +114,7 @@ def test_fail_task(self):
self.assertTrue(result['success'])
self.assertEqual(Task.objects.filter(id=obj_id).first().status, Task.Status.FAILED)

@skip('To be redeveloped')
def test_resolve_task_any(self):
create_payload = {
**task_payload_resolve_any,
Expand All @@ -132,6 +134,7 @@ def test_resolve_task_any(self):
self.assertTrue(result['success'])
self.assertEqual(Task.objects.filter(id=obj_id).first().status, Task.Status.COMPLETED)

@skip('To be redeveloped')
def test_resolve_task_all(self):
create_payload = {
**task_payload_resolve_all,
Expand All @@ -152,6 +155,7 @@ def test_resolve_task_all(self):
self.assertTrue(result['success'])
self.assertEqual(Task.objects.filter(id=obj_id).first().status, Task.Status.COMPLETED)

@skip('To be redeveloped')
def test_resolve_task_n(self):
create_payload = {
**task_payload_resolve_n,
Expand Down