Пример #1
0
 def test_list_active_questionnaires(self):
     questionnaires = Questionnaires()
     list_survey = self.server.list_surveys(self.session_key, None)
     self.server.release_session_key(self.session_key)
     list_active_survey = []
     for survey in list_survey:
         survey_has_token = questionnaires.survey_has_token_table(survey['sid'])
         if survey['active'] == "Y" and survey_has_token is True:
             list_active_survey.append(survey)
     self.assertEqual(questionnaires.find_all_active_questionnaires(), list_active_survey)
     questionnaires.release_session_key()
Пример #2
0
def survey_create(request, template_name="survey/survey_register.html"):
    survey_form = SurveyForm(request.POST or None,
                             initial={
                                 'title': 'title',
                                 'is_initial_evaluation': False
                             })

    surveys = Questionnaires()
    limesurvey_available = check_limesurvey_access(request, surveys)

    questionnaires_list = []

    if limesurvey_available:
        questionnaires_list = surveys.find_all_active_questionnaires()

    surveys.release_session_key()

    if questionnaires_list:
        # removing surveys already registered
        used_surveys = Survey.objects.all()
        for used_survey in used_surveys:
            for questionnaire in questionnaires_list:
                if used_survey.lime_survey_id == questionnaire['sid']:
                    questionnaires_list.remove(questionnaire)
                    break
    else:
        messages.warning(request, _('No questionnaire found.'))

    if request.method == "POST":
        if request.POST['action'] == "save":
            if survey_form.is_valid():

                survey_added = survey_form.save(commit=False)

                survey, created = Survey.objects.get_or_create(
                    lime_survey_id=request.POST['questionnaire_selected'],
                    is_initial_evaluation=survey_added.is_initial_evaluation)

                if created:
                    messages.success(request,
                                     _('Questionnaire created successfully.'))
                    redirect_url = reverse("survey_list")
                    return HttpResponseRedirect(redirect_url)

    context = {
        "survey_form": survey_form,
        "creating": True,
        "editing": True,
        "questionnaires_list": questionnaires_list,
        'limesurvey_available': limesurvey_available
    }

    return render(request, template_name, context)
Пример #3
0
 def test_list_active_questionnaires(self):
     questionnaires = Questionnaires()
     list_survey = self.server.list_surveys(self.session_key, None)
     self.server.release_session_key(self.session_key)
     list_active_survey = []
     for survey in list_survey:
         survey_has_token = questionnaires.survey_has_token_table(
             survey['sid'])
         if survey['active'] == "Y" and survey_has_token is True:
             list_active_survey.append(survey)
     self.assertEqual(questionnaires.find_all_active_questionnaires(),
                      list_active_survey)
     questionnaires.release_session_key()
Пример #4
0
def survey_create(request, template_name="survey/survey_register.html"):
    survey_form = SurveyForm(request.POST or None, initial={'title': 'title', 'is_initial_evaluation': False})
    surveys = Questionnaires()
    limesurvey_available = check_limesurvey_access(request, surveys)
    questionnaires_list = []

    if request.method == "POST":
        if request.POST['action'] == "save":
            if survey_form.is_valid():

                survey_added = survey_form.save(commit=False)

                survey, created = Survey.objects.get_or_create(
                    lime_survey_id=request.POST['questionnaire_selected'],
                    is_initial_evaluation=survey_added.is_initial_evaluation)

                surveys.release_session_key()

                if created:
                    messages.success(request, _('Questionnaire created successfully.'))
                    redirect_url = reverse("survey_list")

                    return HttpResponseRedirect(redirect_url)

    if limesurvey_available:
        questionnaires_list = surveys.find_all_active_questionnaires()

    if questionnaires_list:
        # removing surveys already registered
        used_surveys = Survey.objects.all()
        for used_survey in used_surveys:
            for questionnaire in questionnaires_list:
                if used_survey.lime_survey_id == questionnaire['sid']:
                    questionnaires_list.remove(questionnaire)
                    break
    else:
        messages.warning(request, _('No questionnaire found.'))

    surveys.release_session_key()

    context = {
        "survey_form": survey_form,
        "creating": True,
        "editing": True,
        "questionnaires_list": questionnaires_list,
        'limesurvey_available': limesurvey_available
    }

    return render(request, template_name, context)
