anggaran.py 2.92 KB
from sqlalchemy import func
from ..tools import date_from_str #, row2dict
from pyramid.view import (
    view_config,
    )
from ..models import EisDBSession, EisSipkdAnggaran
from ..views import BaseView    
from datetime import datetime
########
# APP Home #
########
class Anggaran(BaseView):
    def cek_value(self,value,devider,simbol):
        if value<devider:
            return "{0:,.0f}".format(value)
        else:
            return "{0:,.0f} {1}".format(value/devider,simbol) 
        
    @view_config(route_name='eis-sipkd-anggaran', renderer='templates/anggaran.pt',
                 permission='eis-sipkd-anggaran')
    def view_app(self):
        tahun = self.ses['tahun']
        params = self.params
        kode = 'kode' in params and params['kode'] or ''
        ar_qry = ap_qry = pb_qry = None
        ar_rows = ap_rows = pb_rows = {}
        jml_ar = jml_ap = 0
        
        ar_qry = EisDBSession.query(EisSipkdAnggaran.kode,
                                  EisSipkdAnggaran.nama,
                                  EisSipkdAnggaran.level_id,
                                  func.sum(EisSipkdAnggaran.murni).label('jumlah')).\
                  group_by(EisSipkdAnggaran.kode,
                           EisSipkdAnggaran.nama,
                           EisSipkdAnggaran.level_id,
                           ).\
                  filter(EisSipkdAnggaran.tahun == tahun ).\
                  order_by(EisSipkdAnggaran.kode)
                                    
        level_id = 2
         
        if not kode:
            ar_qry = ar_qry.filter(EisSipkdAnggaran.level_id <= level_id,
                                    EisSipkdAnggaran.level_id > level_id-2,)
            ap_qry = ar_qry.filter(EisSipkdAnggaran.kode.like('5%'))
            pb_qry = ar_qry.filter(EisSipkdAnggaran.kode.like('6%'))
            ar_qry = ar_qry.filter(EisSipkdAnggaran.kode.like('4%'))
            title = "RINGKASAN APBD"
            ar_rows = row2dict(ar_qry.all())
            pb_rows = row2dict(pb_qry.all())
            for row in ap_rows:
                if row['level_id'] == level_id:
                    jml_ap += row['jumlah']
        
        else:
            level_id = kode.count('.')+2
            ar_qry = ar_qry.filter(EisSipkdAnggaran.kode.like(kode+'%'),
                                    EisSipkdAnggaran.level_id <= level_id,
                                    EisSipkdAnggaran.level_id > level_id-1,
                                    )
            title = 'nama' in params and params['nama'] or ''
        ar_rows = row2dict(ar_qry.all())
        
        for row in ar_rows:
            if row['level_id'] == level_id:
                jml_ar += row['jumlah']
            
        return dict(project='EIS', ar_rows=ar_rows, ap_rows = ap_rows, 
                    sd_row=jml_ar-jml_ap, level_id=level_id, pb_rows=pb_rows,
                    title=title, kode=kode)

def row2dict(rows):
    return [dict(zip(row.keys(), list(row))) for row in rows]