Exemplo n.º 1
0
def questionnaire_preview(request, project_id=None, sms_preview=False):
    manager = get_database_manager(request.user)
    if request.method == 'GET':
        dashboard_page = settings.HOME_PAGE + "?deleted=true"
        questionnaire = Project.get(manager, project_id)
        if questionnaire.is_void():
            return HttpResponseRedirect(dashboard_page)
            #if form_model.is_entity_type_reporter():
        #    fields = helper.hide_entity_question(form_model.fields)
        project_links = make_project_links(questionnaire)
        questions = []
        fields = questionnaire.fields
        for field in fields:
            question = helper.get_preview_for_field(field)
            questions.append(question)
        example_sms = "%s" % (questionnaire.form_code)
        example_sms += get_example_sms(fields)

    template = 'project/questionnaire_preview.html' if sms_preview else 'project/questionnaire_preview_list.html'
    return render_to_response(
        template, {
            "questions": questions,
            'questionnaire_code': questionnaire.form_code,
            'project': questionnaire,
            'project_links': project_links,
            'is_quota_reached': is_quota_reached(request),
            'example_sms': example_sms,
            'org_number': get_organization_telephone_number(request)
        },
        context_instance=RequestContext(request))
Exemplo n.º 2
0
def subject_registration_form_preview(request,
                                      project_id=None,
                                      entity_type=None):
    manager = get_database_manager(request.user)
    questionnaire = Project.get(manager, project_id)
    dashboard_page = settings.HOME_PAGE + "?deleted=true"
    if questionnaire.is_void():
        return HttpResponseRedirect(dashboard_page)
    if not entity_type:
        entity_type = questionnaire.entity_type[0]
    if request.method == "GET":
        fields, project_links, questions, registration_questionnaire = _get_registration_form(
            manager, questionnaire, entity_type)
        example_sms = get_example_sms_message(
            fields, registration_questionnaire.form_code)
        return render_to_response(
            'project/questionnaire_preview_list.html', {
                "questions": questions,
                'questionnaire_code': registration_questionnaire.form_code,
                'project': questionnaire,
                'project_links': project_links,
                'is_quota_reached': is_quota_reached(request),
                'example_sms': example_sms,
                'org_number': get_organization_telephone_number(request)
            },
            context_instance=RequestContext(request))
Exemplo n.º 3
0
 def _update_form_context(self,
                          form_context,
                          questionnaire_form,
                          web_view_enabled=True):
     form_context.update({
         'extension_template':
         'project/subjects.html',
         'form_code':
         self.subject_registration_code,
         'entity_type':
         self.entity_type,
         'project_id':
         self.questionnaire.id,
         "questionnaire_form":
         questionnaire_form,
         "questions":
         self.form_model.fields,
         "org_number":
         get_organization_telephone_number(self.request),
         "example_sms":
         get_example_sms_message(self.form_model.fields,
                                 self.subject_registration_code),
         "web_view":
         web_view_enabled,
         "back_link":
         reverse("registered_subjects",
                 args=[self.questionnaire.id, self.entity_type]),
         "edit_subject_questionnaire_link":
         reverse('edit_my_subject_questionnaire',
                 args=[self.questionnaire.id, self.entity_type]),
         "register_subjects_link":
         reverse('subject_questionnaire',
                 args=[self.questionnaire.id, self.entity_type]) +
         "?web_view=True"
     })
def sms_preview(request):
    manager = get_database_manager(request.user)
    context = {'org_number': get_organization_telephone_number(request)}
    project_info = json.loads(request.POST['profile_form'])
    context.update(get_sms_preview_context(manager, request.POST,
                                           project_info))

    return render_to_response("project/sms_instruction_preview.html",
                              context,
                              context_instance=RequestContext(request))
def questionnaire_sms_preview(request):
    manager = get_database_manager(request.user)
    context = {'org_number': get_organization_telephone_number(request)}
    project_info = Project.load(manager.database, request.POST['project_id'])
    if project_info:
        context.update(
            get_sms_preview_context(manager, request.POST, project_info))

    return render_to_response("project/sms_instruction_preview.html",
                              context,
                              context_instance=RequestContext(request))
