Exemplo n.º 1
0
 def _initialize(self, project_id):
     self.manager = get_database_manager(self.request.user)
     self.project = Project.load(self.manager.database, project_id)
     self.is_data_sender = self.request.user.get_profile().reporter
     self.disable_link_class, self.hide_link_class = get_visibility_settings_for(self.request.user)
     self.form_code = _get_form_code(self.manager, self.project)
     self.form_model = _get_subject_form_model(self.manager, self.project.entity_type)
     self.subject_registration_code = get_form_code_by_entity_type(self.manager, [self.project.entity_type])
Exemplo n.º 2
0
 def __init__(self, request, project_id=None):
     self.request = request
     self.manager = get_database_manager(self.request.user)
     self.questionnaire = Project.get(self.manager, project_id)
     self.form_code = self.questionnaire.form_code
     self.feeds_dbm = get_feeds_database(request.user)
     self.is_data_sender = self.request.user.get_profile().reporter
     self.disable_link_class, self.hide_link_class = get_visibility_settings_for(
         self.request.user)
Exemplo n.º 3
0
 def __init__(self, request, project_id=None):
     self.request = request
     self.manager = get_database_manager(self.request.user)
     self.project = Project.load(self.manager.database, project_id)
     self.form_model = FormModel.get(self.manager, self.project.qid)
     self.form_code = self.form_model.form_code
     self.feeds_dbm = get_feeds_database(request.user)
     self.subject_field_creator = SubjectQuestionFieldCreator(self.manager, self.project)
     self.is_data_sender = self.request.user.get_profile().reporter
     self.disable_link_class, self.hide_link_class = get_visibility_settings_for(self.request.user)
Exemplo n.º 4
0
 def _initialize(self, project_id, entity_type=None):
     self.manager = get_database_manager(self.request.user)
     self.questionnaire = Project.get(self.manager, project_id)
     if self.questionnaire.is_void():
         return HttpResponseRedirect(settings.HOME_PAGE + "?deleted=true")
     self.is_data_sender = self.request.user.get_profile().reporter
     self.disable_link_class, self.hide_link_class = get_visibility_settings_for(
         self.request.user)
     #self.form_code = self.questionnaire.form_code
     self.entity_type = entity_type
     self.form_model = _get_subject_form_model(self.manager, entity_type)
     self.subject_registration_code = get_form_code_by_entity_type(
         self.manager, [entity_type])
Exemplo n.º 5
0
def smart_phone_instruction(request):
    language_code = request.LANGUAGE_CODE
    instruction_template = "alldata/smart_phone_instruction_" + language_code + ".html"

    disable_link_class, hide_link_class = get_visibility_settings_for(request.user)

    context = {'back_to_project_link': reverse("alldata_index"),
               "instruction_template": instruction_template,
               "disable_link_class": disable_link_class,
               "hide_link_class": hide_link_class}

    return render_to_response("alldata/smart_phone_instruction.html", context,
                              context_instance=RequestContext(request))
Exemplo n.º 6
0
def smart_phone_instruction(request, project_id=None):
    language_code = request.LANGUAGE_CODE
    instruction_template = "alldata/smart_phone_instruction_" + language_code + ".html"

    disable_link_class, hide_link_class = get_visibility_settings_for(request.user)
    project_links={}
    if project_id:
        project_links['test_questionnaire_link'] = reverse("web_questionnaire", args=[project_id])
    context = {'back_to_project_link': reverse("alldata_index"),
               'project_links': project_links,
               "instruction_template": instruction_template,
               "disable_link_class": disable_link_class,
               "hide_link_class": hide_link_class}

    return render_to_response("alldata/smart_phone_instruction.html", context,
                              context_instance=RequestContext(request))
Exemplo n.º 7
0
 def test_should_return_enabled_and_display_for_other(self):
     user = self._get_normal_user()
     disabled, hide = helper.get_visibility_settings_for(user)
     assert hide  == ""
     assert disabled == ""
