this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add time limit for questionnaire response errored status

+28 -3
+19
care/emr/api/viewsets/questionnaire_response.py
··· 1 + from datetime import timedelta 2 + 3 + from django.conf import settings 1 4 from django_filters import rest_framework as filters 2 5 from rest_framework.exceptions import PermissionDenied 3 6 ··· 6 9 from care.emr.models.questionnaire import QuestionnaireResponse 7 10 from care.emr.resources.questionnaire_response.spec import ( 8 11 QuestionnaireResponseReadSpec, 12 + QuestionnaireResponseStatusChoices, 9 13 QuestionnaireResponseUpdate, 10 14 ) 11 15 from care.security.authorization import AuthorizationController 12 16 from care.utils.shortcuts import get_object_or_404 17 + from care.utils.time_util import care_now 13 18 14 19 15 20 class QuestionnaireResponseFilters(filters.FilterSet): ··· 28 33 pydantic_update_model = QuestionnaireResponseUpdate 29 34 filterset_class = QuestionnaireResponseFilters 30 35 filter_backends = [filters.DjangoFilterBackend] 36 + 37 + def authorize_update(self, request_obj, model_instance): 38 + if ( 39 + model_instance.status 40 + == QuestionnaireResponseStatusChoices.entered_in_error.value 41 + ): 42 + raise PermissionDenied("Questionnaire Response cannot be edited") 43 + if self.request.user.is_superuser: 44 + return True 45 + if care_now() > model_instance.created_date + timedelta( 46 + minutes=settings.QUESTIONNAIRE_ERRORED_TIME_LIMIT_MINUTES 47 + ): 48 + raise PermissionDenied("Questionnaire Response cannot be edited") 49 + return super().authorize_update(request_obj, model_instance) 31 50 32 51 def get_queryset(self): 33 52 queryset = (
+5 -3
care/emr/resources/questionnaire_response/spec.py
··· 11 11 12 12 13 13 class QuestionnaireResponseStatusChoices(str, Enum): 14 - submitted = "completed" 14 + completed = "completed" 15 15 entered_in_error = "entered_in_error" 16 16 17 17 ··· 45 45 __model__ = QuestionnaireResponse 46 46 47 47 48 - class QuestionnaireResponseUpdate(EMRResource): 49 - status: QuestionnaireResponseStatusChoices = "completed" 48 + class QuestionnaireResponseUpdate(EMRQuestionnaireResponseBase): 49 + status: QuestionnaireResponseStatusChoices = ( 50 + QuestionnaireResponseStatusChoices.completed.value 51 + ) 50 52 51 53 52 54 class QuestionnaireResponseReadSpec(EMRQuestionnaireResponseBase):
+4
config/settings/config.py
··· 319 319 } 320 320 }, 321 321 ) 322 + 323 + QUESTIONNAIRE_ERRORED_TIME_LIMIT_MINUTES = env.int( 324 + "QUESTIONNAIRE_ERRORED_TIME_LIMIT_MINUTES", default=120 325 + )