Пример #1
0
    def test_should_update_user_permission(self):
        user_permission = UserPermission(self.manager, 1, ['q1', 'q2'])
        user_permission.save()

        #Remove all questionnaires
        update_user_permission(self.manager, 1, [])
        questionnaires = get_questionnaires_for_user(1, self.manager)
        self.assertEqual(len(questionnaires), 0)

        #Again add some questionnaires
        form_model_id = self._create_sample_questionnaire()
        update_user_permission(self.manager, 1, [form_model_id])
        questionnaires = get_questionnaires_for_user(1, self.manager)
        self.assertEqual(questionnaires[0]['_id'], form_model_id)
        self.assertEqual(questionnaires[0].get('is_project_manager'), True)
Пример #2
0
def get_all_project_for_user(
        user, get_project_info_function=default_get_project_info, dbm=None):
    if user.get_profile().reporter:
        return [
            get_project_info_function(dbm, row['value'])
            for row in get_all_projects(get_database_manager(user),
                                        user.get_profile().reporter_id)
            if row['value'].get('is_poll', False) is False
        ]

    if user.is_ngo_admin() or user.is_extended_user():
        questionnaires = [
            get_project_info_function(dbm, row['value'])
            for row in get_all_projects(get_database_manager(user))
        ]
        return questionnaires

    questionnaires_as_datasender = [
        get_project_info_function(dbm, row['value'])
        for row in get_all_projects(get_database_manager(user),
                                    user.get_profile().reporter_id)
    ]
    questionnaires_as_pm = get_questionnaires_for_user(
        user.id,
        get_database_manager(user),
        project_info_function=get_project_info_function)
    for q_ds in questionnaires_as_datasender:
        already_exists = [
            True for q_pm in questionnaires_as_pm
            if q_pm.get('_id') == q_ds.get('project_id', q_ds.get('_id'))
        ]
        if True not in already_exists:
            questionnaires_as_pm.append(q_ds)
    return questionnaires_as_pm
Пример #3
0
def get_all_project_for_user(user):
    if user.get_profile().reporter:
        questionnaires = [
            row['value']
            for row in get_all_projects(get_database_manager(user),
                                        user.get_profile().reporter_id)
        ]
        return remove_poll_questionnaires(questionnaires)
    if user.is_ngo_admin() or user.is_extended_user():
        questionnaires = [
            row['value']
            for row in get_all_projects(get_database_manager(user))
        ]
        return questionnaires
    questionnaires_as_datasender = [
        row['value']
        for row in get_all_projects(get_database_manager(user),
                                    user.get_profile().reporter_id)
    ]
    questionnaires_as_pm = get_questionnaires_for_user(
        user.id, get_database_manager(user))
    for q_ds in questionnaires_as_datasender:
        already_exists = [
            True for q_pm in questionnaires_as_pm
            if q_pm.get('_id') == q_ds.get('_id')
        ]
        if True not in already_exists:
            questionnaires_as_pm.append(q_ds)
    return questionnaires_as_pm
Пример #4
0
    def test_should_get_questionnaires_for_user(self):
        form_model_id = self._create_sample_questionnaire()
        user_permission = UserPermission(self.manager, 1, [form_model_id])
        user_permission.save()

        questionnaires = get_questionnaires_for_user(1, self.manager)
        self.assertEqual(questionnaires[0]['_id'], form_model_id)
        self.assertEqual(questionnaires[0].get('is_project_manager'), True)
Пример #5
0
def get_project_id_name_map_for_user(dbm, user):
    project_id_name_map = {}
    if user.is_ngo_admin() or user.is_extended_user():
        projects = [row['value'] for row in dbm.load_all_rows_in_view('all_projects')]
    else:
        projects = get_questionnaires_for_user(user.id, dbm)
    for project in projects:
        if not project.get('is_poll', False):
            project_id_name_map.update({project.get('_id'): project.get('name')})
    project_map = sorted(project_id_name_map.items(), key=lambda(project_id, name): name.lower())

    return OrderedDict(project_map)
