Exemplo n.º 1
0
def create_web_users(org_id, reporter_details, language_code):
    duplicate_entries = {}
    [duplicate_entries.update({item[0]: item[1]}) for item in reporter_details.items() if
     [val for val in reporter_details.values()].count(item[1]) > 1]

    errors = []
    if len(duplicate_entries) > 0:
        content = json.dumps({'success': False, 'errors': errors, 'duplicate_entries': duplicate_entries})

    organization = Organization.objects.get(org_id=org_id)
    dbm = get_database_manager_for_org(organization)
    existent_email_addresses = User.objects.filter(email__in=reporter_details.values()).values('email')

    if len(existent_email_addresses) > 0:
        for duplicate_email in existent_email_addresses:
            errors.append("User with email %s already exists" % duplicate_email['email'])
        content = json.dumps({'success': False, 'errors': errors, 'duplicate_entries': duplicate_entries})
    if errors.__len__() == 0 and duplicate_entries.keys().__len__() == 0:
        for reporter_id, email in reporter_details.iteritems():
            reporter_entity = contact_by_short_code(dbm, reporter_id)
            reporter_email = email.lower()
            set_email_for_contact(dbm, reporter_entity, email=reporter_email)
            user = User.objects.create_user(reporter_email, reporter_email, 'test123')
            group = Group.objects.filter(name="Data Senders")[0]
            user.groups.add(group)
            user.first_name = reporter_entity.value(NAME_FIELD)
            user.save()
            profile = NGOUserProfile(user=user, org_id=org_id, title="Mr",
                                     reporter_id=reporter_id.lower())
            profile.save()

            send_email_to_data_sender(user, language_code, organization=organization)

        content = json.dumps({'success': True, 'message': "Users has been created"})
    return content
