realisasi_all.py 23 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
from datetime import datetime

from tangsel.base.views import ColumnDT
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-all', renderer='templates/list_realisasi.pt',
                 permission='pbb-monitoring')
    def view_list(self):
        kecamatan = self.ses['kd_kecamatan']
        kelurahan = self.ses['kd_kelurahan']

        data_awal = UserArea.user_desa(self.req.user.id).all()

        if data_awal :
            kdkec = tuple(k.kode[6:9] for k in data_awal if hasattr(k, 'kode') and k.kode)
            kdkel = tuple(k.kode[10:13] for k in data_awal if hasattr(k, 'kode') and k.kode)
            iddesa = tuple(k.desa_id for k in data_awal if hasattr(k, 'desa_id') and k.desa_id)

            if hasattr(data_awal[0], 'group_name') and data_awal[0].group_name in ('PBBM UPT'):
                kecamatans = Kecamatan.query(). \
                    filter(Kecamatan.kd_kecamatan.in_(kdkec)). \
                    order_by('kd_kecamatan').all()
                    
                kelurahans = Kelurahan.query(). \
                    filter(Kelurahan.kd_kecamatan == kecamatan). \
                    order_by('kd_kecamatan','kd_kelurahan').all()
                    
            elif hasattr(data_awal[0], 'group_name') and data_awal[0].group_name in ('PBBM Kecamatan'):
                self.ses['kd_kecamatan'] = kdkec[0]
                kecamatans = Kecamatan.query(). \
                    filter(Kecamatan.kd_kecamatan.in_(kdkec)). \
                    order_by('kd_kecamatan').all()
                    
                kelurahans = Kelurahan.query(). \
                    filter(Kelurahan.kd_kecamatan.in_(kdkec)). \
                    order_by('kd_kecamatan','kd_kelurahan').all()
            else:
                user = UserArea.allow_area(self.req.user.id, iddesa)
                if user :
                    kecamatan = kdkec
                    self.ses['kd_kecamatan'] = kdkec[0]
                    kelurahan = kdkel
                    self.ses['kd_kelurahan'] = kdkel[0]
                    
                    kecamatans = Kecamatan.query(). \
                        filter(Kecamatan.kd_kecamatan.in_(kecamatan)). \
                        order_by('kd_kecamatan').all()
                    kelurahans = Kelurahan.query(). \
                        filter(and_(Kelurahan.kd_kecamatan.in_(kecamatan), Kelurahan.kd_kelurahan.in_(kelurahan))). \
                        order_by('kd_kecamatan','kd_kelurahan').all()
        else:
            kecamatans = Kecamatan.query().order_by('kd_kecamatan').all()
            kelurahans = Kelurahan.query(). \
                filter_by(kd_kecamatan=self.ses['kd_kecamatan']). \
                order_by('kd_kelurahan').all()
                
        return dict(project=self.req.app_name,
                    kecamatans=kecamatans,
                    kelurahans=kelurahans,
                    tahun=datetime.now().year,
                    bukus=bukus_sorted())

    ##########
    # Action #
    ##########
    @view_config(route_name='pbbm-realisasi-all-act', renderer='json',
                 permission='pbb-monitoring')
    def view_act(self):
        request = self.req
        ses = request.session
        url_dict = request.matchdict
        buku_min = BUKUS[self.buku][1]
        buku_max = BUKUS[self.buku][2]
        kini = select(
            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'),
            literal_column("'0'").label("nama"),
            literal_column("0").label("qty_pokok"),
            literal_column("0").label("amt_pokok"),
            literal_column("0").label("qty_lalu"),
            literal_column("0").label("amt_lalu"),
            func.count(PembayaranSppt.kd_propinsi).label('qty_kini'),
            func.sum(PembayaranSppt.jml_sppt_yg_dibayar).label('amt_kini'),
        ). \
            group_by(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, ). \
            having(func.sum(PembayaranSppt.jml_sppt_yg_dibayar).between(buku_min, buku_max)). \
            where(and_(PembayaranSppt.thn_pajak_sppt == str(ses['tahun']),
                        PembayaranSppt.tgl_pembayaran_sppt >= self.dt_awal,
                        PembayaranSppt.tgl_pembayaran_sppt <= self.dt_akhir,
                        PembayaranSppt.kd_propinsi == self.pemda["kd_propinsi"],
                        PembayaranSppt.kd_dati2 == self.pemda["kd_dati2"],
            ))
        lalu = select(
            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'),
            literal_column("'0'").label("nama"),
            literal_column("0").label("qty_pokok"),
            literal_column("0").label("amt_pokok"),
            func.count(PembayaranSppt.kd_propinsi).label('qty_lalu'),
            func.sum(PembayaranSppt.jml_sppt_yg_dibayar).label('amt_lalu'),
            literal_column("0").label("qty_kini"),
            literal_column("0").label("amt_kini"),
        ). \
            group_by(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, ). \
            having(func.sum(PembayaranSppt.jml_sppt_yg_dibayar).between(buku_min, buku_max)). \
            where(and_(PembayaranSppt.thn_pajak_sppt == str(ses['tahun']),
                       PembayaranSppt.tgl_pembayaran_sppt < self.dt_awal,
                       PembayaranSppt.kd_propinsi == self.pemda["kd_propinsi"],
                       PembayaranSppt.kd_dati2 == self.pemda["kd_dati2"],
                       ))
            
        # select(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'),
        #               literal_column("'0'").label("nama"),
        #               literal_column("0").label("qty_pokok"),
        #               literal_column("0").label("amt_pokok"),
        #               literal_column("0").label("qty_lalu"),
        #               literal_column("0").label("amt_lalu"),
        #               func.count(PembayaranSppt.kd_propinsi).label('qty_kini'),
        #               func.sum(PembayaranSppt.jml_sppt_yg_dibayar -
        #                        PembayaranSppt.denda_sppt).label('amt_kini'), ). \
        #             group_by(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, ). \
        #             having(func.sum(PembayaranSppt.jml_sppt_yg_dibayar -
        #                             PembayaranSppt.denda_sppt).between(buku_min, buku_max))
        sppt = select(Sppt.kd_propinsi, Sppt.kd_dati2,
                      Sppt.kd_kecamatan, Sppt.kd_kelurahan,
                      Sppt.kd_blok, Sppt.no_urut, Sppt.kd_jns_op,
                      Sppt.thn_pajak_sppt.label('tahun'),
                      Sppt.nm_wp_sppt.label('nama'),
                      literal_column("1").label("qty_pokok"),
                      Sppt.pbb_yg_harus_dibayar_sppt.label("amt_pokok"),
                      literal_column("0").label("qty_lalu"),
                      literal_column("0").label("amt_lalu"),
                      literal_column("0").label("qty_kini"),
                      literal_column("0").label("amt_kini"),
                      ). \
            where(and_(Sppt.thn_pajak_sppt == str(ses['tahun']),
                       Sppt.status_pembayaran_sppt != '2',
                       Sppt.pbb_yg_harus_dibayar_sppt.between(
                           buku_min, buku_max),
                       Sppt.kd_propinsi == self.pemda["kd_propinsi"],
                       Sppt.kd_dati2 == self.pemda["kd_dati2"],
                       )
                  )
        if url_dict['act'] == 'grid':
            if ses['kd_kecamatan'] == '000':
                kode = Kecamatan.kd_kecamatan
                nama = Kecamatan.nm_kecamatan
                query_union = sppt.union(lalu.union(kini)).alias('query_join')
                query = PbbmDBSession.query().select_from(Kecamatan). \
                    outerjoin(query_union,
                              and_(Kecamatan.kd_propinsi == query_union.c.kd_propinsi,
                                   Kecamatan.kd_dati2 == query_union.c.kd_dati2,
                                   Kecamatan.kd_kecamatan == query_union.c.kd_kecamatan,
                                   )). \
                    group_by(Kecamatan.kd_propinsi, Kecamatan.kd_dati2,
                             Kecamatan.kd_kecamatan, Kecamatan.nm_kecamatan)

            elif ses['kd_kelurahan'] == '000':
                kode = Kelurahan.kd_kelurahan
                nama = Kelurahan.nm_kelurahan
                query_union = sppt.where(Sppt.kd_kecamatan == ses['kd_kecamatan']) \
                    .union(lalu.where(PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'])
                           .union(kini.where(PembayaranSppt.kd_kecamatan == ses['kd_kecamatan']))) \
                    .alias('query_join')
                query = PbbmDBSession.query().select_from(Kelurahan) \
                    .where(Kelurahan.kd_kecamatan == ses["kd_kecamatan"]) \
                    .outerjoin(query_union,
                               and_(
                                   Kelurahan.kd_propinsi == query_union.c.kd_propinsi,
                                   Kelurahan.kd_dati2 == query_union.c.kd_dati2,
                                   Kelurahan.kd_kecamatan == query_union.c.kd_kecamatan,
                                   Kelurahan.kd_kelurahan == query_union.c.kd_kelurahan,
                               )) \
                    .group_by(Kelurahan.kd_propinsi, Kelurahan.kd_dati2,
                              Kelurahan.kd_kecamatan, Kelurahan.kd_kelurahan,
                              Kelurahan.nm_kelurahan)
            else:     
                query_union = sppt.where(and_(Sppt.kd_kecamatan == ses['kd_kecamatan'],
                                            Sppt.kd_kelurahan == ses['kd_kelurahan'])) \
                    .union(lalu.where(PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'],
                                        PembayaranSppt.kd_kelurahan == ses['kd_kelurahan']) \
                    .union(kini.where(PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'],
                                        PembayaranSppt.kd_kelurahan == ses['kd_kelurahan']))) \
                    .alias('query_join')

                kode = query_nop(query_union.c)
                #nama = query_union.c.nama

                query = PbbmDBSession.query().select_from(query_union) \
                    .outerjoin(Sppt, and_(
                        Sppt.kd_propinsi == query_union.c.kd_propinsi,
                        Sppt.kd_dati2 == query_union.c.kd_dati2,
                        Sppt.kd_kecamatan == query_union.c.kd_kecamatan,
                        Sppt.kd_kelurahan == query_union.c.kd_kelurahan,
                        Sppt.kd_blok == query_union.c.kd_blok,
                        Sppt.no_urut == query_union.c.no_urut,
                        Sppt.kd_jns_op == query_union.c.kd_jns_op,
                        Sppt.thn_pajak_sppt == query_union.c.tahun)) \
                    .group_by(query_union.c.kd_propinsi, query_union.c.kd_dati2,
                              query_union.c.kd_kecamatan, query_union.c.kd_kelurahan,
                              query_union.c.kd_blok, query_union.c.no_urut, query_union.c.kd_jns_op,
                              Sppt.nm_wp_sppt)
                
                nama = Sppt.nm_wp_sppt

            columns = [
                ColumnDT(kode, mData="kode"),
                ColumnDT(nama, mData="nama"),
                ColumnDT(func.sum(query_union.c.qty_pokok).label("qty_pokok"),
                         mData='qty_pokok', global_search=False),
                ColumnDT(func.sum(query_union.c.amt_pokok).label("amt_pokok"),
                         mData='amt_pokok', global_search=False),
                ColumnDT(func.sum(query_union.c.qty_lalu).label("qty_lalu"), mData='qty_lalu',
                         global_search=False),
                ColumnDT(func.sum(query_union.c.amt_lalu).label("amt_lalu"), mData='amt_lalu',
                         global_search=False),
                ColumnDT(func.sum(query_union.c.qty_kini).label("qty_kini"), mData='qty_kini',
                         global_search=False),
                ColumnDT(func.sum(query_union.c.amt_kini).label("amt_kini"), mData='amt_kini',
                         global_search=False),
                ColumnDT(literal_column('0').label(
                    "qty_jml"), mData='qty_jml'),
                ColumnDT(literal_column('0').label(
                    "amt_jml"), mData='amt_jml'),
                ColumnDT(literal_column('0').label(
                    "prsn_jml"), mData='prsn_jml'),
                ColumnDT(literal_column('0').label(
                    "qty_sisa"), mData='qty_sisa'),
                ColumnDT(literal_column('0').label(
                    "amt_sisa"), mData='amt_sisa'),
                ColumnDT(literal_column('0').label(
                    "prsn_sisa"), mData='prsn_sisa'),

            ]

        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

# elif ses['kd_kelurahan'] == '000':
# # sppt = sppt.where(and_(Sppt.thn_pajak_sppt == str(ses['tahun']),
# #                        Sppt.status_pembayaran_sppt < '2',
# #                        Sppt.kd_kecamatan == ses['kd_kecamatan'],
# #                        Sppt.pbb_yg_harus_dibayar_sppt.between(buku_min, buku_max))
# #                   )
# # kini = pembayaran.where(and_(PembayaranSppt.thn_pajak_sppt == str(ses['tahun']),
# #                              PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'],
# #                              PembayaranSppt.tgl_pembayaran_sppt.between(
# #                                  self.dt_awal,
# #                                  self.dt_akhir, )))
# # lalu = pembayaran.where(and_(PembayaranSppt.thn_pajak_sppt == str(ses['tahun']),
# #                              PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'],
# #                              PembayaranSppt.tgl_pembayaran_sppt < self.dt_awal, ))
# # query_join = sppt.union(lalu.union(kini)).alias('query_join')
#
# columns = [
#     ColumnDT(Kelurahan.kd_kelurahan, mData="kode"),
#     ColumnDT(Kelurahan.nm_kelurahan, mData="nama"),
#     ColumnDT(func.sum(query_union.c.qty_pokok).label("qty_pokok"),
#              mData='qty_pokok',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.amt_pokok).label("amt_pokok"),
#              mData='amt_pokok',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.qty_lalu).label("qty_lalu"), mData='qty_lalu',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.amt_lalu).label("amt_lalu"), mData='amt_lalu',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.qty_kini).label("qty_kini"), mData='qty_kini',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.amt_kini).label("amt_kini"), mData='amt_kini',
#              global_search=False),
#     ColumnDT(literal_column('0').label("qty_jml"), mData='qty_jml'),
#     ColumnDT(literal_column('0').label("amt_jml"), mData='amt_jml'),
#     ColumnDT(literal_column('0').label("prsn_jml"), mData='prsn_jml'),
#     ColumnDT(literal_column('0').label("qty_sisa"), mData='qty_sisa'),
#     ColumnDT(literal_column('0').label("amt_sisa"), mData='amt_sisa'),
#     ColumnDT(literal_column('0').label("prsn_sisa"), mData='prsn_sisa'),
# ]

#
# else:
# columns = [
#     ColumnDT(func.concat(Sppt.kd_blok,
#                          func.concat(".",
#                                      func.concat(Sppt.no_urut,
#                                                  func.concat(".",
#                                                              Sppt.kd_jns_op)))).label(
#         "kode"),
#         mData="kode"),
#     ColumnDT(query_union.c.nama, mData="nama"),
#     # ColumnDT(literal_column('1').label('qty_pokok'), mData='qty_pokok'),
#     # ColumnDT(Sppt.pbb_yg_harus_dibayar_sppt, mData='amt_pokok',
#     #          global_search=False),
#     # ColumnDT(func.sum(lalu.c.qty, 0).label("qty_lalu"), mData='qty_lalu',
#     #          global_search=False),
#     # ColumnDT(func.coalesce(lalu.c.amt, 0).label("amt_lalu"), mData='amt_lalu',
#     #          global_search=False),
#     # ColumnDT(func.coalesce(kini.c.qty, 0).label("qty_kini"), mData='qty_kini',
#     #          global_search=False),
#     # ColumnDT(func.coalesce(kini.c.amt, 0).label("amt_kini"), mData='amt_kini',
#     #          global_search=False),
#     ColumnDT(func.sum(query_union.c.qty_pokok).label("qty_pokok"),
#              mData='qty_pokok', global_search=False),
#     ColumnDT(func.sum(query_union.c.amt_pokok).label("amt_pokok"),
#              mData='amt_pokok', global_search=False),
#     ColumnDT(func.sum(query_union.c.qty_lalu).label("qty_lalu"), mData='qty_lalu',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.amt_lalu).label("amt_lalu"), mData='amt_lalu',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.qty_kini).label("qty_kini"), mData='qty_kini',
#              global_search=False),
#     ColumnDT(func.sum(query_union.c.amt_kini).label("amt_kini"), mData='amt_kini',
#              global_search=False),
#
#     ColumnDT(literal_column('0').label("qty_jml"), mData='qty_jml'),
#     ColumnDT(literal_column('0').label("amt_jml"), mData='amt_jml'),
#     ColumnDT(literal_column('0').label("prsn_jml"), mData='prsn_jml'),
#     ColumnDT(literal_column('0').label("qty_sisa"), mData='qty_sisa'),
#     ColumnDT(literal_column('0').label("amt_sisa"), mData='amt_sisa'),
#     ColumnDT(literal_column('0').label("prsn_sisa"), mData='prsn_sisa'),
# ]
# query = PbbmDBSession.query().select_from(query_union)
# qry_sub = PbbmDBSession.query(
#     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,
#     func.count(PembayaranSppt.kd_propinsi).label('qty'),
#     func.sum(PembayaranSppt.jml_sppt_yg_dibayar -
#              PembayaranSppt.denda_sppt).label('amt')). \
#     group_by(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, )
#
# lalu_qry = qry_sub.filter(and_(PembayaranSppt.thn_pajak_sppt == str(ses['tahun']),
#                                PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'],
#                                PembayaranSppt.kd_kelurahan == ses['kd_kelurahan'],
#                                PembayaranSppt.tgl_pembayaran_sppt < self.dt_awal, )).subquery()
#
# kini_qry = qry_sub.filter(and_(PembayaranSppt.thn_pajak_sppt == str(ses['tahun']),
#                                PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'],
#                                PembayaranSppt.kd_kelurahan == ses['kd_kelurahan'],
#                                PembayaranSppt.tgl_pembayaran_sppt.between(
#                                    self.dt_awal, self.dt_akhir))).subquery()

# query = PbbmDBSession.query().select_from(Sppt). \
#     filter(Sppt.thn_pajak_sppt == str(ses['tahun']),
#            Sppt.kd_propinsi == ses['kd_kecamatan'],
#            Sppt.kd_kecamatan == ses['kd_kecamatan'],
#            Sppt.kd_kelurahan == ses['kd_kelurahan'],
#            Sppt.status_pembayaran_sppt != '2',
#            Sppt.pbb_yg_harus_dibayar_sppt.between(buku_min, buku_max),
#            ). \
#     outerjoin(
#     lalu,
#     and_(
#         Sppt.kd_propinsi == lalu_qry.c.kd_propinsi,
#         Sppt.kd_dati2 == lalu_qry.c.kd_dati2,
#         Sppt.kd_kecamatan == lalu_qry.c.kd_kecamatan,
#         Sppt.kd_kelurahan == lalu_qry.c.kd_kelurahan,
#         Sppt.kd_blok == lalu_qry.c.kd_blok,
#         Sppt.no_urut == lalu_qry.c.no_urut,
#         Sppt.kd_jns_op == lalu_qry.c.kd_jns_op,
#         Sppt.thn_pajak_sppt == lalu_qry.c.thn_pajak_sppt,
#     )). \
#     outerjoin(
#     kini_qry,
#     (
#         Sppt.kd_propinsi == kini_qry.c.kd_propinsi,
#         Sppt.kd_dati2 == kini_qry.c.kd_dati2,
#         Sppt.kd_kecamatan == kini_qry.c.kd_kecamatan,
#         Sppt.kd_kelurahan == kini_qry.c.kd_kelurahan,
#         Sppt.kd_blok == kini_qry.c.kd_blok,
#         Sppt.no_urut == kini_qry.c.no_urut,
#         Sppt.kd_jns_op == kini_qry.c.kd_jns_op,
#         Sppt.thn_pajak_sppt == kini_qry.c.thn_pajak_sppt,
#     ))

# row_table = DataTables(request.GET, query, columns)
# return row_table.output_result()