def _organisation_indicators_complete_split(organisation, aggregation_type=2):
    results = _organisation_indicators(organisation, aggregation_type)
    
    commitment_data = dqindicators.indicators_subset(app.config["INDICATOR_GROUP"], 
                                                     u"commitment")
    commitment_results = dict(map(lambda x: (x.id, {'indicator': x.as_dict() }), commitment_data))

    publication_organisation = lambda kv: (kv[1]["indicator"]["indicator_category_name"]=="organisation")
    publication_activity = lambda kv: (kv[1]["indicator"]["indicator_category_name"]=="activity")
    publication_organisation_results = dict(filter(publication_organisation, results.iteritems()))
    publication_activity_results = dict(filter(publication_activity, results.iteritems()))

    return { "publication_activity": publication_activity_results,
             "publication_organisation": publication_organisation_results,
             "commitment": commitment_results}
def _organisation_indicators_split(organisation, aggregation_type=2):
    results = _organisation_indicators(organisation, aggregation_type)
    
    commitment_data = dqindicators.indicators_subset("pwyf2013", "commitment")
    commitment = dict(map(lambda x: (x.id, {'indicator': x }), commitment_data))
    if not results:
        indicators = dqindicators.indicators("pwyf2013")
        indicators_restructured = dict(map(lambda x: (x.id, {'indicator': x }), indicators))
        return {"zero": indicators_restructured,
                "non_zero": {},
                "commitment": commitment}

    zero = lambda kv: not kv[1]["results_pct"]
    non_zero = lambda kv: kv[1]["results_pct"]

    zero_results = dict(filter(zero, results.iteritems()))
    non_zero_results = dict(filter(non_zero, results.iteritems()))

    return { "zero": zero_results,
             "non_zero": non_zero_results,
             "commitment": commitment}
def _organisation_indicators_split(organisation, aggregation_type=2):
    results = _organisation_indicators(organisation, aggregation_type)
    commitment_data = dqindicators.indicators_subset(
                    app.config["INDICATOR_GROUP"], 
                    u"commitment")
    commitment = dict(map(lambda x: (x.id, {'indicator': x.as_dict() }), commitment_data))
    if not results:
        indicators = dqindicators.indicators(app.config["INDICATOR_GROUP"])
        indicators_restructured = dict(map(lambda x: (x.id, {'indicator': {'name': x.name } }), indicators))
        return {"zero": indicators_restructured,
                "non_zero": {},
                "commitment": commitment}

    zero = lambda kv: not kv[1]["results_pct"]
    non_zero = lambda kv: kv[1]["results_pct"]

    zero_results = dict(filter(zero, results.iteritems()))
    non_zero_results = dict(filter(non_zero, results.iteritems()))

    return { "zero": zero_results,
             "non_zero": non_zero_results,
             "commitment": commitment}
def _organisation_indicators(organisation, aggregation_type=2):
    s = summary.PublisherIndicatorsSummaryCreator(organisation,
                                                  aggregation_type)
    data = s.summary.summary()  ## FIXME
    
    # Sorry, this is really crude
    inforesults = _organisation_indicators_inforesults(organisation)
    data.update([ info_result_tuple(ir) for ir in inforesults ])

    # make sure indicators are complete
    indicators = dqindicators.indicators_subset(app.config["INDICATOR_GROUP"], u"publication")
    for indc in indicators:
        if indc.id in data:
            continue
        data[indc.id] = {
        'results_num': 0,
        'results_pct': 0,
        'indicator': {
            'description': indc.description,
            'name': indc.name,
            'id': indc.id,
            'indicatorgroup_id': indc.indicatorgroup_id,
            'indicator_type': indc.indicator_type,
            'indicator_category_name': indc.indicator_category_name,
            'indicator_subcategory_name': indc.indicator_subcategory_name,
            'indicator_category_name_text': indc.indicator_category_name_text,
            'indicator_subcategory_name_text': indc.indicator_subcategory_name_text,
            'longdescription': indc.longdescription,
            'indicator_noformat': indc.indicator_noformat,
            'indicator_ordinal': indc.indicator_ordinal,
            'indicator_order': indc.indicator_order,
            'indicator_weight': indc.indicator_weight
            },
        'tests': {}
            }
    return data
