def post(self, request, *args, **kwargs): entity_links = { 'registered_datasenders_link': reverse("all_datasenders") } dbm = get_database_manager(request.user) org_id = request.user.get_profile().org_id form = ReporterRegistrationForm(org_id=org_id, data=request.POST) try: reporter_id, message = process_create_data_sender_form( dbm, form, org_id) except DataObjectAlreadyExists as e: message = _( "Data Sender with Unique Identification Number (ID) = %s already exists." ) % e.data[1] if len(form.errors) == 0 and form.requires_web_access( ) and reporter_id: email_id = form.cleaned_data['email'] create_single_web_user(org_id=org_id, email_address=email_id, reporter_id=reporter_id, language_code=request.LANGUAGE_CODE) if message is not None and reporter_id: if form.cleaned_data['project_id'] != "": questionnaire = Project.get(dbm, form.cleaned_data['project_id']) questionnaire.associate_data_sender_to_project( dbm, reporter_id) questionnaire = questionnaire.name else: questionnaire = "" if not len(form.errors): UserActivityLog().log(request, action=REGISTERED_DATA_SENDER, detail=json.dumps( dict({"Unique ID": reporter_id})), project=questionnaire) form = ReporterRegistrationForm( initial={'project_id': form.cleaned_data['project_id']}) return render_to_response( 'datasender_form.html', { 'form': form, 'message': message, 'success': reporter_id is not None, 'project_inks': entity_links, 'current_language': translation.get_language(), 'registration_link': '/entity/datasender/register/', }, context_instance=RequestContext(request))
def create_data_sender_and_web_user(request, project_id=None): manager = get_database_manager(request.user) project, project_links = _get_project_and_project_link(manager, project_id) in_trial_mode = _in_trial_mode(request) if request.method == 'GET': form = ReporterRegistrationForm(initial={'project_id': project_id}) return render_to_response('project/register_datasender.html', { 'project': project, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'form': form, 'in_trial_mode': in_trial_mode, 'current_language': translation.get_language() }, context_instance=RequestContext(request)) if request.method == 'POST': org_id = request.user.get_profile().org_id form = ReporterRegistrationForm(org_id=org_id, data=request.POST) try: reporter_id, message = process_create_data_sender_form(manager, form, org_id) except DataObjectAlreadyExists as e: message = _("Data Sender with Unique Identification Number (ID) = %s already exists.") % e.data[1] if not len(form.errors) and reporter_id: project.associate_data_sender_to_project(manager, reporter_id) if form.requires_web_access(): email_id = request.POST['email'] create_single_web_user(org_id=org_id, email_address=email_id, reporter_id=reporter_id, language_code=request.LANGUAGE_CODE) UserActivityLog().log(request, action=REGISTERED_DATA_SENDER, detail=json.dumps(dict({"Unique ID": reporter_id})), project=project.name) if message is not None and reporter_id: form = ReporterRegistrationForm(initial={'project_id': form.cleaned_data['project_id']}) context = {'form': form, 'message': message, 'in_trial_mode': in_trial_mode, 'success': reporter_id is not None} return render_to_response('datasender_form.html', context, context_instance=RequestContext(request))
def test_create_single_web_user(self): org = Mock(spec=Organization) org.org_id = "org_id" org.account_type = "Basic" site = get_current_site(None) mock_entity = Mock(spec=Contact) mock_entity.value.return_value = 'test' users = User.objects.filter(email=WEB_USER_TEST_EMAIL) NGOUserProfile.objects.filter(org_id=org.org_id).delete() users.delete() with patch( "django.contrib.auth.tokens.default_token_generator.make_token" ) as make_token: make_token.return_value = "token" with patch( "datawinners.accountmanagement.helper.get_database_manager_for_org" ) as get_dbm: get_dbm.return_value = Mock(spec=DatabaseManager) with patch( "datawinners.accountmanagement.models.Organization.objects.get" ) as get_organization_mock: get_organization_mock.return_value = org with patch( "datawinners.accountmanagement.helper.contact_by_short_code" ) as reporter_entity: with patch( "datawinners.accountmanagement.helper.set_email_for_contact" ) as set_email_for_contact_mock: set_email_for_contact_mock.return_value = None reporter_entity.return_value = mock_entity create_single_web_user(org.org_id, WEB_USER_TEST_EMAIL, "test", "en") user = User.objects.filter( email=WEB_USER_TEST_EMAIL)[0] emails = [ mail.outbox.pop() for i in range(len(mail.outbox)) ] self.assertEqual(1, len(emails)) sent_email = emails[0] self.assertEqual(settings.EMAIL_HOST_USER, sent_email.from_email) self.assertEqual([WEB_USER_TEST_EMAIL], sent_email.to) ctx_dict = { 'domain': "localhost:8000", 'uid': int_to_base36(user.id), 'user': user, 'token': "token", 'protocol': 'http', 'account_type': org.account_type, 'site': site, } self.assertEqual( render_to_string( 'activatedatasenderemail/activation_email_subject_for_data_sender_account_en.txt' ), sent_email.subject) self.assertEqual( render_to_string( 'activatedatasenderemail/activation_email_for_data_sender_account_en.html', ctx_dict), sent_email.body)
def _send_email_to_datasender(self, email, org_id, reporter_entity, reporter_id, request): if not reporter_entity.is_contact and not User.objects.filter(email=email): create_single_web_user(org_id, email, reporter_id, request.LANGUAGE_CODE) return email
def _give_web_access_to_successful_datasender_registration(self, form, org_id, reporter_id, request): if len(form.errors) == 0 and form.requires_web_access() and reporter_id and \ form.cleaned_data['project_id'] != "": email_id = form.cleaned_data['email'] create_single_web_user(org_id=org_id, email_address=email_id, reporter_id=reporter_id, language_code=request.LANGUAGE_CODE)