Ejemplo n.º 1
0
def edit_subject_questionnaire(request, entity_type=None):
    # edit subject type questionnaire view
    manager = get_database_manager(request.user)
    if entity_type is None:
        return HttpResponseRedirect(reverse(all_subject_types))

    form_model = get_form_model_by_entity_type(manager, [entity_type.lower()])
    if form_model is None:
        form_model = get_form_model_by_code(manager, REGISTRATION_FORM_CODE)
    fields = form_model.fields

    existing_questions = json.dumps(fields, default=field_to_json)

    return render_to_response('entity/questionnaire.html', {
        'existing_questions':
        repr(existing_questions),
        'questionnaire_code':
        form_model.form_code,
        'language':
        form_model.activeLanguages[0],
        'entity_type':
        entity_type,
        'is_pro_sms':
        get_organization(request).is_pro_sms,
        'post_url':
        reverse(save_questionnaire),
        'unique_id_types':
        json.dumps([{
            "name": unique_id_type.capitalize(),
            "value": unique_id_type
        } for unique_id_type in get_unique_id_types(manager)
                    if unique_id_type != entity_type]),
    },
                              context_instance=RequestContext(request))
Ejemplo n.º 2
0
def questionnaire(request, project_id):
    manager = get_database_manager(request.user)
    if request.method == 'GET':
        questionnaire = Project.get(manager, project_id)
        if questionnaire.is_void():
            return HttpResponseRedirect(settings.HOME_PAGE + "?deleted=true")
        fields = questionnaire.fields
        existing_questions = json.dumps(fields, default=field_to_json)
        project_links = make_project_links(questionnaire)
        success, error = submission_stats(manager, questionnaire.form_code)
        project_has_submissions = (success + error > 0)
        in_trial_mode = _in_trial_mode(request)
        is_success = False
        active_language = request.LANGUAGE_CODE
        if "success" in [m.message for m in messages.get_messages(request)]:
            is_success = True
        return render_to_response(
            'project/questionnaire.html', {
                "existing_questions": repr(existing_questions),
                'questionnaire_code': questionnaire.form_code,
                'project': questionnaire,
                'project_has_submissions': project_has_submissions,
                'project_links': project_links,
                'is_quota_reached': is_quota_reached(request),
                'in_trial_mode': in_trial_mode,
                'is_success': is_success,
                'active_language': active_language,
                'post_url': reverse(edit_project, args=[project_id]),
                'unique_id_types': get_unique_id_types(manager),
                'preview_links': get_preview_and_instruction_links()
            },
            context_instance=RequestContext(request))