Пример #6
0
def registered_ds_count(request):
    dbm = get_database_manager(request.user)
    result = []
    if request.user.is_ngo_admin() or request.user.is_extended_user():
        rows = [row['value'] for row in dbm.load_all_rows_in_view('all_projects')]
    else:
        rows = get_questionnaires_for_user(request.user.id, dbm)
    
    for row in rows:
        if not row.get('is_poll', False):
            result.append({'name': row.get('name'), 'id': row.get('_id'),
                           'ds-count': get_registered_datasender_count(dbm, row.get('name'))})
    return HttpResponse(json.dumps(result))
Пример #7
0
def _is_pm_data_sender_for_project(user, project_id):
    if user.is_project_manager():
        questionnaires_as_datasender = [
            row['value']
            for row in get_all_projects(get_database_manager(user),
                                        user.get_profile().reporter_id)
        ]
        qn_as_ds = []
        for q_ds in questionnaires_as_datasender:
            qn_as_ds.append(q_ds.get('_id'))
        questionnaires_as_pm = get_questionnaires_for_user(
            user.id, get_database_manager(user))
        qn_as_pm = []
        for q_pm in questionnaires_as_pm:
            qn_as_pm.append(q_pm.get('_id'))
        questionnaires_only_as_datasender = list(set(qn_as_ds) - set(qn_as_pm))
        return project_id in questionnaires_only_as_datasender

    return False
Пример #8
0
    def test_should_get_questionnaires_for_user_excluding_deleted_questionnaires(
            self):
        entity_type = []
        question3 = IntegerField(
            name="Father's age",
            code="Q2",
            label="What is your Father's Age",
            constraints=[NumericRangeConstraint(min=15, max=120)])
        form_model = FormModel(self.manager,
                               name='New survey',
                               label='Survey122',
                               form_code='S122',
                               fields=[question3],
                               is_registration_model=False)
        form_model.void(True)
        form_model_id = form_model.save()
        user_permission = UserPermission(self.manager, 1, [form_model_id])
        user_permission.save()

        questionnaires = get_questionnaires_for_user(1, self.manager)
        self.assertEqual(len(questionnaires), 0)
Пример #9
0
def users(request):
    manager = get_database_manager(request.user)

    if request.method == 'GET':
        org_id = request.user.get_profile().org_id
        users = get_all_users_for_organization(org_id)
        organization = get_organization(request)
        questionnaire_map = dict()
        for user in users:
            questionnaires_for_user = get_questionnaires_for_user(
                user.user.id, get_database_manager(user.user))
            questionnaire_map.update(
                {user.id: make_questionnaire_map(questionnaires_for_user)})

        return render_to_response("accountmanagement/account/users_list.html",
                                  {
                                      'current_user': request.user,
                                      'users': users,
                                      'questionnaire_map': questionnaire_map,
                                      'is_pro_sms': organization.is_pro_sms,
                                      'current_lang': get_language()
                                  },
                                  context_instance=RequestContext(request))
