Exemple #1
0
    def test_should_create_hidden_field_for_entity_id_question_code(self):
        form_model = self._get_form_model()
        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_text_field = questionnaire_form_class().fields['form_code']
        self.assertEqual(CharField, type(web_text_field))
        self.assertEqual(self.form_code, web_text_field.initial)
Exemple #2
0
    def test_should_create_django_phone_number_field(self):
        form_model = self._get_form_model()
        form_model.add_field(self._get_telephone_number_field())
        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()
        django_phone_number_field = questionnaire_form_class().fields['m']

        self.assertEqual(PhoneNumberField, type(django_phone_number_field))
Exemple #3
0
    def test_should_create_web_questionnaire_form_model_field(self):
        form_model = self._get_form_model()

        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_questionnaire = questionnaire_form_class()
        self.assertEqual(form_model, web_questionnaire.form_model)
Exemple #4
0
 def test_should_give_short_code_question_field_name_for_subject_registration_questionnaire(
         self):
     form_model = self._get_form_model(is_registration_form=True)
     subject_code = "subject_code"
     form_model.add_field(self._get_text_field(True, True, subject_code))
     questionnaire_form_class = WebQuestionnaireFormCreator(
         subject_question_creator=None, form_model=form_model).create()
     self.assertEqual(subject_code,
                      questionnaire_form_class().short_code_question_code)
Exemple #5
0
    def test_should_create_django_integer_number_field(self):
        form_model = self._get_form_model()
        form_model.add_field(self._get_integer_field())
        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()
        django_integer_field = questionnaire_form_class().fields['ag']

        self.assertEqual(django.forms.fields.FloatField,
                         type(django_integer_field))
        self.assertEqual(django_integer_field.max_value, 100)
        self.assertEqual(django_integer_field.min_value, 18)
Exemple #6
0
 def test_should_short_code_question_class_for_subject_registration_questionnaire(
         self):
     form_model = self._get_form_model(is_registration_form=True)
     subject_code = "subject_code"
     form_model.add_field(self._get_text_field(True, True, subject_code))
     questionnaire_form_class = WebQuestionnaireFormCreator(
         subject_question_creator=None, form_model=form_model).create()
     self.assertEqual(
         'subject_field',
         questionnaire_form_class().fields[subject_code].widget.
         attrs['class'])
Exemple #7
0
    def test_should_append_country_in_location_field(self):
        form_model = self._get_form_model()
        form_model.add_field(self._get_location_field())

        questionnaire_form_class = WebQuestionnaireFormCreator(
            subject_question_creator=None, form_model=form_model).create()
        post_data = {
            LOCATION_TYPE_FIELD_CODE: 'pune',
            'form_code': 'something'
        }

        web_form = questionnaire_form_class(country="India", data=post_data)
        web_form.is_valid()

        self.assertEqual("pune,India",
                         web_form.cleaned_data[LOCATION_TYPE_FIELD_CODE])
Exemple #8
0
    def test_should_create_web_questionnaire_for_char_field_for_french_language(
            self):
        form_model = self._get_form_model()
        is_required = True
        form_model.activeLanguages = [FRENCH_LANGUAGE]
        form_model.add_field(self._get_text_field(is_required, False))

        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_text_field = questionnaire_form_class().fields[
            self.text_field_code]
        self.assertEqual(CharField, type(web_text_field))
        self.assertEqual(self.field_name, web_text_field.label)
        self.assertEqual(web_text_field.max_length, 20)
        self.assertEqual(web_text_field.min_length, 1)
Exemple #9
0
    def test_should_create_web_questionnaire_for_location_field(self):
        form_model = self._get_form_model()
        form_model.add_field(self._get_location_field())

        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_location_field = questionnaire_form_class(
        ).fields[LOCATION_TYPE_FIELD_CODE]
        self.assertEqual(CharField, type(web_location_field))
        self.assertTrue(
            web_location_field.widget.attrs['watermark'] is not None)
        self.assertEqual('padding-top: 7px;',
                         web_location_field.widget.attrs['style'])
        self.assertEqual('location_field',
                         web_location_field.widget.attrs['class'])
