realisasi_harian.py 6.67 KB
from datetime import datetime
import logging
from pyramid.httpexceptions import (HTTPFound, )
from pyramid.view import (view_config)
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
from tangsel.tools.pbb import FixDati2, nop_formatted, query_nop, FixKelurahan
from tangsel.models import DBSession
from sqlalchemy import not_, func, or_, desc, and_

log = logging.getLogger(__name__)

class View(BaseView):
    def __init__(self, request):
        super().__init__(request)
        self.table = PembayaranSppt

    ########
    # List #
    ########
    @view_config(route_name='pbbm-realisasi-harian', renderer='templates/list_realisasi_harian.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)

    ##########
    # Action #
    ##########
    @view_config(route_name='pbbm-realisasi-harian-act', renderer='json',
                 permission='pbb-monitoring')
    def view_act(self):
        request = self.req
        ses = request.session
        url_dict = request.matchdict
        if url_dict['act'] == 'grid':
            columns = [
                ColumnDT(query_nop(self.table), mData="nop"),
                ColumnDT(PembayaranSppt.thn_pajak_sppt, mData='tahun'),
                ColumnDT(Sppt.nm_wp_sppt, mData='nama'),
                ColumnDT(PembayaranSppt.pembayaran_sppt_ke, mData='ke'),
                ColumnDT(Sppt.pbb_yg_harus_dibayar_sppt,mData='ketetapan'),
                ColumnDT(PembayaranSppt.jml_sppt_yg_dibayar,mData='pokok'),
                ColumnDT(PembayaranSppt.denda_sppt, mData='denda'),
                ColumnDT((PembayaranSppt.jml_sppt_yg_dibayar+PembayaranSppt.denda_sppt), mData='bayar'),
                ColumnDT(PembayaranSppt.tgl_pembayaran_sppt,mData='tgl_pembayaran'),
            ]
            query = PbbmDBSession.query().select_from(PembayaranSppt). \
                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)). \
                filter(and_(PembayaranSppt.tgl_pembayaran_sppt.between(self.dt_awal, self.dt_akhir),
                            PembayaranSppt.jml_sppt_yg_dibayar > 0))

            if ses['kd_kecamatan'] != '000':
                query = query.filter(PembayaranSppt.kd_kecamatan == ses['kd_kecamatan'])
            if ses['kd_kelurahan'] != '000':
                query = query.filter(PembayaranSppt.kd_kelurahan == ses['kd_kelurahan'])
            if str(ses['tahun']) != '0000':
                query = query.filter(PembayaranSppt.thn_pajak_sppt == ses['tahun'])

            query = query.order_by( PembayaranSppt.tgl_pembayaran_sppt,
                                    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,
                                    PembayaranSppt.pembayaran_sppt_ke)

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


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