perbaikan data

1 parent 552233ea
Eksekutif Summary
\ No newline at end of file
Eksekutif Summary Pajak Daerah
Template
Realisasi Harian
Total REalisasi
Grafik Jml Transaksi
Filter Graphic
7 Hari Terakhir
7 mInggu Terakhir
7 Bulan Terakhir
Trend Nilai
Trend Quantity
Trend Kumulatif
Tren Kumulatif Unit
Rincian Realisasi Kecamatan (Jika Ada)
Menu
Pendapatan Daerah
Pajak Daerah
Retribusi Daerah
Rincian Mata Pajak
PBB
BPHTB
Hotel
Restoran
Hiburan
Wallet
Minerba
Parkir
PJU
Air Tanah
Reklame
Opsen
from datetime import timedelta, datetime
import sys
from opensipkd.base.models import (
Base, DBSession, CommonModel, DefaultModel, NamaModel, KodeModel, DBSession,
TABLE_ARGS
)
from sqlalchemy import (Column, Integer, DateTime, String, Text, ForeignKey, Float,
Boolean, BigInteger, SmallInteger, desc, asc, Date, Time,
UniqueConstraint, func)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import engine_from_config
from opensipkd.tools import get_settings
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from pyramid.paster import (
get_appsettings,
setup_logging,
)
from ..tools import create_now
PCDBSession = scoped_session(sessionmaker())
PCBase = declarative_base()
class PaymentPBB(PCBase, DefaultModel):
__tablename__ = 'pbb_report'
__table_args__ = {'schema': 'public'}
id = Column(BigInteger, primary_key=True)
stan = Column(String(6), nullable=False)
ntb = Column(String(32), nullable=False)
kd_propinsi = Column(String(2))
kd_dati2 = Column(String(2))
kd_kecamatan = Column(String(3))
kd_kelurahan = Column(String(3))
kd_blok = Column(String(3))
no_urut = Column(String(4))
kd_jns_op = Column(String(1))
thn_pajak_sppt = Column(String(4))
pembayaran_sppt_ke = Column(SmallInteger)
nm_wp_sppt = Column(String(30))
tgl_pembayaran_sppt = Column(DateTime)
tgl_rekam_byr_sppt = Column(DateTime)
tgl_inquiry = Column(DateTime)
pbb_yg_harus_dibayar_sppt = Column(Integer)
denda_sppt = Column(Integer)
jml_sppt_yg_dibayar = Column(Integer)
channel_kode = Column(String(6))
channel_nama = Column(String(256))
user_id = Column(String(128))
iso_request = Column(String(2048))
discount = Column(BigInteger)
bank_id = Column(String(4))
tgl_batal = Column(DateTime(timezone=True))
__table_args__ = (
UniqueConstraint('stan', 'ntb'),
)
@classmethod
def sum_data(cls):
return DBSession.query(
func.to_char(cls.tgl_pembayaran_sppt,
'yyyy-mm-dd').label('tanggal'),
func.sum(cls.jml_sppt_yg_dibayar).label('bayar'),
func.sum(cls.denda_sppt).label('denda'))\
.group_by(func.to_char(cls.tgl_pembayaran_sppt, 'yyyy-mm-dd'))
@classmethod
def sum_daily(cls, length=0):
now = datetime.now()
tod = now.date
tom = tod + timedelta(days=1)
if length:
tod = tod-timedelta(days=length)
return cls.sum_data().filter(cls.tgl_pembayaran_sppt.between(tod, tom))
# baru dari db BPHTB
class PaymentBPHTB(PCBase, CommonModel):
__tablename__ = 'bphtb_report'
__table_args__ = {'schema': 'public'}
id = Column(Integer, primary_key=True)
stan = Column(String(6), nullable=False)
ntb = Column(String(32), nullable=False)
tgl = Column(Date, nullable=False)
jam = Column(Time, nullable=False)
invoice_id = Column(String(24), nullable=False)
nop = Column(String(24), nullable=False)
wp_nama = Column(String(50), nullable=False)
wp_alamat = Column(String(100), nullable=False)
op_alamat = Column(String(100), nullable=False)
npop = Column(BigInteger)
bumi_luas = Column(BigInteger)
bng_luas = Column(BigInteger)
nilai_bphtb = Column(BigInteger)
channel_id = Column(String(6))
channel_nama = Column(String(256), nullable=False)
# user_id = Column(String(128), nullable=False)
jenis_perolehan = Column(String(123), nullable=False)
ppat = Column(String(256), nullable=False)
tgl_batal = Column(DateTime(timezone=True))
__table_args__ = (
UniqueConstraint('stan', 'ntb'),
)
@classmethod
def sum_data(cls):
return DBSession.query(func.sum(cls.nilai_bphtb).label('bayar'),
func.sum('0').label('denda'))
@classmethod
def sum_today(cls):
now = datetime.now()
tom = timedelta(now.date, days=1)
qry = cls.sum_data().filter(cls.tgl.between(now.date, tom))
return qry.first()
# baru PAD
class PaymentPAD(PCBase, CommonModel):
__tablename__ = 'pad_report'
__table_args__ = {'schema': 'public'}
id = Column(Integer, primary_key=True)
stan = Column(String(6), nullable=False)
ntb = Column(String(32), nullable=False)
# pad.pad_sspd.create_date
tgl = Column(Date, nullable=False)
# pad.pad_sspd.sspdjam
jam = Column(Time, nullable=False)
# pad.pad_sspd.id
sspd_id = Column(Integer, nullable=False)
# Bit 61
nomor_bayar = Column(String(16), nullable=False)
# Pad.Usahanm
jenis_pajak = Column(String(32), nullable=False)
# pad.pad_spt.masadari
masa_pajak = Column(Date, nullable=False)
# pad.pad_customer
npwpd = Column(String(17), nullable=False)
# pad.pad_customer.customernm
nama_wp = Column(String(150), nullable=False)
# pad.pad_sspd.jml_bayar - pad.pad_sspd.denda
pokok = Column(Float, nullable=False)
# pad.pad_sspd.denda
denda = Column(Float, nullable=False)
# pad.pad_sspd.bunga
bunga = Column(Float, nullable=False)
# pad.pad_sspd.jml_bayar
jml_bayar = Column(Float, nullable=False)
# Bit 18
channel_id = Column(String(4), nullable=False)
# Bit 41 / 42 / 43
channel_name = Column(String(32), nullable=False)
# Dari pad_reversal
tgl_batal = Column(DateTime(timezone=True))
# pad.kecamatan.kecamatannm
kecamatan_nm = Column(String(50), nullable=False)
__table_args__ = (
UniqueConstraint('stan', 'ntb'),
)
@classmethod
def sum_data(cls):
return DBSession.query(func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda+cls.bunga).label('denda'))
@classmethod
def sum_today(cls):
now = datetime.now()
tom = timedelta(now.date, days=1)
qry = cls.sum_data().filter(cls.tgl.between(now.date, tom))
return qry.first()
# baru PAD
class PaymentWEBR(PCBase, CommonModel):
__tablename__ = 'webr_report'
__table_args__ = {'schema': 'public'}
id = Column(Integer, primary_key=True)
stan = Column(String(6), nullable=False)
ntb = Column(String(32), nullable=False)
tgl = Column(Date, nullable=False)
jam = Column(Time, nullable=False)
payment_id = Column(Integer, nullable=False)
nomor_bayar = Column(String(16), nullable=False)
nama_wp = Column(String(150), nullable=False)
# webr.payment.jml_bayar - webr.payment.denda
pokok = Column(Float, nullable=False)
# webr.payment.denda
denda = Column(Float, nullable=False)
# webr.payment.jml_bayar
jml_bayar = Column(Float, nullable=False)
# Bit 18
channel_id = Column(String(4), nullable=False)
# Bit 41 / 42 / 43
channel_name = Column(String(32), nullable=False)
# Dari pad_reversal
tgl_batal = Column(DateTime(timezone=True))
# webr.payment.status
status = Column(String(2), nullable=False)
__table_args__ = (
UniqueConstraint('stan', 'ntb'),
)
@classmethod
def sum_data(cls):
return DBSession.query(func.sum(cls.jml_bayar).label('bayar'),
func.sum(cls.denda).label('denda'))
@classmethod
def sum_today(cls):
now = datetime.now()
tom = timedelta(now.date, days=1)
qry = cls.sum_data().filter(cls.tgl.between(now.date, tom))
return qry.first()
def get_connection(settings):
url = 'pcpd.url' in settings and settings['pcpd.url'] and 'pcpd.' or 'sqlalchemy.'
engine = engine_from_config(settings, url)
PCDBSession.configure(bind=engine)
PCBase.metadata.bind = engine
return engine
def includeme(config):
settings = get_settings()
get_connection(settings)
def init_db(argv=sys.argv):
config_uri = argv[1]
setup_logging(config_uri)
settings = get_appsettings(config_uri)
engine = get_connection(settings)
PCBase.metadata.bind = engine
PCBase.metadata.create_all(bind=engine)
kode,nama,path,status,type
eis,EIS,/eis,1,0
eis-carousel,Carousel,/eis/carousel,1,0
kode,nama,path,status,type,is_menu,parent_id,file_name,class_name,func_name,permission,template
eis-pcpd,PCPD,/eis/pcpd,1,0,1
eis-pcpd-act,PCPD Act,/eis/pcpd/{act}/act,1,0
eis-pajak,Pajak,#,1,0,1
eis-pajak-kumulatif,Pajak,/eis/pajak,1,0,1,eis-pajak,pcpd,Views,view_pajak,eis,pcpd.pt
eis-pbb,PBB,/eis/pbb,1,0,1,eis-pajak,pcpd,Views,view_pbb,eis,pcpd.pt
eis-bphtb,BPHTB,/eis/bphtb,1,0,1,eis-pajak,pcpd,Views,view_bphtb,eis,pcpd.pt
eis-hotel,Hotel,/eis/hotel,1,0,1,eis-pajak
eis-resto,Restoran,/eis/resto,1,0,1,eis-pajak
eis-hiburan,Hiburan,/eis/hiburan,1,0,1,eis-pajak
eis-parkir,Parkir,/eis/parkir,1,0,1,eis-pajak
eis-ppju,PPJU,/eis/ppju,1,0,1,eis-pajak
eis-minerba,Minerba,/eis/minerba,1,0,1,eis-pajak
eis-reklame,Reklame,/eis/parkir,1,0,1,eis-pajak
eis-atd,Air Tanah,/eis/atd,1,0,1,eis-pajak
eis-retribusi,EIS-Retribusi,/eis/retribusi,1,0,1,pcpd,Views,view_webr,eis,pcpd.pt
eis,EIS,/eis,1,0,1
eis-carousel,Carousel,/eis/carousel,1,0,1
eis-carousel-act,Carousel Action,/eis/carousel/{act}/act,1,0
eis-carousel-add,Carousel Add,/eis/carousel/add,1,0
eis-carousel-edit,Carousel Edit,/eis/carousel/{id}/edit,1,0
eis-carousel-delete,Carousel Delete,/eis/carousel/{id}/delete,1,0
eis-dashboard,EIS,/eis/dashboard,1,0
eis-dashboard,EIS,/eis/dashboard,1,0,1
eis-dashboard-act,EIS Act,/eis/dashboard/{act}/act,1,0
eis-dashboard-calc-all,EIS Calc ALL,/eis/dashboad/calc/all,1,0
eis-home,EIS Home,/eis/home,1,0
eis-home,EIS Home,/eis/home,1,0,1
eis-act,EIS Home Act,/eis/{act}/act,1,0
eis-calc-all,EIS Calc ALL,/eis/calc/all,1,0
eis-chart,Chart,/eis/chart,1,0
eis-chart,Chart,/eis/chart,1,0,1
eis-chart-act,EIS Chart Action,/eis/chart/{act}/act,1,0
eis-chart-add,EIS Chart Add,/eis/chart/add,1,0
eis-chart-edit,EIS Chart Edit,/eis/chart/{id}/edit,1,0
......@@ -21,12 +36,12 @@ eis-chart-item-act,EIS Chart Item Action,/eis/chart/item/{chart_id}/{act}/act,1,
eis-chart-item-add,EIS Chart Item Add,/eis/chart/item/{chart_id}/add,1,0
eis-chart-item-edit,EIS Chart Item Edit,/eis/chart/item/{chart_id}/{id}/edit,1,0
eis-chart-item-delete,EIS Chart Item Delet,/eis/chart/item/{chart_id}/{id}/delete,1,0
eis-item,EIS Item,/eis/item,1,0
eis-item,EIS Item,/eis/item,1,0,1
eis-item-act,EIS Item Action,/eis/item/{act}/act,1,0
eis-item-add,EIS Item Add,/eis/item/add,1,0
eis-item-edit,EIS Item Edit,/eis/item/{id}/edit,1,0
eis-item-delete,EIS Item Delete,/eis/item/{id}/delete,1,0
eis-slide,EIS Slide,/eis/slide,1,0
eis-slide,EIS Slide,/eis/slide,1,0,1
eis-slide-act,EIS Slide Act,/eis/slide/{act}/act,1,0
eis-slide-add,EIS Slide Add,/eis/slide/add,1,0
eis-slide-edit,EIS Slide Edit,/eis/slide/{id}/edit,1,0
......
......@@ -8,158 +8,159 @@ from datatables import ColumnDT, DataTables
from sqlalchemy import func, and_, String
from sqlalchemy.sql.expression import cast
class EisView(BaseView):
@view_config(route_name='eis', renderer='templates/eis.pt',
permission='eis')
def view_app(self):
return{}
# return dict(project='EIS', datas=datas, tab_datas=tab_datas,
# line_datas=line_datas, bar_datas=bar_datas,
# pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
# class eis(BaseView):
# def cek_value(self,value,devider,simbol):
# if value<devider:
# return "{0:,.0f}".format(value)
# else:
# return "{0:,.0f} {1}".format(value/devider,simbol)
# class EisView(BaseView):
# @view_config(route_name='eis', renderer='templates/eis.pt',
# permission='eis')
# def view_app(self):
# tahun = self.ses['tahun']
# datas = DBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {}
# tab_datas = DBSession.query(Slide).filter(Slide.source_type=='grid').order_by(Slide.order_id) or {}
# line_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-line').order_by(Slide.order_id)or {}
# bar_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-bar').order_by(Slide.order_id)or {}
# pie_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {}
# # return{}
# return dict(project='EIS', datas=datas, tab_datas=tab_datas,
# line_datas=line_datas, bar_datas=bar_datas,
# pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
# @view_config(route_name='eis-act', renderer='json')
# def view_app_act(self):
# tahun = self.ses['tahun']
# req = self.req
# ses = req.session
# params = req.params
# id = 'id' in params and params['id'] or 0
# json_data = {}
# json_data['success']=False
# if req.matchdict['act']=='grid':
# rows = DBSession.query(Eis).filter(Eis.id==id)
# if not rows:
# return json_data
# for row in rows:
# row_dicted = row.to_dict()
# amt_hari = float(row_dicted['amt_hari'])
# amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
# amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
# amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
# json_data['success']= True
# json_data['tahun'] = self.cek_value(amt_tahun,1, '')
# json_data['bulan'] = self.cek_value(amt_bulan,1, '')
# json_data['minggu'] = self.cek_value(amt_minggu,1, '')
# json_data['hari'] = self.cek_value(amt_hari,1, '')
# return json_data
# #######################################################################
# # GRAFIK LINE/BAR
# #######################################################################
# elif req.matchdict['act']=='linebar':
# rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows:
# return json_data
# json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id)
# for row in rows:
# json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
# row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider,
# row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider,
# row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
# json_data['success']= True
# return json_data
# #######################################################################
# # GRAFIK LINGKARAN
# #######################################################################
# elif req.matchdict['act']=='pie':
# rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows:
# return json_data
# json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id)
# json_data['rows'] = {}
# for row in rows:
# anama = {}
# anama['nama'] = row.nama
# anama['color'] = row.color
# anama ['highlight'] = row.highlight
# anama ['value'] = row.value_1/row.chart.devider
# json_data['rows'][row.nama] =anama
# json_data['success']= True
# return json_data
# elif req.matchdict['act']=='dasboard':
# # max_tahun = DBSession.query(func.max(Eis.tahun)).scalar()
# max_tahun = ses['tahun']
# subqx = DBSession.query(
# func.max(Eis.nama).label('nama'),
# func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
# ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
# ChartItem.value10+ChartItem.value11+ChartItem.value12).label('target'),
# func.sum(Eis.amt_bulan).label('amt_bulan'),
# func.sum(Eis.amt_tahun).label('amt_tahun'),
# func.sum(
# (ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+ChartItem.value_5+\
# ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+ChartItem.value10+\
# ChartItem.value11+ChartItem.value12) - Eis.amt_tahun).label('sisa_target'),
# cast(func.round((func.sum(Eis.amt_tahun)/
# func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
# ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
# ChartItem.value10+ChartItem.value11+ChartItem.value12))*100,2),String).label('persen')).\
# join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
# join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
# filter(Eis.tahun==max_tahun).\
# group_by(Eis.kode,Eis.nama,Eis.tahun).order_by(Eis.kode).subquery()
# subq = DBSession.query(
# (Eis.nama).label('nama'),
# (ChartItem.value_1*12).label('target'),
# (Eis.amt_bulan).label('amt_bulan'),
# (Eis.amt_tahun).label('amt_tahun'),
# ((ChartItem.value_1*12) - Eis.amt_tahun).label('sisa_target'),
# cast(func.round(((Eis.amt_tahun)/
# (ChartItem.value_1*12))*100,2),String).label('persen')).\
# join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
# join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
# filter(Eis.tahun==max_tahun).\
# order_by(Eis.kode).subquery()
# query = DBSession.query().select_from(subq)
# columns = [
# ColumnDT(subq.c.nama, mData="jenis_pajak"),
# ColumnDT(subq.c.target, mData="target"),
# ColumnDT(subq.c.amt_bulan, mData="realisasi_bulan_ini"),
# ColumnDT(subq.c.amt_tahun, mData="realisasi_sampai_dengan"),
# ColumnDT(subq.c.sisa_target, mData="sisa_target"),
# ColumnDT(subq.c.persen, mData="persen"),
# ]
# rowTable = DataTables(req.GET, query, columns)
# return rowTable.output_result()
class EisViews(BaseView):
def cek_value(self,value,devider,simbol):
if value<devider:
return "{0:,.0f}".format(value)
else:
return "{0:,.0f} {1}".format(value/devider,simbol)
@view_config(route_name='eis', renderer='templates/eis.pt',
permission='eis')
def view_app(self):
tahun = self.ses['tahun']
datas = DBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {}
tab_datas = DBSession.query(Slide).filter(Slide.source_type=='grid').order_by(Slide.order_id) or {}
line_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-line').order_by(Slide.order_id)or {}
bar_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-bar').order_by(Slide.order_id)or {}
pie_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {}
return dict(project='EIS', datas=datas, tab_datas=tab_datas,
line_datas=line_datas, bar_datas=bar_datas,
pie_datas=pie_datas, )
#, datas=Eis.sum_order_id('2014'))
@view_config(route_name='eis-act', renderer='json')
def view_app_act(self):
tahun = self.ses['tahun']
req = self.req
ses = req.session
params = req.params
id = 'id' in params and params['id'] or 0
json_data = {}
json_data['success']=False
if req.matchdict['act']=='grid':
rows = DBSession.query(Eis).filter(Eis.id==id)
if not rows:
return json_data
for row in rows:
row_dicted = row.to_dict()
amt_hari = float(row_dicted['amt_hari'])
amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
json_data['success']= True
json_data['tahun'] = self.cek_value(amt_tahun,1, '')
json_data['bulan'] = self.cek_value(amt_bulan,1, '')
json_data['minggu'] = self.cek_value(amt_minggu,1, '')
json_data['hari'] = self.cek_value(amt_hari,1, '')
return json_data
#######################################################################
# GRAFIK LINE/BAR
#######################################################################
elif req.matchdict['act']=='linebar':
rows = DBSession.query(Chart).filter(Chart.id==id).first()
if not rows:
return json_data
json_data['label'] = rows.label.split(',')
rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id)
for row in rows:
json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider,
row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider,
row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
json_data['success']= True
return json_data
#######################################################################
# GRAFIK LINGKARAN
#######################################################################
elif req.matchdict['act']=='pie':
rows = DBSession.query(Chart).filter(Chart.id==id).first()
if not rows:
return json_data
json_data['label'] = rows.label.split(',')
rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id)
json_data['rows'] = {}
for row in rows:
anama = {}
anama['nama'] = row.nama
anama['color'] = row.color
anama ['highlight'] = row.highlight
anama ['value'] = row.value_1/row.chart.devider
json_data['rows'][row.nama] =anama
json_data['success']= True
return json_data
elif req.matchdict['act']=='dasboard':
# max_tahun = DBSession.query(func.max(Eis.tahun)).scalar()
max_tahun = ses['tahun']
subqx = DBSession.query(
func.max(Eis.nama).label('nama'),
func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
ChartItem.value10+ChartItem.value11+ChartItem.value12).label('target'),
func.sum(Eis.amt_bulan).label('amt_bulan'),
func.sum(Eis.amt_tahun).label('amt_tahun'),
func.sum(
(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+ChartItem.value_5+\
ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+ChartItem.value10+\
ChartItem.value11+ChartItem.value12) - Eis.amt_tahun).label('sisa_target'),
cast(func.round((func.sum(Eis.amt_tahun)/
func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
ChartItem.value10+ChartItem.value11+ChartItem.value12))*100,2),String).label('persen')).\
join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
filter(Eis.tahun==max_tahun).\
group_by(Eis.kode,Eis.nama,Eis.tahun).order_by(Eis.kode).subquery()
subq = DBSession.query(
(Eis.nama).label('nama'),
(ChartItem.value_1*12).label('target'),
(Eis.amt_bulan).label('amt_bulan'),
(Eis.amt_tahun).label('amt_tahun'),
((ChartItem.value_1*12) - Eis.amt_tahun).label('sisa_target'),
cast(func.round(((Eis.amt_tahun)/
(ChartItem.value_1*12))*100,2),String).label('persen')).\
join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
filter(Eis.tahun==max_tahun).\
order_by(Eis.kode).subquery()
query = DBSession.query().select_from(subq)
columns = [
ColumnDT(subq.c.nama, mData="jenis_pajak"),
ColumnDT(subq.c.target, mData="target"),
ColumnDT(subq.c.amt_bulan, mData="realisasi_bulan_ini"),
ColumnDT(subq.c.amt_tahun, mData="realisasi_sampai_dengan"),
ColumnDT(subq.c.sisa_target, mData="sisa_target"),
ColumnDT(subq.c.persen, mData="persen"),
]
rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result()
from pyramid.view import (
view_config,
)
from ..views import BaseView
from ..models import *
from ..models.eis import Eis, Chart, ChartItem, Slide
from datatables import ColumnDT, DataTables
from sqlalchemy import func, and_, String
from sqlalchemy.sql.expression import cast
from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR
class Views(BaseView):
@view_config(route_name='eis-pcpd', renderer='templates/pcpd.pt',
permission='eis')
def view_app(self):
return{"module":"pad"}
@view_config(route_name='eis-pcpd-act', renderer='json')
def view_app_act(self):
tahun = self.ses['tahun']
req = self.req
ses = req.session
params = req.params
id = 'id' in params and params['id'] or 0
json_data = {}
json_data['success']=False
act = req.matchdict['act']
if act =='grid':
rows = DBSession.query(Eis).filter(Eis.id==id)
if not rows:
return json_data
elif act=='pbb':
qry = PaymentPBB.sum_daily()
data = {r.tanggal:r.bayar-r.denda for r in qry}
return dict(data=data)
# return dict(project='EIS', datas=datas, tab_datas=tab_datas,
# line_datas=line_datas, bar_datas=bar_datas,
# pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
def view_pajak(self):
return {"module": 'pajak'}
def view_pbb(self):
return {"module":'pbb'}
def view_bphtb(self):
return {"module": 'bphtb'}
def view_pjdl(self):
return {"module": 'pjdl'}
def view_webr(self):
return {"module": 'webr'}
# class eis(BaseView):
# def cek_value(self,value,devider,simbol):
# if value<devider:
# return "{0:,.0f}".format(value)
# else:
# return "{0:,.0f} {1}".format(value/devider,simbol)
# @view_config(route_name='eis', renderer='templates/eis.pt',
# permission='eis')
# def view_app(self):
# tahun = self.ses['tahun']
# datas = DBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {}
# tab_datas = DBSession.query(Slide).filter(Slide.source_type=='grid').order_by(Slide.order_id) or {}
# line_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-line').order_by(Slide.order_id)or {}
# bar_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-bar').order_by(Slide.order_id)or {}
# pie_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {}
# return dict(project='EIS', datas=datas, tab_datas=tab_datas,
# line_datas=line_datas, bar_datas=bar_datas,
# pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
# @view_config(route_name='eis-act', renderer='json')
# def view_app_act(self):
# tahun = self.ses['tahun']
# req = self.req
# ses = req.session
# params = req.params
# id = 'id' in params and params['id'] or 0
# json_data = {}
# json_data['success']=False
# if req.matchdict['act']=='grid':
# rows = DBSession.query(Eis).filter(Eis.id==id)
# if not rows:
# return json_data
# for row in rows:
# row_dicted = row.to_dict()
# amt_hari = float(row_dicted['amt_hari'])
# amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
# amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
# amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
# json_data['success']= True
# json_data['tahun'] = self.cek_value(amt_tahun,1, '')
# json_data['bulan'] = self.cek_value(amt_bulan,1, '')
# json_data['minggu'] = self.cek_value(amt_minggu,1, '')
# json_data['hari'] = self.cek_value(amt_hari,1, '')
# return json_data
# #######################################################################
# # GRAFIK LINE/BAR
# #######################################################################
# elif req.matchdict['act']=='linebar':
# rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows:
# return json_data
# json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id)
# for row in rows:
# json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
# row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider,
# row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider,
# row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
# json_data['success']= True
# return json_data
# #######################################################################
# # GRAFIK LINGKARAN
# #######################################################################
# elif req.matchdict['act']=='pie':
# rows = DBSession.query(Chart).filter(Chart.id==id).first()
# if not rows:
# return json_data
# json_data['label'] = rows.label.split(',')
# rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
# order_by(ChartItem.id)
# json_data['rows'] = {}
# for row in rows:
# anama = {}
# anama['nama'] = row.nama
# anama['color'] = row.color
# anama ['highlight'] = row.highlight
# anama ['value'] = row.value_1/row.chart.devider
# json_data['rows'][row.nama] =anama
# json_data['success']= True
# return json_data
# elif req.matchdict['act']=='dasboard':
# # max_tahun = DBSession.query(func.max(Eis.tahun)).scalar()
# max_tahun = ses['tahun']
# subqx = DBSession.query(
# func.max(Eis.nama).label('nama'),
# func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
# ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
# ChartItem.value10+ChartItem.value11+ChartItem.value12).label('target'),
# func.sum(Eis.amt_bulan).label('amt_bulan'),
# func.sum(Eis.amt_tahun).label('amt_tahun'),
# func.sum(
# (ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+ChartItem.value_5+\
# ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+ChartItem.value10+\
# ChartItem.value11+ChartItem.value12) - Eis.amt_tahun).label('sisa_target'),
# cast(func.round((func.sum(Eis.amt_tahun)/
# func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
# ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
# ChartItem.value10+ChartItem.value11+ChartItem.value12))*100,2),String).label('persen')).\
# join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
# join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
# filter(Eis.tahun==max_tahun).\
# group_by(Eis.kode,Eis.nama,Eis.tahun).order_by(Eis.kode).subquery()
# subq = DBSession.query(
# (Eis.nama).label('nama'),
# (ChartItem.value_1*12).label('target'),
# (Eis.amt_bulan).label('amt_bulan'),
# (Eis.amt_tahun).label('amt_tahun'),
# ((ChartItem.value_1*12) - Eis.amt_tahun).label('sisa_target'),
# cast(func.round(((Eis.amt_tahun)/
# (ChartItem.value_1*12))*100,2),String).label('persen')).\
# join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
# join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
# filter(Eis.tahun==max_tahun).\
# order_by(Eis.kode).subquery()
# query = DBSession.query().select_from(subq)
# columns = [
# ColumnDT(subq.c.nama, mData="jenis_pajak"),
# ColumnDT(subq.c.target, mData="target"),
# ColumnDT(subq.c.amt_bulan, mData="realisasi_bulan_ini"),
# ColumnDT(subq.c.amt_tahun, mData="realisasi_sampai_dengan"),
# ColumnDT(subq.c.sisa_target, mData="sisa_target"),
# ColumnDT(subq.c.persen, mData="persen"),
# ]
# rowTable = DataTables(req.GET, query, columns)
# return rowTable.output_result()
<html metal:use-macro="load: base.pt">
<html metal:use-macro="load: eis-base.pt">
<div metal:fill-slot="left-menu">
<link href="/static/css/navbar-fixed-left.css" rel="stylesheet">
<div class="nav-side-menu">
......
<html metal:use-macro="load: base-eis.pt">
<div metal:fill-slot="scripts">
<script>
/*$(function(){
$('.carousel').carousel({
interval: 5000
});
});
*/
/*function formatNumber (num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
};
*/
function hide_other(){
$('.data').hide();
};
var bar_chart_options = {
responsive:true
};
</script>
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:0px;
}
@media (min-width: 767px) {
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:320px;
}
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
padding-left:0px;
}
@media (min-width: 767px) {
.subjudul {
padding-left:320px;
}
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
<div class="well" style="background-color:rgb(255,255,255); padding-top:75px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<h3 style="margin-top:5px;">EKSEKUTIF SUMMARY PAJAK DAERAH</h3>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
</div>
<div style="background-color:rgb(255,255,255);">
<div class="subjudul">
<div class="col-md-12 data" id="welcome" style="margin-bottom:50px;">
<center>
<div class="row">
<div class="col-md-12">
<h3 style="margin-top:5px;">SELAMAT DATANG</h3>
<h4>SILAHKAN PILIH MENU DI SEBELAH KIRI / ATAS LAYAR</h4>
</div>
</div>
</center>
</div>
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='grid'" id="grid-${dat.id}">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
})
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='image'" id="image-${dat.id}">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-line'" id="chart-line-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
; // "<%= value %>";
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-bar'" id="chart-bar-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-pie'" id="chart-pie-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</html>
......@@ -29,8 +29,8 @@
<!-- We recommend you use "your_style.css" to override SmartAdmin
specific styles this will also ensure you retrain your customization with each SmartAdmin update. -->
<link rel="stylesheet" href="${home}/deform_static/css/form.css" >
<link rel="stylesheet" type="text/css" media="screen" href="${home}/static/v3/css/osipkd.css">
<link rel="stylesheet" href="${home}/deform_static/css/form.css">
<!--link rel="stylesheet" type="text/css" media="screen" href="${home}/static/v3/css/osipkd.css"-->
<!-- LOOP FORM CSS INCLUDED-->
<tal:loop tal:repeat="css_resource css">
<link rel="stylesheet" href="${home}${request.static_path(css_resource)}" type="text/css"
......@@ -39,6 +39,8 @@
</tal:loop>
<!-- USE THIS SLOT TO INHSERT NEW CSS-->
<metal:css define-slot="css_files"></metal:css>
<style metal:define-slot="styles"></style>
</head>
<body class="fixed-header">
......@@ -93,13 +95,13 @@
</span>
<i class="fa fa-angle-down"></i> </a>
<ul class="dropdown-menu pull-right">
<li><a style="text-transform:capitalize" href="${request.route_url('base-profile')}">Profile</a>
<li><a style="text-transform:capitalize" href="${request.route_url('profile')}">Profile</a>
</li>
<li tal:condition="not request.user.external">
<a style="text-transform:capitalize" href="${request.route_url('base-password')}">Ubah
<a style="text-transform:capitalize" href="${request.route_url('password')}">Ubah
password</a>
</li>
<li><a style="text-transform:capitalize" href="${request.route_url('base-logout')}">Logout</a>
<li><a style="text-transform:capitalize" href="${request.route_url('logout')}">Logout</a>
</li>
<li tal:condition="request.user.api_key"><a style="text-transform:capitalize"
href="${home}/recreate-api-key">API Key</a></li>
......@@ -124,6 +126,46 @@
<!-- NAVIGATION : This navigation is also responsive-->
<nav class="smart-menu" id="menu">
<!-- Modul Menu -->
<ul style="margin-top: 0; padding-top: 0;">
<li tal:repeat="menu get_eis_menus()"
tal:attributes="class route_name in menu['route_name'] and 'active'">
<a tal:condition="python: not menu['children'] and (not menu['permission'] or has_permission(request, menu['permission']))"
href="${home}${menu['path']}">
<i tal:condition="menu['icon']" class="fa fa-lg fa-fw ${menu['icon']}"></i>
<span>${menu['nama']}</span>
</a>
<a tal:condition="python:menu['children'] and (not menu['permission'] or has_permission(request, menu['permission']))"
href="#">
<i tal:condition="menu['icon']" class="fa fa-lg fa-fw ${menu['icon']}"></i>
<span class="menu-item-parent">${menu['nama']}</span>
</a>
<ul
tal:condition="python:menu['children'] and (not menu['permission'] or has_permission(request, menu['permission']))">
<li tal:repeat="submenu menu['children']"
tal:attributes="class route_name in submenu['route_name'] and 'active'">
<a tal:condition="python:not submenu['children'] and (not menu['permission'] or has_permission(request, submenu['permission']))"
href="${home}${submenu['path']}">
<i tal:condition="submenu['icon']" class="fa fa-lg fa-fw ${submenu['icon']}"></i>
<span>${submenu['nama']}</span>
</a>
<a tal:condition="submenu['children']" href="#">
<i tal:condition="submenu['icon']" class="fa fa-lg fa-fw ${submenu['icon']}"></i>
<span class="menu-item-parent">${submenu['nama']}</span>
</a>
<ul tal:condition="submenu['children']">
<li tal:repeat="submenu2 submenu['children']"
tal:attributes="class route_name in submenu2['route_name'] and 'active'">
<a href="${home}${submenu2['path']}">${submenu2['nama']}</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul metal:define-slot="navs"></ul>
<ul style="margin-top: 0; padding-top: 0;">
<li tal:repeat="menu get_base_menus()"
......
<html metal:use-macro = "load: eis-base.pt">
<html metal:use-macro="load: base-eis.pt">
<div metal:fill-slot="scripts">
<script>
/*$(function(){
$('.carousel').carousel({
interval: 5000
});
});
*/
/*function formatNumber (num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
};
*/
function hide_other(){
$('.data').hide();
};
var bar_chart_options = {
responsive:true
};
</script>
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:0px;
}
@media (min-width: 767px) {
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:320px;
}
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
padding-left:0px;
}
@media (min-width: 767px) {
.subjudul {
padding-left:320px;
}
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
<div class="well" style="background-color:rgb(255,255,255); padding-top:75px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<h3 style="margin-top:5px;">EKSEKUTIF SUMMARY PAJAK DAERAH</h3>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
</div>
<div style="background-color:rgb(255,255,255);">
<div class="subjudul">
<div class="col-md-12 data" id="welcome" style="margin-bottom:50px;">
<center>
<div class="row">
<div class="col-md-12">
<h3 style="margin-top:5px;">SELAMAT DATANG</h3>
<h4>SILAHKAN PILIH MENU DI SEBELAH KIRI / ATAS LAYAR</h4>
</div>
</div>
</center>
</div>
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='grid'" id="grid-${dat.id}">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
})
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='image'" id="image-${dat.id}">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-line'" id="chart-line-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
; // "<%= value %>";
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-bar'" id="chart-bar-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-pie'" id="chart-pie-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</html>
<html metal:use-macro="load: eis-base.pt">
<metal:css fill-slot="css_files">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/odometer@0.4.8/themes/odometer-theme-plaza.css">
</metal:css>
<style metal:fill-slot="styles">
div.col-md-6 {
padding-left: 7px !important;
padding-right: 7px !important;
}
.main-panel {
--tw-text-opacity: 1 !important;
color: rgb(255 255 255 / var(--tw-text-opacity, 1)) !important;
font-weight: bold;
--tw-bg-opacity: 1 !important;
background: #00D4FF;
background: linear-gradient(90deg, rgba(0, 212, 255, 1) 0%, rgba(23, 115, 207, 1) 53%, rgba(0, 212, 255, 1) 100%);
border-radius: 10px;
}
.primary {
color: #1976d2;
}
.bold {
font-weight: bold;
}
.panel-default>.panel-heading {
color: #333;
background-color: white;
border-color: white;
}
.icon-color {
color: transparent;
-webkit-text-stroke-width: 0.5px;
-webkit-text-stroke-color: #444a69;
}
.top-0 {
top: 68px !important;
}
.left-0 {
left: 8px !important;
}
.z-0 {
z-index: 0 !important;
}
.absolute {
position: absolute !important;
}
.bottom-0 {
bottom: 0 !important;
}
.right-0 {
right: 0 !important;
}
.chart-container {
position: relative;
height: 20vh;
}
</style>
<div metal:fill-slot="content">
<div class="row ">
<div class="col-md-12">
<div class="panel panel-default text-center main-panel">
<div class="panel-body">
<h4><b>Realisasi Pajak dan Retribusi Daerah</b></h4>
<div>
<h5 id="current">Rab, 4 Jun 2025 - 14:11:05</h5>
</div>
<h4>
<b>Rp.
<h4 class="odometer bold" id="odometer"></h4>
</b>
</h4>
<h5>1.067 KBM</h5>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default text-center">
<div class="panel-heading">
<h5 class="text-left bold">Total Realisasi s.d Hari Ini
<i class="fa fa-info-circle pull-right icon-color"></i>
</h5>
</div>
<div class="panel-body">
<div class="chart-container">
<h4 class="primary">
<b>Rp. <h4 class="odometer bold primary" id="odometer2">0</h4></b>
</h4>
<h4></h4>
<h5 class="primary bold">1.067 KBM</h5>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="text-left bold">Jumlah Transaksi
<i class="fa fa-info-circle pull-right icon-color"></i>
</h5>
</div>
<div class="panel-body">
<div class="chart-container text-center">
<canvas id="chartPie"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row ">
<div class="col-md-6">
<select class="form-control">
<option value="1">Harian</option>
<option value="2">Mingguan</option>
<option value="3">Bulanan</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Tren Realiasi(Rp)</h3>
</div>
<div class="panel-body">
<div class="chart-container text-center" style="position: relative; height:20vh; width: auto;">
<canvas id="chartRealisasi"></canvas>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Tren Realiasi Transaksi</h3>
</div>
<div class="panel-body">
<div class="chart-container text-center" style="position: relative; height:20vh; width: auto;">
<canvas id="chartRealisasiCnt"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Tren Realiasi Kumulatif (Rp)</h3>
</div>
<div class="panel-body">
<div class="chart-container text-center" style="position: relative; height:20vh; width: auto;">
<canvas id="chartKumulatif" width="200" height="200"></canvas>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Tren Realiasi Kumulatif Transaksi</h3>
</div>
<div class="panel-body">
<div class="chart-container text-center" style="position: relative; height:20vh; width: auto;">
<canvas id="chartKumulatifCnt" width="200" height="200"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-body">
Basic panel example
</div>
</div>
</div>
</div>
</div>
<metal:js fill-slot="js_files">
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
<script src="https://github.hubspot.com/odometer/odometer.js"></script>
</metal:js>
<script metal:fill-slot="scripts">
$(document).ready(function () {
var ctx = document.getElementById('chartPie').getContext('2d');
const pie_data = {
labels: [
'Pajak',
'Retribusi',
],
datasets: [{
data: [300, 100],
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)'
],
hoverOffset: 4
}]
};
const myChart = new Chart(ctx,
{
type: 'pie',
data: pie_data,
});
var ctx = document.getElementById('chartRealisasi').getContext('2d');
var realisasi_data = {
labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
datasets: [{
data: [100, 50, 300, 250, 100, 150, 200],
borderColor: 'rgb(75, 192, 192)',
fill: true,
tension: 0.1
}]
};
const realisasi_chart = new Chart(ctx, {
type: 'line',
data: realisasi_data,
});
var ctx = document.getElementById('chartRealisasiCnt').getContext('2d');
const realisasicnt_chart = new Chart(ctx, {
type: 'line',
data: realisasi_data,
});
var ctx = document.getElementById('chartKumulatif').getContext('2d');
var kumulatif_data = {
labels: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7',],
datasets: [{
data: [100, 150, 400, 650, 900, 950, 1100],
borderColor: 'rgb(75, 192, 192)',
fill: true,
tension: 0.1
}]
};
const kumulatif_chart = new Chart(ctx, {
type: 'line',
data: kumulatif_data,
});
var ctx = document.getElementById('chartKumulatifCnt').getContext('2d');
const kumulatifcnt_chart = new Chart(ctx, {
type: 'line',
data: kumulatif_data,
});
// $().datarefresh();
});
$.fn.datarefresh = function () {
console.log("data_refresh");
// $().get_realisasi();
// $().get_harian();
// $().get_tabel();
// $().get_series();
odometer.innerHTML = 190647300;
odometer2.innerHTML = 190647500;
d = new Date();
current.innerHTML = d.toLocaleString();
}
setTimeout(function () {
console.log("timeout");
$().datarefresh();
}, 1);
</script>
</html>
\ No newline at end of file
......@@ -50,3 +50,4 @@ classifiers = [
[project.scripts]
eispajak-init-db = "eispajak.scripts.initializedb:main"
pcpd-ini-db = "eispajak.models.payment:init_db"
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!