Exemplo n.º 6
0
def send_email_to_data_sender(user,
                              language_code,
                              request=None,
                              type="activation",
                              organization=None):
    site = get_current_site(request)
    account_type = organization.account_type if organization else 'Pro SMS'
    ctx_dict = {
        'domain': site.domain,
        'uid': int_to_base36(user.id),
        'user': user,
        'token': default_token_generator.make_token(user),
        'protocol': 'http',
        'site': site,
        'account_type': account_type,
    }
    types = dict({
        "activation":
        dict({
            "subject":
            'activatedatasenderemail/activation_email_subject_for_data_sender_account_',
            "subject_param":
            False,
            "template":
            'activatedatasenderemail/activation_email_for_data_sender_account_'
        }),
        "created_user":
        dict({
            "subject": 'registration/created_user_email_subject_',
            "subject_param": site.domain,
            "template": 'registration/created_user_email_'
        })
    })
    if type not in types:
        return
    action = types.get(type)
    subject = render_to_string(
        action.get("subject") + str(language_code) + '.txt')
    subject = ''.join(subject.splitlines())
    if action.get("subject_param"):
        subject = subject % action.get("subject_param")

    if request is not None:
        ctx_dict.update({"creator_user": request.user.first_name})
        if organization:
            ctx_dict.update(
                {"org_number": get_organization_telephone_number(request)})
    message = render_to_string(
        action.get("template") + language_code + '.html', ctx_dict)
    email = EmailMessage(subject, message, EMAIL_HOST_USER, [user.email],
                         [HNI_SUPPORT_EMAIL_ID])
    email.content_subtype = "html"
    email.send()
Exemplo n.º 7
0
def subject_registration_form_preview(request, project_id=None):
    manager = get_database_manager(request.user)
    project = Project.load(manager.database, project_id)
    if request.method == "GET":
        fields, project_links, questions, registration_questionnaire = _get_registration_form(manager,
                                                                                              project,
                                                                                              project.entity_type)
        example_sms = get_example_sms_message(fields, registration_questionnaire.form_code)
        return render_to_response('project/questionnaire_preview_list.html',
                                  {"questions": questions, 'questionnaire_code': registration_questionnaire.form_code,
                                   'project': project, 'project_links': project_links,
                                   'is_quota_reached': is_quota_reached(request),
                                   'example_sms': example_sms,
                                   'org_number': get_organization_telephone_number(request)},
                                  context_instance=RequestContext(request))
Exemplo n.º 8
0
def questionnaire_preview(request, project_id=None, sms_preview=False):
    manager = get_database_manager(request.user)
    if request.method == 'GET':
        project = Project.load(manager.database, project_id)
        form_model = FormModel.get(manager, project.qid)
        fields = form_model.fields
        if form_model.is_entity_type_reporter():
            fields = helper.hide_entity_question(form_model.fields)
        project_links = make_project_links(project, form_model.form_code)
        questions = []
        for field in fields:
            question = helper.get_preview_for_field(field)
            questions.append(question)
        example_sms = "%s" % (
            form_model.form_code)
        example_sms += get_example_sms(fields)

    template = 'project/questionnaire_preview.html' if sms_preview else 'project/questionnaire_preview_list.html'
    return render_to_response(template,
                              {"questions": questions, 'questionnaire_code': form_model.form_code,
                               'project': project, 'project_links': project_links,
                               'is_quota_reached': is_quota_reached(request),
                               'example_sms': example_sms, 'org_number': get_organization_telephone_number(request)},
                              context_instance=RequestContext(request))
