Commit f2205b32 by miftahudin

penambahan menu anggaran opd

1 parent 3d694b18
...@@ -284,6 +284,18 @@ class Anggaran(NamaModel, Base): ...@@ -284,6 +284,18 @@ class Anggaran(NamaModel, Base):
rekenings = relationship("Rekening", backref=backref('anggarans')) rekenings = relationship("Rekening", backref=backref('anggarans'))
UniqueConstraint('rekening_id','tahun', name='anggaran_rekening_tahun') UniqueConstraint('rekening_id','tahun', name='anggaran_rekening_tahun')
class AnggaranOPD(NamaModel, Base):
__tablename__ = 'anggaran_unit'
status = Column(Integer, default=1)
tahun = Column(Integer, nullable=False, default=0)
rekening_id = Column(Integer, ForeignKey("rekenings.id"))
unit_id = Column(Integer, ForeignKey("units.id"))
murni = Column(BigInteger)
perubahan = Column(BigInteger)
rekenings = relationship("Rekening", backref=backref('anggaran_unit'))
units = relationship("Unit", backref=backref('anggaran_unit'))
UniqueConstraint('rekening_id','tahun', name='anggaran_unit_rekening_tahun')
class Wilayah(NamaModel,Base): class Wilayah(NamaModel,Base):
__tablename__ = 'wilayahs' __tablename__ = 'wilayahs'
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
......
...@@ -243,3 +243,11 @@ id,kode,nama,path,factory,perm_name,disabled,created,updated,create_uid ...@@ -243,3 +243,11 @@ id,kode,nama,path,factory,perm_name,disabled,created,updated,create_uid
258,"ranking-det","Ranking Detail","/ranking/det",,"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
259,"rek-det","Rekening Detail","/rek/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 260,"chart-det","Chart Detail","/chart/det",,"read",0,"2020-10-13 08:38:45",,1
261,"anggaran-opd","Anggaran OPD","/anggaran/opd",,"read",0,"2015-03-08 16:45:45",,1
262,"anggaran-opd-act","Baca Anggaran OPD","/anggaran/opd/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
263,"anggaran-opd-add","Tambah Anggaran OPD","/anggaran/opd/add",,"add",0,"2015-03-08 16:45:45",,1
264,"anggaran-opd-edit","Edit Anggaran OPD","/anggaran/opd/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
265,"anggaran-opd-delete","Hapus Anggaran OPD","/anggaran/opd/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
266,"anggaran-opd-csv","CSV Anggaran OPD","/anggaran/opd/{csv}/csv",,"read",0,"2015-03-08 16:45:45",,1
267,"anggaran-opd-pdf","PDF Anggaran OPD","/anggaran/opd/{pdf}/pdf",,"read",0,"2015-03-08 16:45:45",,1
\ No newline at end of file \ No newline at end of file
import sys
import re
from email.utils import parseaddr
from sqlalchemy import not_, func, or_, desc
from datetime import datetime
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..models import DBSession
from ..models.isipkd import(
Pajak,
Rekening,
Unit,
UnitRekening,
UserUnit,
Anggaran,
AnggaranOPD
)
from daftar import STATUS, deferred_status, daftar_rekening, deferred_rekening, daftar_rekening1, deferred_rekening1, auto_rekening_nm, deferred_unit, daftar_unit, auto_unit_nm, auto_user_nm
from ..security import group_in
from datatables import (
ColumnDT, DataTables)
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive
SESS_ADD_FAILED = 'Gagal tambah anggaran'
SESS_EDIT_FAILED = 'Gagal edit anggaran'
########
# List #
########
@view_config(route_name='anggaran-opd', renderer='templates/anggaran-opd/list.pt',
permission='read')
def view_list(request):
return dict(rows={})
#######
# Add #
#######
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
'Kode rekening anggaran %s sudah digunakan oleh ID %d' % (
value['kode'], found.id))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(AnggaranOPD).filter_by(id=uid)
r = q.first()
else:
r = None
q = DBSession.query(AnggaranOPD).filter_by(kode=value['kode'])
found = q.first()
if r:
if found and found.id != r.id:
err_kode()
class AddSchema(colander.Schema):
moneywidget = widget.MoneyInputWidget(
size=20, options={'allowZero':True,
'precision':0
})
kode = colander.SchemaNode(
colander.String(),
missing = colander.drop,
widget=widget.HiddenWidget(),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
missing = colander.drop,
widget=widget.HiddenWidget(),
oid="nama")
unit_id = colander.SchemaNode(
colander.Integer(),
widget = deferred_unit,
oid="unit_id",
title="OPD")
rekening_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
oid="rekening_id")
rekening_kd = colander.SchemaNode(
colander.String(),
oid="rekening_kd",
title="Kode Rekening")
rekening_nm = colander.SchemaNode(
colander.String(),
oid="rekening_nm",
title="Uraian Rekening")
murni = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
oid = "murni")
perubahan = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
oid = "perubahan")
tahun = colander.SchemaNode(
colander.Integer(),
missing = colander.drop)
status = colander.SchemaNode(
colander.Integer(),
widget=deferred_status,
title="Status")
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_unit = daftar_unit())
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, row=None):
if not row:
row = AnggaranOPD()
row.from_dict(values)
print "----- LEWAT -------------------"
row.murni = re.sub("[^0-9]", "", row.murni)
row.perubahan = re.sub("[^0-9]", "", row.perubahan)
if not row.kode:
k = DBSession.query(Rekening.kode).filter(Rekening.id==row.rekening_id).first()
row.kode = k
if not row.nama:
x = DBSession.query(Rekening.nama).filter(Rekening.id==row.rekening_id).first()
row.nama = x
if not row.tahun:
row.tahun = datetime.now().strftime('%Y')
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(values, row)
request.session.flash('AnggaranOPD %s %s sudah disimpan.' % (row.kode, row.nama))
def route_list(request):
return HTTPFound(location=request.route_url('anggaran-opd'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
@view_config(route_name='anggaran-opd-add', renderer='templates/anggaran-opd/add.pt',
permission='add')
def view_add(request):
form = get_form(request, AddSchema)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure, e:
return dict(form=form)
#return HTTPFound(location=request.route_url('anggaran-add'))
save_request(dict(controls), request)
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return session_failed(request, form) #, SESS_ADD_FAILED)
return dict(form=form)
########
# Edit #
########
def query_id(request):
return DBSession.query(AnggaranOPD).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'AnggaranOPD ID %s not found.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='anggaran-opd-edit', renderer='templates/anggaran-opd/add.pt',
permission='edit')
def view_edit(request):
row = query_id(request).first()
if not row:
return id_not_found(request)
form = get_form(request, EditSchema)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure, e:
return dict(form=form)
return HTTPFound(location=request.route_url('anggaran-edit',
id=row.id))
save_request(dict(controls), request, row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
del request.session[SESS_EDIT_FAILED]
return dict(form=form)
values = row.to_dict()
values['rekening_kd'] = row.rekenings and row.rekenings.kode or ''
values['rekening_nm'] = row.rekenings and row.rekenings.nama or ''
form.set_appstruct(values)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='anggaran-opd-delete', renderer='templates/anggaran-opd/delete.pt',
permission='delete')
def view_delete(request):
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus','batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'AnggaranOPD %s Tahun %s sudah berhasil dihapus.' % (row.kode, row.tahun)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row,form=form.render())
##########
# Action #
##########
@view_config(route_name='anggaran-opd-act', renderer='json',
permission='read')
def view_act(request):
req = request
params = req.params
url_dict = req.matchdict
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT('id'))
columns.append(ColumnDT('kode'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('nama_unit'))
columns.append(ColumnDT('murni', filter=_DTnumberformat))
columns.append(ColumnDT('perubahan', filter=_DTnumberformat))
columns.append(ColumnDT('tahun'))
columns.append(ColumnDT('status', filter=_DTactive))
query = DBSession.query(AnggaranOPD.id,
AnggaranOPD.kode,
AnggaranOPD.nama,
Unit.nama.label('nama_unit'),
AnggaranOPD.murni,
AnggaranOPD.perubahan,
AnggaranOPD.tahun,
AnggaranOPD.status).\
join(Unit, Unit.id==AnggaranOPD.unit_id).\
order_by(desc(AnggaranOPD.tahun),
AnggaranOPD.kode,
AnggaranOPD.nama
)
rowTable = DataTables(req, AnggaranOPD, query, columns)
return rowTable.output_result()
elif url_dict['act']=='hon':
term = 'term' in params and params['term'] or ''
unit_id = 'unit_id' in params and params['unit_id'] or ''
qry = DBSession.query(AnggaranOPD.id, AnggaranOPD.nama, Rekening.kode).\
join(Rekening).join(UnitRekening).\
filter(AnggaranOPD.status==1)
qry = qry.filter(AnggaranOPD.nama.ilike('%%%s%%' % term))
qry = qry.filter(UnitRekening.unit_id==unit_id)
rows = qry.all()
r = []
for k in rows:
d={}
d['id'] = k[0]
d['value'] = k[1]
d['rekening_kd'] = k[2]
r.append(d)
return r
from ..reports.rml_report import open_rml_row, open_rml_pdf, pdf_response
def query_reg():
return DBSession.query(AnggaranOPD.kode.label('a'),
AnggaranOPD.nama.label('b'),
func.trim(func.to_char(AnggaranOPD.murni,'999,999,999,990')).label('c'),
func.trim(func.to_char(AnggaranOPD.perubahan,'999,999,999,990')).label('d'),
AnggaranOPD.tahun.label('e'),
).order_by(desc(AnggaranOPD.tahun),
AnggaranOPD.kode,
AnggaranOPD.nama
)
########
# CSV #
########
@view_config(route_name='anggaran-opd-csv', renderer='csv')
def view_csv(request):
global unit_id,unit_kd,unit_nm,unit_al
ses = request.session
params = request.params
url_dict = request.matchdict
u = request.user.id
if group_in(request, 'bendahara'):
unit_id = DBSession.query(UserUnit.unit_id
).filter(UserUnit.user_id==u
).first()
unit_id = '%s' % unit_id
unit_id = int(unit_id)
unit = DBSession.query(Unit.kode.label('kode'),
Unit.nama.label('nama'),
Unit.alamat.label('alamat')
).filter(UserUnit.unit_id==unit_id,
Unit.id==unit_id
).first()
unit_kd = '%s' % unit.kode
unit_nm = '%s' % unit.nama
unit_al = '%s' % unit.alamat
if url_dict['csv']=='reg' :
query = query_reg()
if group_in(request, 'bendahara'):
query = query.join(Rekening).join(UnitRekening).\
filter(UnitRekening.unit_id==unit_id)
row = query
header = 'Kode Rekening','Uraian Rekening','Murni','Perubahan','Tahun'
rows = []
for item in row.all():
rows.append(list(item))
# override attributes of response
filename = 'AnggaranOPD_Rekening.csv'
request.response.content_disposition = 'attachment;filename=' + filename
return {
'header': header,
'rows' : rows,
}
##########
# PDF #
##########
@view_config(route_name='anggaran-opd-pdf', permission='read')
def view_pdf(request):
global unit_id,unit_nm,unit_al,unit_kd
params = request.params
url_dict = request.matchdict
u = request.user.id
if group_in(request, 'bendahara'):
unit_id = DBSession.query(UserUnit.unit_id
).filter(UserUnit.user_id==u
).first()
unit_id = '%s' % unit_id
unit_id = int(unit_id)
unit = DBSession.query(Unit.kode.label('kode'),
Unit.nama.label('nama'),
Unit.alamat.label('alamat')
).filter(UserUnit.unit_id==unit_id,
Unit.id==unit_id
).first()
unit_kd = '%s' % unit.kode
unit_nm = '%s' % unit.nama
unit_al = '%s' % unit.alamat
if url_dict['pdf']=='reg' :
nm = "BADAN PENDAPATAN DAERAH"
al = "Jl. Soekarno Hatta, No. 528, Bandung"
query = query_reg()
if group_in(request, 'bendahara'):
query = query.join(Rekening).join(UnitRekening).\
filter(UnitRekening.unit_id==unit_id)
rml_row = open_rml_row('anggaran.row.rml')
rows=[]
for r in query.all():
s = rml_row.format(kode=r.a,
nama=r.b,
murni=r.c,
perubahan=r.d,
tahun=r.e)
rows.append(s)
if group_in(request, 'bendahara'):
pdf, filename = open_rml_pdf('anggaran.rml', rows2=rows,
un_nm=unit_nm,
un_al=unit_al)
else:
pdf, filename = open_rml_pdf('anggaran.rml', rows2=rows,
un_nm=nm,
un_al=al)
return pdf_response(request, pdf, filename)
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h4>Tambah/Edit Anggaran OPD</h4>
<hr>
<!--div tal:content="structure form"/-->
<form id="deform" method="POST" enctype="multipart/form-data" accept-charset="utf-8"
class="form-horizontal">
<fieldset class="deformFormFieldset">
<input type="hidden" name="_charset_" />
<input type="hidden" name="__formid__" value="deform"/>
<div class="form-group">
<div tal:condition="'id' in form">
<div tal:define="field form['id']">
${structure:field.serialize()}
</div>
</div>
<div tal:define="field form['kode']">
${structure:field.serialize()}
</div>
<div tal:define="field form['nama']">
${structure:field.serialize()}
</div>
<!--rekening_id -->
<div tal:define="field form['rekening_id']">
${structure:field.serialize()}
</div>
<div class="col-md-12">
<!--rekening-->
<div class="form-group" tal:define="field form['rekening_kd']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9" tal:define="field form['rekening_kd']" >
${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>
<div class="form-group" tal:define="field form['rekening_nm']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9" tal:define="field form['rekening_nm']" >
${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>
<!--opd-->
<div class="form-group" tal:define="field form['unit_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9" tal:define="field form['unit_id']" >
${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>
<!--murni -->
<div class="form-group" tal:define="field form['murni']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--perubahan -->
<div class="form-group" tal:define="field form['perubahan']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--tahun -->
<div class="form-group" tal:define="field form['tahun']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--status -->
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--Button -->
<div class="form-group">
<label class="control-label col-md-3">
</label>
<div class="col-md-9">
<button id="deformsave" name="simpan" type="submit" class="btn btn-primary "
value="simpan">Simpan</button>
<button id="deformcancel" name="cancel" type="submit" class="btn btn-danger "
value="cancel">Batal</button>
</div>
</div>
</div>
</div>
<script>
$('#rekening_kd').typeahead({
"hint" : true,
"highlight": true,
"minLength": 1,
"limit" : 20,
"remote" : "/rekening/hok_anggaran/act?term=%QUERY",
},{
"name" : 'rekening_kd',
"displayKey": 'value',
});
$('#rekening_kd').bind('typeahead:selected', function(obj, datum, name) {
$('#rekening_id').val(datum.id);
$('#rekening_nm').val(datum.nama);
$('#kode').val(datum.value);
$('#nama').val(datum.nama);
});
$('#rekening_nm').typeahead({
"hint" : true,
"highlight": true,
"minLength": 1,
"limit" : 20,
"remote" : "/rekening/hon_anggaran/act?term=%QUERY",
},{
"name" : 'rekening_nm',
"displayKey": 'value',
});
$('#rekening_nm').bind('typeahead:selected', function(obj, datum, name) {
$('#rekening_id').val(datum.id);
$('#rekening_kd').val(datum.kode);
$('#kode').val(datum.kode);
$('#nama').val(datum.value);
});
$('#murni').keyup(function(){
var murni = this.value.length;
});
$('#perubahan').keyup(function(){
var perubahan = this.value.length;
});
</script>
</fieldset>
</form>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Warning</h3>
</div>
<div class="panel-body">
Hapus anggaran rekening ${row.kode} ${row.nama} tahun ${row.tahun} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h4>Edit Tarif</h4>
<hr>
<!--div tal:content="structure form"/-->
<form id="deform" method="POST" enctype="multipart/form-data" accept-charset="utf-8"
class="form-horizontal">
<fieldset class="deformFormFieldset">
<input type="hidden" name="_charset_" />
<input type="hidden" name="__formid__" value="deform"/>
<div class="form-group">
<div tal:condition="'id' in form">
<div tal:define="field form['id']">
${structure:field.serialize()}
</div>
</div>
<div class="col-md-12">
<!--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}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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 -->
<div class="form-group" tal:define="field form['nama']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--rekening_id -->
<div class="form-group" tal:define="field form['rekening_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9" tal:define="field form['rekening_id']" >
${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>
<!--tahun -->
<div class="form-group" tal:define="field form['tahun']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--tarif -->
<div class="form-group" tal:define="field form['tarif']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--status -->
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></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>
<!--Button -->
<div class="form-group">
<label class="control-label col-md-3">
</label>
<div class="col-md-9">
<button id="deformsave" name="simpan" type="submit" class="btn btn-primary "
value="simpan">Simpan</button>
<button id="deformcancel" name="cancel" type="submit" class="btn btn-danger "
value="cancel">Batal</button>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<link href="/static/datatables/extensions/TableTools/css/dataTables.tableTools.min.css" rel="stylesheet">
<link href="/static/datatables/media/css/dataTables.bootstrap.css" rel="stylesheet">
<h4>Anggaran OPD</h4>
<hr>
<table id="table1" name="table1" class="table table-bordered table-hover table-condensed" >
<thead>
<tr>
<th>ID</th>
<th>Kode Rekening</th>
<th>Uraian Rekening</th>
<th>Unit Kerja/OPD</th>
<th>Murni</th>
<th>Perubahan</th>
<th>Tahun</th>
<th>Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script src="/static/datatables/media/js/jquery.dataTables.min.js"></script>
<!--script src="/static/datatables/media/js/jquery.jeditable.js')}"></script-->
<script src="/static/datatables/media/js/jquery.dataTables.ext.js"></script>
<script src="/static/datatables/extensions/TableTools/media/js/ZeroClipboard.js"></script>
<script src="/static/datatables/media/js/dataTables.bootstrap.js"></script>
<script>
var mID;
var oTable;
var iPos;
var oFormUrl = "/anggaran/opd/";
var oTableUrl = oFormUrl+"grid/act";
$(document).ready(function () {
oTable = $('#table1').dataTable({
"sAjaxSource" : oTableUrl,
"bStateSave" : true,
"bServerSide" : true,
"bProcessing" : true,
"sDom" : '<"toolbar">lfrtip',
"bScrollCollapse" : true,
"bSort" : true,
"bInfo" : false,
"bFilter" : true,
"bAutoWidth" : false,
"bPaginate" : true,
"sPaginationType" : "full_numbers",
"lengthMenu": [
[10, 25, 50, 100, 150, 200],
[10, 25, 50, 100, 150, 200]
],
"aoColumnDefs": [
{"bSearchable": false,
"bVisible" : false,
"aTargets" : [0]
}
],
"aoColumns": [
null,
{"sWidth": "100px", "sClass": "left"},
{"sWidth": "250px", "sClass": "left"},
{"sWidth": "250px", "sClass": "left"},
{"sWidth": "50px", "sClass": "right"},
{"sWidth": "50px", "sClass": "right"},
{"sWidth": "30px", "sClass": "center"},
{"sWidth": "40px", "sClass": "center"}
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Pertama ",
"last" : "Terakhir ",
"previous": "Sebelumnya ",
"next" : "Selanjutnya ",
},
"lengthMenu" : "Tampil _MENU_ baris "
}
});
var tb_array = [
'<div class="btn-group pull-left">',
' <button id="btn_tambah" class="btn btn btn-primary pull-left" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary pull-left" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger pull-left" type="button">Hapus</button>',
//' <button id="btn_print" class="btn btn btn-primary pull-left" type="button">Cetak</button>',
' <button id="btn_pdf" class="btn btn btn-success pull-left" type="button">PDF</button>',
' <button id="btn_csv" class="btn btn btn-info pull-left" type="button">CSV</button>',
' <button id="btn_close" class="btn btn btn-warning" type="button">Tutup</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
mID = '';
$(this).removeClass('selected');
} else {
iPos = oTable.fnGetPosition(this);
var aData = oTable.fnGetData(iPos);
mID = aData[0];
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
}
});
$('#btn_tambah').click(function () {
window.location = oFormUrl+'add';
});
$('#btn_edit').click(function () {
if (mID) {
window.location = oFormUrl+mID+'/edit';
} else {
alert('Silahkan pilih data yang akan diedit');
}
});
$('#btn_print').click(function () {
url = "/reports/act/rAnggaran"
window.open(url);
});
$('#btn_pdf').click(function () {
url = oFormUrl+"reg/pdf";
window.open(url);
});
$('#btn_csv').click(function () {
url = oFormUrl+"reg/csv";
window.open(url);
});
$('#btn_close').click(function () {
window.location = "/"
});
$('#btn_delete').click(function () {
if (mID) {
var hapus = confirm('Hapus data ini?');
if (hapus == true) {
window.location = oFormUrl+mID+'/delete';
};
} else {
alert('Silahkan pilih data yang akan dihapus');
}
});
});
</script>
</div>
</html>
\ No newline at end of file \ No newline at end of file
...@@ -106,6 +106,7 @@ ...@@ -106,6 +106,7 @@
<li><a href="/rekening">Kode Rekening</a></li> <li><a href="/rekening">Kode Rekening</a></li>
<li><a href="/pajak">Tarif</a></li> <li><a href="/pajak">Tarif</a></li>
<li><a href="/anggaran">Anggaran</a></li> <li><a href="/anggaran">Anggaran</a></li>
<li><a href="/anggaran/opd">Anggaran-OPD</a></li>
<li><a href="/wilayah">Wilayah</a></li> <li><a href="/wilayah">Wilayah</a></li>
<li><a href="/sptpd/sektor">Sektor PBBKB</a></li> <li><a href="/sptpd/sektor">Sektor PBBKB</a></li>
<li><a href="/sptpd/peruntukan">Peruntukan PBBKB</a></li> <li><a href="/sptpd/peruntukan">Peruntukan PBBKB</a></li>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!