Exemple #10
0
    def test_should_create_web_questionnaire_for_char_field(self):
        form_model = self._get_form_model()
        is_required = True
        form_model.add_field(self._get_text_field(is_required, False))

        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_text_field = questionnaire_form_class().fields[
            self.text_field_code]
        self.assertEqual(CharField, type(web_text_field))
        self.assertEqual(self.field_name, web_text_field.label)
        self.assertEqual(self.instruction, web_text_field.help_text)
        self.assertEqual(is_required, web_text_field.required)
        self.assertTrue(web_text_field.widget.attrs['watermark'] is not None)
        self.assertEqual('padding-top: 7px;',
                         web_text_field.widget.attrs['style'])
Exemple #11
0
    def test_should_create_regex_field_for_short_code_question_if_registration(
            self):
        form_model = self._get_form_model(True)

        is_required = True
        form_model.add_field(self._get_text_field(is_required, False))
        with patch.object(WebQuestionnaireFormCreator,
                          '_get_short_code_question_code'
                          ) as get_short_code_qestion_code:
            get_short_code_qestion_code.return_value = {
                u'short_code_question_code': self.text_field_code
            }
            questionnaire_form_class = WebQuestionnaireFormCreator(
                None, form_model=form_model).create()

            web_text_field = questionnaire_form_class().fields[
                self.text_field_code]
            self.assertEqual(RegexField, type(web_text_field))
Exemple #12
0
    def test_should_create_web_questionnaire_for_multiple_choice_select_field(
            self):
        form_model = self._get_form_model()
        is_required = False

        expected_choices, text_field = self._get_select_field(
            is_required, False)
        form_model.add_field(text_field)

        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_text_field = questionnaire_form_class().fields[
            self.select_field_code]
        self.assertEqual(MultipleChoiceField, type(web_text_field))
        self.assertEqual(self.field_name, web_text_field.label)
        self.assertEqual(is_required, web_text_field.required)
        self.assertEqual(expected_choices, web_text_field.choices)
Exemple #13
0
    def test_should_create_web_questionnaire_for_single_choice_select_field(
            self):
        form_model = self._get_form_model()
        is_required = False

        expected_choices, text_field = self._get_select_field(
            is_required, single_select_flag=True)
        form_model.add_field(text_field)
        expected_choices = [('', '--None--'), ("a", "Red"), ("b", "Green"),
                            ("c", "Blue")]
        questionnaire_form_class = WebQuestionnaireFormCreator(
            None, form_model=form_model).create()

        web_text_field = questionnaire_form_class().fields[
            self.select_field_code]
        self.assertEqual(ChoiceField, type(web_text_field))
        self.assertEqual(self.field_name, web_text_field.label)
        self.assertEqual(is_required, web_text_field.required)
        self.assertEqual(expected_choices, web_text_field.choices)
Exemple #14
0
def get_web_preview_context(manager, post, project_info):
    form_model = get_questionnaire_form_model(manager, project_info, post)
    project = Project(name=unicode(project_info['name']),
                      goals=unicode(project_info['goals']),
                      project_type='survey',
                      entity_type=unicode(project_info['entity_type']),
                      activity_report=unicode(project_info['activity_report']),
                      state=post['project_state'],
                      devices=[u'sms', u'web', u'smartPhone'],
                      language=unicode(project_info['language']))

    QuestionnaireForm = WebQuestionnaireFormCreator(
        SubjectQuestionFieldCreator(manager,
                                    project), form_model=form_model).create()
    questionnaire_form = QuestionnaireForm()
    return {
        'project': project_info,
        'questionnaire_form': questionnaire_form,
        'add_link': add_link_context(project),
    }
