Esempio n. 1
0
def create_year_info_json(db, year):
    '''Creates a json with information about an year.'''
    q_total = db.session.query(Execucao).filter(
        Execucao.get_year() == year)
    num_total = q_total.count()
    q_mapped = q_total.filter(Execucao.point_found())
    num_mapped = q_mapped.count()

    rows = {
        'total': num_total,
        'mapped': num_mapped,
        # TODO: calcular regionalizados...
        'region': num_mapped,
    }

    values = []
    fields = [
        ('orcado', 'sld_orcado_ano'),
        ('atualizado', 'vl_atualizado'),
        ('empenhado', 'vl_empenhadoliquido'),
        ('liquidado', 'vl_liquidado')
    ]
    for name, db_field in fields:
        q = (db.session.query(
            func.sum(Execucao.data[db_field].cast(db.Float)))
            .filter(Execucao.get_year() == year))

        total = q.scalar()
        mapped = q.filter(Execucao.point_found()).scalar()
        if mapped is None:
            mapped = 0
        values.append({
            'name': name,
            'total': total,
            'mapped': mapped,
            # TODO: calcular regionalizados...
            'region': mapped,
        })

    last_update = (db.session.query(Execucao.data['datafinal'])
                   .filter(Execucao.get_year()==year)
                   .distinct().all()[-1][0])

    return {
        'data': {
            'rows': rows,
            'values': values,
            'last_update': last_update if last_update else str(year),
        }
    }