Commit bc8dec58 by taufikyu

revisi laporan per opd per rekening, laporan per rekening per opd, cetak skrd

1 parent 2f250ffc
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -12,7 +12,7 @@ from sqlalchemy import func
from ..models import (DBSession, User,)
from ..models.isipkd import(
ARSspd, ARInvoice, Unit
ARSspd, ARInvoice, Unit, Rekening
)
from pyramid.view import notfound_view_config
......@@ -65,7 +65,6 @@ def view_home(request):
week = int(now.strftime('%W')),
day = now,
)
opd_ls = Unit.query().order_by(Unit.kode).all()
data_dashboard = dict(
tabular = dict(
tahun = dict(q=0,n=0),
......@@ -77,17 +76,22 @@ def view_home(request):
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],
),
opd= [],
rek= [],
sopd10= [],
sopd= [],
)
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()
for r in reks:
data_dashboard['rek'].append(dict(kode=r.kode.strip(), nama=r.nama.strip(), jumlah=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)).\
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()
for p in payments:
......@@ -124,33 +128,30 @@ def view_home(request):
if p.tanggal.month == x+1:
data_dashboard['chart']['q'][x] += int(1)
data_dashboard['chart']['n'][x] += int(p.jumlah)
for r in data_dashboard['rek']:
if p.rek_kode.strip().startswith(r['kode']):
r['jumlah'] += int(p.jumlah)
##RANKING##
tanggal_berjalan = datetime.now()
tahun_berjalan = tanggal_berjalan.year
opd = DBSession.query(
ARSspd.tgl_bayar.label('tanggal'),
ARSspd.bayar.label('jumlah'),
Unit.kode.label('kode'),
Unit.nama.label('nama'),
func.sum(ARSspd.bayar).label('jumlah'),
func.max(Unit.kode).label('kode'),
func.max(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==tahun_berjalan).order_by(ARInvoice.unit_kode).all()
join(Unit, func.trim(Unit.kode) == func.trim(ARInvoice.unit_kode)).\
filter(ARSspd.tahun_id==tahun_berjalan)\
.group_by(func.trim(Unit.kode))\
.order_by(func.sum(ARSspd.bayar).desc()).all()
prev_opd = ''
i = -1
for o in opd:
##OPD SESUAI TANGGAL
if prev_opd != o.kode:
i += 1
data_dashboard['opd'].append(dict(kode=o.kode.strip(),unit=o.nama.strip(),jumlah=0))
prev_opd = o.kode
data_dashboard['opd'][i]['jumlah']+=int(o.jumlah)
sort_opd = sorted(data_dashboard['opd'], key = lambda i: (i['jumlah']), reverse=True)
i = -1
for sopd in sort_opd:
for sopd in opd:
i += 1
if i < 10:
data_dashboard['sopd10'].append(dict(peringkat=i+1, kode=sopd['kode'], unit=sopd['unit'], nominal=sopd['jumlah']))
data_dashboard['sopd'].append(dict(peringkat=i+1, kode=sopd['kode'], unit=sopd['unit'], 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))
return dict(project='esipkd', dates=dates, data = data_dashboard, opds=opd_ls, statusadmin=statusadmin)
else:
return dict(project='esipkd', statusadmin=statusadmin)
......
......@@ -810,7 +810,30 @@ def view_pdf(request):
file = '/tmp/skrd'
template= Template(path+'skrd.odt', file+'.odt')
row = DBSession.query(ARInvoice).filter_by(id=params['id']).first()
row = DBSession.query(ARInvoice.unit_nama.label('unit_nama'),
ARInvoice.wp_nama.label('wp_nama'),
ARInvoice.wp_alamat_1.label('wp_alamat_1'),
ARInvoice.wp_alamat_2.label('wp_alamat_2'),
ARInvoice.wp_kode.label('wp_kode'),
ARInvoice.rek_nama.label('rek_nama'),
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()
item = Item()
item.opd = row.unit_nama
item.wp_nama = row.wp_nama
......@@ -831,6 +854,11 @@ def view_pdf(request):
item.jumlah = thousand(row.jumlah)
item.jatuh_tempo = dmy(row.jatuh_tempo)
item.terbilang = terbilang(row.jumlah) + ' Rupiah'
item.status_pembayaran = (row.ntb) and 'H2H Bank' or (row.ntp) and 'Manual' or '-'
item.tgl_pembayaran = row.tgl_bayar and dmy(row.tgl_bayar) 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.bayar = row.bayar and thousand(row.bayar) or (row.jumlah) and thousand(row.jumlah) or (int(item.pokok)+int(item.denda))
data = {}
data['item'] = item
......
......@@ -1497,13 +1497,67 @@ class ViewLaporan(BaseViews):
'rows': rows,
}
return csv_response(req, value, filename)
generator = lap16Generator()
pdf = generator.generate(query)
response=req.response
response.content_type="application/pdf"
response.content_disposition='filename=output.pdf'
response.write(pdf)
return response
##ODT
import os
from py3o.template import Template
from ..tools import odt_export, date_from_str, dmy
class Item(object):
pass
_here = os.path.dirname(__file__)
path = os.path.dirname(_here)
sourcepath = os.path.join(path, 'reports/')
filename = '16'
filepath = '/tmp/'
template = Template(sourcepath+filename+'.odt', filepath+filename+'.odt')
item = Item()
item.awal = dmy(date_from_str(awal))
item.akhir = dmy(date_from_str(akhir))
opds = []
rekenings = []
prevopd = ''
i = -1
total = 0
for row in query.all():
if row.un_kd.strip() != prevopd:
prevopd = row.un_kd.strip()
if i >= 0:
opds[i].total = thousand(subtotal)
subtotal = 0
opd = Item()
opd.kode = row.un_kd.strip()
opd.uraian = row.un_nm.strip()
opd.total = 0
opds.append(opd)
i+=1
subtotal += int(row.jumlah)
rek = Item()
rek.opd_kode = row.un_kd.strip()
rek.kode = row.rek_kd.strip()
rek.nama = row.rek_nm.strip()
rek.no_bayar = row.kd.strip()
rek.penyetor = row.wp_nm.strip()
rek.bayar = row.status
rek.pokok = thousand(row.pokok)
rek.denda = thousand(row.bunga)
rek.jumlah = thousand(row.jumlah)
rekenings.append(rek)
total += int(row.jumlah)
item.total = thousand(total)
data = dict(item=item, opds=opds, rekenings = rekenings)
template.render(data)
return odt_export(req, filepath+filename, 'pdf')
##JASPER
# generator = lap16Generator()
# pdf = generator.generate(query)
# response=req.response
# response.content_type="application/pdf"
# response.content_disposition='filename=output.pdf'
# response.write(pdf)
# return response
elif url_dict['act']=='Laporan_17' :
query = DBSession.query(ARSspd.tgl_bayar.label('tgl'),
......@@ -1573,13 +1627,84 @@ class ViewLaporan(BaseViews):
'rows': rows,
}
return csv_response(req, value, filename)
generator = lap17Generator()
pdf = generator.generate(query)
response=req.response
response.content_type="application/pdf"
response.content_disposition='filename=output.pdf'
response.write(pdf)
return response
##ODT
import os
from py3o.template import Template
from ..tools import odt_export, date_from_str, dmy
class Item(object):
pass
_here = os.path.dirname(__file__)
path = os.path.dirname(_here)
sourcepath = os.path.join(path, 'reports/')
filename = '17'
filepath = '/tmp/'
template = Template(sourcepath+filename+'.odt', filepath+filename+'.odt')
item = Item()
item.awal = dmy(date_from_str(awal))
item.akhir = dmy(date_from_str(akhir))
rekenings = []
opds = []
opddets = []
prevopd = ''
prevrek = ''
i = -1
j = -1
total = 0
for row in query.all():
if row.rek_kd.strip() != prevrek:
prevrek = row.rek_kd.strip()
if i >= 0:
rekenings[i].total = thousand(subtotaldet)
subtotaldet = 0
rekening = Item()
rekening.kode = row.rek_kd.strip()
rekening.uraian = row.rek_nm.strip()
rekening.total = 0
rekenings.append(rekening)
i+=1
subtotaldet += int(row.jumlah)
if row.un_kd.strip() != prevopd:
prevopd = row.un_kd.strip()
if j >=0:
opds[j].total = thousand(subtotal)
subtotal = 0
opd = Item()
opd.rek_kode = row.rek_kd.strip()
opd.unit_kode = row.un_kd.strip()
opd.total = 0
opds.append(opd)
j+=1
subtotal += int(row.jumlah)
opddet = Item()
opddet.rek_kode = row.rek_kd.strip()
opddet.kode = row.un_kd.strip()
opddet.nama = row.un_nm.strip()
opddet.no_bayar = row.kd.strip()
opddet.penyetor = row.wp_nm.strip()
opddet.bayar = row.status
opddet.pokok = thousand(row.pokok)
opddet.denda = thousand(row.bunga)
opddet.jumlah = thousand(row.jumlah)
opddets.append(opddet)
total += int(row.jumlah)
item.total = thousand(total)
data = dict(item=item, opds=opds, opddets=opddets, rekenings = rekenings)
template.render(data)
return odt_export(req, filepath+filename, 'pdf')
##JASPER
# generator = lap17Generator()
# pdf = generator.generate(query)
# response=req.response
# response.content_type="application/pdf"
# response.content_disposition='filename=output.pdf'
# response.write(pdf)
# return response
elif url_dict['act']=='Laporan_18' :
......@@ -3248,8 +3373,7 @@ class lap16Generator(JasperGenerator):
def __init__(self):
super(lap16Generator, self).__init__()
self.reportname = get_rpath('Lap16.jrxml')
# self.xpath = '/webr/lap16'
self.xpath = '/tmp'
self.xpath = '/webr/lap16'
self.root = ET.Element('webr')
def generate_xml(self, tobegreeted):
......
......@@ -108,6 +108,7 @@ Selamat datang di aplikasi SIPANDU
<tal:block tal:condition="statusadmin">
<div class="col-md-6">
<h4>REALISASI PENDAPATAN DAERAH TAHUN ${dates['year']}</h4>
<font class="labeltab">Tanggal : ${request.session['date']}</font>
</div>
<div class="col-md-6">
<form method="get">
......@@ -183,11 +184,11 @@ Selamat datang di aplikasi SIPANDU
</div>
</div>
<div class="col-md-12">
<tal:block tal:repeat="opd data['opd']">
<tal:block tal:repeat="r data['rek']">
<div class="col-md-3 wrapopd">
<font class="kodeopd">${opd['kode']}</font>
<font class="namaopd">${opd['unit']}</font>
<font class="jmlopd">${'{:n}'.format(opd['jumlah'])}</font>
<font class="kodeopd">${r['kode']}</font>
<font class="namaopd">${r['nama']}</font>
<font class="jmlopd">${'{:n}'.format(r['jumlah'])}</font>
</div>
</tal:block>
</div>
......@@ -269,6 +270,10 @@ Selamat datang di aplikasi SIPANDU
}
});
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
//BAR
var config = {
type: 'bar',
......@@ -297,9 +302,10 @@ Selamat datang di aplikasi SIPANDU
return '';
},
label: function(tooltipItem, data) {
var label = data.labels[tooltipItem.index];
var val = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
return val;
//var label = data.labels[tooltipItem.index];
//var val = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
//return val;
return tooltipItem.yLabel.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
},
labelTextColor: function(tooltipItem, data) {
return 'rgba(0,0,0,0.8)';
......@@ -332,7 +338,14 @@ Selamat datang di aplikasi SIPANDU
labelString: 'Value'
},
ticks: {
beginAtZero: true
beginAtZero: true,
callback: function(value, index, values) {
if(parseInt(value) >= 1000){
return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
} else {
return value;
}
}
}
}]
},
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!