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
Пример #2
0
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
Пример #3
0
    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"])
Пример #4
0
 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"])
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
 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"])
Пример #9
0
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)
    }))
Пример #10
0
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)
            }))
Пример #11
0
 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))
Пример #12
0
 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))