예제 #1
0
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
예제 #2
0
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
예제 #3
0
def link_user_to_all_projects(user_id):
    user = User.objects.get(pk=user_id)
    reporter_id = user.get_profile().reporter_id
    manager = get_database_manager(user)
    rows = get_all_projects(manager)
    for row in rows:
        make_user_data_sender_with_project(manager, reporter_id,
                                           row['value']['_id'])
예제 #4
0
def associate_user_with_existing_project(manager, reporter_id):
    rows = get_all_projects(manager)
    for row in rows:
        project_id = row['value']['_id']
        questionnaire = Project.get(manager, project_id)
        reporters_to_associate = [reporter_id]
        questionnaire.associate_data_sender_to_project(manager, reporters_to_associate)
        for data_senders_code in reporters_to_associate:
            update_datasender_index_by_id(data_senders_code, manager)
예제 #5
0
def delete_datasenders_from_project(manager, data_sender_ids):
    from datawinners.search.datasender_index import update_datasender_index_by_id

    for entity_id in data_sender_ids:
        associated_projects = get_all_projects(manager,
                                               data_sender_id=entity_id)
        for associated_project in associated_projects:
            project = Project.get(manager, associated_project['value']['_id'])
            project.delete_datasender(manager, entity_id)
            update_datasender_index_by_id(entity_id, manager)
예제 #6
0
def update_submission_search_for_datasender_edition(dbm, short_code, ds_name):
    kwargs = {"%s%s" % (SubmissionIndexConstants.DATASENDER_ID_KEY, "_value"): short_code}
    fields_mapping = {SubmissionIndexConstants.DATASENDER_NAME_KEY: ds_name}
    project_form_model_ids = [project.id for project in get_all_projects(dbm, short_code)]

    query = elasticutils.S().es(urls=ELASTIC_SEARCH_URL, timeout=ELASTIC_SEARCH_TIMEOUT).indexes(dbm.database_name).doctypes(*project_form_model_ids)
    query = query[:query.count()].filter(**kwargs)

    for survey_response in query.values_dict('void'):
        SubmissionIndexUpdateHandler(dbm.database_name, survey_response._type).update_field_in_submission_index(
            survey_response._id, fields_mapping)
예제 #7
0
def dissociate_user_as_datasender_with_projects(reporter_id, user,
                                                previous_role,
                                                selected_questionnaires):
    manager = get_database_manager(user)

    if previous_role == 'Project Managers':
        user_permission = get_user_permission(user.id, manager)
        project_ids = user_permission.project_ids if user_permission else []
    elif previous_role == 'Extended Users':
        rows = get_all_projects(manager)
        project_ids = []
        for row in rows:
            project_ids.append(row['value']['_id'])

    remove_user_as_datasender_for_projects(manager, project_ids,
                                           selected_questionnaires,
                                           reporter_id)
    return
예제 #8
0
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 generate_template_data():
    templates = []
    #database which has template specific projects.
    test_dbm = get_db_manager('hni_templates_aoi959205')
    projects = get_all_projects(test_dbm)
    for doc in projects:
        form_model = FormModel.get(test_dbm, doc.id)
        json_obj = {}
        json_obj.update({"name": form_model.name})
        json_obj.update({"language": form_model.activeLanguages[0]})
        json_obj.update({"category": _get_category(form_model)})
        json_obj.update({"form_code": form_model.form_code})
        fields = _remove_entity_field(form_model)
        json_obj.update({"json_fields": [field_to_json(f) for f in fields]})
        json_obj.update({"validators": [validator.to_json() for validator in form_model.validators]})
        templates.append(json_obj)

    file = os.path.dirname(__file__) + '/../datawinners/questionnaire/template_data.json'
    with codecs.open(file, 'w', encoding='utf-8') as outfile:
        json.dump(templates, outfile, ensure_ascii=False, indent=4)
예제 #10
0
def update_submission_search_for_datasender_edition(dbm, short_code,
                                                    datasender_dict):
    kwargs = {
        "%s%s" % (SubmissionIndexConstants.DATASENDER_ID_KEY, "_value"):
        short_code
    }
    name = datasender_dict['name'] if datasender_dict[
        'name'] else datasender_dict['mobile_number']
    fields_mapping = {
        SubmissionIndexConstants.DATASENDER_NAME_KEY: name,
        'datasender': datasender_dict
    }
    project_form_model_ids = [
        project.id for project in get_all_projects(dbm, short_code)
    ]
    chunk, i = ES_NUMBER_OF_TYPES_SUPPORTED, 0
    while i <= len(project_form_model_ids) / chunk:
        process_by_chunk_questionnaire(
            dbm, project_form_model_ids[i * chunk:(i + 1) * chunk - 1],
            fields_mapping, kwargs)
        i += 1
예제 #11
0
    def __init__(self, *args, **kwargs):
        request = kwargs.pop("request", None)
        assert request is not None
        forms.Form.__init__(self, *args, **kwargs)
        org_id = request.user.get_profile().org_id

        users_rs = NGOUserProfile.objects.select_related().\
            extra(select={'lower_username': '******'}).\
            filter(org_id=org_id).order_by("lower_username")

        all_users = [("", _("All Users"))]

        all_users.extend([(user.user.id, "%s" % (user.user.first_name))
                          for user in users_rs])

        self.fields["user"].choices = all_users
        project_choices = [("", _("All Questionnaires"))]
        projects = get_all_projects(get_database_manager(request.user))
        project_choices.extend(
            sorted([(prj["value"]["name"], prj["value"]["name"].capitalize())
                    for prj in projects],
                   key=itemgetter(1, 0)))
        self.fields["project"].choices = project_choices
예제 #12
0
def associate_user_with_all_projects_of_organisation(manager, reporter_id):
    rows = get_all_projects(manager)
    for row in rows:
        make_user_data_sender_with_project(manager, reporter_id,
                                           row['value']['_id'])
예제 #13
0
def get_all_project_for_user(user):
    if user.get_profile().reporter:
        return get_all_projects(get_database_manager(user),
                                user.get_profile().reporter_id)
    return get_all_projects(get_database_manager(user))
예제 #14
0
def get_all_project_for_user(user):
    if user.get_profile().reporter:
        questionnaires = get_all_projects(get_database_manager(user),
                                          user.get_profile().reporter_id)
        return remove_poll_questionnaires(questionnaires)
    return get_all_projects(get_database_manager(user))
예제 #15
0
 def test_get_all_projects(self):
     projects = get_all_projects(self.manager)
     self.assertEquals(len(projects), 2)