Exemplo n.º 8
0
 def test_should_return_disabled_and_display_none_for_reporter(self):
     user = self._get_reporter_user()
     disabled, hide = helper.get_visibility_settings_for(user)
     assert disabled  == 'disable_link_for_reporter'
     assert hide == 'none'
Exemplo n.º 9
0
def edit(request, project_id, survey_response_id, tab=0):
    manager = get_database_manager(request.user)
    questionnaire_form_model = Project.get(manager, project_id)
    dashboard_page = settings.HOME_PAGE + "?deleted=true"
    reporter_id = NGOUserProfile.objects.get(user=request.user).reporter_id
    is_linked = reporter_id in questionnaire_form_model.data_senders
    reporter_name = NGOUserProfile.objects.get(
        user=request.user).user.first_name
    if questionnaire_form_model.is_void():
        return HttpResponseRedirect(dashboard_page)

    disable_link_class, hide_link_class = get_visibility_settings_for(
        request.user)
    survey_response = get_survey_response_by_id(manager, survey_response_id)
    back_link = reverse(index,
                        kwargs={
                            "project_id": project_id,
                            "questionnaire_code":
                            questionnaire_form_model.form_code,
                            "tab": tab
                        })
    form_ui_model = build_static_info_context(
        manager,
        survey_response,
        questionnaire_form_model=questionnaire_form_model,
        reporter_id=reporter_id)
    form_ui_model.update({
        "back_link":
        back_link,
        'is_datasender':
        is_data_sender(request),
        'hide_change':
        questionnaire_form_model.is_poll
        and questionnaire_form_model.is_open_survey
    })
    data_sender = get_data_sender(manager, survey_response)
    short_code = data_sender[1]
    enable_datasender_edit = True if survey_response.owner_uid else False
    if request.method == 'GET':
        form_initial_values = construct_request_dict(survey_response,
                                                     questionnaire_form_model,
                                                     short_code)
        survey_response_form = SurveyResponseForm(
            questionnaire_form_model,
            form_initial_values,
            datasender_name=data_sender[0],
            reporter_id=reporter_id,
            reporter_name=reporter_name,
            enable_datasender_edit=enable_datasender_edit)

        form_ui_model.update(
            get_form_context(questionnaire_form_model, survey_response_form,
                             manager, hide_link_class, disable_link_class))
        form_ui_model.update({
            "redirect_url": "",
            "reporter_id": reporter_id,
            "is_linked": is_linked,
            "is_pro_sms": get_organization(request).is_pro_sms,
            "reporter_name": reporter_name
        })

        if not survey_response_form.is_valid(
        ) or form_ui_model['datasender_error_message']:
            error_message = _("Please check your answers below for errors.")
            form_ui_model.update({
                'error_message': error_message,
                "reporter_id": reporter_id,
                "is_linked": is_linked,
                "reporter_name": reporter_name
            })
        return render_to_response("project/web_questionnaire.html",
                                  form_ui_model,
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        send_to_carbon(create_path('submissions.web.simple'), 1)
        original_survey_response = survey_response.copy()
        is_errored_before_edit = True if survey_response.errors != '' else False
        submitted_values = request.POST
        owner_id = submitted_values.get("dsid")
        form_ui_model.update({
            "redirect_url":
            submitted_values.get("redirect_url"),
            'is_datasender':
            is_data_sender(request),
            "is_pro_sms":
            get_organization(request).is_pro_sms
        })
        form_ui_model.update(
            {"click_after_reload": submitted_values.get("click_after_reload")})
        if submitted_values.get("discard"):
            survey_response_form = SurveyResponseForm(questionnaire_form_model,
                                                      survey_response.values)

            form_ui_model.update(
                get_form_context(questionnaire_form_model,
                                 survey_response_form, manager,
                                 hide_link_class, disable_link_class))
            form_ui_model.update({
                "reporter_id": reporter_id,
                "is_linked": is_linked,
                "reporter_name": reporter_name
            })
            return render_to_response("project/web_questionnaire.html",
                                      form_ui_model,
                                      context_instance=RequestContext(request))
        else:
            form_initial_values = construct_request_dict(
                survey_response, questionnaire_form_model, short_code)
            if not owner_id:
                submitted_values = submitted_values.copy()
                submitted_values['dsid'] = form_initial_values['dsid']

            survey_response_form = SurveyResponseForm(
                questionnaire_form_model,
                submitted_values,
                initial=form_initial_values,
                enable_datasender_edit=enable_datasender_edit)

        form_ui_model.update(
            get_form_context(questionnaire_form_model, survey_response_form,
                             manager, hide_link_class, disable_link_class))
        form_ui_model.update({
            "reporter_id": reporter_id,
            "is_linked": is_linked
        })
        if not survey_response_form.is_valid():
            error_message = _("Please check your answers below for errors.")
            form_ui_model.update({
                'error_message': error_message,
                "reporter_id": reporter_id,
                "is_linked": is_linked
            })
            return render_to_response("project/web_questionnaire.html",
                                      form_ui_model,
                                      context_instance=RequestContext(request))

        success_message = _("Your changes have been saved.")
        form_ui_model.update({
            'success_message': success_message,
            "reporter_id": reporter_id,
            "is_linked": is_linked,
            "reporter_name": reporter_name
        })
        # if len(survey_response_form.changed_data) or is_errored_before_edit:
        created_request = helper.create_request(survey_response_form,
                                                request.user.username)

        additional_feed_dictionary = get_project_details_dict_for_feed(
            questionnaire_form_model)
        user_profile = NGOUserProfile.objects.get(user=request.user)
        feeds_dbm = get_feeds_database(request.user)
        response = WebPlayerV2(manager, feeds_dbm, user_profile.reporter_id) \
            .edit_survey_response(created_request, survey_response, owner_id,
                                  additional_feed_dictionary, websubmission_logger)
        mail_feed_errors(response, manager.database_name)
        if response.success:
            build_static_info_context(manager, survey_response, form_ui_model,
                                      questionnaire_form_model, reporter_id)
            ReportRouter().route(get_organization(request).org_id, response)
            _update_static_info_block_status(form_ui_model,
                                             is_errored_before_edit)
            log_edit_action(original_survey_response, survey_response, request,
                            questionnaire_form_model.name,
                            questionnaire_form_model)
            if submitted_values.get("redirect_url"):
                return HttpResponseRedirect(
                    submitted_values.get("redirect_url"))
        else:
            del form_ui_model["success_message"]
            survey_response_form._errors = helper.errors_to_list(
                response.errors, questionnaire_form_model.fields)
            form_ui_model.update({
                "reporter_id": reporter_id,
                "is_linked": is_linked,
                "reporter_name": reporter_name
            })
        return render_to_response("project/web_questionnaire.html",
                                  form_ui_model,
                                  context_instance=RequestContext(request))
Exemplo n.º 10
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()])
    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 = SubjectRegistrationForm(form_model)

        form_context = _make_form_context(
            questionnaire_form,
            entity_type,
            disable_link_class,
            hide_link_class,
            form_model.form_code,
            get_organization_telephone_number(request),
            form_model.fields,
            web_view=request.GET.get("web_view", False))
        form_context.update(
            {'is_pro_sms': get_organization(request).is_pro_sms})

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

    if request.method == 'POST':
        questionnaire_form = SubjectRegistrationForm(
            form_model,
            data=request.POST,
            country=get_organization_country(request))
        if not questionnaire_form.is_valid():
            form_context = _make_form_context(
                questionnaire_form,
                entity_type,
                disable_link_class,
                hide_link_class,
                form_model.form_code,
                get_organization_telephone_number(request),
                form_model.fields,
                web_view=True)
            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 = _(
                    "%s with Identification Number %s successfully registered."
                ) % (entity_type.capitalize(), response.short_code)

                detail_dict = dict({
                    "Subject Type": entity_type.capitalize(),
                    "Unique ID": response.short_code
                })
                UserActivityLog().log(request,
                                      action=REGISTERED_IDENTIFICATION_NUMBER,
                                      detail=json.dumps(detail_dict))
                questionnaire_form = SubjectRegistrationForm(form_model)
            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,
                    form_model.form_code,
                    get_organization_telephone_number(request),
                    form_model.fields,
                    web_view=True)
                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 = _(
                "%s with ID Number '%s' already exists or has previously collected data."
            ) % (exception.data[2], 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,
            form_model.form_code,
            get_organization_telephone_number(request),
            form_model.fields,
            web_view=True)
        subject_context.update({
            'success_message': success_message,
            'error_message': error_message
        })

        return render_to_response(web_questionnaire_template,
                                  subject_context,
                                  context_instance=RequestContext(request))