Exemplo n.º 2
0
def new_user(request):
    add_user_success = False
    if request.method == 'GET':
        profile_form = UserProfileForm()
        return render_to_response("accountmanagement/account/add_user.html",
                                  {'profile_form': profile_form},
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        manager = get_database_manager(request.user)
        org = get_organization(request)
        form = UserProfileForm(organization=org, data=request.POST)

        if form.is_valid():
            username = form.cleaned_data.get('username')
            if not form.errors:
                user = User.objects.create_user(username, username, 'test123')
                user.first_name = form.cleaned_data['full_name']
                group = Group.objects.filter(name="Project Managers")
                user.groups.add(group[0])
                user.save()
                mobile_number = form.cleaned_data['mobile_phone']
                ngo_user_profile = NGOUserProfile(
                    user=user,
                    title=form.cleaned_data['title'],
                    mobile_phone=mobile_number,
                    org_id=org.org_id)
                ngo_user_profile.reporter_id = make_user_as_a_datasender(
                    manager=manager,
                    organization=org,
                    current_user_name=user.get_full_name(),
                    mobile_number=mobile_number,
                    email=username)
                ngo_user_profile.save()
                associate_user_with_existing_project(
                    manager, ngo_user_profile.reporter_id)
                reset_form = PasswordResetForm({"email": username})
                if reset_form.is_valid():
                    send_email_to_data_sender(reset_form.users_cache[0],
                                              request.LANGUAGE_CODE,
                                              request=request,
                                              type="created_user",
                                              organization=org)
                    name = form.cleaned_data.get("full_name")
                    form = UserProfileForm()
                    add_user_success = True
                    detail_dict = dict({"Name": name})
                    UserActivityLog().log(request,
                                          action=ADDED_USER,
                                          detail=json.dumps(detail_dict))

        return render_to_response("accountmanagement/account/add_user.html", {
            'profile_form': form,
            'add_user_success': add_user_success
        },
                                  context_instance=RequestContext(request))
Exemplo n.º 3
0
    def test_should_send_correct_email_in_html_format_in_english_to_a_newly_created_user(
            self):
        site = get_current_site(None)
        user = Mock(spec=User)
        user.email = '*****@*****.**'
        user.id = 1
        user.first_name = "test"
        language_code = "en"

        request = Mock()
        request.user.first_name = "rakoto"

        with patch(
                "django.contrib.auth.tokens.default_token_generator.make_token"
        ) as make_token:
            make_token.return_value = "token"
            send_email_to_data_sender(user,
                                      language_code,
                                      type="created_user",
                                      request=request)
            emails = [mail.outbox.pop() for i in range(len(mail.outbox))]

            self.assertEqual(1, len(emails))
            sent_email = emails[0]

            self.assertEqual("html", sent_email.content_subtype)
            self.assertEqual(settings.EMAIL_HOST_USER, sent_email.from_email)
            self.assertEqual(['*****@*****.**'], sent_email.to)
            self.assertEqual([settings.HNI_SUPPORT_EMAIL_ID], sent_email.bcc)
            ctx_dict = {
                'domain': site.domain,
                'uid': int_to_base36(user.id),
                'user': user,
                'token': "token",
                'protocol': 'http',
                'creator_user': request.user.first_name,
                'site': site,
                'account_type': 'Pro SMS',
            }
            self.assertEqual(
                render_to_string(
                    'registration/created_user_email_subject_en.txt') %
                site.domain, sent_email.subject)
            self.assertEqual(
                render_to_string('registration/created_user_email_en.html',
                                 ctx_dict), sent_email.body)
Exemplo n.º 4
0
def create_web_users(org_id, reporter_details, language_code):
    organization = Organization.objects.get(org_id=org_id)
    dbm = get_database_manager_for_org(organization)
    for reporter_id, email in reporter_details.iteritems():
        reporter_entity = contact_by_short_code(dbm, reporter_id)
        reporter_email = email.lower()
        set_email_for_contact(dbm, reporter_entity, email=reporter_email)
        user = User.objects.create_user(reporter_email, reporter_email, 'test123')
        group = Group.objects.filter(name="Data Senders")[0]
        user.groups.add(group)
        user.first_name = reporter_entity.value(NAME_FIELD)
        user.save()
        profile = NGOUserProfile(user=user, org_id=org_id, title="Mr",
                                 reporter_id=reporter_id.lower())
        profile.save()

        send_email_to_data_sender(user, language_code, organization=organization)
    return json.dumps({'success': True, 'message': "Users has been created"})
Exemplo n.º 5
0
    def test_should_send_correct_activaton_email_in_html_format_in_french(
            self):
        site = get_current_site(None)
        user = Mock(spec=User)
        user.email = '*****@*****.**'
        user.id = 1
        user.first_name = "test"
        language_code = "fr"
        with patch(
                "django.contrib.auth.tokens.default_token_generator.make_token"
        ) as make_token:
            make_token.return_value = "token"
            send_email_to_data_sender(user, language_code)
            emails = [mail.outbox.pop() for i in range(len(mail.outbox))]

            self.assertEqual(1, len(emails))
            sent_email = emails[0]

            self.assertEqual("html", sent_email.content_subtype)
            self.assertEqual(settings.EMAIL_HOST_USER, sent_email.from_email)
            self.assertEqual(['*****@*****.**'], sent_email.to)
            self.assertEqual([settings.HNI_SUPPORT_EMAIL_ID], sent_email.bcc)
            ctx_dict = {
                'domain': site.domain,
                'uid': int_to_base36(user.id),
                'user': user,
                'token': "token",
                'protocol': 'http',
                'site': site,
            }
            self.assertEqual(
                render_to_string(
                    'activatedatasenderemail/activation_email_subject_for_data_sender_account_fr.txt'
                ), sent_email.subject)
            self.assertEqual(
                render_to_string(
                    'activatedatasenderemail/activation_email_for_data_sender_account_fr.html',
                    ctx_dict), sent_email.body)
Exemplo n.º 6
0
def new_user(request):
    org = get_organization(request)
    add_user_success = True
    manager = get_database_manager(request.user)
    if request.method == 'GET':
        profile_form = UserProfileForm()

        return render_to_response(
            "accountmanagement/account/add_new_user.html", {
                'profile_form': profile_form,
                'is_pro_sms': org.is_pro_sms,
                'current_lang': get_language()
            },
            context_instance=(RequestContext(request)))

    if request.method == 'POST':
        post_parameters = request.POST
        org = get_organization(request)
        form = UserProfileForm(organization=org, data=request.POST)
        errors = {}

        if form.is_valid():
            username = post_parameters['username']
            role = post_parameters['role']
            if not form.errors:
                with transaction.commit_manually():
                    sid = transaction.savepoint()
                    try:
                        user = User.objects.create_user(
                            username, username, 'test123')
                        user.first_name = post_parameters['full_name']
                        group = Group.objects.filter(name=role)
                        user.groups.add(group[0])
                        user.save()
                        mobile_number = post_parameters['mobile_phone']
                        ngo_user_profile = NGOUserProfile(
                            user=user,
                            title=post_parameters['title'],
                            mobile_phone=mobile_number,
                            org_id=org.org_id)
                        ngo_user_profile.reporter_id = make_user_as_a_datasender(
                            manager=manager,
                            organization=org,
                            current_user_name=user.get_full_name(),
                            mobile_number=mobile_number,
                            email=username)
                        ngo_user_profile.save()
                        handle_feature_toggle_impact_for_new_user(
                            ngo_user_profile)
                        reset_form = PasswordResetForm({"email": username})

                        name = post_parameters["full_name"]
                        if role == 'Extended Users':
                            associate_user_with_all_projects_of_organisation(
                                manager, ngo_user_profile.reporter_id)
                            UserActivityLog().log(request,
                                                  action=ADDED_USER,
                                                  detail=activity_log_detail(
                                                      name,
                                                      friendly_name(role)))
                        elif role == 'Project Managers':
                            selected_questionnaires = post_parameters.getlist(
                                'selected_questionnaires[]')
                            selected_questionnaire_names = post_parameters.getlist(
                                'selected_questionnaire_names[]')
                            if selected_questionnaires is None:
                                selected_questionnaires = []
                            associate_user_with_projects(
                                manager, ngo_user_profile.reporter_id, user.id,
                                selected_questionnaires)
                            UserActivityLog().log(
                                request,
                                action=ADDED_USER,
                                detail=activity_log_detail(
                                    name, friendly_name(role),
                                    selected_questionnaire_names))
                            transaction.savepoint_commit(sid)

                    except Exception as e:
                        transaction.savepoint_rollback(sid)
                        datawinners_logger.exception(e.message)
                        add_user_success = False
                    transaction.commit(
                    )  #Mandatory for manually managed transaction blocks. Here it won't save anything

                if add_user_success and reset_form.is_valid():
                    send_email_to_data_sender(reset_form.users_cache[0],
                                              request.LANGUAGE_CODE,
                                              request=request,
                                              type="created_user",
                                              organization=org)

                    form = UserProfileForm()
                else:
                    add_user_success = False
        else:
            errors = form.errors
            add_user_success = False

        if len(request.user.groups.filter(name__in=["NGO Admins"])) < 1:
            current_user_type = "Administrator"
        else:
            current_user_type = "Account-Administrator"
        data = {
            "add_user_success": add_user_success,
            "errors": errors,
            "current_user": current_user_type
        }
        return HttpResponse(json.dumps(data),
                            mimetype="application/json",
                            status=201)