dhkp.py 6.81 KB
from datetime import datetime

from pyramid.httpexceptions import (HTTPFound, )
from pyramid.view import (view_config)
from sqlalchemy import func, and_

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

class View(BaseView):
    ########
    # List #
    ########
    @view_config(route_name='pbbm-dhkp', renderer='templates/list_dhkp.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-dhkp-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]

        if url_dict['act'] == 'grid':
            if ses['kd_kecamatan'] == '000':
                columns = [
                    ColumnDT(Kecamatan.kd_kecamatan, mData="kode"),
                    ColumnDT(Kecamatan.nm_kecamatan, mData="nama"),
                    ColumnDT(func.sum(Sppt.pbb_yg_harus_dibayar_sppt), mData='jumlah',
                             global_search=False),
                ]
                query = PbbmDBSession.query().select_from(Kecamatan). \
                    filter(and_(Sppt.thn_pajak_sppt == str(ses['tahun']),
                                Sppt.pbb_yg_harus_dibayar_sppt.between(buku_min, buku_max),
                                Sppt.status_pembayaran_sppt != '2'
                                )). \
                    join(Sppt, and_(Kecamatan.kd_kecamatan == Sppt.kd_kecamatan)). \
                    group_by(Kecamatan.kd_kecamatan, Kecamatan.nm_kecamatan). \
                    order_by(Kecamatan.kd_kecamatan)

            elif ses['kd_kelurahan'] == '000':
                columns = [
                    ColumnDT(Kelurahan.kd_kelurahan, mData="kode"),
                    ColumnDT(Kelurahan.nm_kelurahan, mData="nama"),
                    ColumnDT(func.sum(Sppt.pbb_yg_harus_dibayar_sppt), mData='jumlah',
                             global_search=False),
                ]
                query = PbbmDBSession.query().select_from(Kelurahan). \
                    filter(and_(Kelurahan.kd_kecamatan == ses['kd_kecamatan'],
                                Sppt.thn_pajak_sppt == str(ses['tahun']),
                                Sppt.pbb_yg_harus_dibayar_sppt.between(buku_min, buku_max),
                                Sppt.status_pembayaran_sppt != '2'
                                )). \
                    join(Sppt, and_(Kelurahan.kd_kecamatan == Sppt.kd_kecamatan,
                                    Kelurahan.kd_kelurahan == Sppt.kd_kelurahan)). \
                    group_by(Kelurahan.kd_kelurahan, Kelurahan.nm_kelurahan). \
                    order_by(Kelurahan.kd_kelurahan)

            else:
                columns = [
                    ColumnDT(Sppt.nop, mData="kode"),
                    ColumnDT(Sppt.nm_wp_sppt, mData="nama"),
                    ColumnDT(Sppt.pbb_yg_harus_dibayar_sppt, mData='jumlah'),
                ]
                query = PbbmDBSession.query().select_from(Sppt). \
                    filter(and_(Sppt.thn_pajak_sppt == str(ses['tahun']),
                                Sppt.pbb_yg_harus_dibayar_sppt.between(buku_min, buku_max),
                                Sppt.status_pembayaran_sppt != '2'
                                )). \
                    group_by(Sppt.nop, Sppt.thn_pajak_sppt, Sppt.nm_wp_sppt, Sppt.pbb_yg_harus_dibayar_sppt). \
                    order_by(Sppt.nop)
                    
                query = query.filter(and_(Sppt.kd_kecamatan == ses['kd_kecamatan'], Sppt.kd_kelurahan == ses['kd_kelurahan']))
                
            row_table = DataTables(request.GET, query, columns)
            return row_table.output_result()

def route_list(request):
    return HTTPFound(location=request.route_url('pbbm-dhkp'))