Exemplo n.º 11
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()])
    back_link = reverse(all_subjects, args=[entity_type])

    web_questionnaire_template = get_template(request.user)
    disable_link_class, hide_link_class = get_visibility_settings_for(
        request.user)
    if request.method == 'GET':
        initialize_values(form_model, subject)
        questionnaire_form = SubjectRegistrationForm(form_model)
        form_context = _make_form_context(
            questionnaire_form,
            entity_type,
            disable_link_class,
            hide_link_class,
            form_model.form_code,
            get_organization_telephone_number(request),
            form_model.fields,
            is_update=True,
            back_link=back_link)
        form_context.update(
            {'is_pro_sms': get_organization(request).is_pro_sms})
        return render_to_response(web_questionnaire_template,
                                  form_context,
                                  context_instance=RequestContext(request))
    if request.method == 'POST':
        questionnaire_form = SubjectRegistrationForm(
            form_model,
            data=request.POST,
            country=get_organization_country(request))
        if not questionnaire_form.is_valid():
            form_context = _make_form_context(
                questionnaire_form,
                entity_type,
                disable_link_class,
                hide_link_class,
                form_model.form_code,
                get_organization_telephone_number(request),
                form_model.fields,
                is_update=True,
                back_link=back_link)
            return render_to_response(web_questionnaire_template,
                                      form_context,
                                      context_instance=RequestContext(request))

        success_message = None
        error_message = None
        try:
            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:
                #assumption q6 - unique_id code and q2 - lastname codes cannot be changed
                update_submission_search_for_subject_edition(
                    manager, [entity_type], response.processed_data)
                success_message = _("Your changes have been saved.")
                questionnaire_form = SubjectRegistrationForm(
                    form_model,
                    data=request.POST,
                    country=get_organization_country(request))
            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,
                    form_model.form_code,
                    get_organization_telephone_number(request),
                    form_model.fields,
                    is_update=True,
                    back_link=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,
            form_model.form_code,
            get_organization_telephone_number(request),
            form_model.fields,
            is_update=True,
            back_link=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))
