realisasi_tp.py 5.68 KB
from datetime import datetime

from tangsel.base.views import ColumnDT
from tangsel.pbb.models.ref import TempatPembayaran
from tangsel.tools.pbb import query_nop
from pyramid.view import (view_config)
from sqlalchemy import func, literal_column, and_
from sqlalchemy.sql import select

from ..models import PbbmDBSession
from ..models import Sppt, PembayaranSppt, Kecamatan, Kelurahan
from ..tools import BUKUS, bukus_sorted
from ..views import DataTables, BaseView
from tangsel.base.models import UserArea, ResDesa, UserGroup, Group


class View(BaseView):
    ########
    # List #
    ########
    @view_config(route_name='pbbm-realisasi-tp', renderer='templates/list_tp.pt',
                 permission='pbb-monitoring')
    def view_list(self):
        kd_tp = self.params.get('kd_tp', '00')
        self.ses['kd_tp'] = kd_tp
        tps = TempatPembayaran.query().order_by('kd_tp').all()
        return dict(project=self.req.app_name,
                    tps=tps)

    ##########
    # Action #
    ##########
    @view_config(route_name='pbbm-realisasi-tp-act', renderer='json',
                 permission='pbb-monitoring')
    def view_act(self):
        request = self.req
        ses = request.session

        url_dict = request.matchdict
        kd_tp = self.ses.get('kd_tp', '00')

        kini = select(
            PembayaranSppt.kd_tp,
            PembayaranSppt.kd_propinsi,
            PembayaranSppt.kd_dati2,
            PembayaranSppt.kd_kecamatan,
            PembayaranSppt.kd_kelurahan,
            PembayaranSppt.kd_blok,
            PembayaranSppt.no_urut,
            PembayaranSppt.kd_jns_op,
            PembayaranSppt.thn_pajak_sppt.label('tahun'),
            func.sum(PembayaranSppt.jml_sppt_yg_dibayar).label('amt_kini'),
        ). \
            group_by(
            PembayaranSppt.kd_tp,
            PembayaranSppt.kd_propinsi,
            PembayaranSppt.kd_dati2,
            PembayaranSppt.kd_kecamatan,
            PembayaranSppt.kd_kelurahan,
            PembayaranSppt.kd_blok,
            PembayaranSppt.no_urut,
            PembayaranSppt.kd_jns_op,
            PembayaranSppt.thn_pajak_sppt, ). \
            where(and_(
                PembayaranSppt.tgl_pembayaran_sppt >= self.dt_awal,
                PembayaranSppt.tgl_pembayaran_sppt <= self.dt_akhir,
            ))

        if url_dict['act'] == 'grid':
            if kd_tp == '00' or kd_tp is None:
                kode = TempatPembayaran.kd_tp
                nama = TempatPembayaran.nm_tp
                jumlah = func.sum(kini.c.amt_kini).label("amt_kini")
                query = PbbmDBSession.query().select_from(TempatPembayaran). \
                    outerjoin(kini,
                              TempatPembayaran.kd_tp == kini.c.kd_tp,
                              ). \
                    group_by(kode, nama)
            else:
                nama = Sppt.nm_wp_sppt
                kode = query_nop(PembayaranSppt)
                # kode = func.concat(Sppt.kd_propinsi,
                #                    literal_column("'.'"),
                #                    Sppt.kd_dati2,
                #                    literal_column("'.'"),
                #                    Sppt.kd_kecamatan,
                #                    literal_column("'.'"),
                #                    Sppt.kd_kelurahan,
                #                    literal_column("'.'"),
                #                    Sppt.kd_blok,
                #                    literal_column("'.'"),
                #                    Sppt.no_urut,
                #                    literal_column("'.'"),
                #                    Sppt.kd_jns_op,
                #                    literal_column("' '"),
                #                    Sppt.thn_pajak_sppt)
                jumlah = PembayaranSppt.jml_sppt_yg_dibayar.label("jumlah")
                query = PbbmDBSession.query().select_from(PembayaranSppt)\
                    .order_by(PembayaranSppt.kd_propinsi,
                              PembayaranSppt.kd_dati2,
                              PembayaranSppt.kd_kecamatan,
                              PembayaranSppt.kd_kelurahan,
                              PembayaranSppt.kd_blok,
                              PembayaranSppt.no_urut,
                              PembayaranSppt.kd_jns_op,
                              PembayaranSppt.pembayaran_sppt_ke,
                              PembayaranSppt.thn_pajak_sppt,
                              )\
                    .filter(PembayaranSppt.kd_tp == kd_tp,
                            PembayaranSppt.tgl_pembayaran_sppt >= self.dt_awal,
                            PembayaranSppt.tgl_pembayaran_sppt <= self.dt_akhir)\
                    .outerjoin(Sppt,                              and_(
                        Sppt.kd_propinsi == PembayaranSppt.kd_propinsi,
                        Sppt.kd_dati2 == PembayaranSppt.kd_dati2,
                        Sppt.kd_kecamatan == PembayaranSppt.kd_kecamatan,
                        Sppt.kd_kelurahan == PembayaranSppt.kd_kelurahan,
                        Sppt.kd_blok == PembayaranSppt.kd_blok,
                        Sppt.no_urut == PembayaranSppt.no_urut,
                        Sppt.kd_jns_op == PembayaranSppt.kd_jns_op,
                        Sppt.thn_pajak_sppt == PembayaranSppt.thn_pajak_sppt,
                    ))
        columns = [
            ColumnDT(kode, mData="kode"),
            ColumnDT(nama, mData="nama"),
            ColumnDT(jumlah, mData='jumlah',
                     global_search=False),
        ]

        row_table = DataTables(request.GET, query, columns)
        result = row_table.output_result()
        for d in result['data']:
            for k in d:
                if d[k] is None:
                    d[k] = 0
        return result