Пример #5
0
    def test_delete_participant_to_a_survey(self):
        """
        Remove survey participant test
        testa a insercao de participante em um questionario
        """

        surveys = Questionnaires()
        list_active_surveys = surveys.find_all_active_questionnaires()

        self.assertNotEqual(list_active_surveys, None)

        survey = list_active_surveys[0]
        sid = int(survey['sid'])

        # list_participants = self.server.list_participants(self.session_key, sid)

        # participant_data = {'email': '*****@*****.**', 'lastname': 'junqueira', 'firstname': 'juca'}
        participant_data_result = surveys.add_participant(sid)

        # verificar se info retornada eh a mesma
        # self.assertEqual(participant_data_result[0]['email'], participant_data['email'])
        # self.assertEqual(participant_data_result[0]['lastname'], participant_data['lastname'])
        # self.assertEqual(participant_data_result[0]['firstname'], participant_data['firstname'])

        self.assertNotEqual(participant_data_result, None)

        # list_participants_new = self.server.list_participants(self.session_key, sid)

        # self.assertEqual(len(list_participants_new), len(list_participants) + 1)

        # token_id = participant_data_result[0]['tid']
        token_id = participant_data_result['tid']
        # tokens_to_delete = [token_id]

        # remover participante do questionario
        result = surveys.delete_participant(sid, token_id)

        self.assertEqual(result[str(token_id)], 'Deleted')

        surveys.release_session_key()
Пример #6
0
    def test_delete_participant_to_a_survey(self):
        """
        Remove survey participant test
        testa a insercao de participante em um questionario
        """

        surveys = Questionnaires()
        list_active_surveys = surveys.find_all_active_questionnaires()

        self.assertNotEqual(list_active_surveys, None)

        survey = list_active_surveys[0]
        sid = int(survey['sid'])

        # list_participants = self.server.list_participants(self.session_key, sid)

        # participant_data = {'email': '*****@*****.**', 'lastname': 'junqueira', 'firstname': 'juca'}
        participant_data_result = surveys.add_participant(sid)

        # verificar se info retornada eh a mesma
        # self.assertEqual(participant_data_result[0]['email'], participant_data['email'])
        # self.assertEqual(participant_data_result[0]['lastname'], participant_data['lastname'])
        # self.assertEqual(participant_data_result[0]['firstname'], participant_data['firstname'])

        self.assertNotEqual(participant_data_result, None)

        # list_participants_new = self.server.list_participants(self.session_key, sid)

        # self.assertEqual(len(list_participants_new), len(list_participants) + 1)

        # token_id = participant_data_result[0]['tid']
        token_id = participant_data_result['tid']
        # tokens_to_delete = [token_id]

        # remover participante do questionario
        result = surveys.delete_participant(sid, token_id)

        self.assertEqual(result[str(token_id)], 'Deleted')

        surveys.release_session_key()