Exemplo n.º 9
0
def project_overview(request, project_id=None):
    manager = get_database_manager(request.user)
    project = Project.load(manager.database, project_id)
    questionnaire = FormModel.get(manager, project.qid)
    number_of_questions = len(questionnaire.fields)
    questionnaire_code = questionnaire.form_code
    project_links = make_project_links(project, questionnaire_code)
    map_api_key = get_map_key(request.META['HTTP_HOST'])
    number_data_sender = len(project.data_senders)
    number_records = survey_response_count(manager, questionnaire_code, None, None)
    number_reminders = Reminder.objects.filter(project_id=project.id).count()
    links = {'registered_data_senders': reverse("registered_datasenders", args=[project_id]),
             'web_questionnaire_list': reverse('web_questionnaire', args=[project_id])}
    add_data_senders_to_see_on_map_msg = _(
        "Register Data Senders to see them on this map") if number_data_sender == 0 else ""
    add_subjects_to_see_on_map_msg = _(
        "Register %s to see them on this map") % project.entity_type if get_entity_count_for_type(manager,
                                                                                                  project.entity_type) == 0 else ""
    in_trial_mode = _in_trial_mode(request)
    return render_to_response('project/overview.html', RequestContext(request, {
        'project': project,
        'entity_type': project['entity_type'],
        'project_links': project_links,
        'is_quota_reached': is_quota_reached(request),
        'number_of_questions': number_of_questions,
        'map_api_key': map_api_key,
        'number_data_sender': number_data_sender,
        'number_records': number_records,
        'number_reminders': number_reminders,
        'links': links,
        'add_data_senders_to_see_on_map_msg': add_data_senders_to_see_on_map_msg,
        'add_subjects_to_see_on_map_msg': add_subjects_to_see_on_map_msg,
        'in_trial_mode': in_trial_mode,
        'questionnaire_code': questionnaire_code,
        'org_number':get_organization_telephone_number(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 project_overview(request, project_id):
    manager = get_database_manager(request.user)
    questionnaire = Project.get(manager, project_id)

    dashboard_page = settings.HOME_PAGE + "?deleted=true"
    if questionnaire.is_void():
        return HttpResponseRedirect(dashboard_page)
    number_of_questions = len(questionnaire.fields)
    questionnaire_code = questionnaire.form_code
    project_links = make_project_links(questionnaire)
    map_api_key = get_map_key(request.META['HTTP_HOST'])
    number_data_sender = len(questionnaire.data_senders)
    number_records = survey_response_count(manager, questionnaire_code, None,
                                           None)
    number_reminders = Reminder.objects.filter(
        project_id=questionnaire.id).count()
    links = {
        'registered_data_senders':
        reverse("registered_datasenders", args=[project_id]),
        'web_questionnaire_list':
        reverse('web_questionnaire', args=[project_id])
    }
    add_subjects_to_see_on_map_msg = ""
    if not is_empty(questionnaire.entity_type):
        subject_links = {}
        for entity_type in questionnaire.entity_type:
            subject_links.update({
                entity_type:
                append_query_strings_to_url(reverse(
                    "subject_questionnaire", args=[project_id, entity_type]),
                                            web_view=True)
            })
        links.update({'create_subjects_links': subject_links})
        add_subjects_to_see_on_map_msg = _(
            "Register %s to see them on this map"
        ) % questionnaire.entity_type[0] if get_entity_count_for_type(
            manager, questionnaire.entity_type[0]) == 0 else ""
    entity_type = ""
    has_multiple_unique_id = False
    in_trial_mode = _in_trial_mode(request)
    unique_id_header_text = ""
    if len(questionnaire.entity_type) == 1:
        entity_type = questionnaire.entity_type[0]
        unique_id_header_text = "%s %s &" % (ugettext("My"),
                                             entity_type.capitalize())
    if len(questionnaire.entity_type) > 1:
        has_multiple_unique_id = True
        unique_id_header_text = "%s &" % ugettext("My Identification Numbers")

    return render_to_response(
        'project/overview.html',
        RequestContext(
            request, {
                'project': questionnaire,
                'project_links': project_links,
                'is_quota_reached': is_quota_reached(request),
                'number_of_questions': number_of_questions,
                'map_api_key': map_api_key,
                'number_data_sender': number_data_sender,
                'number_records': number_records,
                'number_reminders': number_reminders,
                'links': links,
                'add_subjects_to_see_on_map_msg':
                add_subjects_to_see_on_map_msg,
                'in_trial_mode': in_trial_mode,
                'questionnaire_code': questionnaire_code,
                'has_multiple_unique_id': has_multiple_unique_id,
                'entity_type': json.dumps(entity_type),
                'unique_id_header_text': unique_id_header_text,
                'org_number': get_organization_telephone_number(request)
            }))