Commit 0edc25be by taufikyu

revisi chart detail

1 parent a4d8fce6
......@@ -240,4 +240,6 @@ id,kode,nama,path,factory,perm_name,disabled,created,updated,create_uid
255,"arinvoice-ws-act","Invoice WS","/arinvoicews/{act}/act",,"read",0,"2020-09-18 16:45:45",,1
256,"public-act","Public","/public/{act}",,"read",0,"2020-09-18 16:45:45",,1
257,"ranking","Ranking","/ranking",,"read",0,"2020-10-13 08:38:45",,1
258,"ranking-det","Ranking Detail","/ranking/det",,"read",0,"2020-10-13 08:38:45",,1
\ No newline at end of file
258,"ranking-det","Ranking Detail","/ranking/det",,"read",0,"2020-10-13 08:38:45",,1
259,"rek-det","Rekening Detail","/rek/det",,"read",0,"2020-10-13 08:38:45",,1
260,"chart-det","Chart Detail","/chart/det",,"read",0,"2020-10-13 08:38:45",,1
\ No newline at end of file
......@@ -52,15 +52,21 @@ def view_home(request):
statusadmin = True
break
if statusadmin == True:
if 'date' in request.params and request.params['date']:
now = date_from_str(request.params['date'].strip())
if 'awal' in request.params and request.params['awal']:
awal = date_from_str(request.params['awal'].strip())
else:
now = date.today()
awal = date.today()
if 'akhir' in request.params and request.params['akhir']:
akhir = date_from_str(request.params['akhir'].strip())
else:
akhir = date.today()
dates = dict(
year = now.year,
month = now.month,
week = int(now.strftime('%W')),
day = now,
year = akhir.year,
month = akhir.month,
week = int(akhir.strftime('%W')),
day = akhir,
awal = awal,
akhir = akhir,
)
data_dashboard = dict(
tabular = dict(
......@@ -68,36 +74,28 @@ def view_home(request):
bulan = dict(q=0,n=0),
minggu = dict(q=0,n=0),
hari = dict(q=0,n=0),
hari_ini = dict(q=0,n=0),
hari_kemarin = dict(q=0,n=0),
ini = dict(q=0,n=0),
),
chart = dict(
q = [0,0,0,0,0,0,0,0,0,0,0,0],
n = [0,0,0,0,0,0,0,0,0,0,0,0],
t = [0,0,0,0,0,0,0,0,0,0,0,0],
r = [0,0,0,0,0,0,0,0,0,0,0,0],
),
rek = [], ## Rekening Header
rekdet = [], ## Rekening Detail
count_rek = 0,
sopd = [], ## Ranking Penerimaan
sopd10 = [], ## 10 Ranking Penerimaan
sopd4 = []
)
#List Untuk Header
#List Unit lv 3
opd_ls = Unit.query().filter(Unit.level_id==3).order_by(Unit.kode).all()
#List Rekening Lv 3
reks41 = Rekening.query().filter(Rekening.level_id==3, Rekening.kode.ilike('4.1.%')).order_by(Rekening.kode).all()
no3=0
for r in reks41:
no3+=1
no_roman = int_to_roman(no3)
data_dashboard['rek'].append(dict(no=no_roman,kode=r.kode.strip(), nama=r.nama.strip(), target=0, realisasi=0, persen=0))
for op in opd_ls:
data_dashboard['sopd'].append(dict(peringkat=0,kode=op.kode.strip(), level=op.level_id, unit=op.nama.strip(), target=0, realisasi=0))
#List Rekening Lv 4
reks41det = Rekening.query().filter(Rekening.level_id.between(3,4), Rekening.kode.ilike('4.1.%')).order_by(Rekening.kode).all()
for r in reks41det:
if r.level_id==3:
no4=0
elif r.level_id==4:
no4+=1
data_dashboard['rekdet'].append(dict(no=no4, kode=r.kode.strip(), level=r.level_id, nama=r.nama.strip(), target=0, realisasi=0, persen=0))
#List Rekening Lv 2
reks = Rekening.query().filter(Rekening.level_id==2).order_by(Rekening.kode).all()
for r in reks:
data_dashboard['rek'].append(dict(kode=r.kode.strip(), nama=r.nama.strip(), target=0, realisasi=0, persen=0))
#QUERY PAYMENT
payments = DBSession.query(
......@@ -108,8 +106,8 @@ def view_home(request):
Unit.nama.label('nama'),
).join(ARInvoice, ARInvoice.id == ARSspd.arinvoice_id).\
join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARSspd.tahun_id==dates['year']).order_by(ARInvoice.unit_kode)
payments = payments.all()
filter(ARSspd.tahun_id==dates['year']).order_by(ARInvoice.unit_kode)\
.all()
for p in payments:
## JIKA ADA FILTER DEPARTEMEN DI HEADER
if 'unit' in request.params and request.params['unit']:
......@@ -125,17 +123,25 @@ def view_home(request):
if p.tanggal.date() == dates['day']:
data_dashboard['tabular']['hari']['q'] += 1
data_dashboard['tabular']['hari']['n'] += int(p.jumlah)
if p.tanggal.date() >= dates['awal'] and p.tanggal.date() <= dates['akhir']:
data_dashboard['tabular']['ini']['q'] += 1
data_dashboard['tabular']['ini']['n'] += int(p.jumlah)
if p.tanggal.date() <= dates['akhir']:
data_dashboard['tabular']['hari_ini']['q'] += 1
data_dashboard['tabular']['hari_ini']['n'] += int(p.jumlah)
if p.tanggal.date() <= dates['awal']:
data_dashboard['tabular']['hari_kemarin']['q'] += 1
data_dashboard['tabular']['hari_kemarin']['n'] += int(p.jumlah)
## chart realisasi
for x in range(12):
if p.tanggal.month == x+1:
data_dashboard['chart']['q'][x] += int(1)
data_dashboard['chart']['n'][x] += int(p.jumlah)
## Rekening
data_dashboard['chart']['r'][x] += int(p.jumlah)
## REKENING
for r in data_dashboard['rek']:
if p.rek_kode.strip().startswith(r['kode']):
r['realisasi'] += int(p.jumlah)
for r in data_dashboard['rekdet']:
if p.rek_kode.strip().startswith(r['kode']):
r['realisasi'] += int(p.jumlah)
## JIKA TIDAK ADA FILTER DEPARTEMEN HEADER
elif not 'unit' in request.params or not request.params['unit']:
......@@ -150,17 +156,29 @@ def view_home(request):
if p.tanggal.date() == dates['day']:
data_dashboard['tabular']['hari']['q'] += 1
data_dashboard['tabular']['hari']['n'] += int(p.jumlah)
if p.tanggal.date() >= dates['awal'] and p.tanggal.date() <= dates['akhir']:
data_dashboard['tabular']['ini']['q'] += 1
data_dashboard['tabular']['ini']['n'] += int(p.jumlah)
if p.tanggal.date() <= dates['akhir']:
data_dashboard['tabular']['hari_ini']['q'] += 1
data_dashboard['tabular']['hari_ini']['n'] += int(p.jumlah)
if p.tanggal.date() <= dates['awal']:
data_dashboard['tabular']['hari_kemarin']['q'] += 1
data_dashboard['tabular']['hari_kemarin']['n'] += int(p.jumlah)
## chart realisasi
for x in range(12):
if p.tanggal.month == x+1:
data_dashboard['chart']['q'][x] += int(1)
data_dashboard['chart']['n'][x] += int(p.jumlah)
## Rekening
data_dashboard['chart']['r'][x] += int(p.jumlah)
## REKENING
for r in data_dashboard['rek']:
if p.rek_kode.strip().startswith(r['kode']):
r['realisasi'] += int(p.jumlah)
for r in data_dashboard['rekdet']:
if p.rek_kode.strip().startswith(r['kode']):
r['realisasi'] += int(p.jumlah)
#RANKING Realisasi
for unit3 in data_dashboard['sopd']:
if p.kode.strip().startswith(unit3['kode']):
unit3['realisasi']+=p.jumlah
#QUERY INVOICE
invoices = DBSession.query(
......@@ -170,8 +188,8 @@ def view_home(request):
Unit.kode.label('kode'),
Unit.nama.label('nama'),
).join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARInvoice.tahun_id==dates['year']).order_by(ARInvoice.unit_kode)
invoices = invoices.all()
filter(ARInvoice.tahun_id==dates['year']).order_by(ARInvoice.unit_kode)\
.all()
for i in invoices:
## JIKA ADA FILTER DEPARTEMEN DI HEADER
if 'unit' in request.params and request.params['unit']:
......@@ -180,62 +198,47 @@ def view_home(request):
for r in data_dashboard['rek']:
if i.rek_kode.strip().startswith(r['kode']):
r['target'] += int(i.jumlah)
for r in data_dashboard['rekdet']:
if i.rek_kode.strip().startswith(r['kode']):
r['target'] += int(i.jumlah)
## chart target
for x in range(12):
if i.tanggal.month == x+1:
data_dashboard['chart']['t'][x] += int(i.jumlah)
## JIKA TIDAK ADA FILTER DEPARTEMEN HEADER
elif not 'unit' in request.params or not request.params['unit']:
## REKENING
for r in data_dashboard['rek']:
if i.rek_kode.strip().startswith(r['kode']):
r['target'] += int(i.jumlah)
for r in data_dashboard['rekdet']:
if i.rek_kode.strip().startswith(r['kode']):
r['target'] += int(i.jumlah)
## chart target
for x in range(12):
if i.tanggal.month == x+1:
data_dashboard['chart']['t'][x] += int(i.jumlah)
#RANKING Target
for unit3 in data_dashboard['sopd']:
if i.kode.strip().startswith(unit3['kode']):
unit3['target']+=i.jumlah
##RANKING Persen
for unit3 in data_dashboard['sopd']:
unit3['persen'] = unit3['target']>0 and str(round((float(unit3['realisasi'])/float(unit3['target']))*100,2)) or '0'
##REKENING##
for r in data_dashboard['rek']:
r['persen'] = r['realisasi']>0 and str(round((float(r['realisasi'])/float(r['target']))*100,2)) or '0'
for r in data_dashboard['rekdet']:
r['persen'] = r['realisasi']>0 and str(round((float(r['realisasi'])/float(r['target']))*100,2)) or '0'
#Unit
opds = Unit.query().filter(Unit.level_id.between(3,4)).order_by(Unit.kode).all()
for op in opds:
if op.level_id==3:
data_dashboard['sopd'].append(dict(peringkat=0,kode=op.kode.strip(), level=op.level_id, unit=op.nama.strip(), nominal=0))
if op.level_id==4:
data_dashboard['sopd4'].append(dict(kode=op.kode.strip(), level=op.level_id, unit=op.nama.strip(), nominal=0))
##RANKING##
tanggal_berjalan = dates['day']
tahun_berjalan = tanggal_berjalan.year
opd = DBSession.query(
func.sum(ARSspd.bayar).label('jumlah'),
func.max(func.trim(Unit.kode)).label('kode'),
func.max(func.trim(Unit.nama)).label('nama'),
func.max(Unit.level_id).label('level_id'),
).join(ARInvoice, ARInvoice.id == ARSspd.arinvoice_id).\
join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARSspd.tahun_id==tahun_berjalan,
Unit.level_id>=3).\
group_by(func.trim(Unit.kode)).all()
for sopd in opd:
if sopd.level_id>=3:
for unit3 in data_dashboard['sopd']:
if sopd.kode.startswith(unit3['kode']):
unit3['nominal']+=sopd.jumlah
if sopd.level_id>=4:
for unit4 in data_dashboard['sopd4']:
if sopd.kode.startswith(unit4['kode']):
unit4['nominal']+=sopd.jumlah
r['persen'] = r['target']>0 and str(round((float(r['realisasi'])/float(r['target']))*100,2)) or '0'
data_dashboard['count_rek'] = len(data_dashboard['rek']) > 3 and 3 or 4
##SORT
data_dashboard['sopd'] = sorted(data_dashboard['sopd'], key = lambda i: (i['nominal']), reverse=True)
data_dashboard['sopd'] = sorted(data_dashboard['sopd'], key = lambda i: (i['realisasi']), reverse=True)
i=-1
for opd in data_dashboard['sopd']:
i+=1
if i < 10:
data_dashboard['sopd10'].append(dict(peringkat=i+1, kode=opd['kode'], unit=opd['unit'], nominal=opd['nominal']))
data_dashboard['sopd10'].append(dict(
peringkat=i+1,
kode=opd['kode'],
unit=opd['unit'],
target=opd['target'],
realisasi=opd['realisasi'], persen=opd['persen']
))
opd['peringkat'] = i+1
......
......@@ -150,13 +150,6 @@ class AddSchema(colander.Schema):
title="Objek",
oid = "objek_pajak_nm"
)
keterangan = colander.SchemaNode(
colander.String(),
title="Keterangan",
oid = "keterangan",
missing=None,
widget=widget.TextAreaWidget(rows=3, cols=10, css_class="forme")
)
kode = colander.SchemaNode(
colander.String(),
......@@ -221,6 +214,13 @@ class AddSchema(colander.Schema):
missing=colander.drop,
oid = "jumlah"
)
keterangan = colander.SchemaNode(
colander.String(),
title="Keterangan",
oid = "keterangan",
missing=None,
widget=widget.TextAreaWidget(rows=3, cols=10, css_class="forme")
)
no_skrd = colander.SchemaNode(
colander.String(),
oid = "no_skrd"
......
import sys
import re
import logging
import os
import qrcode
import base64
from email.utils import parseaddr
from sqlalchemy import not_, func, or_, desc
from datetime import datetime
from time import gmtime, strftime, strptime
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..tools import (
_DTnumberformat,
multi_dict_values,
odt_export,
terbilang,
thousand,
dmy,
BULANS,
get_settings
)
from ..models import DBSession
from ..models.isipkd import(
Pegawai, ObjekPajak, SubjekPajak, ARInvoice,
Unit, UserUnit,Wilayah, Pajak, Rekening,
ARSts, ARStsItem, ARSspd, ARTbp
)
from datatables import (
ColumnDT, DataTables)
from ..security import group_finder,group_in
from daftar import (STATUS, deferred_status,
daftar_subjekpajak, deferred_subjekpajak,
daftar_objekpajak, deferred_objekpajak,
daftar_wilayah, deferred_wilayah,
daftar_unit, deferred_unit,
daftar_pajak, deferred_pajak,
auto_op_nm, auto_unit_nm, auto_wp_nm, auto_wp_nm3
)
SESS_ADD_FAILED = 'Gagal tambah Tagihan'
SESS_EDIT_FAILED = 'Gagal edit Tagihan'
log = logging.getLogger(__name__)
@view_config(route_name='chart-det', renderer='templates/chart_det.pt')
def view_detail(request):
params = request.params
url_dict = request.matchdict
kd = ''
unit = ''
if 'kode' in params and params['kode']:
rekening = Rekening.query().filter(func.trim(Rekening.kode)==params['kode'].strip()).first()
level = rekening.level_id
kd = rekening.kode.strip()
unit = rekening.nama.strip()
rek = Rekening.query().filter(Rekening.level_id==(level+1)).order_by(Rekening.kode).all()
else:
rek = Rekening.query().filter(Rekening.level_id==2).order_by(Rekening.kode).all()
reks = []
for r in rek:
reks.append(dict(
kode=r.kode.strip(),
nama=r.nama.strip(),
target=[0,0,0,0,0,0,0,0,0,0,0,0],
realisasi=[0,0,0,0,0,0,0,0,0,0,0,0],
persen=[0,0,0,0,0,0,0,0,0,0,0,0]
))
payments = DBSession.query(
ARSspd.tgl_bayar.label('tanggal'),
ARSspd.bayar.label('jumlah'),
ARInvoice.rek_kode.label('rek_kode'),
Unit.kode.label('kode'),
Unit.nama.label('nama'),
).join(ARInvoice, ARInvoice.id == ARSspd.arinvoice_id).\
join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARSspd.tahun_id==params['year']).order_by(ARInvoice.unit_kode)\
.all()
for p in payments:
for re in reks:
if p.rek_kode.strip().startswith(re['kode']):
## chart realisasi
for x in range(12):
if p.tanggal.month == x+1:
re['realisasi'][x] += int(p.jumlah)
invoices = DBSession.query(
ARInvoice.tgl_tetap.label('tanggal'),
ARInvoice.jumlah.label('jumlah'),
ARInvoice.rek_kode.label('rek_kode'),
Unit.kode.label('kode'),
Unit.nama.label('nama'),
).join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARInvoice.tahun_id==params['year']).order_by(ARInvoice.unit_kode)\
.all()
for i in invoices:
for re in reks:
if i.rek_kode.strip().startswith(re['kode']):
## chart target
for x in range(12):
if i.tanggal.month == x+1:
re['target'][x] += int(p.jumlah)
##Hitung persen
for re in reks:
for x in range(12):
re['persen'][x] = re['target'][x]>0 and str(round((float(re['realisasi'][x])/float(re['target'][x]))*100,2)) or '0'
##hanya yang isi saja yang diambil
#re_ = []
#for re in reks:
# if sum(re['target'])>0 and sum(re['realisasi'])>0:
# re_.append(re)
#
#if len(re_)==0:
# raise HTTPFound(location=request.route_url('home'))
#data = re_
#count_unit = len(re_) > 3 and 3 or 4
if len(reks)==0:
raise HTTPFound(location=request.route_url('home'))
data = reks
count_unit = len(reks) > 3 and 3 or 4
return dict(data=data, count_unit=count_unit, kd=kd, unit=unit)
......@@ -119,7 +119,12 @@ def view_det(request):
data_dashboard = dict(
sopd4 = []
)
opds = Unit.query().filter(Unit.level_id==4).order_by(Unit.kode).all()
level = DBSession.query(Unit.level_id).filter(func.trim(Unit.kode)==params['kode']).scalar()
opds = DBSession.query(Unit).filter(Unit.level_id==(level+1),
Unit.kode.ilike(params['kode']+'%'))\
.order_by(Unit.kode).all()
if not opds:
raise HTTPFound(location=request.route_url('home'))
for op in opds:
data_dashboard['sopd4'].append(dict(kode=op.kode.strip(), level=op.level_id, unit=op.nama.strip(), nominal=0))
......@@ -134,16 +139,13 @@ def view_det(request):
func.max(Unit.level_id).label('level_id'),
).join(ARInvoice, ARInvoice.id == ARSspd.arinvoice_id).\
join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARSspd.tahun_id==tahun_berjalan,
Unit.level_id==4).\
filter(ARSspd.tahun_id==tahun_berjalan).\
group_by(func.trim(Unit.kode)).all()
for sopd in opd:
for unit4 in data_dashboard['sopd4']:
if sopd.kode.startswith(unit4['kode']):
unit4['nominal']+=sopd.jumlah
print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', opd)
return dict(project='esipkd', dates=dates, data = data_dashboard, unit_kode=unit_kode, unit_nama=unit_nama, statusadmin=statusadmin)
else:
return dict(project='esipkd', statusadmin=statusadmin)
......
import sys
import re
import logging
import os
import qrcode
import base64
from email.utils import parseaddr
from sqlalchemy import not_, func, or_, desc
from datetime import datetime
from time import gmtime, strftime, strptime
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..tools import (
_DTnumberformat,
multi_dict_values,
odt_export,
terbilang,
thousand,
dmy,
BULANS,
get_settings
)
from ..models import DBSession
from ..models.isipkd import(
Pegawai, ObjekPajak, SubjekPajak, ARInvoice,
Unit, UserUnit,Wilayah, Pajak, Rekening,
ARSts, ARStsItem, ARSspd, ARTbp
)
from datatables import (
ColumnDT, DataTables)
from ..security import group_finder,group_in
from daftar import (STATUS, deferred_status,
daftar_subjekpajak, deferred_subjekpajak,
daftar_objekpajak, deferred_objekpajak,
daftar_wilayah, deferred_wilayah,
daftar_unit, deferred_unit,
daftar_pajak, deferred_pajak,
auto_op_nm, auto_unit_nm, auto_wp_nm, auto_wp_nm3
)
SESS_ADD_FAILED = 'Gagal tambah Tagihan'
SESS_EDIT_FAILED = 'Gagal edit Tagihan'
log = logging.getLogger(__name__)
@view_config(route_name='rek-det', renderer='templates/rekening/rekening_det.pt')
def view_detail(request):
params = request.params
level = DBSession.query(Rekening.level_id).filter(Rekening.kode==params['kode']).scalar()
rek = Rekening.query().filter(Rekening.level_id==(level+1)).order_by(Rekening.kode).all()
reks = []
for r in rek:
reks.append(dict(kode=r.kode.strip(), nama=r.nama.strip(), target=0, realisasi=0, persen=0))
payments = DBSession.query(
ARSspd.tgl_bayar.label('tanggal'),
ARSspd.bayar.label('jumlah'),
ARInvoice.rek_kode.label('rek_kode'),
Unit.kode.label('kode'),
Unit.nama.label('nama'),
).join(ARInvoice, ARInvoice.id == ARSspd.arinvoice_id).\
join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARSspd.tahun_id==params['year']).order_by(ARInvoice.unit_kode)
payments = payments.all()
for p in payments:
## JIKA ADA FILTER DEPARTEMEN
if 'unit' in params and params['unit']:
if p.kode.strip().startswith(params['unit'].strip()):
## REKENING
for r in reks:
if p.rek_kode.strip().startswith(r['kode']):
r['realisasi'] += int(p.jumlah)
## JIKA TIDAK ADA FILTER DEPARTEMEN
elif not 'unit' in params or not params['unit']:
## REKENING
for r in reks:
if p.rek_kode.strip().startswith(r['kode']):
r['realisasi'] += int(p.jumlah)
invoices = DBSession.query(
ARInvoice.tgl_tetap.label('tanggal'),
ARInvoice.jumlah.label('jumlah'),
ARInvoice.rek_kode.label('rek_kode'),
Unit.kode.label('kode'),
Unit.nama.label('nama'),
).join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARInvoice.tahun_id==params['year']).order_by(ARInvoice.unit_kode)
invoices = invoices.all()
for i in invoices:
## JIKA ADA FILTER DEPARTEMEN
if 'unit' in params and params['unit']:
if i.kode.strip().startswith(params['unit'].strip()):
## REKENING
for r in reks:
if i.rek_kode.strip().startswith(r['kode']):
r['target'] += int(i.jumlah)
## JIKA TIDAK ADA FILTER DEPARTEMEN
elif not 'unit' in params or not params['unit']:
## REKENING
for r in reks:
if i.rek_kode.strip().startswith(r['kode']):
r['target'] += int(i.jumlah)
## Hitung Persen
for r in reks:
r['persen'] = r['target']>0 and str(round((float(r['realisasi'])/float(r['target']))*100,2)) or '0'
if len(reks)==0:
raise HTTPFound(location=request.route_url('home'))
count_rek = len(reks) > 3 and 3 or 4
return dict(data=reks, count_rek=count_rek)
......@@ -107,17 +107,6 @@
${error}</p>
</div>
</div>
<!--keterangan -->
<div class="form-group" tal:define="field form['keterangan']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!--periode_1 -->
<div class="form-group" tal:define="field form['periode_1']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......@@ -257,6 +246,17 @@
tal:repeat="error field.error.messages()">
${error}</p> </div>
</div>
<!--keterangan -->
<div class="form-group" tal:define="field form['keterangan']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!-- Nama Pejabat -->
<div class="form-group" tal:define="field form['pejabat_nama']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......
......@@ -56,17 +56,6 @@
${error}</p>
</div>
</div>
<!--keterangan -->
<div class="form-group" tal:define="field form['keterangan']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!--kode -->
<div class="form-group" tal:define="field form['kode']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......@@ -209,6 +198,17 @@
tal:repeat="error field.error.messages()">
${error}</p> </div>
</div>
<!--keterangan -->
<div class="form-group" tal:define="field form['keterangan']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!-- Nama Pejabat -->
<div class="form-group" tal:define="field form['pejabat_nama']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......
<html metal:use-macro="load: base.pt">
<div metal:fill-slot="content">
<style>
h4 {
font-weight:bold;
text-align:left;
color: #15915b;
}
h5 {
font-weight:bold;
font-size:18px;
text-align:left;
color: #264184;
}
.wraplabel {
border:1px solid #15915b;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding:10px;
margin-top:10px;
margin-bottom:20px;
}
.labeltab {
color:#264184;
font-weight:bold;
font-size:16px;
}
.textlabel {
display:block;
text-align:right;
color:#005500;
font-weight:bold;
}
.wrapchart {
border:1px solid #c4c4c4;
padding:0px;
margin-top:10px;
margin-bottom:20px;
}
.table {
font-size: 12px;
margin-top: 10px;
margin-bottom: 20px;
}
.table th {
background-color:#ddebf6;
}
.no-padding {
padding:0px;
}
.wrapopd {
border:1px solid #c4c4c4;
min-height:120px;
padding-top:5px;
padding-bottom:5px;
}
.kodeopd {
display:block;
color:#264184;
font-size:120%;
font-weight:bold;
}
.namaopd {
display:block;
color:#264184;
font-weight:500;
}
.jmlopd {
display:block;
font-size:120%;
color:#264184;
font-weight:bold;
text-align:right;
position: absolute;
bottom: 5px;
right: 10px;
}
.picker {
font-size:13px;
}
.link-styleless {
text-decoration: none !important;
color:inherit !important;
cursor: pointer;
}
.modal-body {
overflow-x:scroll !important;
}
.bgth {
background-color: #ddebf6 !important;
}
.modal-backdrop {
visibility: hidden !important;
}
.modal.in {
background-color: rgba(0,0,0,0.5);
}
.modal { overflow: auto !important; }
tr.header
{
cursor:pointer;
}
.content {
display: none;
}
</style>
<div class="col-md-12">
<font class="labeltab">Perkembangan Realisasi Pendapatan Daerah tahun ${request.params['year']}</font><br>
<font class="labeltab">${(kd and unit) and '{} [{}]'.format(unit,kd) or ''}</font><br>
<div class="clearfix"></div>
<tal:block tal:repeat="c data">
<div class="col-md-6">
<canvas id="chart${c['kode']}" class="wrapchart link-styleless" href="/chart/det?year=${request.params['year']}&kode=${c['kode']}">
</canvas>
</div>
</tal:block>
</div>
<div class="clearfix"></div>
<script type="text/javascript" src="/static/js/Chart.min.js"></script>
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function () {
});
</script>
</div>
</html>
......@@ -124,16 +124,19 @@ Selamat datang di aplikasi SIPANDU
</div>
</tal:block>
<tal:block tal:condition="statusadmin">
<div class="col-md-6">
<div class="col-md-5">
<h4>REALISASI PENDAPATAN DAERAH TAHUN ${dates['year']}</h4>
<font class="labeltab">Tanggal : ${dates['day'].strftime('%d-%m-%Y')}</font>
</div>
<div class="col-md-6">
<div class="col-md-7">
<form method="get">
<div class="col-md-5">
<input id="date" type="text" class="form-control date" name="date" onchange="this.form.submit()" value="${dates['day'].strftime('%d-%m-%Y')}">
<div class="col-md-3">
<input type="text" class="form-control date" name="awal" onchange="this.form.submit()" value="${dates['awal'].strftime('%d-%m-%Y')}">
</div>
<div class="col-md-7">
<div class="col-md-3">
<input type="text" class="form-control date" name="akhir" onchange="this.form.submit()" value="${dates['akhir'].strftime('%d-%m-%Y')}">
</div>
<div class="col-md-6">
<select id="unit" class="form-control" name="unit" onchange="this.form.submit()">
<option></option>
<option tal:repeat="o opds" value="${o.kode.strip()}">${o.kode.strip()} - ${o.nama}</option>
......@@ -163,23 +166,46 @@ Selamat datang di aplikasi SIPANDU
<font class="textlabel">${'{:n}'.format(data['tabular']['minggu']['n'])}</font>
</div>
</div>
<div class="col-md-3">
<!--<div class="col-md-3">
<div class="wraplabel">
<font class="labeltab">Hari ini</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['hari']['q'])}</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['hari']['n'])}</font>
</div>
</div>-->
</div>
<div class="col-md-12">
<div class="col-md-4">
<div class="wraplabel">
<font class="labeltab">Penerimaan s/d Hari Kemarin</font><br>
<font class="textlabel">${'{:n}'.format(data['tabular']['hari_kemarin']['q'])}</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['hari_kemarin']['n'])}</font>
</div>
</div>
<div class="col-md-4">
<div class="wraplabel">
<font class="labeltab">Penerimaan Hari Ini</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['ini']['q'])}</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['ini']['n'])}</font>
</div>
</div>
<div class="col-md-4">
<div class="wraplabel">
<font class="labeltab">Penerimaan s/d Hari Ini</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['hari_ini']['q'])}</font>
<font class="textlabel">${'{:n}'.format(data['tabular']['hari_ini']['n'])}</font>
</div>
</div>
</div>
<div class="col-md-12">
<div class="col-md-7">
<font class="labeltab">Perkembangan Realisasi Pendapatan Daerah tahun ${dates['year']}</font><br>
<div class="clearfix"></div>
<canvas id="chart" class="wrapchart">
<canvas id="chart" class="wrapchart link-styleless" href="/chart/det?year=${dates['year']}">
</canvas>
</div>
<div class="col-md-5">
<a class="link-styleless" title="klik untuk melihat daftar lengkap ranking" data-toggle="modal" href="/ranking">
<a class="link-styleless" title="klik untuk melihat daftar lengkap ranking" href="/ranking?date=${dates['day'].strftime('%d-%m-%Y')}">
<font class="labeltab">Daftar Penerimaan Pendapatan Daerah Periode ${dates['year']}</font><br>
<div class="clearfix"></div>
<table class="table table-bordered">
......@@ -187,7 +213,9 @@ Selamat datang di aplikasi SIPANDU
<tr>
<th style="text-align:center;">No</th>
<th style="text-align:center;">Nama Unit</th>
<th style="text-align:center;">Nominal</th>
<th style="text-align:center;">Target</th>
<th style="text-align:center;">Realisasi</th>
<th style="text-align:center;">Persen</th>
</tr>
</thead>
<tbody>
......@@ -195,7 +223,9 @@ Selamat datang di aplikasi SIPANDU
<tr>
<td style="text-align:center;">${s['peringkat']}</td>
<td style="text-align:left;">${s['unit']}</td>
<td style="text-align:right;">${'{:n}'.format(s['nominal'])}</td>
<td style="text-align:right;">${'{:n}'.format(s['target'])}</td>
<td style="text-align:right;">${'{:n}'.format(s['realisasi'])}</td>
<td style="text-align:right;">${s['persen']}</td>
</tr>
</tal:block>
</tbody>
......@@ -205,8 +235,8 @@ Selamat datang di aplikasi SIPANDU
</div>
<div class="col-md-12">
<tal:block tal:repeat="r data['rek']">
<a class="link-styleless" title="klik untuk melihat daftar lengkap rekening" data-toggle="modal" data-target="#rekeningdetail${r['kode'].replace('.','')}">
<div class="col-md-3 wrapopd">
<a class="link-styleless" title="klik untuk melihat daftar lengkap rekening" href="/rek/det?${r['kode'] and 'kode='+r['kode'] or ''}${dates['year'] and '&year='+str(dates['year']) or ''}${('unit' in request.params and request.params['unit']) and '&unit='+request.params['unit'].strip() or ''}">
<div class="col-md-${data['count_rek']} wrapopd">
<font class="kodeopd">${r['kode']}</font>
<font class="namaopd">${r['nama']}</font>
<font class="jmlopd">${'{:n}'.format(r['realisasi'])}</font>
......@@ -218,73 +248,6 @@ Selamat datang di aplikasi SIPANDU
<div class="clearfix"></div>
<!-- MODAL START HERE -->
<!--MODAL DETAIL REKENING -->
<tal:block tal:repeat="ru data['rek']">
<div class="modal fade" id="rekeningdetail${ru['kode'].replace('.','')}" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<div class="col-md-12">
<h5>Detail Rekening Penerimaan Periode ${dates['day'].strftime('%d-%m-%Y')}</h5>
</div>
<div class="clearfix"></div>
<table class="table table-bordered">
<thead>
<tr>
<th style="text-align:center;">No</th>
<th style="text-align:center;">Kode Rekening</th>
<th style="text-align:center;">JENIS PENERIMAAN</th>
<th style="text-align:center;">TARGET<br>Rp.</th>
<th style="text-align:center;">REALISASI<br>Rp.</th>
<th style="text-align:center;">%</th>
</tr>
</thead>
<tbody>
<tal:block tal:repeat="r data['rek']">
<tal:block tal:condition="ru['kode']==r['kode']">
<tr>
<td style="text-align:right;"><b>${'{}.'.format(r['no'])}</b></td>
<td style="text-align:left;"><b>${r['kode']}</b></td>
<td style="text-align:left;"><b>${r['nama'].upper()}</b></td>
<td style="text-align:right;"></td>
<td style="text-align:right;"></td>
<td style="text-align:right;"></td>
</tr>
<tal:block tal:repeat="rd data['rekdet']">
<tr>
<tal:block tal:condition="rd['kode'].startswith(r['kode'])">
<td style="text-align:right;"></td>
<td style="text-align:left;">${rd['kode']}</td>
<td style="text-align:left;">${'{}. {}'.format(rd['no'],rd['nama'])}</td>
<td style="text-align:right;">${'{:n}'.format(rd['target'])}</td>
<td style="text-align:right;">${'{:n}'.format(rd['realisasi'])}</td>
<td style="text-align:right;">${rd['persen']}</td>
</tal:block>
</tr>
</tal:block>
<tr class="bgth">
<td style="text-align:right;"></td>
<td style="text-align:left;"></td>
<td style="text-align:left;"><b>${'JUMLAH {} :'.format(r['no'])}</b></td>
<td style="text-align:right;"><b>${'{:n}'.format(r['target'])}</b></td>
<td style="text-align:right;"><b>${'{:n}'.format(r['realisasi'])}</b></td>
<td style="text-align:right;"><b>${r['persen']}</b></td>
</tr>
</tal:block>
</tal:block>
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</tal:block>
</div>
<script type="text/javascript" src="/static/js/Chart.min.js"></script>
......@@ -347,16 +310,16 @@ Selamat datang di aplikasi SIPANDU
data: {
labels: ['Jan','Feb','Mar','Apr','Mei','Jun','Jul','Agt','Sep','Okt','Nov','Des'],
datasets: [{
label: 'Transaksi',
label: 'Target',
backgroundColor: "#264184",
borderColor: "#264184",
data: ${data['chart']['q']},
data: ${str(data['chart']['t']).replace('L','')},
},
{
label: 'Nominal',
label: 'Realisasi',
backgroundColor: "#15915b",
borderColor: "#15915b",
data: ${str(data['chart']['n']).replace('L','')},
data: ${str(data['chart']['r']).replace('L','')},
}]
},
options: {
......@@ -380,7 +343,7 @@ Selamat datang di aplikasi SIPANDU
displayColors: false,
borderWidth: 0,
},
backgroundColor: "rgba(0, 0, 0, 0)",
backgroundColor: "rgba(255, 255, 255, 1)",
titleFontSize: 11,
mode: 'point'
},
......@@ -430,7 +393,10 @@ Selamat datang di aplikasi SIPANDU
"submitFormat": "dd-mm-yyyy",
"format": "dd-mm-yyyy",});
});
$('#chart').click(function(){
window.location = $(this).attr('href');
return false;
});
$('.date').attr('readonly', true);
$('.date').css('background-color', 'transparent');
<tal:block tal:condition="'unit' in request.params and request.params['unit']">
......
......@@ -104,6 +104,9 @@
.content {
display: none;
}
table tr:hover {
background-color: #9FAFD1;
}
</style>
<tal:block tal:condition="statusadmin">
<div class="col-md-12">
......@@ -120,7 +123,7 @@
<tbody>
<tal:block tal:repeat="so4 data['sopd4']">
<tal:block tal:condition="so4['kode'].startswith(unit_kode)">
<tr>
<tr class="header" title="klik untuk melihat daftar lengkap ranking" href="/ranking/det?date=${request.params['date']}&kode=${so4['kode']}&unit=${so4['unit']}">
<td style="text-align:left;">${so4['kode']}</td>
<td style="text-align:left;">${so4['unit']}</td>
<td style="text-align:right;">${'{:n}'.format(so4['nominal'])}</td>
......@@ -138,20 +141,26 @@
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function () {
$('tr.header').click(function() {
$('.expanded').slideUp(100, function() {});
if (!$(this).hasClass('expanded-header')) {
$(this).nextUntil('tr.header').addClass('expanded').slideToggle(100, function() {});
$('.expanded-header').removeClass('expanded-header');
$(this).addClass('expanded-header');
} else {
$(this).removeClass('expanded-header');
}
});
$('table tr').click(function(){
window.location = $(this).attr('href');
return false;
});
$('tr.header').click(function() {
$('.expanded').slideUp(100, function() {});
if (!$(this).hasClass('expanded-header')) {
$(this).nextUntil('tr.header').addClass('expanded').slideToggle(100, function() {});
$('.expanded-header').removeClass('expanded-header');
$(this).addClass('expanded-header');
} else {
$(this).removeClass('expanded-header');
}
});
$('.date').pickadate({
"submitFormat": "dd-mm-yyyy",
"format": "dd-mm-yyyy",});
"format": "dd-mm-yyyy",
});
$('.date').attr('readonly', true);
......@@ -159,6 +168,8 @@
<tal:block tal:condition="'unit' in request.params and request.params['unit']">
$("#unit").val("${request.params['unit'].strip()}");
</tal:block>
});
</script>
</tal:block>
</div>
......
......@@ -124,7 +124,7 @@
<tbody>
<tal:block tal:repeat="so data['sopd']">
<tal:block tal:condition="so['nominal']">
<tr class="header" title="klik untuk melihat daftar lengkap ranking" href="/ranking/det?kode=${so['kode']}&unit=${so['unit']}">
<tr class="header" title="klik untuk melihat daftar lengkap ranking" href="/ranking/det?date=${request.params['date']}&kode=${so['kode']}&unit=${so['unit']}">
<td style="text-align:center;">${so['peringkat']}</td>
<td style="text-align:left;">${so['kode']}</td>
<td style="text-align:left;">${so['unit']}</td>
......@@ -143,25 +143,25 @@
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function () {
$('table tr').click(function(){
window.location = $(this).attr('href');
return false;
});
$('tbody>tr:not(.header)').hide();
$('tr.header').click(function() {
$('.expanded').slideUp(100, function() {});
if (!$(this).hasClass('expanded-header')) {
$(this).nextUntil('tr.header').addClass('expanded').slideToggle(100, function() {});
$('.expanded-header').removeClass('expanded-header');
$(this).addClass('expanded-header');
} else {
$(this).removeClass('expanded-header');
}
});
$('table tr').click(function(){
window.location = $(this).attr('href');
return false;
});
$('tbody>tr:not(.header)').hide();
$('tr.header').click(function() {
$('.expanded').slideUp(100, function() {});
if (!$(this).hasClass('expanded-header')) {
$(this).nextUntil('tr.header').addClass('expanded').slideToggle(100, function() {});
$('.expanded-header').removeClass('expanded-header');
$(this).addClass('expanded-header');
} else {
$(this).removeClass('expanded-header');
}
});
$('.date').pickadate({
"submitFormat": "dd-mm-yyyy",
"format": "dd-mm-yyyy",});
"format": "dd-mm-yyyy",
});
$('.date').attr('readonly', true);
......@@ -169,6 +169,7 @@
<tal:block tal:condition="'unit' in request.params and request.params['unit']">
$("#unit").val("${request.params['unit'].strip()}");
</tal:block>
});
</script>
</tal:block>
</div>
......
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<style>
h4 {
font-weight:bold;
text-align:left;
color: #15915b;
}
h5 {
font-weight:bold;
font-size:18px;
text-align:left;
color: #264184;
}
.wraplabel {
border:1px solid #15915b;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding:10px;
margin-top:10px;
margin-bottom:20px;
}
.labeltab {
color:#264184;
font-weight:bold;
font-size:16px;
}
.textlabel {
display:block;
text-align:right;
color:#005500;
font-weight:bold;
}
.wrapchart {
border:1px solid #c4c4c4;
padding:0px;
margin-top:10px;
margin-bottom:20px;
}
.table {
font-size: 12px;
margin-top: 10px;
margin-bottom: 20px;
}
.table th {
background-color:#ddebf6;
}
.no-padding {
padding:0px;
}
.wrapopd {
border:1px solid #c4c4c4;
min-height:120px;
padding-top:5px;
padding-bottom:5px;
}
.kodeopd {
display:block;
color:#264184;
font-size:120%;
font-weight:bold;
}
.namaopd {
display:block;
color:#264184;
font-weight:500;
}
.jmlopd {
display:block;
font-size:120%;
color:#264184;
font-weight:bold;
text-align:right;
position: absolute;
bottom: 5px;
right: 10px;
}
.picker {
font-size:13px;
}
.link-styleless {
text-decoration: none !important;
color:inherit !important;
cursor: pointer;
}
.modal-body {
overflow-x:scroll !important;
}
.bgth {
background-color: #ddebf6 !important;
}
.modal-backdrop {
visibility: hidden !important;
}
.modal.in {
background-color: rgba(0,0,0,0.5);
}
.modal { overflow: auto !important; }
tr.header
{
cursor:pointer;
}
.content {
display: none;
}
</style>
<div class="col-md-12">
<tal:block tal:repeat="r data">
<a class="link-styleless" title="klik untuk melihat daftar lengkap rekening" href="/rek/det?${r['kode'] and 'kode='+r['kode'] or ''}${request.params['year'] and '&year='+str(request.params['year']) or ''}${('unit' in request.params and request.params['unit']) and '&unit='+request.params['unit'].strip() or ''}">
<div class="col-md-${count_rek} wrapopd">
<font class="kodeopd">${r['kode']}</font>
<font class="namaopd">${r['nama']}</font>
<font class="jmlopd">${'{:n}'.format(r['realisasi'])}</font>
</div>
</a>
</tal:block>
</div>
<div class="col-md-12">
<div class="clearfix"></div>
</div>
<script type="text/javascript" src="/static/js/Chart.min.js"></script>
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function () {
$('tr.header').click(function() {
$('.expanded').slideUp(100, function() {});
if (!$(this).hasClass('expanded-header')) {
$(this).nextUntil('tr.header').addClass('expanded').slideToggle(100, function() {});
$('.expanded-header').removeClass('expanded-header');
$(this).addClass('expanded-header');
} else {
$(this).removeClass('expanded-header');
}
});
$('.date').pickadate({
"submitFormat": "dd-mm-yyyy",
"format": "dd-mm-yyyy",
});
$('.date').attr('readonly', true);
$('.date').css('background-color', 'transparent');
});
</script>
</div>
</html>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!