Пример #7
0
def export_view(request, template_name="export/export_data.html"):
    export_form = ExportForm(request.POST or None, initial={'title': 'title',
                                                            'responses': ['short'], 'headings': 'code'})
    # , 'per_participant': False,
    #                                                         'per_questinnaire': False})
    # export_form.per_participant = False
    # export_form.per_questionnaire = True

    # context = {}

    # test with pagination
    # a = [{"b": "2", "c": "3"}, {"d": "7", "e": "8"}]
    # b = [1, 2, 3, 4, 5]
    # c = [7, 9, (4, 3, 2)]
    #
    # contact_list = [a, b, c]
    #
    # paginator = Paginator(contact_list, 1)  # Show 1 info per page
    #
    # page = request.GET.get('page')
    # try:
    #     contacts = paginator.page(page)
    # except PageNotAnInteger:
    #     # If page is not an integer, deliver first page.
    #     page = 1
    #     contacts = paginator.page(1)
    # except EmptyPage:
    #     # If page is out of range (e.g. 9999), deliver last page of results.
    #     page = paginator.num_pages
    #     contacts = paginator.page(paginator.num_pages)
    # page = 1
    #
    # if page == 1:

    selected_ev_quest = []
    selected_participant = []
    selected_diagnosis = []

    if request.method == "POST":

        questionnaires_selected_list = request.POST.getlist('to[]')

        questionnaires_list = []

        # fields = {}

        previous_questionnaire_id = 0
        output_list = []
        for questionnaire in questionnaires_selected_list:
            sid, title, field, header = questionnaire.split("*")

            sid = int(sid)    # transform to integer
            #
            # if sid not in fields:
            #     fields[sid] = []
            # fields[sid].append(field)

            if sid != previous_questionnaire_id:
                if previous_questionnaire_id != 0:
                    output_list = []

                questionnaires_list.append([sid, title, output_list])

                previous_questionnaire_id = sid

            output_list.append((field, header))

        # get participants list
        participant_selected_list = request.POST.getlist('patient_selected')

        participants_list = []

        for participant in participant_selected_list:
            participants_list.append(participant.split("*"))

        # get diagnosis list
        diagnosis_selected_list = request.POST.getlist('diagnosis_selected')

        diagnosis_list = []

        for diagnosis in diagnosis_selected_list:
            diagnosis_list.append(diagnosis.split("*"))

        selected_data_available = (len(questionnaires_selected_list) or
                                   len(participant_selected_list) or len(diagnosis_selected_list))

        if selected_data_available:

            if export_form.is_valid():
                print("valid data")

                per_participant = export_form.cleaned_data['per_participant']
                per_questionnaire = export_form.cleaned_data['per_questionnaire']

                heading_type = export_form.cleaned_data['headings']
                responses_type = export_form.cleaned_data['responses']

                questionnaires_list = update_questionnaire_list(questionnaires_list, heading_type,
                                                                request.LANGUAGE_CODE)

                # insert participation_code
                update_participants_list(participants_list, heading_type)
                update_diagnosis_list(diagnosis_list, heading_type)

                # output_filename =
                # "/Users/sueli/PycharmProjects/nes/patientregistrationsystem/qdc/export/json_export_output2.json"

                # MEDIA_ROOT/export/username_id/export_id

                # input_export_file = create_initial_directory(request.user)

                export_instance = create_export_instance(request.user)

                input_export_file = path.join(EXPORT_DIRECTORY,
                                              path.join(str(request.user.id),
                                                        path.join(str(export_instance.id), str(JSON_FILENAME))))

                # copy data to .../media/export/<user_id>/<export_id>/
                input_filename = path.join(settings.MEDIA_ROOT, input_export_file)
                create_directory(settings.MEDIA_ROOT, path.split(input_export_file)[0])

                build_complete_export_structure(per_participant, per_questionnaire,
                                                participants_list, diagnosis_list,
                                                questionnaires_list, responses_type, heading_type,
                                                input_filename, request.LANGUAGE_CODE)

                complete_filename = export_create(request, export_instance.id, input_filename)

                if complete_filename:

                    messages.success(request, _("Export was finished correctly"))

                    # return file to the user

                    # error_message = "a"
                    # return_response = complete_filename
                    #
                    # redirect_url = reverse("export_result", args=(return_response, error_message))
                    # return HttpResponseRedirect(redirect_url )

                    print("antes do fim: httpResponse")

                    zip_file = open(complete_filename, 'rb')
                    response = HttpResponse(zip_file, content_type='application/zip')
                    response['Content-Disposition'] = 'attachment; filename="export.zip"'
                    response['Content-Length'] = path.getsize(complete_filename)
                    return response
                else:
                    messages.error(request, _("Export data was not generated."))

            else:
                for questionnaire in questionnaires_list:
                    for field in questionnaire[2]:  # get output_list
                        selected_ev_quest.append((questionnaire[0], field[0]))

                for participant in participants_list:
                    selected_participant.append(participant[0])

                for diagnosis in diagnosis_list:
                    selected_diagnosis.append(diagnosis[0])
        else:
            messages.error(request, _("No data was select. Export data was not generated."))

    # else:
    # page 1 - list of questionnaires
    surveys = Questionnaires()
    limesurvey_available = check_limesurvey_access(request, surveys)

    questionnaires_list = []

    if limesurvey_available:
        questionnaires_list = surveys.find_all_active_questionnaires()

    surveys.release_session_key()

    questionnaires_list_final = []

    # removing surveys that are not entrance evaluation
    # entrance_evaluation_questionnaires = QuestionnaireResponse.objects.all()
    entrance_evaluation_questionnaire_ids_list = set(QuestionnaireResponse.objects.values_list('survey',
                                                                                               flat=True))

    # ev_questionnaire_ids_list = entrance_evaluation_questionnaires.values_list("survey")
    surveys_with_ev_list = Survey.objects.filter(id__in=entrance_evaluation_questionnaire_ids_list)

    for survey in surveys_with_ev_list:
        for questionnaire in questionnaires_list:
            if survey.lime_survey_id == questionnaire['sid']:
                questionnaires_list_final.append(questionnaire)
                break

    # page 2 fields

    # entrance evaluation questionnarie fields

    # if len(language_code) > 2:
    #     language_code = "{}-{}".format(language_code[:2],language_code[-2:].upper())

    questionnaires_fields_list = get_questionnaire_fields(questionnaires_list_final, request.LANGUAGE_CODE)

    if len(selected_ev_quest):
        questionnaire_ids, field_id = zip(*selected_ev_quest)
    else:
        questionnaire_ids = ()

    for questionnaire in questionnaires_fields_list:
        questionnaire["selected_counter"] = questionnaire_ids.count(questionnaire["sid"])
        for output_list in questionnaire["output_list"]:
            if (questionnaire["sid"], output_list["field"]) in selected_ev_quest:
                output_list["selected"] = True


    # for field in questionnaires_fields_list:
    #     for questionnaire in questionnaires_list_final:
    #         if field["sid"] == questionnaire['sid']:
    #             field["title"] = questionnaire["surveyls_title"]
    #             break

    context = {

        "limesurvey_available": limesurvey_available,
        "export_form": export_form,
        # "questionnaires_list": questionnaires_list_final,
        # "contacts": contacts,
        "patient_fields": patient_fields,
        "diagnosis_fields": diagnosis_fields,
        "questionnaires_fields_list": questionnaires_fields_list,
        "selected_ev_quest": selected_ev_quest,
        "selected_participant": selected_participant,
        "selected_diagnosis": selected_diagnosis,
    }

    # elif page == 2:

    return render(request, template_name, context)
