Add monitoring views and templates for Tempat Pembayaran reporting

- Created a new view for monitoring Tempat Pembayaran (realisasi_tp.py) that handles listing and actions related to payment locations.
- Added a new template (list_tp.pt) for displaying the payment location data in a table format with date filters.
- Updated base template (base.pt) to include a dropdown for "Realisasi" with links to the new Tempat Pembayaran view.
- Introduced a copy of the base template (base copy.pt) for potential future modifications.
- Enhanced the existing base template by removing commented-out sections and organizing the navigation structure.
1 parent 42acbace
...@@ -14,8 +14,8 @@ pyramid.debug_notfound = true ...@@ -14,8 +14,8 @@ pyramid.debug_notfound = true
pyramid.debug_routematch = true pyramid.debug_routematch = true
pyramid.debug_templates = true pyramid.debug_templates = true
default_locale_name = id default_locale_name = id
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2 sqlalchemy.url = postgresql://aagusti:a@localhost:5432/tangsel
session.url = postgresql://aagusti:a@localhost:5432/demo2 session.url = postgresql://aagusti:a@localhost:5432/tangsel
pyramid.includes = pyramid.includes =
pyramid_tm pyramid_tm
pyramid_beaker pyramid_beaker
...@@ -86,7 +86,7 @@ map_center = ...@@ -86,7 +86,7 @@ map_center =
;center.email_password = ;center.email_password =
;center.smtp_server = ;center.smtp_server =
; ;
;#_host = http://localhost:5433/demo2 ;#_host = http://localhost:5433/tangsel
; ;
;unoconv_py = C:\Program Files\LibreOffice\program\python.exe ;unoconv_py = C:\Program Files\LibreOffice\program\python.exe
;unoconv_bin = C:\product\venv-lates\Scripts\unoconv ;unoconv_bin = C:\product\venv-lates\Scripts\unoconv
...@@ -188,11 +188,11 @@ format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s ...@@ -188,11 +188,11 @@ format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
[alembic_ziggurat] [alembic_ziggurat]
script_location = ziggurat_foundations:migrations script_location = ziggurat_foundations:migrations
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2 sqlalchemy.url = postgresql://aagusti:a@localhost:5432/tangsel
[alembic_base] [alembic_base]
script_location = tangsel.base.scripts:alembic script_location = tangsel.base.scripts:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2 sqlalchemy.url = postgresql://aagusti:a@localhost:5432/tangsel
[pytest] [pytest]
filterwarnings = filterwarnings =
......
...@@ -85,21 +85,24 @@ ...@@ -85,21 +85,24 @@
<li tal:condition="has_permission(request, ['user-view', 'user-edit'])"> <li tal:condition="has_permission(request, ['user-view', 'user-edit'])">
<a href="${home}/group">Group</a> <a href="${home}/group">Group</a>
</li> </li>
<li tal:condition="has_permission(request, 'routes')"><a href="${home}/routes">Routes</a></li> <li tal:condition="has_permission(request, 'partner')">
<li tal:condition="has_permission(request, 'upload-logo')"><a href="${home}/upload/logo">Upload Logo</a> <a href="${home}/partner">Partner</a>
</li> </li>
<li tal:condition="has_permission(request, 'upload-logo')">
<a href="${home}/upload/logo">Upload Logo</a>
</li>
<!--
<li tal:condition="has_permission(request, 'routes')">
<a href="${home}/routes">Routes</a></li>
<li tal:condition="has_permission(request, 'parameter')"> <li tal:condition="has_permission(request, 'parameter')">
<a href="${home}/parameter">Parameter</a> <a href="${home}/parameter">Parameter</a>
</li> </li>
<li tal:condition="has_permission(request, 'departemen')"> <li tal:condition="has_permission(request, 'departemen')">
<a href="${home}/departemen">Departemen</a> <a href="${home}/departemen">Departemen</a>
</li> </li>
<li tal:condition="has_permission(request, 'partner')">
<a href="${home}/partner">Partner</a>
</li>
<li tal:condition="has_permission(request, 'parameter')"> <li tal:condition="has_permission(request, 'parameter')">
<a href="${home}/parameter">Parameter</a> <a href="${home}/parameter">Parameter</a>
</li> </li> -->
</ul> </ul>
</li> </li>
......
...@@ -27,15 +27,20 @@ class ListSchema(colander.Schema): ...@@ -27,15 +27,20 @@ class ListSchema(colander.Schema):
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
user_id = colander.SchemaNode( user_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=User.get_list()), widget=widget.SelectWidget(),
oid="user_id", oid="user_id",
title="User", title="User",
) )
desa_id = colander.SchemaNode( desa_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=ResDesa.get_list()), widget=widget.SelectWidget(),
oid="desa_id", oid="desa_id",
title="Kelurahan/Desa", ) title="Kelurahan/Desa", )
def after_bind(self,node, kw):
# Set the default value for user_id to the current user
node["user_id"].widget.values = User.get_list()
node["desa_id"].widget.values = ResDesa.get_list()
class EditSchema(AddSchema): class EditSchema(AddSchema):
......
...@@ -29,12 +29,20 @@ routes = [ ...@@ -29,12 +29,20 @@ routes = [
'/pbbm/realisasi/all/{act}/act', 'PBBM Realisasi All Act'), '/pbbm/realisasi/all/{act}/act', 'PBBM Realisasi All Act'),
('pbbm-realisasi-all-rpt', ('pbbm-realisasi-all-rpt',
'/pbbm/realisasi/all/{rpt}/rpt', 'PBBM Report Realisasi All'), '/pbbm/realisasi/all/{rpt}/rpt', 'PBBM Report Realisasi All'),
('pbbm-realisasi-tp', '/pbbm/realisasi/tp', 'PBBM Realisasi TP'),
('pbbm-realisasi-tp-act',
'/pbbm/realisasi/tp/{act}/act', 'PBBM Realisasi TP'),
('pbbm-realisasi-kurang', '/pbbm/realisasi/kurang', 'PBBM Realisasi KB'), ('pbbm-realisasi-kurang', '/pbbm/realisasi/kurang', 'PBBM Realisasi KB'),
('pbbm-realisasi-kurang-act', ('pbbm-realisasi-kurang-act',
'/pbbm/realisasi/kurang/{act}/act', 'PBBM Realisasi KB Act'), '/pbbm/realisasi/kurang/{act}/act', 'PBBM Realisasi KB Act'),
('pbbm-realisasi-lebih', '/pbbm/realisasi/lebih', 'PBBM Realisasi LB'), ('pbbm-realisasi-lebih', '/pbbm/realisasi/lebih', 'PBBM Realisasi LB'),
('pbbm-realisasi-lebih-act', ('pbbm-realisasi-lebih-act',
'/pbbm/realisasi/lebih/{act}/act', 'PBBM Realisasi LB Act'), '/pbbm/realisasi/lebih/{act}/act', 'PBBM Realisasi LB Act'),
('pbbm-realisasi-harian', '/pbbm/realisasi/harian', 'PBBM Realisasi Harian'),
('pbbm-realisasi-harian-add', '/pbbm/realisasi/harian/add',
'PBBM Tambah Realisasi Harian'),
('pbbm-realisasi-harian-act',
'/pbbm/realisasi/harian/{act}/act', 'PBBM Act Realisasi Harian'),
('pbbm-sejarah', '/pbbm/sejarah', 'PBBM Sejarah SPPT'), ('pbbm-sejarah', '/pbbm/sejarah', 'PBBM Sejarah SPPT'),
('pbbm-sejarah-act', '/pbbm/sejarah/{act}/act', 'PBBM Sejarah SPPT Act'), ('pbbm-sejarah-act', '/pbbm/sejarah/{act}/act', 'PBBM Sejarah SPPT Act'),
('pbbm-dph', '/pbbm/dph', 'PBBM DPH'), ('pbbm-dph', '/pbbm/dph', 'PBBM DPH'),
...@@ -98,9 +106,7 @@ routes = [ ...@@ -98,9 +106,7 @@ routes = [
('pbbm-dhkp-act', '/pbbm/dhkp/{act}/act', 'PBBM DHKP Act'), ('pbbm-dhkp-act', '/pbbm/dhkp/{act}/act', 'PBBM DHKP Act'),
('pbbm-dhkp-rpt', '/pbbm/dhkp/{rpt}/rpt', 'PBBM Report DHKP'), ('pbbm-dhkp-rpt', '/pbbm/dhkp/{rpt}/rpt', 'PBBM Report DHKP'),
('pbbm-realisasi-harian', '/pbbm/realisasi/harian', 'PBBM Realisasi Harian'),
('pbbm-realisasi-harian-add', '/pbbm/realisasi/harian/add', 'PBBM Tambah Realisasi Harian'),
('pbbm-realisasi-harian-act', '/pbbm/realisasi/harian/{act}/act', 'PBBM Act Realisasi Harian'),
('pbbm-pelayanan', '/pbbm/pelayanan', 'Pelayanan'), ('pbbm-pelayanan', '/pbbm/pelayanan', 'Pelayanan'),
('pbbm-pelayanan-act', '/pbbm/pelayanan/{act}/act', 'Pelayanan Action'), ('pbbm-pelayanan-act', '/pbbm/pelayanan/{act}/act', 'Pelayanan Action'),
] ]
......
...@@ -67,7 +67,7 @@ class BaseView(base_views.BaseView): ...@@ -67,7 +67,7 @@ class BaseView(base_views.BaseView):
self.ses["dt_awal"] = self.dt_awal self.ses["dt_awal"] = self.dt_awal
self.akhir = self.ses.get('akhir', dmy(now)) self.akhir = self.ses.get('akhir', dmy(now))
self.akhir = self.params.get('akhir', self.awal) self.akhir = self.params.get('akhir', self.akhir)
try: try:
self.dt_akhir = date_from_str(self.akhir) self.dt_akhir = date_from_str(self.akhir)
except ValueError: except ValueError:
......
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-lebih', 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-lebih-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()
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
<!-- <li>
<a href="${home}/pbbm/dph" class="dropdown-toggle" data-toggle="dropdown"><i
class="fa fa-sm fa-money-bill"></i><span class="menu-item-parent">DPH</span></a>
<ul>
<li tal:attributes="class r_name in r_dph and 'active'"><a href="${home}/pbbm/dph">Penerimaan</a></li>
<li><a href="${home}/pbbm/dph/rekap">Rekap</a></li>
</ul>
</li> -->
<!-- <li>
<a href="${home}/pbbm/dph" class="dropdown-toggle" data-toggle="dropdown"><i
class="fa fa-sm fa-fw fa-signal"></i><span class="menu-item-parent">Realisasi</span></a>
<ul>
<li tal:attributes="class r_name in r_realisasi_all and 'active'">
<a href="${home}/pbbm/realisasi/tp">Tempat Pembayaran</a>
</li>
<li tal:attributes="class r_name in r_realisasi_all and 'active'">
<a href="${home}/pbbm/realisasi/all">Evaluasi</a>
</li>
<li tal:attributes="class r_name in r_realisasi_harian and 'active'"><a
href="${home}/pbbm/realisasi/harian">Harian</a></li>
</ul>
</li> -->
<li tal:attributes="class (r_name in r_pelayanan) and 'active'">
<a href="${home}/pbbm/pelayanan"><i class="fa fa-sm fa-fw fa-user-tie"></i><span
class="menu-item-parent">Pelayanan</span></a>
</li>
</ul>
<!-- <ul class="nav navbar-nav">
<li tal:attributes="class request.path == '/' and 'active'"><a href="${home}/pbbm">Beranda</a></li>
<li>
<a href="${home}/pbbm/eis">EIS</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">DPH <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="${home}/pbbm/dph">Penerimaan</a></li> -->
<!-- <li><a href="${home}/pbbm/dph/batal">Pembatalan</a></li> -->
<!-- <li><a href="${home}/pbbm/dph/download">Download</a></li> -->
<!-- </ul>-->
<!-- </li> -->
<!-- <li> -->
<!-- <a href="${home}/pbbm/realisasi/all">Realisasi</a> -->
<!-- </li> -->
<!-- <li>
<a href="${home}/pbbm/piutang">Piutang</a>
</li>
<li>
<a href="${home}/pbbm/sejarah">Sejarah</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Referensi <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="${home}/pbbm/kecamatan">Kecamatan</a></li>
<li><a href="${home}/pbbm/kelurahan">Kelurahan</a></li>
<li><a href="${home}/pbbm/target">Target</a></li>
</ul>
</li>
</ul> -->
\ No newline at end of file \ No newline at end of file
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
</js> </js>
<ul metal:fill-slot="navs"> <ul metal:fill-slot="navs">
<li tal:attributes="class request.path == '/' and 'active'"><a href="${home}/pbbm"><i <li tal:attributes="class request.path == '/' and 'active'"><a href="${home}/pbbm"><i
class="fa fa-lg fa-fw fa-home"></i><span class="menu-item-parent">Beranda</span></a> class="fa fa-lg fa-fw fa-home"></i><span class="menu-item-parent">Beranda</span></a>
</li> </li>
...@@ -36,39 +35,36 @@ ...@@ -36,39 +35,36 @@
<a href="${home}/pbbm/dhkp"><i class="fa fa-sm fa-fw fa-money-bill-transfer"></i><span <a href="${home}/pbbm/dhkp"><i class="fa fa-sm fa-fw fa-money-bill-transfer"></i><span
class="menu-item-parent">DHKP</span></a> class="menu-item-parent">DHKP</span></a>
</li> </li>
<li>
<a href="${home}/pbbm/dph" class="dropdown-toggle" data-toggle="dropdown"><i
class="fa fa-sm fa-money-bill"></i><span class="menu-item-parent">DPH</span></a>
<ul>
<li tal:attributes="class r_name in r_dph and 'active'"><a href="${home}/pbbm/dph">Penerimaan</a></li>
<li><a href="${home}/pbbm/dph/rekap">Rekap</a></li>
</ul>
</li>
<li>
<a href="${home}/pbbm/dph" class="dropdown-toggle" data-toggle="dropdown"><i
class="fa fa-sm fa-fw fa-signal"></i><span class="menu-item-parent">Realisasi</span></a>
<ul>
<li tal:attributes="class r_name in r_realisasi_all and 'active'"><a
href="${home}/pbbm/realisasi/all">Evaluasi</a></li>
<li tal:attributes="class r_name in r_realisasi_harian and 'active'"><a
href="${home}/pbbm/realisasi/harian">Harian</a></li>
</ul>
</li>
<li tal:attributes="class (r_name in r_piutang) and 'active'"> <li tal:attributes="class (r_name in r_piutang) and 'active'">
<a href="${home}/pbbm/piutang"><i class="fa fa-sm fa-fw fa-credit-card"></i><span <a href="${home}/pbbm/piutang"><i class="fa fa-sm fa-fw fa-credit-card"></i><span
class="menu-item-parent">Piutang</span></a> class="menu-item-parent">Piutang</span></a>
</li> </li>
<li tal:attributes="class (r_name in r_sejarah) and 'active'"> <li tal:attributes="class (r_name in r_sejarah) and 'active'">
<a href="${home}/pbbm/sejarah"><i class="fa fa-sm fa-fw fa-history"></i><span <a href="${home}/pbbm/sejarah"><i class="fa fa-sm fa-fw fa-history"></i><span
class="menu-item-parent">Sejarah</span></a> class="menu-item-parent">Sejarah</span></a>
</li> </li>
<li tal:attributes="class (r_name in r_pelayanan) and 'active'">
<a href="${home}/pbbm/pelayanan"><i class="fa fa-sm fa-fw fa-user-tie"></i><span <li>
class="menu-item-parent">Pelayanan</span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="menu-item-parent">Realisasi <b class="caret"></b></span>
</a>
<ul>
<li tal:attributes="class r_name == 'pbbm-realisasi-all' and 'active'">
<a href="${home}/pbbm/realisasi/all">Akumulasi</a>
</li>
<li tal:attributes="class r_name == 'pbbm-realisasi-tp' and 'active'">
<a href="${home}/pbbm/realisasi/tp">Tempat Pembayaran</a>
</li>
<!-- <li tal:attributes="class r_name == 'pbbm-realisasi-lebih' and 'active'">
<a href="${home}/pbbm/realisasi/lebih">Lebih Bayar</a>
</li>
<li tal:attributes="class r_name == 'pbbm-realisasi-kurang' and 'active'">
<a href="${home}/pbbm/realisasi/kurang">Kurang Bayar</a>
</li> -->
</ul>
</li> </li>
<li tal:condition="has_permission(request, 'pbbm-admin')"> <li tal:condition="has_permission(request, 'pbbm-admin')">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-sm fa-fw fa-gears"></i> <i class="fa fa-sm fa-fw fa-gears"></i>
...@@ -92,46 +88,4 @@ ...@@ -92,46 +88,4 @@
</li> </li>
</ul> </ul>
<!-- <ul class="nav navbar-nav">
<li tal:attributes="class request.path == '/' and 'active'"><a href="${home}/pbbm">Beranda</a></li>
<li>
<a href="${home}/pbbm/eis">EIS</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">DPH <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="${home}/pbbm/dph">Penerimaan</a></li> -->
<!-- <li><a href="${home}/pbbm/dph/batal">Pembatalan</a></li> -->
<!-- <li><a href="${home}/pbbm/dph/download">Download</a></li> -->
<!-- </ul>
</li>
<li>
<a href="${home}/pbbm/realisasi/all">Realisasi</a>
</li> -->
<!-- <li class="dropdown"> -->
<!-- <a href="#" class="dropdown-toggle" data-toggle="dropdown">Realisasi <b class="caret"></b></a> -->
<!-- <ul class="dropdown-menu"> -->
<!-- <li><a href="${home}/pbbm/realisasi/all">Akumulasi</a></li> -->
<!-- <li><a href="${home}/pbbm/realisasi/lebih">Lebih Bayar</a></li> -->
<!-- <li><a href="${home}/pbbm/realisasi/kurang">Kurang Bayar</a></li> -->
<!-- </ul> -->
<!-- </li> -->
<!-- <li>
<a href="${home}/pbbm/piutang">Piutang</a>
</li>
<li>
<a href="${home}/pbbm/sejarah">Sejarah</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Referensi <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="${home}/pbbm/kecamatan">Kecamatan</a></li>
<li><a href="${home}/pbbm/kelurahan">Kelurahan</a></li>
<li><a href="${home}/pbbm/target">Target</a></li>
</ul>
</li>
</ul> -->
</html> </html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: ./base.pt">
<div metal:fill-slot="content">
<tal metal:use-macro="load:list_include.pt" />
<div class="jarviswidget jarviswidget-color-blueLight"> <!-- jarviswidget -->
<header role="heading">
<h2>
<i class="fa fa-fw fa-table"></i>
${request.title}
</h2>
</header>
<div role="content">
<div class="widget-body"> <!-- widget-body -->
<div class="dataTables_wrapper form-inline no-footer">
<div class="dt-toolbar" style="padding: 0; margin-bottom: 5px; background: #fff; border-bottom: none;">
<!-- dt-toolbar -->
<div class="col-xs-12 col-md-12 col-sm-10">
<div class="dataTables_filter">
<label> <!-- Tgl.realisasi -->
<span class="input-group-addon text-left" id="label-awal"
style="width: 120px!important;padding-left: 10px!important;">Tgl. Laporan</span>
<input class="form-control" id="awal" name="awal" type="text" value="${request.session['awal']}" />
<span class="input-group-addon" id="label-akhir" style="width: 50px!important;">s.d.</span>
<input class="form-control" id="akhir" name="akhir" type="text" value="${request.session['akhir']}" />
</label>
</div>
</div>
</div>
<div class="dt-toolbar" style="padding: 0; margin-bottom: 5px; background: #fff; border-bottom: none;">
<!-- dt-toolbar -->
<div class="col-xs-12 col-sm-10">
<!-- input tp -->
<div class="dataTables_filter" tal:define="kd_tp request.session.get('kd_tp','00')">
<label>
<span class="input-group-addon text-left" id="label-buku"
style="width: 120px!important;padding-left: 10px!important;">Tempat Pembayaran</span>
<select id="tp" name="tp" class="form-control" style="width:150px;">
<option value="00">Semua</option>
<tal:block tal:repeat="tp tps">
<option tal:condition="tp.kd_tp != kd_tp" tal:attributes="value tp.kd_tp" tal:content="tp.nm_tp">
</option>
<option tal:condition="tp.kd_tp == kd_tp" tal:attributes="value tp.kd_tp; selected True"
tal:content="tp.nm_tp">
</option>
</tal:block>
</select>
</label>
</div>
<!-- /input TP -->
</div>
</div> <!-- dt-toolbar -->
<!--class="display dataTables" class="ui-state-default" style="border:solid #EDEDED; "-->
</div>
<table id="table1" class="display table table-bordered table-hover table-condensed"
style="width: 100%; border: #0c0c0c;">
<thead>
<tr>
<th class="center">Kode</th>
<th class="center">Uraian</th>
<th class="center">Jumlah</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<th>&nbsp;</th>
<th class="right">Total</th>
<th></th>
</tr>
</tfoot>
</table>
</div> <!-- /widget-body -->
</div> <!-- /role-content -->
</div> <!-- /jarviswidget -->
</div>
<div metal:fill-slot="scripts">
<link href="${home}/static/js/plugin/bootstrap-datepicker/css/bootstrap-datepicker.min.css" rel="stylesheet">
<script src="${home}/static/js/plugin/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script>
<script src="${home}/static/js/plugin/bootstrap-timepicker/bootstrap-timepicker.min.js"></script>
<script>
var mID;
var mThn;
var oTable;
var iPos;
var oTableUrl = "${home}/pbbm/realisasi/tp";
var oTableUri = oTableUrl + "/grid/act";
$(document).ready(function () {
$('#awal, #akhir').datepicker({
format: "dd-mm-yyyy"
});
$("#tp, #awal, #akhir").change(function () {
var awal = $("#awal").val();
var akhir = $("#akhir").val();
var kd_tp = $("#tp").val();
window.location = oTableUrl + "?kd_tp=" + kd_tp + "&awal=" + awal + "&akhir=" + akhir;
});
});
function formatNumber(toFormat) {
return toFormat.toString().replace(
/\B(?=(\d{3})+(?!\d))/g, "."
);
};
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom: '<"row"<"col-md-6"<"toolbar">Bl><"col-md-6"fr>>tip',
buttons: [
'copyHtml5',
'excelHtml5',
'csvHtml5',
'pdfHtml5'
],
processing: true,
serverSide: true,
ajax: oTableUri,
stateSave: true,
scrollCollapse: true,
sort: true,
info: false,
filter: true,
autoWidth: false,
paginate: true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columndefs: [{
"targets": [2, 3, 8, 9, 10],
"render": $.fn.dataTable.render.number('.', ',', 0, ''),
}],
columns: [
{ "data": "kode", "width": "200px", "className": "text-center", },
{ "data": "nama", "class": "left" },
{
"data": 'jumlah', "width": "150px", "class": "text-right",
"render": $.fn.dataTable.render.number('.', ',', 0, '')
},
],
"language": {
"search": "Cari: ",
"paginate": {
"first": "Awal ",
"last": "Akhir ",
"previous": "Mundur ",
"next": "Maju ",
},
"lengthMenu": " _MENU_ baris "
},
"footerCallback": function (row, data, start, end, display) {
var api = this.api(), data;
// Remove the formatting to get integer data for summation
var intVal = function (i) {
return typeof i === 'string' ?
i.replace(/[\$,]/g, '') * 1 :
typeof i === 'number' ?
i : 0;
};
// Total over all pages
//total = api
// .column( 4 )
// .data()
// .reduce( function (a, b) {
// return intVal(a) + intVal(b);
// }, 0 );
// Total over this page
pageTotal = api
.column(2, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Update footer
$(api.column(2).footer()).html(
formatNumber(pageTotal)
);// +' ( $'+ total +' total)'
}
});
// '<button id="btn_add" class="btn btn btn-success" type="button"><i class="fa fa-fw fa-plus"></i>&nbsp;Tambah</button>',
// ' <button id="btn_close" class="btn btn btn-warning" type="button"><i class="fa fa-fw fa-undo"></i>&nbsp;Tutup</button>',
var tb_array = [
'<div class="btn-group pull-left">',
'<button id="btn_pdf" class="btn btn btn-primary" type="button"><i class="fa fa-fw fa-file"></i>&nbsp;PDF</button>',
'<button id="btn_csv" class="btn btn btn-primary" type="button"><i class="fa fa-fw fa-file"></i>&nbsp;CSV</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$("#btn_close").click(function () {
window.location = '/pbbm';
return false;
});
$('#btn_pdf').click(function () {
url = oTableUrl + "/pdf/rpt"
window.open(url);
});
$('#btn_csv').click(function () {
url = oTableUrl + "/csv/rpt"
window.open(url);
});
});
</script>
</div>
</html>
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!