예제 #1
0
def indicators(indicatorgroup=None):
    its = {}
    indicators = dqindicators.indicatorsTests(indicatorgroup)

    indicatorgroup = dqindicators.indicatorGroups(indicatorgroup)

    for indicator in indicators:
        ind_id = indicator.Indicator.id
        if ind_id not in its:
            its[ind_id] = {}
        its[ind_id].update(indicator.Indicator.as_dict())
        its[ind_id]["indicator_type"] = its[ind_id]["indicator_type"].title()
        if its[ind_id]["indicator_category_name"]:
            its[ind_id]["indicator_type"] += " - " + its[ind_id]["indicator_category_name"]
        if True:
            if ('test' not in its[ind_id]):
                its[ind_id]['test'] = []
        if indicator.Test:
            test_data = indicator.Test.as_dict()
            test_data['test_id'] = test_data['id']
            del(test_data['id'])
            its[ind_id]['test'].append(test_data)
        its[ind_id]["links"] = {
            "edit": url_for('indicators_edit', 
                            indicatorgroup=indicatorgroup.name, 
                            indicator=indicator.Indicator.name),
            "delete": url_for('indicators_delete', 
                              indicatorgroup=indicatorgroup.name, 
                              indicator=indicator.Indicator.name)
            }

    its = util.resort_indicator_tests(its)

    links = {
        "edit_group": url_for('indicatorgroups_edit', 
                              indicatorgroup=indicatorgroup.name),
        "delete_group": url_for('indicatorgroups_delete', 
                                indicatorgroup=indicatorgroup.name),
        "new_indicator": url_for('indicators_new', 
                                 indicatorgroup=indicatorgroup.name),
        "csv_assoc_tests": url_for('indicatorgroup_tests_csv', 
                                   indicatorgroup=indicatorgroup.name),
        "csv_unassoc_tests": url_for('indicatorgroup_tests_csv', 
                                     indicatorgroup=indicatorgroup.name,
                                     option="no")
        }

    indicator_data = [ v for k,v in its.items() ]

    json_data = json.dumps({ 
            "indicator": indicator_data,
            "indicatorgroup": indicatorgroup.as_dict(),
            "admin": usermanagement.check_perms('admin'),
            "links": links
            }, indent=2)

    return render_template("indicators.html", 
                        admin=usermanagement.check_perms('admin'),
                        loggedinuser=current_user,
                        json_data=json_data)
예제 #2
0
def indicatorgroups():
    if not usermanagement.check_perms('admin'):
        return redirect(url_for('indicators', indicatorgroup=app.config["INDICATOR_GROUP"]))
    indicatorgroups = dqindicators.indicatorGroups()
    return render_template("indicatorgroups.html", indicatorgroups=indicatorgroups,
                         admin=usermanagement.check_perms('admin'),
                         loggedinuser=current_user)