Пример #8
0
def survey_create(request, template_name="survey/survey_register.html"):
    survey_form = SurveyForm(request.POST or None, initial={'title': 'title', 'is_initial_evaluation': False})

    surveys = Questionnaires()
    limesurvey_available = check_limesurvey_access(request, surveys)

    questionnaires_list = []

    if limesurvey_available:
        questionnaires_list = surveys.find_all_active_questionnaires()

    if questionnaires_list:
        # removing surveys already registered
        used_surveys = Survey.objects.all()
        for used_survey in used_surveys:
            for questionnaire in questionnaires_list:
                if used_survey.lime_survey_id == questionnaire['sid']:
                    questionnaires_list.remove(questionnaire)
                    break
    else:
        messages.warning(request, _('No questionnaire found.'))

    if request.method == "POST":
        if request.POST['action'] == "save":
            if survey_form.is_valid():

                survey_added = survey_form.save(commit=False)

                survey, created = Survey.objects.get_or_create(
                    lime_survey_id=request.POST['questionnaire_selected'],
                    is_initial_evaluation=survey_added.is_initial_evaluation)

                has_file_upload_question = is_type_of_question_in_survey(
                    surveys=surveys,
                    survey=survey,
                    type="|"
                )

                surveys.release_session_key()

                if created:
                    if has_file_upload_question:
                        messages.warning(request, _('NES can\'t retrieve files from \"file upload\" '
                                                    'questions from LimeSurvey.') + ' ' +
                                         _('See \"Best Pratices and Recommendations\" at '
                                           'https://nes.rtfd.io for more details.'))
                    messages.success(request, _('Questionnaire created successfully.'))
                    redirect_url = reverse("survey_list")
                    return HttpResponseRedirect(redirect_url)

    surveys.release_session_key()

    context = {
        "survey_form": survey_form,
        "creating": True,
        "editing": True,
        "questionnaires_list": questionnaires_list,
        'limesurvey_available': limesurvey_available
    }

    return render(request, template_name, context)