Exemple #15
0
    def test_should_create_web_questionnaire(self):
        form_model = self._get_form_model()
        subject_code = "subject_code"
        subject_question_code = 'subject_question_code'
        field1 = self._get_text_field(True, True, subject_code)
        form_model.add_field(field1)
        field2 = self._get_text_field(False, False)
        form_model.add_field(field2)
        field3 = self._get_select_field(False, False, 'test 2')[1]
        form_model.add_field(field3)
        subject_question_creator_mock = Mock(spec=SubjectQuestionFieldCreator)
        subject_question_creator_mock.create.return_value = ChoiceField()
        subject_question_creator_mock.create_code_hidden_field.return_value = {
            subject_question_code: CharField()
        }

        questionnaire_form_class = WebQuestionnaireFormCreator(
            subject_question_creator=subject_question_creator_mock,
            form_model=form_model).create()

        web_form = questionnaire_form_class()
        self.assertEqual(5, len(web_form.fields))

        form_code_hidden_field = web_form.fields[self.form_code]
        self.assertEqual(CharField, type(form_code_hidden_field))

        subject_field = web_form.fields[subject_code]
        self.assertEqual(ChoiceField, type(subject_field))

        subject_field = web_form.fields[subject_question_code]
        self.assertEqual(CharField, type(subject_field))

        simple_text_field = web_form.fields[self.text_field_code]
        self.assertEqual(CharField, type(simple_text_field))

        multiple_choice_field = web_form.fields[self.select_field_code]
        self.assertEqual(MultipleChoiceField, type(multiple_choice_field))
Exemple #16
0
def edit_subject(request, entity_type, entity_id, project_id=None):
    manager = get_database_manager(request.user)
    form_model = get_form_model_by_entity_type(manager, [entity_type.lower()])
    subject = get_by_short_code(manager, entity_id, [entity_type.lower()])
    if project_id is not None:
        back_link = '/project/registered_subjects/%s/' % project_id
    else:
        back_link = reverse(all_subjects)

    for field in form_model.fields:
        if field.name == LOCATION_TYPE_FIELD_NAME:
            field.value = ','.join(subject.location_path)
        elif field.name == GEO_CODE_FIELD_NAME:
            field.value = ','.join(map(str, subject.geometry['coordinates']))
        elif field.name == SHORT_CODE_FIELD:
            field.value = subject.short_code
        else:
            field.value = subject.data[
                field.name]['value'] if field.name in subject.data.keys(
                ) else None
        field.value = field._to_str()

    QuestionnaireForm = WebQuestionnaireFormCreator(
        None, form_model=form_model).create()
    web_questionnaire_template = get_template(request.user)
    disable_link_class, hide_link_class = get_visibility_settings_for(
        request.user)
    if request.method == 'GET':
        questionnaire_form = QuestionnaireForm()
        form_context = _make_form_context(questionnaire_form, entity_type,
                                          disable_link_class, hide_link_class,
                                          True, back_link)
        return render_to_response(web_questionnaire_template,
                                  form_context,
                                  context_instance=RequestContext(request))
    if request.method == 'POST':
        post_data = QueryDict(request.raw_post_data, mutable=True)
        post_data[
            QuestionnaireForm.short_code_question_code] = subject.short_code
        questionnaire_form = QuestionnaireForm(
            country=get_organization_country(request), data=post_data)
        if not questionnaire_form.is_valid():
            form_context = _make_form_context(questionnaire_form, entity_type,
                                              disable_link_class,
                                              hide_link_class, True, back_link)
            return render_to_response(web_questionnaire_template,
                                      form_context,
                                      context_instance=RequestContext(request))

        success_message = None
        error_message = None
        try:
            from datawinners.project.helper import create_request

            response = WebPlayer(
                manager,
                LocationBridge(
                    location_tree=get_location_tree(),
                    get_loc_hierarchy=get_location_hierarchy)).accept(
                        create_request(questionnaire_form,
                                       request.user.username,
                                       is_update=True))

            if response.success:
                success_message = _("Your changes have been saved.")
                questionnaire_form = QuestionnaireForm(
                    country=get_organization_country(request), data=post_data)
            else:
                from datawinners.project.helper import errors_to_list

                questionnaire_form._errors = errors_to_list(
                    response.errors, form_model.fields)
                form_context = _make_form_context(questionnaire_form,
                                                  entity_type,
                                                  disable_link_class,
                                                  hide_link_class, True,
                                                  back_link)
                return render_to_response(
                    web_questionnaire_template,
                    form_context,
                    context_instance=RequestContext(request))

        except DataObjectNotFound:
            message = exception_messages.get(DataObjectNotFound).get(WEB)
            error_message = _(message) % (form_model.entity_type[0],
                                          form_model.entity_type[0])
        except Exception as exception:
            error_message = _(
                get_exception_message_for(exception=exception,
                                          channel=Channel.WEB))

        subject_context = _make_form_context(questionnaire_form, entity_type,
                                             disable_link_class,
                                             hide_link_class, True, back_link)
        subject_context.update({
            'success_message': success_message,
            'error_message': error_message
        })

        return render_to_response(web_questionnaire_template,
                                  subject_context,
                                  context_instance=RequestContext(request))
