def make_user_as_a_datasender(manager, organization, current_user_name, mobile_number, email=None): total_entity = get_entity_count_for_type(manager, [REPORTER]) reporter_id = None offset = 1 location = [organization.country_name()] while not reporter_id: reporter_short_code = 'rep' + str(total_entity + offset) try: entity = create_entity(dbm=manager, entity_type=REPORTER_ENTITY_TYPE, short_code=reporter_short_code, location=location) reporter_id = entity.short_code except DataObjectAlreadyExists: offset += 1 data = _create_entity_data(manager, current_user_name, email, location, mobile_number) entity.add_data(data=data) entity.save() if organization.in_trial_mode: data_sender = DataSenderOnTrialAccount.objects.model( mobile_number=mobile_number, organization=organization) data_sender.save(force_insert=True) return entity.short_code
def make_user_as_a_datasender(manager, organization, current_user_name, mobile_number): total_entity = get_entity_count_for_type(manager, [REPORTER]) reporter_short_code = 'rep' + str(total_entity + 1) entity = create_entity(dbm=manager, entity_type=REPORTER_ENTITY_TYPE, short_code=reporter_short_code, location=[organization.country_name()]) mobile_number_type = get_or_create_data_dict(manager, name='Mobile Number Type', slug='mobile_number', primitive_type='string') name_type = get_or_create_data_dict(manager, name='Name', slug='name', primitive_type='string') data = [(MOBILE_NUMBER_FIELD, mobile_number, mobile_number_type), (NAME_FIELD, current_user_name, name_type)] entity.add_data(data=data) if organization.in_trial_mode: data_sender = DataSenderOnTrialAccount.objects.model( mobile_number=mobile_number, organization=organization) data_sender.save() return entity.short_code
def test_should_generate_short_code_and_import_data_senders_if_short_code_is_not_given( self): file_name = "reporters.csv" request = Mock() request.GET = {'qqfile': file_name} request.raw_post_data = self.csv_data_without_short_code organization = Mock(spec=Organization) with patch("datawinners.utils.get_organization_from_manager" ) as get_organization_from_dbm_mock: with patch( "datawinners.utils.get_organization") as get_organization: mock = Mock(return_value=organization) mock.org_id = 'abc' get_organization.return_value = mock get_organization_from_dbm_mock.return_value = Mock( return_value=organization) error_message, failure_imports, success_message, imported_entities = import_data( request=request, manager=self.manager, form_code='form_code') self.assertEqual( 4, get_entity_count_for_type(self.manager, entity_type="reporter")) self.assertEqual(4, len(imported_entities)) self.assertEqual('reporter', imported_entities["rep1"]) self.assertEqual('reporter', imported_entities["rep2"]) self.assertEqual('reporter', imported_entities["rep3"]) self.assertEqual('reporter', imported_entities["rep4"])
def test_should_import_subjects_with_form_code(self): file_name = "reporters.csv" request = Mock() request.GET = {'qqfile': file_name} request.raw_post_data = self.csv_subjects_data organization = Mock(spec=Organization) entity_type = "clinic" define_type(self.manager, [entity_type]) self.create_form_for_entity_type() with patch("datawinners.utils.get_organization_from_manager" ) as get_organization_from_dbm_mock: get_organization_from_dbm_mock.return_value = Mock( return_value=organization) with patch( "datawinners.utils.get_organization") as get_organization: mock = Mock(return_value=organization) mock.org_id = 'abc' get_organization.return_value = mock error_message, failure_imports, success_message, imported_entities = import_data( request=request, manager=self.manager, form_code=FORM_CODE) self.assertEqual( 4, get_entity_count_for_type(self.manager, entity_type=entity_type)) self.assertEqual(4, len(imported_entities)) self.assertEqual(entity_type, imported_entities["cli1"]) self.assertEqual(entity_type, imported_entities["cli2"]) self.assertEqual(entity_type, imported_entities["cli3"]) self.assertEqual(entity_type, imported_entities["cli4"])
def _create_couchdb_datasender(manager, organization, current_user_name, mobile_number): total_entity = get_entity_count_for_type(manager, [REPORTER]) reporter_short_code = 'rep' + str(total_entity + 1) entity = create_entity(dbm=manager, entity_type=REPORTER_ENTITY_TYPE, short_code=reporter_short_code, location=[organization.country_name()]) mobile_number_type = get_or_create_data_dict(manager, name='Mobile Number Type', slug='mobile_number', primitive_type='string') name_type = get_or_create_data_dict(manager, name='Name', slug='name', primitive_type='string') data = [(MOBILE_NUMBER_FIELD, mobile_number, mobile_number_type), (NAME_FIELD, current_user_name, name_type)] entity.add_data(data=data) return reporter_short_code
def _create_couchdb_datasender(manager, organization, current_user_name, mobile_number): total_entity = get_entity_count_for_type(manager, [REPORTER]) reporter_short_code = 'rep' + str(total_entity + 1) entity = create_entity(dbm=manager, entity_type=REPORTER_ENTITY_TYPE, short_code=reporter_short_code, location=[organization.country_name()]) data = [(MOBILE_NUMBER_FIELD, mobile_number), (NAME_FIELD, current_user_name)] entity.add_data(data=data) return reporter_short_code
def _generate_short_code(dbm, entity_type): current_count = get_entity_count_for_type(dbm, entity_type.lower()) entity_type_prefix = entity_type.lower().replace(" ", "")[:3] + "%s" offset = 1 while True: short_code = entity_type_prefix % (current_count + offset) try: entity = get_by_short_code_include_voided(dbm, short_code, [entity_type]) if entity: offset += 1 except DataObjectNotFound as ignore: return short_code
def test_should_import_data_senders(self): file_name = "reporters.csv" request = Mock() request.GET = {'qqfile': file_name} request.raw_post_data = self.csv_data organization = Mock(spec=Organization) with patch("datawinners.utils.get_organization_from_manager") as get_organization_from_dbm_mock: get_organization_from_dbm_mock.return_value = Mock(return_value=organization) with patch("datawinners.entity.import_data.get_organization") as get_organization: mock = Mock( return_value=organization ) mock.org_id = 'abc' get_organization.return_value = mock error_message, failure_imports, success_message, imported_entities = import_data(request=request, manager=self.manager) self.assertEqual(4, get_entity_count_for_type(self.manager, entity_type="reporter")) self.assertEqual(4, len(imported_entities)) self.assertEqual('reporter', imported_entities["r1"]) self.assertEqual('reporter', imported_entities["r2"]) self.assertEqual('reporter', imported_entities["r3"]) self.assertEqual('reporter', imported_entities["r4"])
def project_overview(request, project_id=None): manager = get_database_manager(request.user) project = Project.load(manager.database, project_id) questionnaire = FormModel.get(manager, project.qid) number_of_questions = len(questionnaire.fields) questionnaire_code = questionnaire.form_code project_links = make_project_links(project, questionnaire_code) map_api_key = get_map_key(request.META['HTTP_HOST']) number_data_sender = len(project.data_senders) number_records = survey_response_count(manager, questionnaire_code, None, None) number_reminders = Reminder.objects.filter(project_id=project.id).count() links = {'registered_data_senders': reverse("registered_datasenders", args=[project_id]), 'web_questionnaire_list': reverse('web_questionnaire', args=[project_id])} add_data_senders_to_see_on_map_msg = _( "Register Data Senders to see them on this map") if number_data_sender == 0 else "" add_subjects_to_see_on_map_msg = _( "Register %s to see them on this map") % project.entity_type if get_entity_count_for_type(manager, project.entity_type) == 0 else "" in_trial_mode = _in_trial_mode(request) return render_to_response('project/overview.html', RequestContext(request, { 'project': project, 'entity_type': project['entity_type'], 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'number_of_questions': number_of_questions, 'map_api_key': map_api_key, 'number_data_sender': number_data_sender, 'number_records': number_records, 'number_reminders': number_reminders, 'links': links, 'add_data_senders_to_see_on_map_msg': add_data_senders_to_see_on_map_msg, 'add_subjects_to_see_on_map_msg': add_subjects_to_see_on_map_msg, 'in_trial_mode': in_trial_mode, 'questionnaire_code': questionnaire_code, 'org_number':get_organization_telephone_number(request) }))
def project_overview(request, project_id): manager = get_database_manager(request.user) questionnaire = Project.get(manager, project_id) dashboard_page = settings.HOME_PAGE + "?deleted=true" if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) number_of_questions = len(questionnaire.fields) questionnaire_code = questionnaire.form_code project_links = make_project_links(questionnaire) map_api_key = get_map_key(request.META['HTTP_HOST']) number_data_sender = len(questionnaire.data_senders) number_records = survey_response_count(manager, questionnaire_code, None, None) number_reminders = Reminder.objects.filter( project_id=questionnaire.id).count() links = { 'registered_data_senders': reverse("registered_datasenders", args=[project_id]), 'web_questionnaire_list': reverse('web_questionnaire', args=[project_id]) } add_subjects_to_see_on_map_msg = "" if not is_empty(questionnaire.entity_type): subject_links = {} for entity_type in questionnaire.entity_type: subject_links.update({ entity_type: append_query_strings_to_url(reverse( "subject_questionnaire", args=[project_id, entity_type]), web_view=True) }) links.update({'create_subjects_links': subject_links}) add_subjects_to_see_on_map_msg = _( "Register %s to see them on this map" ) % questionnaire.entity_type[0] if get_entity_count_for_type( manager, questionnaire.entity_type[0]) == 0 else "" entity_type = "" has_multiple_unique_id = False in_trial_mode = _in_trial_mode(request) unique_id_header_text = "" if len(questionnaire.entity_type) == 1: entity_type = questionnaire.entity_type[0] unique_id_header_text = "%s %s &" % (ugettext("My"), entity_type.capitalize()) if len(questionnaire.entity_type) > 1: has_multiple_unique_id = True unique_id_header_text = "%s &" % ugettext("My Identification Numbers") return render_to_response( 'project/overview.html', RequestContext( request, { 'project': questionnaire, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'number_of_questions': number_of_questions, 'map_api_key': map_api_key, 'number_data_sender': number_data_sender, 'number_records': number_records, 'number_reminders': number_reminders, 'links': links, 'add_subjects_to_see_on_map_msg': add_subjects_to_see_on_map_msg, 'in_trial_mode': in_trial_mode, 'questionnaire_code': questionnaire_code, 'has_multiple_unique_id': has_multiple_unique_id, 'entity_type': json.dumps(entity_type), 'unique_id_header_text': unique_id_header_text, 'org_number': get_organization_telephone_number(request) }))
def test_get_entity_count_for_type(self): entity_type = ["Clinic"] define_type(self.manager, entity_type) create_entity(self.manager, entity_type, "1").save() self.assertEqual(1, get_entity_count_for_type(self.manager, entity_type))
def test_get_entity_count_for_type_as_string(self): entity_type = "Clinic" define_type(self.manager, [entity_type]) create_entity(self.manager, [entity_type], "1").save() self.assertEqual(1, get_entity_count_for_type(self.manager, entity_type))