Ejemplo n.º 3
0
def create_project(request):
    manager = get_database_manager(request.user)
    org = get_organization(request)
    is_active, project_active_id, project_active_name = get_active_form_model_name_and_id(
        manager)
    has_permission_on_active_project = True
    ngo_admin_email = get_ngo_admin_user_profiles_for(org)[0].user.email
    if is_active:
        user_permission = get_user_permission(user_id=request.user.id,
                                              dbm=manager)
        if user_permission is not None and project_active_id not in user_permission.project_ids:
            has_permission_on_active_project = False

    if request.method == 'GET':
        cancel_link = reverse('dashboard') if request.GET.get(
            'prev', None) == 'dash' else reverse('alldata_index')
        return render_to_response('project/create_project.html', {
            'preview_links':
            get_preview_and_instruction_links(),
            'questionnaire_code':
            helper.generate_questionnaire_code(manager),
            'is_edit':
            'false',
            'is_pro_sms':
            org.is_pro_sms,
            'active_language':
            request.LANGUAGE_CODE,
            'post_url':
            reverse(create_project),
            'unique_id_types':
            json.dumps([
                unique_id_type.capitalize()
                for unique_id_type in get_unique_id_types(manager)
            ]),
            'has_permission_on_active_project':
            has_permission_on_active_project,
            'ngo_admin_email':
            ngo_admin_email,
            'cancel_link':
            cancel_link,
            'is_active':
            is_active,
            'project_active_id':
            project_active_id,
            'project_active_name':
            project_active_name
        },
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        response_dict = _create_project_post_response(request, manager)
        return HttpResponse(json.dumps(response_dict))
Ejemplo n.º 4
0
def load_subject_type_with_projects(manager):
    result = OrderedDict()
    subject_types = get_unique_id_types(manager)
    for subject_type in subject_types:
        result.update({subject_type: []})
    rows = manager.view.projects_by_subject_type()
    for row in rows:
        if row.key != 'reporter':
            projects = result.get(row.key) or []
            projects.append(row.value)
            result.update({row.key: projects})

    for subject_type in subject_types:
        result[subject_type] = sorted(result[subject_type])

    return result
Ejemplo n.º 5
0
def create_project(request):
    manager = get_database_manager(request.user)
    if request.method == 'GET':
        cancel_link = reverse('dashboard') if request.GET.get('prev', None) == 'dash' else reverse('alldata_index')
        return render_to_response('project/create_project.html',
                                  {'preview_links': get_preview_and_instruction_links(),
                                   'questionnaire_code': helper.generate_questionnaire_code(manager),
                                   'is_edit': 'false',
                                   'active_language': request.LANGUAGE_CODE,
                                   'post_url': reverse(create_project),
                                   'unique_id_types': json.dumps([unique_id_type.capitalize() for unique_id_type in
                                                                  get_unique_id_types(manager)]),
                                   'cancel_link': cancel_link}, context_instance=RequestContext(request))

    if request.method == 'POST':
        response_dict = _create_project_post_response(request, manager)
        return HttpResponse(json.dumps(response_dict))
def migration_to_convert_subject_ids_to_lowercase(db_name):
    try:
        logger = logging.getLogger(db_name)
        dbm = get_db_manager(db_name)
        entity_types = get_unique_id_types(dbm)
        for entity_type in entity_types:
            all_entities = get_all_entities(dbm, [entity_type])
            try:
                for entity in all_entities:
                    if 'short_code' in entity.data.keys():
                        short_code = entity.data['short_code']['value']
                        if re.search('[A-Z]', short_code):
                            entity.data['short_code'][
                                'value'] = short_code.lower()
                            entity.save()
                            logger.info('Migrated short_code:%s' % short_code)
            except Exception as e:
                logger.exception(e)
        logger.info('Completed Migration')
        mark_as_completed(db_name)
    except Exception as e:
        logger.exception(e)
Ejemplo n.º 7
0
    def get(self, request, project_id):
        manager = get_database_manager(request.user)
        questionnaire = Project.get(manager, project_id)
        excel_as_dict = None
        try:
            if not self._reload_required(
                    request):  # Switch to handle unexpected failures
                excel_as_dict = self._get_pre_computed_questionnaire_as_dict(
                    questionnaire)
            raw_excel, file_type = questionnaire.has_questionnaire_attachment(
            )[1:]
            if excel_as_dict is None:
                excel_as_dict = convert_excel_to_dict(file_content=raw_excel,
                                                      file_type=file_type)
                _save_questionnaire_as_dict_for_builder(
                    questionnaire, excel_as_dict)

            return HttpResponse(json.dumps({
                "project_id":
                project_id,
                "questionnaire":
                excel_as_dict,
                "file_type":
                file_type,
                "unique_id_types":
                get_unique_id_types(manager)
            }),
                                content_type='application/json')
        except Exception as e:
            logger.exception("Exception : \n%s" % e)
            return HttpResponse(json.dumps({
                "success": False,
                "project_id": project_id,
                'reason': 'Unable to fetch questionnaire details',
                'details': e.message
            }),
                                content_type='application/json')
Ejemplo n.º 8
0
def create_project(request):
    manager = get_database_manager(request.user)
    ngo_admin = NGOUserProfile.objects.get(user=request.user)
    active_language = request.LANGUAGE_CODE
    if request.method == 'GET':
        cancel_link = reverse('dashboard') if request.GET.get(
            'prev', None) == 'dash' else reverse('index')
        return render_to_response('project/create_project.html', {
            'preview_links':
            get_preview_and_instruction_links(),
            'questionnaire_code':
            helper.generate_questionnaire_code(manager),
            'is_edit':
            'false',
            'active_language':
            active_language,
            'post_url':
            reverse(create_project),
            'unique_id_types':
            json.dumps([
                unique_id_type.capitalize()
                for unique_id_type in get_unique_id_types(manager)
            ]),
            'cancel_link':
            cancel_link
        },
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        project_info = json.loads(request.POST['profile_form'])

        try:
            questionnaire = create_questionnaire(
                post=request.POST,
                manager=manager,
                name=project_info.get('name'),
                language=project_info.get('language', active_language),
                reporter_id=ngo_admin.reporter_id)
        except (QuestionCodeAlreadyExistsException,
                QuestionAlreadyExistsException,
                EntityQuestionAlreadyExistsException) as ex:
            return HttpResponse(
                json.dumps({
                    'success': False,
                    'error_message': _(ex.message),
                    'error_in_project_section': False
                }))

        code_has_errors, name_has_errors = False, False
        error_message = {}
        if not questionnaire.is_form_code_unique():
            code_has_errors = True
            error_message["code"] = _(
                "Questionnaire with same code already exists.")
        if not questionnaire.is_project_name_unique():
            name_has_errors = True
            error_message["name"] = _(
                "Questionnaire with same name already exists.")
        if not code_has_errors and not name_has_errors:
            _associate_account_users_to_project(manager, questionnaire)
            questionnaire.update_doc_and_save()
            UserActivityLog().log(request,
                                  action=CREATED_PROJECT,
                                  project=questionnaire.name,
                                  detail=questionnaire.name)
            return HttpResponse(
                json.dumps({
                    'success': True,
                    'project_id': questionnaire.id
                }))

        return HttpResponse(
            json.dumps({
                'success': False,
                'error_message': error_message,
                'error_in_project_section': False,
                'code_has_errors': code_has_errors,
                'name_has_errors': name_has_errors
            }))