def organisation_conditions(id=None):
    if id is not None:
        pc = get_pc(id)
        return render_template("organisation_condition.html", pc=pc,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
    else:
        pcs = get_pcs()
        return render_template("organisation_conditions.html", pcs=pcs,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
예제 #4
0
def organisations_index(organisation_code=None):
    
    aggregation_type=integerise(request.args.get('aggregation_type', 2))

    template_args = {}
    org_packages = dqorganisations.organisationPackages(organisation_code)

    organisation = dqorganisations.organisations(organisation_code)
    packagegroups = dqorganisations.organisationPackageGroups(organisation_code)

    irs = [ir for ir in get_info_results(org_packages, organisation)]
    coverage = get_coverage(organisation, irs)

    organisation_survey = dqsurveys.getSurvey(organisation_code)

    surveydata = dqsurveys.getSurveyDataAllWorkflows(organisation_code)

    surveydata, _ = dqsurveys.get_survey_data_and_workflow(
        organisation_survey, surveydata)

    summary_data = get_summary_data(organisation, aggregation_type)

    allowed_to_view_survey = usermanagement.check_perms(
        "survey",
        "view")
    allowed_to_edit_survey_researcher = usermanagement.check_perms(
        "survey_researcher",
        "edit",
        {"organisation_code": organisation_code})

    show_researcher_button = (
        allowed_to_edit_survey_researcher and
         (
          (organisation_survey and
           organisation_survey.Workflow.name == 'researcher')
           or
          (not organisation_survey)
         )
        )

    template_args = dict(organisation=organisation,
                         summary_data=summary_data,
                         packagegroups=packagegroups,
                         coverage=coverage,
                         surveydata=surveydata,
                         admin=usermanagement.check_perms('admin'),
                         loggedinuser=current_user,
                         allowed_to_view_survey=allowed_to_view_survey,
                         show_researcher_button=show_researcher_button)

    return render_template("organisation_index.html", **template_args)
예제 #5
0
def organisations(organisation_code=None):
    check_perms = usermanagement.check_perms('organisation', 'view', {'organisation_code':organisation_code})
    if organisation_code is not None:
        if check_perms:
            return redirect(url_for('organisations_index', organisation_code=organisation_code))
        else:
            return redirect(url_for('organisation_publication', organisation_code=organisation_code))
    else:
        organisations = dqorganisations.organisations()

        template_args = dict(organisations=organisations,
                         admin=usermanagement.check_perms('admin'),
                         loggedinuser=current_user)

        return render_template("organisations.html", **template_args)
def ipc_step2():
    step = "2"
    if request.method != "POST":
        return

    from iatidq import dqimportpublisherconditions

    def get_results():
        if request.form.get("local"):
            return dqimportpublisherconditions.importPCsFromFile()
        else:
            url = request.form["url"]
            return dqimportpublisherconditions.importPCsFromUrl(url)

    results = get_results()

    if results:
        flash("Parsed conditions", "success")
        return render_template(
            "import_organisation_conditions_step2.html",
            results=results,
            step=step,
            admin=usermanagement.check_perms("admin"),
            loggedinuser=current_user,
        )
    else:
        flash("There was an error importing your conditions", "error")
        return redirect(url_for("import_organisation_conditions"))
def ipc_step2():
    step = '2'
    if request.method != 'POST':
        return

    from iatidq import dqimportpublisherconditions

    def get_results():
        if request.form.get('local'):
            return dqimportpublisherconditions.importPCsFromFile()
        else:
            url = request.form['url']
            return dqimportpublisherconditions.importPCsFromUrl(url)

    results = get_results()

    ## FIXME: duplicate code?
    if results:
        flash('Parsed conditions', "success")
        return render_template(
            "import_organisation_conditions_step2.html", 
            results=results, 
            step=step,
            admin=usermanagement.check_perms('admin'),
            loggedinuser=current_user)
    else:
        flash('There was an error importing your conditions', "error")
        return redirect(url_for('import_organisation_conditions'))
예제 #8
0
def users_edit(username=None):
    if username:
        user = dqusers.user_by_username(username)
        permissions = dqusers.userPermissions(user.id)
        if request.method == 'POST':
            if user:
                flash('Successfully updated user.', 'success')
            else:
                user = {}
                flash('Could not update user.', 'error')
    else:
        if request.method == 'POST':
            user = dqusers.addUser({
                    'username': request.form['username'],
                    'password': request.form['password'],
                    'name': request.form['name'],
                    'email_address': request.form['email_address'],
                    'organisation': request.form['organisation']
                    })
            if user:
                flash('Successfully added new user', 'success')
            else:
                flash('Could not add user user', 'error')
        else:
            user = {}
            permissions = {}

    return render_template("users_edit.html", 
                           user=user,
                           permissions=permissions,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
예제 #9
0
def indicators_new(indicatorgroup=None):
    indicatorgroups = dqindicators.indicatorGroups()
    if (request.method == 'POST'):
        data = {
            'name': request.form['name'],
            'description': request.form['description'],
            'indicatorgroup_id': request.form['indicatorgroup_id'],
            'longdescription': request.form.get("longdescription"),
            'indicator_type': request.form.get("indicator_type"),
            'indicator_category_name': request.form.get("indicator_category_name"),
            'indicator_subcategory_name': request.form.get("indicator_subcategory_name"),
            'indicator_ordinal': request.form.get("indicator_ordinal", None),
            'indicator_noformat': request.form.get("indicator_noformat", None),
            'indicator_order': request.form.get("indicator_order", None),
            'indicator_weight': request.form.get("indicator_weight", None)
        }
        indicator = dqindicators.addIndicator(data)
        if indicator:
            flash('Successfully added Indicator.', 'success')
        else:
            flash("Couldn't add Indicator. Maybe one already exists with the same name?", 'error')
    else:
        indicator = None
    return render_template("indicator_edit.html", 
                         indicatorgroups=indicatorgroups, 
                         indicator=indicator,
                         admin=usermanagement.check_perms('admin'),
                         loggedinuser=current_user)
예제 #10
0
def sampling_orglist():
    orgtests = sample_db.get_total_results()
    data = sample_db.get_summary_org_test(orgtests)
    return render_template("sampling_org_tests.html",
         admin=usermanagement.check_perms('admin'),
         loggedinuser=current_user,
         orgtests=data)
예제 #11
0
def indicators_edit(indicatorgroup=None, indicator=None):
    indicatorgroups = dqindicators.indicatorGroups()
    if (request.method == 'POST'):
        data = {
            'name': request.form['name'],
            'description': request.form['description'],
            'indicatorgroup_id': request.form['indicatorgroup_id'],
            'longdescription': request.form['longdescription'],
            'indicator_type': request.form.get("indicator_type"),
            'indicator_category_name': request.form.get("indicator_category_name"),
            'indicator_subcategory_name': request.form.get("indicator_subcategory_name"),
            'indicator_ordinal': request.form.get("indicator_ordinal", None),
            'indicator_noformat': request.form.get("indicator_noformat", None),
            'indicator_order': request.form.get("indicator_order", None),
            'indicator_weight': request.form.get("indicator_weight", None)
        }
        indicator = dqindicators.updateIndicator(indicatorgroup, indicator, data)
        flash('Successfully updated Indicator', 'success')
    else:
        indicator = dqindicators.indicators(indicatorgroup, indicator)
    return render_template("indicator_edit.html", 
                         indicatorgroups=indicatorgroups, 
                         indicator=indicator,
                         admin=usermanagement.check_perms('admin'),
                         loggedinuser=current_user)
예제 #12
0
def organisation_survey_view(organisation_code, workflow, workflow_name, organisationsurvey, allowed_to_edit):
    organisation = Organisation.query.filter_by(
        organisation_code=organisation_code).first_or_404()

    surveydata = dqsurveys.getSurveyData(organisation_code, workflow_name)
    surveydata_allworkflows = dqsurveys.getSurveyDataAllWorkflows(organisation_code)

    indicators = dqindicators.indicators("pwyf2013")
    org_indicators = dqorganisations._organisation_indicators_split(
        organisation, 2)
        
    twentytwelvedata=get_organisation_results(organisation_code, indicators)
    publishedstatuses = dqsurveys.publishedStatus()
    publishedstatuses = dict(map(lambda ps: (ps.id, ps), publishedstatuses))
    publishedformats = dqsurveys.publishedFormat()
    publishedformats = dict(map(lambda pf: (pf.id, pf), publishedformats))

    template_path = "surveys/_survey_"+workflow.WorkflowType.name+".html"
    return render_template(
        template_path, 
        organisation=organisation,
        indicators=indicators,
        org_indicators = org_indicators,
        twentytwelvedata=twentytwelvedata,
        old_publication_status=old_publication_status,
        publishedstatuses=publishedstatuses,
        workflow=workflow,
        surveydata=surveydata_allworkflows,
        organisationsurvey=organisationsurvey,
        allowed_to_edit=allowed_to_edit,
        publishedformats=publishedformats,
        admin=usermanagement.check_perms('admin'),
        loggedinuser=current_user)
예제 #13
0
def organisation_edit(organisation_code=None):
    packages = dqpackages.packages()
    packagegroups = dqpackages.packageGroups()
    organisation = dqorganisations.organisations(organisation_code)

    if request.method == 'POST':
        if 'addpackages' in request.form:
            add_packages(organisation)
        elif 'addpackagegroup' in request.form:
            add_packagegroup(organisation)
        elif 'updateorganisation' in request.form:
            update_organisation(organisation_code)

    organisationpackages = dqorganisations.organisationPackages(
        organisation.organisation_code)

    return render_template(
        "organisation_edit.html", 
        organisation=organisation, 
        packages=packages, 
        packagegroups=packagegroups,
        donorresponses=donorresponse.RESPONSE_TYPES,
        organisationpackages=organisationpackages,
        admin=usermanagement.check_perms('admin'),
        loggedinuser=current_user)
예제 #14
0
def indicators(indicatorgroup=None):
    indicators = dqindicators.indicators(indicatorgroup)
    indicatorgroup = dqindicators.indicatorGroups(indicatorgroup)
    return render_template("indicators.html", 
                        indicatorgroup=indicatorgroup, 
                        indicators=indicators,
                        admin=usermanagement.check_perms('admin'),
                        loggedinuser=current_user)
예제 #15
0
def users(username=None):
    if username:
        return redirect(url_for('users_edit', username=username))
    else:
        users=dqusers.user()
        return render_template("users.html", users=users,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
예제 #16
0
def sampling_list():
    samples = []
    for wi in sample_db.read_db_response():
        samples.append(make_simple_sample_json(wi))
    return render_template("sampling_list.html",
         admin=usermanagement.check_perms('admin'),
         loggedinuser=current_user,
         samples=samples)
예제 #17
0
def publishers():
    p_groups = PackageGroup.query.order_by(
        PackageGroup.name).all()

    pkgs = Package.query.order_by(Package.package_name).all()
    return render_template("packagegroups.html", p_groups=p_groups, 
             pkgs=pkgs,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
예제 #18
0
def surveys_admin():
    surveys = dqsurveys.surveys()
    workflows = dqsurveys.workflowsAll()
    publishedstatuses=dqsurveys.publishedStatus()
    admin = usermanagement.check_perms('admin')
    loggedinuser = current_user

    return render_template("surveys/surveys_admin.html", 
                           **locals())
예제 #19
0
def surveys_admin():
    surveys = dqsurveys.surveys()
    workflows = dqsurveys.workflows()
    publishedstatuses=dqsurveys.publishedStatus()
    return render_template("surveys/surveys_admin.html", 
                           workflows=workflows,
                           publishedstatuses=publishedstatuses,
                           surveys=surveys,
                           admin=usermanagement.check_perms('admin'),
                           loggedinuser=current_user)
def organisation_conditions(id=None):
    if id is not None:
        pc = dqpublishercondition.get_publisher_condition(id)
        return render_template("organisation_condition.html", pc=pc,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
    else:
        pcs = dqpublishercondition.get_publisher_conditions()
        feedbackconditions = dqpublishercondition.get_publisher_feedback()
        text = ""
        for i, condition in enumerate(feedbackconditions):
            if i>0: text += "\n"
            text += condition.Organisation.organisation_code + " does not use "
            text += condition.OrganisationConditionFeedback.element + " at "
            text += condition.OrganisationConditionFeedback.where
        return render_template("organisation_conditions.html", pcs=pcs,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user,
             feedbackconditions=text)
def import_organisation_conditions(step=None):
    # Step=1: form; submit to step2
    #
    if step == "2":
        return ipc_step2()
    elif step == "3":
        return ipc_step3()
    else:
        return render_template(
            "import_organisation_conditions.html", admin=usermanagement.check_perms("admin"), loggedinuser=current_user
        )
예제 #22
0
def indicatorgroups_edit(indicatorgroup=None):
    if (request.method == 'POST'):
        data = {
            'name': request.form['name'],
            'description': request.form['description']
        }
        indicatorgroup = dqindicators.updateIndicatorGroup(indicatorgroup, data)
        flash('Successfully updated IndicatorGroup', 'success')
    else:
        indicatorgroup = dqindicators.indicatorGroups(indicatorgroup)
    return render_template("indicatorgroups_edit.html", indicatorgroup=indicatorgroup,
                 admin=usermanagement.check_perms('admin'),
                 loggedinuser=current_user)
예제 #23
0
def publisher_detail(id=None):
    p_group = PackageGroup.query.filter_by(name=id).first_or_404()

    pkgs = db.session.query(Package
            ).filter(Package.package_group == p_group.id
            ).order_by(Package.package_name).all()

    aggregate_results = _publisher_detail(p_group)

    return render_template("publisher.html", p_group=p_group, pkgs=pkgs, 
                           results=aggregate_results,
             admin=usermanagement.check_perms('admin'),
             loggedinuser=current_user)
예제 #24
0
def organisation_publication(organisation_code=None, aggregation_type=2):
    check_perms = usermanagement.check_perms(
        'organisation', 'view', {'organisation_code': organisation_code}
        )
    
    if check_perms:
        return organisation_publication_authorised(
            organisation_code,
            aggregation_type)
    else:
        return organisation_publication_unauthorised(
        organisation_code,
        aggregation_type)
예제 #25
0
def sampling(uuid=None):
    if uuid:
        next_url = url_for('sampling_list')
        api_sampling_url = url_for('api_sampling', uuid=uuid)
    else:
        next_url = ""
        api_sampling_url = url_for('api_sampling')

    return render_template("sampling.html",
         admin=usermanagement.check_perms('admin'),
         loggedinuser=current_user,
         next_url=next_url,
         api_process_url=url_for('api_sampling_process'),
         api_sampling_url=api_sampling_url)
예제 #26
0
def organisations_coverage():
    organisations = dqorganisations.organisations()
    coverage_data = {}

    for organisation in organisations:
        org_packages = dqorganisations.organisationPackages(organisation.organisation_code)
        irs = [ir for ir in get_info_results(org_packages, organisation)]
        coverage_data[organisation.id] = (get_coverage(organisation, irs))
    return render_template("organisations_coverage.html",
        organisations=organisations,
        coverage_data=coverage_data,
        admin=usermanagement.check_perms('admin'),
        loggedinuser=current_user
        )
예제 #27
0
def aggregationtypes_edit(aggregationtype_id=None):
    aggregationtype = get_aggregation_type(aggregationtype_id)

    if request.method == 'POST':
        if aggregationtype:
            flash('Successfully added your aggregation type.', 'success')
        else:
            aggregationtype = {}
            flash('Could not add your aggregation type.', 'error')

    tests = dqtests.tests()
    return render_template("aggregation_types_edit.html", 
                           aggregationtype=aggregationtype, tests=tests,
                         admin=usermanagement.check_perms('admin'),
                         loggedinuser=current_user)
예제 #28
0
def sampling(uuid=None):
    if uuid:
        update = "true"
        api_process_url = url_for('api_sampling_update')
        api_sampling_url = url_for('api_sampling', uuid=uuid)
    else:
        update = "false"
        api_process_url = url_for('api_sampling_process')
        api_sampling_url = url_for('api_sampling')
    return render_template("sampling.html",
         admin=usermanagement.check_perms('admin'),
         loggedinuser=current_user,
         update=update,
         api_process_url=api_process_url,
         api_sampling_url=api_sampling_url)
예제 #29
0
def organisation_survey(organisation_code=None):
    organisation = dqorganisations.organisations(organisation_code)
    # make sure survey exists
    dqsurveys.getOrCreateSurvey({'organisation_id':organisation.id})

    survey = dqsurveys.getSurvey(organisation_code)
    surveydata = dqsurveys.getSurveyDataAllWorkflows(organisation_code)
    workflows = dqsurveys.workflowsAll()
    pct_complete = completion_percentage(survey)
    users = dqusers.surveyPermissions(organisation_code)
    admin = usermanagement.check_perms('admin')
    loggedinuser = current_user
    checksurveyOK = dqsurveys.checkSurveyData(organisation_code)

    return render_template("surveys/survey.html", 
                           **locals())
예제 #30
0
def publisher(publisher_id=None):
    p_group = PackageGroup.query.filter_by(name=publisher_id).first_or_404()

    pkgs = db.session.query(Package
            ).filter(Package.package_group == p_group.id
            ).order_by(Package.package_name).all()

    aggregate_results = publisher_summary(publisher_id, p_group)

    latest_runtime=1

    return render_template("publisher_indicators.html", 
                           p_group=p_group, pkgs=pkgs, 
                           results=aggregate_results, runtime=latest_runtime,
                           admin=usermanagement.check_perms('admin'),
                           loggedinuser=current_user)