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)
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
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
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)
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)
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))
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
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)
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))
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)
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))