Exemplo n.º 12
0
def projects_index(request):
    disable_link_class, hide_link_class = get_visibility_settings_for(request.user)
    page_heading = get_page_heading(request.user)

    return disable_link_class, hide_link_class, page_heading
Exemplo n.º 13
0
 def test_should_return_enabled_and_display_for_other(self):
     user = get_project_manager()
     disabled, hide = helper.get_visibility_settings_for(user)
     assert hide == ""
     assert disabled == ""
def edit(request, project_id, survey_response_id, tab=0):
    manager = get_database_manager(request.user)
    project = Project.load(manager.database, project_id)
    questionnaire_form_model = FormModel.get(manager, project.qid)

    disable_link_class, hide_link_class = get_visibility_settings_for(
        request.user)
    survey_response = get_survey_response_by_id(manager, survey_response_id)
    back_link = reverse(index,
                        kwargs={
                            "project_id": project_id,
                            "questionnaire_code":
                            questionnaire_form_model.form_code,
                            "tab": tab
                        })
    form_ui_model = build_static_info_context(manager, survey_response)
    form_ui_model.update({"back_link": back_link})
    if request.method == 'GET':
        form_initial_values = construct_request_dict(survey_response,
                                                     questionnaire_form_model)
        survey_response_form = EditSubmissionForm(manager, project,
                                                  questionnaire_form_model,
                                                  form_initial_values)

        form_ui_model.update(
            get_form_context(questionnaire_form_model.form_code, project,
                             survey_response_form, manager, hide_link_class,
                             disable_link_class))
        form_ui_model.update({"redirect_url": ""})

        if not survey_response_form.is_valid():
            error_message = _("Please check your answers below for errors.")
            form_ui_model.update({'error_message': error_message})
        return render_to_response("project/web_questionnaire.html",
                                  form_ui_model,
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        original_survey_response = survey_response.copy()
        is_errored_before_edit = True if survey_response.errors != '' else False
        form_ui_model.update(
            {"redirect_url": request.POST.get("redirect_url")})
        form_ui_model.update(
            {"click_after_reload": request.POST.get("click_after_reload")})
        if request.POST.get("discard"):
            survey_response_form = EditSubmissionForm(
                manager, project, questionnaire_form_model,
                survey_response.values)

            form_ui_model.update(
                get_form_context(questionnaire_form_model.form_code, project,
                                 survey_response_form, manager,
                                 hide_link_class, disable_link_class))
            return render_to_response("project/web_questionnaire.html",
                                      form_ui_model,
                                      context_instance=RequestContext(request))
        else:
            survey_response_form = EditSubmissionForm(
                manager, project, questionnaire_form_model, request.POST)

        form_ui_model.update(
            get_form_context(questionnaire_form_model.form_code, project,
                             survey_response_form, manager, hide_link_class,
                             disable_link_class))
        if not survey_response_form.is_valid():
            error_message = _("Please check your answers below for errors.")
            form_ui_model.update({'error_message': error_message})
            return render_to_response("project/web_questionnaire.html",
                                      form_ui_model,
                                      context_instance=RequestContext(request))

        success_message = _("Your changes have been saved.")
        form_ui_model.update({'success_message': success_message})
        if len(survey_response_form.changed_data) or is_errored_before_edit:
            created_request = helper.create_request(survey_response_form,
                                                    request.user.username)

            additional_feed_dictionary = get_project_details_dict_for_feed(
                project)
            user_profile = NGOUserProfile.objects.get(user=request.user)
            feeds_dbm = get_feeds_database(request.user)
            if questionnaire_form_model.entity_type == ["reporter"]:
                owner_id = request.POST["eid"]
            else:
                owner_id = None
            response = WebPlayerV2(manager, feeds_dbm, user_profile.reporter_id) \
                .edit_survey_response(created_request, survey_response, owner_id,
                                      additional_feed_dictionary, websubmission_logger)
            mail_feed_errors(response, manager.database_name)
            if response.success:
                build_static_info_context(manager, survey_response,
                                          form_ui_model)
                ReportRouter().route(
                    get_organization(request).org_id, response)
                _update_static_info_block_status(form_ui_model,
                                                 is_errored_before_edit)
                log_edit_action(original_survey_response, survey_response,
                                request, project.name,
                                questionnaire_form_model)
                if request.POST.get("redirect_url"):
                    return HttpResponseRedirect(
                        request.POST.get("redirect_url"))
            else:
                del form_ui_model["success_message"]
                survey_response_form._errors = helper.errors_to_list(
                    response.errors, questionnaire_form_model.fields)
        return render_to_response("project/web_questionnaire.html",
                                  form_ui_model,
                                  context_instance=RequestContext(request))
Exemplo n.º 15
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))
Exemplo n.º 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))