Commit e785091e by taufikyu

revisi qrcode, halaman skrd, detail rekening

1 parent bc8dec58
No preview for this file type
...@@ -237,4 +237,5 @@ id,kode,nama,path,factory,perm_name,disabled,created,updated,create_uid ...@@ -237,4 +237,5 @@ id,kode,nama,path,factory,perm_name,disabled,created,updated,create_uid
252,"anggaran-csv","CSV Anggaran","/anggaran/{csv}/csv",,"read",0,"2015-03-08 16:45:45",,1 252,"anggaran-csv","CSV Anggaran","/anggaran/{csv}/csv",,"read",0,"2015-03-08 16:45:45",,1
253,"anggaran-pdf","PDF Anggaran","/anggaran/{pdf}/pdf",,"read",0,"2015-03-08 16:45:45",,1 253,"anggaran-pdf","PDF Anggaran","/anggaran/{pdf}/pdf",,"read",0,"2015-03-08 16:45:45",,1
254,"arinvoice-ws","Invoice WS","/arinvoicews",,"read",0,"2020-09-18 16:45:45",,1 254,"arinvoice-ws","Invoice WS","/arinvoicews",,"read",0,"2020-09-18 16:45:45",,1
255,"arinvoice-ws-act","Invoice WS Act","/arinvoicews/{act}/act",,"read",0,"2020-09-18 16:45:45",,1
\ No newline at end of file \ No newline at end of file
255,"arinvoice-ws-act","Invoice WS","/arinvoicews/{act}/act",,"read",0,"2020-09-18 16:45:45",,1
255,"public-act","Public","/public/{act}",,"read",0,"2020-09-18 16:45:45",,1
\ No newline at end of file \ No newline at end of file
...@@ -680,4 +680,26 @@ def terbilang(bil): ...@@ -680,4 +680,26 @@ def terbilang(bil):
hasil = terbilang(n / 1000000) + " Juta" + terbilang(n % 1000000) hasil = terbilang(n / 1000000) + " Juta" + terbilang(n % 1000000)
else: else:
hasil = terbilang(n / 1000000000) + " Miliar" + terbilang(n % 1000000000) hasil = terbilang(n / 1000000000) + " Miliar" + terbilang(n % 1000000000)
return hasil
\ No newline at end of file \ No newline at end of file
return hasil
def int_to_roman(num):
val = [
1000, 900, 500, 400,
100, 90, 50, 40,
10, 9, 5, 4,
1
]
syb = [
"M", "CM", "D", "CD",
"C", "XC", "L", "XL",
"X", "IX", "V", "IV",
"I"
]
roman_num = ''
i = 0
while num > 0:
for _ in range(num // val[i]):
roman_num += syb[i]
num -= val[i]
i += 1
return roman_num
\ No newline at end of file \ No newline at end of file
...@@ -7,7 +7,7 @@ from pyramid.view import view_config ...@@ -7,7 +7,7 @@ from pyramid.view import view_config
from pyramid.httpexceptions import (HTTPFound, HTTPForbidden, HTTPNotFound) from pyramid.httpexceptions import (HTTPFound, HTTPForbidden, HTTPNotFound)
from pyramid.security import (remember, forget, authenticated_userid,) from pyramid.security import (remember, forget, authenticated_userid,)
from deform import (Form, ValidationFailure, widget,) from deform import (Form, ValidationFailure, widget,)
from ..tools import dmy, date_from_str from ..tools import dmy, date_from_str, int_to_roman
from sqlalchemy import func from sqlalchemy import func
from ..models import (DBSession, User,) from ..models import (DBSession, User,)
...@@ -77,13 +77,25 @@ def view_home(request): ...@@ -77,13 +77,25 @@ def view_home(request):
n = [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],
), ),
rek= [], rek= [],
rekdet= [],
sopd10= [], sopd10= [],
sopd= [], sopd= [],
) )
opd_ls = Unit.query().filter(Unit.level_id==3).order_by(Unit.kode).all() opd_ls = Unit.query().filter(Unit.level_id==3).order_by(Unit.kode).all()
reks = Rekening.query().filter(Rekening.level_id==3, Rekening.kode.ilike('4.1.%')).order_by(Rekening.kode).all() reks41 = Rekening.query().filter(Rekening.level_id==3, Rekening.kode.ilike('4.1.%')).order_by(Rekening.kode).all()
for r in reks: no3=0
data_dashboard['rek'].append(dict(kode=r.kode.strip(), nama=r.nama.strip(), jumlah=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))
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))
payments = DBSession.query( payments = DBSession.query(
ARSspd.tgl_bayar.label('tanggal'), ARSspd.tgl_bayar.label('tanggal'),
ARSspd.bayar.label('jumlah'), ARSspd.bayar.label('jumlah'),
...@@ -130,7 +142,27 @@ def view_home(request): ...@@ -130,7 +142,27 @@ def view_home(request):
data_dashboard['chart']['n'][x] += int(p.jumlah) data_dashboard['chart']['n'][x] += int(p.jumlah)
for r in data_dashboard['rek']: for r in data_dashboard['rek']:
if p.rek_kode.strip().startswith(r['kode']): if p.rek_kode.strip().startswith(r['kode']):
r['jumlah'] += int(p.jumlah) r['realisasi'] += int(p.jumlah)
for r in data_dashboard['rekdet']:
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==dates['year']).order_by(ARInvoice.unit_kode)
invoices = invoices.all()
for i in invoices:
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)
##RANKING## ##RANKING##
tanggal_berjalan = datetime.now() tanggal_berjalan = datetime.now()
...@@ -152,6 +184,12 @@ def view_home(request): ...@@ -152,6 +184,12 @@ def view_home(request):
data_dashboard['sopd10'].append(dict(peringkat=i+1, kode=sopd.kode, unit=sopd.nama, nominal=sopd.jumlah)) data_dashboard['sopd10'].append(dict(peringkat=i+1, kode=sopd.kode, unit=sopd.nama, nominal=sopd.jumlah))
data_dashboard['sopd'].append(dict(peringkat=i+1, kode=sopd.kode, unit=sopd.nama, nominal=sopd.jumlah)) data_dashboard['sopd'].append(dict(peringkat=i+1, kode=sopd.kode, unit=sopd.nama, nominal=sopd.jumlah))
##REKENING##
for r in data_dashboard['rek']:
r['persen'] = r['realisasi'] and str(round((float(r['realisasi'])/float(r['target']))*100,2)).replace('.0','') or '0'
for r in data_dashboard['rekdet']:
r['persen'] = r['realisasi'] and str(round((float(r['realisasi'])/float(r['target']))*100,2)).replace('.0','') or '0'
return dict(project='esipkd', dates=dates, data = data_dashboard, opds=opd_ls, statusadmin=statusadmin) return dict(project='esipkd', dates=dates, data = data_dashboard, opds=opd_ls, statusadmin=statusadmin)
else: else:
return dict(project='esipkd', statusadmin=statusadmin) return dict(project='esipkd', statusadmin=statusadmin)
......
...@@ -2,6 +2,7 @@ import sys ...@@ -2,6 +2,7 @@ import sys
import re import re
import logging import logging
import os import os
import qrcode
from email.utils import parseaddr from email.utils import parseaddr
from sqlalchemy import not_, func, or_, desc from sqlalchemy import not_, func, or_, desc
from datetime import datetime from datetime import datetime
...@@ -859,6 +860,13 @@ def view_pdf(request): ...@@ -859,6 +860,13 @@ def view_pdf(request):
item.pokok = row.pokok and thousand(row.pokok) or '-' item.pokok = row.pokok and thousand(row.pokok) or '-'
item.denda = (row.tgl_bayar) and thousand(row.bunga) or (row.denda) and thousand(row.denda) or '0' item.denda = (row.tgl_bayar) and thousand(row.bunga) or (row.denda) and thousand(row.denda) or '0'
item.bayar = row.bayar and thousand(row.bayar) or (row.jumlah) and thousand(row.jumlah) or (int(item.pokok)+int(item.denda)) item.bayar = row.bayar and thousand(row.bayar) or (row.jumlah) and thousand(row.jumlah) or (int(item.pokok)+int(item.denda))
from ..tools import get_settings
qrcodename = 'skrd_{}'.format(params['id'])
path = '/tmp/' + qrcodename
imgqrcode = qrcode.make(str('{}/public/skrd?id={}'.format(get_settings()['_host'],params['id'])))
imgqrcode.save(path, 'PNG')
item.qrcode = open(path, 'rb').read()
data = {} data = {}
data['item'] = item data['item'] = item
......
import sys
import re
import logging
import os
import qrcode
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
)
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__)
#######
# Add #
#######
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
'Kode invoice %s sudah digunakan oleh ID %d' % (
value['kode'], found.id))
def err_name():
raise colander.Invalid(form,
'Uraian %s sudah digunakan oleh ID %d' % (
value['nama'], found.id))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(ARInvoice).filter_by(id=uid)
r = q.first()
else:
r = None
class AddSchema(colander.Schema):
moneywidget = widget.MoneyInputWidget(
size=20, options={'allowZero':True,
'precision':0
})
unit_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
oid="unit_id",
title="OPD",
)
unit_nm = colander.SchemaNode(
colander.String(),
title="OPD",
oid="unit_nm"
)
subjek_pajak_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
title="Penyetor",
oid = "subjek_pajak_id"
)
subjek_pajak_nm = colander.SchemaNode(
colander.String(),
widget=auto_wp_nm3,
title="Penyetor",
oid = "subjek_pajak_nm"
)
subjek_pajak_us = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
oid = "subjek_pajak_us"
)
subjek_pajak_un = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
oid = "subjek_pajak_un"
)
wp_nama = colander.SchemaNode(
colander.String(),
#widget=auto_wp_nm3,
title="Nama Lainnya",
oid = "wp_nama"
)
wp_alamat_1 = colander.SchemaNode(
colander.String(),
#widget=auto_wp_nm3,
title="Alamat",
oid = "wp_alamat_1"
)
objek_pajak_id = colander.SchemaNode(
colander.Integer(),
title="Objek",
widget=widget.HiddenWidget(),
oid = "objek_pajak_id"
)
objek_pajak_nm = colander.SchemaNode(
colander.String(),
widget=auto_op_nm,
title="Objek",
oid = "objek_pajak_nm"
)
kode = colander.SchemaNode(
colander.String(),
title="Kode Bayar",
missing = colander.drop,
)
periode_1 = colander.SchemaNode(
colander.Date(),
title="Periode 1",
widget = widget.DateInputWidget()
)
periode_2 = colander.SchemaNode(
colander.Date(),
title="Periode 2"
)
tgl_tetap = colander.SchemaNode(
colander.Date(),
oid = "tgl_tetap"
)
jatuh_tempo = colander.SchemaNode(
colander.Date(),
oid = 'jatuh_tempo',
)
dasar = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
oid = "dasar"
)
tarif = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
oid = "tarif",
title="Tarif (%)",
missing=colander.drop
)
pokok = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
missing=colander.drop,
oid = "pokok"
)
denda = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
oid = "denda"
)
bunga = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
oid = "bunga"
)
jumlah = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
missing=colander.drop,
oid = "jumlah"
)
no_skrd = colander.SchemaNode(
colander.String(),
oid = "no_skrd"
)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True)
)
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS,
daftar_subjekpajak=daftar_subjekpajak(),
daftar_unit=daftar_unit(),
daftar_objekpajak=daftar_objekpajak(),
)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(request, values, row=None):
log.debug('*** values {}'.format(values))
if not row:
row = ARInvoice()
row.create_date = datetime.now()
row.create_uid = request.user.id
row.from_dict(values)
#row.update_date = datetime.now()
row.update_uid = request.user.id
row.dasar = re.sub("[^0-9]", "", row.dasar)
row.tarif = re.sub("[^0-9]", "", row.tarif)
row.pokok = re.sub("[^0-9]", "", row.pokok)
row.denda = re.sub("[^0-9]", "", row.denda)
row.bunga = re.sub("[^0-9]", "", row.bunga)
row.jumlah = re.sub("[^0-9]", "", row.jumlah)
if not row.tahun_id:
row.tahun_id = datetime.now().strftime('%Y')
unit = Unit.get_by_id(row.unit_id)
row.unit_kd = unit.kode
row.unit_nm = unit.nama
ref = Unit.get_by_id(row.unit_id)
row.unit_kode = ref.kode
row.unit_nama = ref.nama
ref = SubjekPajak.get_by_id(row.subjek_pajak_id)
row.wp_kode = ref.kode
#row.wp_nama = ref.nama
#row.wp_alamat_1 = ref.alamat_1
row.wp_alamat_2 = ref.alamat_2
ref = ObjekPajak.get_by_id(row.objek_pajak_id)
row.op_kode = ref.kode
row.op_nama = ref.nama
row.op_alamat_1 = ref.alamat_1
row.op_alamat_2 = ref.alamat_2
row.wilayah_id = ref.wilayah_id
row.rekening_id = ref.pajaks.rekening_id
row.rek_kode = ref.pajaks.rekenings.kode
row.rek_nama = ref.pajaks.rekenings.nama
row.denda_rekening_id = ref.pajaks.denda_rekening_id
ref = Wilayah.get_by_id(row.wilayah_id)
row.wilayah_kode = ref.kode
#-- Perubahan pada No bayar dan filter tanggal 13-062017 --#
tgl_tetap = values['tgl_tetap']
prefix = '21'
tgl_tetap_new = datetime.strptime(values['tgl_tetap'], '%Y-%m-%d').date()
tanggal = tgl_tetap_new.day
bulan = tgl_tetap_new.month
tahun = tgl_tetap_new.strftime('%y')
if not row.kode and not row.no_id:
invoice_no = DBSession.query(func.max(ARInvoice.no_id)).\
filter(#ARInvoice.tahun_id==row.tahun_id,
ARInvoice.wilayah_id==row.wilayah_id,
ARInvoice.tgl_tetap==tgl_tetap_new,
func.substr(ARInvoice.kode,1,2)=='21').scalar()
print "--------- Invoice No ---------- ",invoice_no
print "--tahun--",row.tahun_id
print "--wilayah--",row.wilayah_id
print "--tanggal--",tgl_tetap_new
if not invoice_no:
row.no_id = 1
else:
row.no_id = invoice_no+1
row.kode = "".join([prefix, re.sub("[^0-9]", "", row.wilayah_kode),
str(tanggal).rjust(2,'0'),
str(bulan).rjust(2,'0'),
str(tahun).rjust(2,'0'),
str(row.no_id).rjust(4,'0')])
row.owner_id = request.user.id
DBSession.add(row)
DBSession.flush()
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(request, values, row)
request.session.flash('No Bayar %s sudah disimpan.' % row.kode)
def route_list(request):
return HTTPFound(location=request.route_url('arinvoiceb'))
def session_failed(request, session_name):
try:
session_name.set_appstruct(request.session[SESS_ADD_FAILED])
except:
pass
r = dict(form=session_name)
del request.session[SESS_ADD_FAILED]
return r
@view_config(route_name='public-act', renderer='templates/public/public.pt')
def view_public(request):
params = request.params
url_dict = request.matchdict
found = False
row = ''
if url_dict['act'] == 'skrd':
if 'id' in params and params['id']:
row = DBSession.query(ARInvoice.unit_nama.label('unit_nama'),
func.trim(ARInvoice.wp_nama).label('wp_nama'),
func.trim(ARInvoice.wp_alamat_1).label('wp_alamat_1'),
func.trim(ARInvoice.wp_alamat_2).label('wp_alamat_2'),
func.trim(ARInvoice.wp_kode).label('wp_kode'),
func.trim(ARInvoice.rek_nama).label('rek_nama'),
func.trim(ARInvoice.rek_kode).label('rek_kode'),
ARInvoice.periode_1.label('periode_1'),
ARInvoice.periode_2.label('periode_2'),
ARInvoice.kode.label('kode'),
ARInvoice.no_skrd.label('no_skrd'),
ARInvoice.tahun_id.label('tahun_id'),
ARInvoice.tgl_tetap.label('tgl_tetap'),
ARInvoice.jumlah.label('jumlah'),
ARInvoice.jatuh_tempo.label('jatuh_tempo'),
ARInvoice.pokok.label('pokok'),
ARInvoice.denda.label('denda'),
ARSspd.ntp.label('ntp'),
ARSspd.ntb.label('ntb'),
ARSspd.tgl_bayar.label('tgl_bayar'),
ARSspd.bunga.label('bunga'),
ARSspd.bayar.label('bayar'))\
.outerjoin(ARSspd, ARSspd.arinvoice_id==ARInvoice.id)\
.filter(ARInvoice.id==params['id']).first()
if row:
found = True
return dict(data=row, found=found)
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
</button> </button>
<!--a class="navbar-brand" href="#"><img alt="web-R" src="/static/img/web-r.png" width="40"></a--> <!--a class="navbar-brand" href="#"><img alt="web-R" src="/static/img/web-r.png" width="40"></a-->
<!--a class="navbar-brand" href="#"><img alt="S I P A N D U" src="/static/img/sipandu.png" width="160"></a--> <!--a class="navbar-brand" href="#"><img alt="S I P A N D U" src="/static/img/sipandu.png" width="160"></a-->
<a class="navbar-brand" href="#"><img alt="S I P A N D U" src="/static/img/sipandu.png" width="175"></a> <a class="navbar-brand" href="/"><img alt="S I P A N D U" src="/static/img/sipandu.png" width="175"></a>
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="/static/img/favicon.png">
<!--link rel="shortcut icon" href="/static/img/favicon_sipandu.png"-->
<title tal:content="request.title" />
<!-- Bootstrap core CSS -->
<link href="/deform_static/css/bootstrap.min.css" rel="stylesheet">
<link href="/deform_static/css/typeahead.css" rel="stylesheet">
<!--link href="/deform_static/css/form.css" rel="stylesheet"-->
<!-- Custom styles for this template -->
<link href="/static/css/navbar-fixed-top.css" rel="stylesheet">
<link href="/static/css/theme.css" rel="stylesheet">
<!--link href="/static/datatables/extensions/TableTools/css/dataTables.tableTools.min.css" rel="stylesheet"-->
<!--link href="/static/datatables/media/css/dataTables.bootstrap.css" rel="stylesheet"-->
<link href="/static/js/pickadate/themes/classic.css" rel="stylesheet">
<link href="/static/js/pickadate/themes/classic.date.css" rel="stylesheet">
<link href="/static/css/osipkd.css" rel="stylesheet">
<!--link href="/static/css/jquery-ui.css" rel="stylesheet"-->
</head>
<body>
<!-- Fixed navbar -->
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!--a class="navbar-brand" href="#"><img alt="web-R" src="/static/img/web-r.png" width="40"></a-->
<!--a class="navbar-brand" href="#"><img alt="S I P A N D U" src="/static/img/sipandu.png" width="160"></a-->
<a class="navbar-brand" href="#"><img alt="S I P A N D U" src="/static/img/sipandu.png" width="175"></a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav"></ul>
<ul class="nav navbar-nav pull-right"></ul>
</div><!--/.nav-collapse -->
</div>
</div>
<div class="container">
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script type="text/javascript" src="/deform_static/scripts/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="/deform_static/scripts/jquery.form.js"></script>
<script type="text/javascript" src="/deform_static/scripts/bootstrap.min.js"></script>
<script type="text/javascript" src="/deform_static/scripts/deform.js"></script>
<script type="text/javascript" src="/deform_static/scripts/jquery.maskMoney-1.4.1.js"></script>
<script type="text/javascript" src="/deform_static/scripts/typeahead.min.js"></script>
<script type="text/javascript" src="/static/js/pickadate/picker.js"></script>
<script type="text/javascript" src="/static/js/pickadate/picker.date.js"></script>
<script type="text/javascript" src="/static/js/modernizr.custom.input-types-and-atts.js"></script>
<script type="text/javascript" src="/static/js/modernizr.js"></script>
<div metal:define-slot="content"></div>
</div> <!-- /container -->
</body>
</html>
...@@ -79,6 +79,16 @@ ...@@ -79,6 +79,16 @@
.picker { .picker {
font-size:13px; font-size:13px;
} }
.link-styleless {
text-decoration: none !important;
color:inherit !important;
}
.modal-body {
overflow-x:scroll !important;
}
.bgth {
background-color: #ddebf6 !important;
}
</style> </style>
<tal:block tal:condition="not statusadmin"> <tal:block tal:condition="not statusadmin">
<div class="well"> <div class="well">
...@@ -161,6 +171,7 @@ Selamat datang di aplikasi SIPANDU ...@@ -161,6 +171,7 @@ Selamat datang di aplikasi SIPANDU
</canvas> </canvas>
</div> </div>
<div class="col-md-5"> <div class="col-md-5">
<a class="link-styleless" title="klik untuk melihat daftar lengkap ranking" data-toggle="modal" data-target="#ranking">
<font class="labeltab">10 Penerimaan OPD Tertinggi Periode ${dates['year']}</font><br> <font class="labeltab">10 Penerimaan OPD Tertinggi Periode ${dates['year']}</font><br>
<div class="clearfix"></div> <div class="clearfix"></div>
<table class="table table-bordered"> <table class="table table-bordered">
...@@ -181,24 +192,33 @@ Selamat datang di aplikasi SIPANDU ...@@ -181,24 +192,33 @@ Selamat datang di aplikasi SIPANDU
</tal:block> </tal:block>
</tbody> </tbody>
</table> </table>
</a>
</div> </div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<tal:block tal:repeat="r data['rek']"> <tal:block tal:repeat="r data['rek']">
<a class="link-styleless" title="klik untuk melihat daftar lengkap rekening" data-toggle="modal" data-target="#rekeningdetail">
<div class="col-md-3 wrapopd"> <div class="col-md-3 wrapopd">
<font class="kodeopd">${r['kode']}</font> <font class="kodeopd">${r['kode']}</font>
<font class="namaopd">${r['nama']}</font> <font class="namaopd">${r['nama']}</font>
<font class="jmlopd">${'{:n}'.format(r['jumlah'])}</font> <font class="jmlopd">${'{:n}'.format(r['realisasi'])}</font>
</div> </div>
</a>
</tal:block> </tal:block>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<div class="clearfix"></div> <div class="clearfix"></div>
<br> <div class="modal fade" id="ranking" tabindex="-1" role="dialog">
<div class="col-md-6"> <div class="modal-dialog modal-lg" role="document">
<h5>Ranking Penerimaan OPD Periode ${dates['day'].strftime('%d-%m-%Y')}</h5> <div class="modal-content">
</div> <div class="modal-header">
<div class="clearfix"></div> <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-6">
<h5>Ranking Penerimaan OPD Periode ${dates['day'].strftime('%d-%m-%Y')}</h5>
</div>
<div class="clearfix"></div>
<table class="table table-bordered"> <table class="table table-bordered">
<thead> <thead>
<tr> <tr>
...@@ -219,6 +239,76 @@ Selamat datang di aplikasi SIPANDU ...@@ -219,6 +239,76 @@ Selamat datang di aplikasi SIPANDU
</tal:block> </tal:block>
</tbody> </tbody>
</table> </table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="rekeningdetail" 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']">
<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>
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div> </div>
<script type="text/javascript" src="/static/js/Chart.min.js"></script> <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 type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script>
......
<html metal:use-macro="load: ../base.public.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;
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
background-color: transparent !important;
border : none !important;
border-radius : 0px !important;
-moz-border-radius : 0px !important;
-webkit-border-radius : 0px !important;
box-shadow : none !important;
-moz-box-shadow : none !important;
-webkit-box-shadow : none !important;
opacity: 1;
}
.border {
border : 1px solid #ccc;
}
.padding {
padding: 15px;
}
.table {
font-size:13px !important;
}
.bold {
font-weight: bold !important;
}
</style>
<tal:block tal:condition="not found">
<h2>Data tidak ditemukan</h2>
</tal:block>
<tal:block tal:condition="found and data">
<form class="form-horizontal">
<div class="col-md-12" align="center">
<h2>No. Skrd : ${data.no_skrd}</h2>
<br>
</div>
<div class="col-md-6 col-md-offset-3">
<div class="border padding">
<table class="table">
<tr>
<td class="bold">Kode Bayar</td>
<td> : </td>
<td>${data.kode}</td>
</tr>
<tr>
<td class="bold">Masa Retribusi</td>
<td> : </td>
<td>${data.periode_1} s/d ${data.periode_2}</td>
</tr>
<tr>
<td class="bold">Tahun</td>
<td> : </td>
<td>${data.tahun_id}</td>
</tr>
<tr>
<td class="bold">Tanggal Jatuh Tempo</td>
<td> : </td>
<td>${data.jatuh_tempo.strftime('%d-%m-%Y')}</td>
</tr>
<tr>
<td class="bold">Nama</td>
<td> : </td>
<td>${data.wp_nama}</td>
</tr>
<tr>
<td class="bold">Alamat</td>
<td> : </td>
<td>${(data.wp_alamat_2 and data.wp_alamat_2 != '-') and ('{} {}'.format(data.wp_alamat_1, data.wp_alamat_2)) or data.wp_alamat_1}</td>
</tr>
<tr>
<td class="bold">NPWRD</td>
<td> : </td>
<td>${data.wp_kode}</td>
</tr>
<tr>
<td class="bold">Kode Rekening</td>
<td> : </td>
<td>${data.rek_kode}</td>
</tr>
<tr>
<td class="bold">Jenis Retribusi Daerah</td>
<td> : </td>
<td>${data.rek_nama}</td>
</tr>
<tr>
<td class="bold">Jumlah</td>
<td> : </td>
<td>${'{:n}'.format(data.jumlah)}</td>
</tr>
</table>
</div>
</div>
</form>
</tal:block>
</div>
</html>
...@@ -32,7 +32,8 @@ requires=['pyramid==1.5.8', ...@@ -32,7 +32,8 @@ requires=['pyramid==1.5.8',
'pyramid_rpc', 'pyramid_rpc',
'requests', 'requests',
'unoconv', 'unoconv',
'py3o.template' 'py3o.template',
'qrcode'
] ]
if sys.argv[1:] and sys.argv[1] == 'develop-use-pip': if sys.argv[1:] and sys.argv[1] == 'develop-use-pip':
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!