Exemple #17
0
def create_subject(request, entity_type=None):
    manager = get_database_manager(request.user)
    form_model = get_form_model_by_entity_type(manager, [entity_type.lower()])

    QuestionnaireForm = WebQuestionnaireFormCreator(
        None, form_model=form_model).create()

    web_questionnaire_template = get_template(request.user)
    disable_link_class, hide_link_class = get_visibility_settings_for(
        request.user)

    if request.method == 'GET':
        questionnaire_form = QuestionnaireForm()
        form_context = _make_form_context(questionnaire_form, entity_type,
                                          disable_link_class, hide_link_class)
        return render_to_response(web_questionnaire_template,
                                  form_context,
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        questionnaire_form = QuestionnaireForm(
            country=get_organization_country(request), data=request.POST)
        if not questionnaire_form.is_valid():
            form_context = _make_form_context(questionnaire_form, entity_type,
                                              disable_link_class,
                                              hide_link_class)
            return render_to_response(web_questionnaire_template,
                                      form_context,
                                      context_instance=RequestContext(request))

        success_message = None
        error_message = None
        try:
            from datawinners.project.helper import create_request

            response = WebPlayer(
                manager,
                LocationBridge(
                    location_tree=get_location_tree(),
                    get_loc_hierarchy=get_location_hierarchy)).accept(
                        create_request(questionnaire_form,
                                       request.user.username),
                        logger=websubmission_logger)
            if response.success:
                ReportRouter().route(
                    get_organization(request).org_id, response)
                success_message = (_(
                    "Successfully submitted. Unique identification number(ID) is:"
                ) + " %s") % (response.short_code, )
                detail_dict = dict({
                    "Subject Type": entity_type.capitalize(),
                    "Unique ID": response.short_code
                })
                UserActivityLog().log(request,
                                      action=REGISTERED_SUBJECT,
                                      detail=json.dumps(detail_dict))
                questionnaire_form = QuestionnaireForm()
            else:
                from datawinners.project.helper import errors_to_list

                questionnaire_form._errors = errors_to_list(
                    response.errors, form_model.fields)
                form_context = _make_form_context(questionnaire_form,
                                                  entity_type,
                                                  disable_link_class,
                                                  hide_link_class)
                return render_to_response(
                    web_questionnaire_template,
                    form_context,
                    context_instance=RequestContext(request))

        except DataObjectNotFound:
            message = exception_messages.get(DataObjectNotFound).get(WEB)
            error_message = _(message) % (form_model.entity_type[0],
                                          form_model.entity_type[0])
        except DataObjectAlreadyExists as exception:
            error_message = _(
                "Entity with Unique Identification Number (ID) = %s already exists."
            ) % exception.data[1]
        except Exception as exception:
            error_message = _(
                get_exception_message_for(exception=exception,
                                          channel=Channel.WEB))

        subject_context = _make_form_context(questionnaire_form, entity_type,
                                             disable_link_class,
                                             hide_link_class)
        subject_context.update({
            'success_message': success_message,
            'error_message': error_message
        })

        return render_to_response(web_questionnaire_template,
                                  subject_context,
                                  context_instance=RequestContext(request))