def _organisation_indicators(organisation, aggregation_type=2):
    aggregate_results = db.session.query(Indicator,
                                     Test,
                                     AggregateResult.results_data,
                                     AggregateResult.results_num,
                                     AggregateResult.result_hierarchy,
                                     AggregateResult.package_id,
                                     func.max(AggregateResult.runtime_id)
        ).filter(Organisation.organisation_code==organisation.organisation_code
        ).filter(AggregateResult.aggregateresulttype_id == aggregation_type
        ).filter(AggregateResult.organisation_id == organisation.id
        ).group_by(AggregateResult.result_hierarchy, 
                   Test, 
                   AggregateResult.package_id,
                   Indicator,
                   AggregateResult.results_data,
                   AggregateResult.results_num,
                   AggregateResult.package_id
        ).join(IndicatorTest
        ).join(Test
        ).join(AggregateResult
        ).join(Package
        ).join(OrganisationPackage
        ).join(Organisation
        ).order_by(Indicator.indicator_type, 
                   Indicator.indicator_category_name, 
                   Indicator.indicator_subcategory_name
        ).all()

    pconditions = OrganisationCondition.query.filter_by(organisation_id=organisation.id
            ).all()

    data = summary.agr_results(aggregate_results, 
                                                conditions=pconditions, 
                                                mode="publisher_indicators")
    
    # Sorry, this is really crude
    inforesults = _organisation_indicators_inforesults(organisation)
    for inforesult in inforesults:
        try:
            data[inforesult.Indicator.id]
        except KeyError:
            data[inforesult.Indicator.id]={}
        data[inforesult.Indicator.id]={
            'results_num': 1,
            'results_pct': inforesult.result_data,
            'indicator': {
                'description': inforesult.Indicator.description,
                'name': inforesult.Indicator.name,
                'id': inforesult.Indicator.id,
                'indicatorgroup_id': inforesult.Indicator.indicatorgroup_id,
                'indicator_type': inforesult.Indicator.indicator_type,
                'indicator_category_name': inforesult.Indicator.indicator_category_name,
                'indicator_subcategory_name': inforesult.Indicator.indicator_subcategory_name,
                'longdescription': inforesult.Indicator.longdescription,
                'indicator_noformat': inforesult.Indicator.indicator_noformat,
                'indicator_ordinal': inforesult.Indicator.indicator_ordinal
            },
            'tests': {}
        }
    # make sure indicators are complete
    indicators = dqindicators.indicators_subset("pwyf2013", "publication")
    for indicator in indicators:
        if indicator.id not in data:
            data[indicator.id] = {
            'results_num': 0,
            'results_pct': 0,
            'indicator': {
                'description': indicator.description,
                'name': indicator.name,
                'id': indicator.id,
                'indicatorgroup_id': indicator.indicatorgroup_id,
                'indicator_type': indicator.indicator_type,
                'indicator_category_name': indicator.indicator_category_name,
                'indicator_subcategory_name': indicator.indicator_subcategory_name,
                'longdescription': indicator.longdescription,
                'indicator_noformat': indicator.indicator_noformat,
                'indicator_ordinal': indicator.indicator_ordinal
            },
            'tests': {}
        }
    
    return data
def _organisation_indicators(organisation, aggregation_type=2):
    aggregate_results = db.session.query(Indicator.id,
                                     Test.id,
                                     AggregateResult.results_data,
                                     AggregateResult.results_num,
                                     AggregateResult.result_hierarchy,
                                     AggregateResult.package_id,
                                     func.max(AggregateResult.runtime_id)
        ).filter(Organisation.organisation_code==organisation.organisation_code
        ).filter(AggregateResult.aggregateresulttype_id == aggregation_type
        ).filter(AggregateResult.organisation_id == organisation.id
        ).group_by(AggregateResult.result_hierarchy, 
                   Test.id, 
                   AggregateResult.package_id,
                   Indicator.id,
                   AggregateResult.results_data,
                   AggregateResult.results_num,
                   AggregateResult.package_id
        ).join(IndicatorTest
        ).join(Test
        ).join(AggregateResult
        ).join(Package
        ).join(OrganisationPackage
        ).join(Organisation
        ).order_by(Indicator.indicator_type, 
                   Indicator.indicator_category_name, 
                   Indicator.indicator_subcategory_name
        ).all()

    pconditions = OrganisationCondition.query.filter_by(
        organisation_id=organisation.id
            ).all()

    s = summary.PublisherIndicatorsSummary(aggregate_results, 
                                           conditions=pconditions)
    data = s.summary()
    
    # Sorry, this is really crude
    inforesults = _organisation_indicators_inforesults(organisation)
    data.update([ info_result_tuple(ir) for ir in inforesults ])

    # make sure indicators are complete
    indicators = dqindicators.indicators_subset(app.config["INDICATOR_GROUP"], u"publication")
    for indc in indicators:
        if indc.id in data:
            continue
        data[indc.id] = {
            'results_num': 0,
            'results_pct': 0,
            'indicator': {
                'description': indc.description,
                'name': indc.name,
                'id': indc.id,
                'indicatorgroup_id': indc.indicatorgroup_id,
                'indicator_type': indc.indicator_type,
                'indicator_category_name': indc.indicator_category_name,
                'indicator_subcategory_name': indc.indicator_subcategory_name,
                'longdescription': indc.longdescription,
                'indicator_noformat': indc.indicator_noformat,
                'indicator_ordinal': indc.indicator_ordinal,
                'indicator_order': indc.indicator_order,
                'indicator_weight': indc.indicator_weight
                },
            'tests': {}
            }
    return data