Пример #10
0
def edit_user_profile(request, user_id=None):
    user = User.objects.get(id=user_id)
    current_user = request.user

    if user is None:
        data = {"errors": "User not found"}
        return HttpResponse(json.dumps(data),
                            mimetype="application/json",
                            status=404)
    if not current_user.has_higher_privileges_than(user):
        return HttpResponseRedirect(django_settings.ACCESS_DENIED_PAGE)
    else:
        profile = user.get_profile()
    if request.method == 'GET':
        if profile.mobile_phone == 'Not Assigned':
            profile.mobile_phone = ''
        org = get_organization(request)
        manager = get_database_manager(user)
        questionnaire_list = get_questionnaires_for_user(user.id, manager)
        questionnaire_map = make_questionnaire_map(questionnaire_list)
        form_data = dict(title=profile.title,
                         id=user_id,
                         full_name=profile.user.first_name,
                         username=profile.user.username,
                         mobile_phone=profile.mobile_phone,
                         role=user.groups.all()[0].name,
                         questionnaires=questionnaire_map)
        return render_to_response("accountmanagement/account/edit_user.html", {
            'form_data': json.dumps(form_data),
            'is_pro_sms': org.is_pro_sms,
            'current_lang': get_language()
        },
                                  context_instance=(RequestContext(request)))

    if request.method == 'POST':
        post_parameters = request.POST
        role = post_parameters['role']
        ngo_user = NGOUserProfile.objects.get(user=user)
        manager = get_database_manager(user)
        reporter_id = ngo_user.reporter_id
        previous_role = user.groups.all()[0].name
        org = get_organization(request)
        form = EditUserProfileForm(organization=org,
                                   reporter_id=profile.reporter_id,
                                   data=request.POST)
        message = ""
        _edit_user_success = False
        if form.is_valid():
            _update_user_and_profile(form, user.username, role)

            name = post_parameters["full_name"]

            if role == 'Project Managers':
                selected_questionnaires = post_parameters.getlist(
                    'selected_questionnaires[]')
                selected_questionnaire_names = post_parameters.getlist(
                    'selected_questionnaire_names[]')
                if selected_questionnaires is None or len(
                        selected_questionnaires) < 1:
                    selected_questionnaires = []

                dissociate_user_as_datasender_with_projects(
                    reporter_id, user, previous_role, selected_questionnaires)
                make_user_data_sender_for_projects(manager,
                                                   selected_questionnaires,
                                                   reporter_id)
                update_user_permission(manager,
                                       user_id=user.id,
                                       project_ids=selected_questionnaires)
                UserActivityLog().log(request,
                                      action=UPDATED_USER,
                                      detail=activity_log_detail(
                                          name, friendly_name(role),
                                          selected_questionnaire_names))
            elif role == 'Extended Users':
                if previous_role != 'Extended Users':
                    associate_user_with_all_projects_of_organisation(
                        manager, reporter_id)
                    update_user_permission(manager,
                                           user_id=user.id,
                                           project_ids=[])
                UserActivityLog().log(request,
                                      action=UPDATED_USER,
                                      detail=activity_log_detail(
                                          name, friendly_name(role)))

            message = _('Profile has been updated successfully')
            _edit_user_success = True
        data = dict(edit_user_success=_edit_user_success,
                    errors=form.errors,
                    message=message)
        return HttpResponse(json.dumps(data),
                            mimetype="application/json",
                            status=200)
Пример #11
0
def dashboard(request):
    manager = get_database_manager(request.user)
    user_profile = NGOUserProfile.objects.get(user=request.user)
    user_group = request.user.groups.all()[0].name

    organization = Organization.objects.get(org_id=user_profile.org_id)
    questionnaire_list = []
    if request.user.is_ngo_admin() or request.user.is_extended_user():
        rows = [
            row['value'] for row in manager.load_all_rows_in_view(
                'all_projects', descending=True, limit=8)
        ]
    else:
        rows = get_questionnaires_for_user(request.user.id,
                                           manager,
                                           descending=True,
                                           limit=8)
    for row in rows:
        if row.get('is_poll', False) is True:
            link = reverse("submissions", args=[row['_id'], row['form_code']])
        else:
            link = reverse("project-overview", args=(row['_id'], ))
        questionnaire = dict(name=row['name'], link=link, id=row['_id'])
        questionnaire_list.append(questionnaire)
    language = request.session.get("django_language", "en")
    has_reached_sms_limit = organization.has_exceeded_message_limit()
    has_reached_submission_limit = organization.has_exceeded_submission_limit()
    questionnaire_does_not_exist = "NoExist" in request.GET.keys()

    if "deleted" in request.GET.keys():
        messages.info(
            request,
            ugettext(
                'Sorry. The Questionnaire you are looking for has been deleted'
            ),
            extra_tags='error')
    user = request.user.id
    show_help = False if (UserPreferences.objects.filter(
        user=user)).count() > 0 else True

    context = {
        "show_help": show_help,
        "projects": questionnaire_list,
        'in_trial_mode': organization.in_trial_mode,
        'is_pro_sms': organization.is_pro_sms,
        'has_reached_sms_limit': has_reached_sms_limit,
        'questionnaireDoesNotExist': questionnaire_does_not_exist,
        'has_reached_submission_limit': has_reached_submission_limit,
        'language': language,
        'counters': organization.get_counters(),
        'first_time_activation': False,
        'account_cost': 0,
        'account_type': organization.account_type,
        'user_group': user_group
    }

    if request.session.get('activation_successful'):
        request.session.pop('activation_successful')
        context.update({
            'first_time_activation': True,
            'account_cost': _fetch_amount(organization)
        })

    return render_to_response('dashboard/home.html',
                              context,
                              context_instance=RequestContext(request))