Commit 80eb1d3a by aagusti

update

1 parent de432130
......@@ -52,3 +52,5 @@ docs/_build/
# PyBuilder
target/
*.ini
No preview for this file type
import colander
from email.utils import parseaddr
from datetime import (datetime, date)
from time import (strptime, strftime)
from sqlalchemy import (not_, or_)
from pyramid.view import (view_config,)
from pyramid.httpexceptions import (HTTPFound,)
from deform import (Form, widget, ValidationFailure,)
from datatables import (ColumnDT, DataTables)
from ..tools import (email_validator,BULANS)
from ..models import (DBSession)
from ..models.isipkd import (Sptpd, Unit,Rekening,
UnitRekening,)
SESS_ADD_FAILED = 'gagal tambah data'
SESS_EDIT_FAILED = 'gagal edit data'
#######
# Add #
#######
def form_validator(form, value):
def err_no_rangka():
raise colander.Invalid(form,
'No Rangka Harus diisi'
)
def err_nik():
raise colander.Invalid(form,
'NIK Harus diisi'
)
def err_no_handphone():
raise colander.Invalid(form,
'No handphone harus diisi'
)
def err_no_handphone():
raise colander.Invalid(form,
'Kode validasi harus diisi'
)
def get_periode(year=True):
adate = datetime.now()
amonth = adate.month - 1
amonth = amonth>0 and amonth or 12
if year:
ayear = amonth<12 and adate.year or adate.year-1
return ayear
else:
return amonth
class InformasiSchema(colander.Schema):
nama = colander.SchemaNode(
colander.String())
alamat_1 = colander.SchemaNode(
colander.String())
alamat_2 = colander.SchemaNode(
colander.String())
class AddSchema(colander.Schema):
"""appstruct = {
'readonly':'Read Only',
'readwrite':'Read and Write',
}
@colander.deferred
def deferred_missing(node, kw):
return appstruct['readonly']
"""
def get_units():
q = DBSession.query(Unit.id,Unit.nama).filter(
Unit.kode.like("1.20.05.%")
).order_by(Unit.nama)
return q.all()
def get_rekenings():
q = DBSession.query(Rekening.id,Rekening.nama).filter(
Rekening.kode.like('4.3.1.03.02.%'), Rekening.is_summary==0
).filter(Rekening.is_summary==0).order_by(Rekening.nama)
return q.all()
no_tagihan = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(),
#missing=deferred_missing,
)
#print '***',dict(get_units())
skpd = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=get_units()),
title = "SKPD"
)
rekening = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=get_rekenings()),
title = "Rekening"
)
informasi = InformasiSchema()
omset = colander.SchemaNode(
colander.Decimal(),
widget=widget.MoneyInputWidget(
size=20, options={'allowZero':False}),
title="Nilai"
)
tarif = colander.SchemaNode(
colander.Decimal(),
widget=widget.HiddenWidget(
size=20, options={'allowZero':False},
default=1)
)
pokok_pajak = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
default=0)
def get_form(request, class_form):
schema = class_form(validator=form_validator)
#schema = schema.bind(daftar_status=STATUS)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, user, row=None):
"""if not row:
row = User()
row.from_dict(values)
if values['password']:
row.password = values['password']
DBSession.add(row)
DBSession.flush()
return row
"""
row = {}
row['email'] = 'aagusti@1'
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Tunggu beberpa saat.')
def route_list(request):
return HTTPFound(location=request.route_url('pbbkb'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
########
# List #
########
@view_config(route_name='hibah', renderer='templates/hibah/list.pt',
permission='exec')
def view_list(request):
#print request.user.id
#rows = DBSession.query(Sptpd).filter(Sptpd.create_uid==request.user.id).order_by('tahun','bulan')
return dict(request=request)
########
# Add #
########
@view_config(route_name='hibah-add', renderer='templates/hibah/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:
request.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=request.route_url('hibah-add'))
save_request(dict(controls), request)
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED)
return dict(form=form.render())
########
# Edit #
########
def query_id(request):
return DBSession.query(Unit).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Rekening ID %s not found.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='hibah-edit', renderer='templates/hibah/edit.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:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('hibah-edit',
id=row.id))
save_request(dict(controls), request, row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict()
return dict(form=form.render(appstruct=values))
##########
# Delete #
##########
@view_config(route_name='hibah-delete', renderer='templates/hibah/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=('delete','cancel'))
if request.POST:
if 'delete' in request.POST:
msg = 'Rekening ID %d %s has been deleted.' % (row.id, row.kode)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row,
form=form.render())
##########
# Action #
##########
@view_config(route_name='hibah-act', renderer='json',
permission='view')
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('no_bayar'))
columns.append(ColumnDT('tahun'))
columns.append(ColumnDT('bulan'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('omset'))
columns.append(ColumnDT('tarif'))
columns.append(ColumnDT('pokok'))
columns.append(ColumnDT('status_bayar'))
query = DBSession.query(Sptpd)
rowTable = DataTables(req, Sptpd, query, columns)
return rowTable.output_result()
\ No newline at end of file
import sys
import re
from email.utils import parseaddr
from sqlalchemy import not_, func
from datetime import datetime
from time import gmtime, strftime
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..tools import _DTnumberformat
from ..models import DBSession
from ..models.isipkd import(
ObjekPajak,
SubjekPajak,
Unit,
Wilayah,
Pajak,
Rekening,
ARInvoice,
Unit
)
from datatables import (
ColumnDT, DataTables)
SESS_ADD_FAILED = 'Gagal tambah Tagihan'
SESS_EDIT_FAILED = 'Gagal edit Tagihan'
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,
)
########
# List #
########
@view_config(route_name='invoice', renderer='templates/invoice/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 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=deferred_unit,
title="SKPD"
)
subjek_pajak_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_subjekpajak,
title="Subjek Pajak"
)
objek_pajak_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_objekpajak,
title="Objek Pajak"
)
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(),
)
jatuh_tempo = colander.SchemaNode(
colander.Date(),
)
dasar = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
)
tarif = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
)
pokok = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
)
denda = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
)
bunga = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
)
jumlah = colander.SchemaNode(
colander.Integer(),
default = 0,
widget = moneywidget,
)
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(values, row=None):
print row
if not row:
row = ARInvoice()
row.from_dict(values)
row.dasar = re.sub("[^0-9]", "", row.dasar)
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.tarif = re.sub("[^0-9]", "", row.tarif)
row.jumlah = re.sub("[^0-9]", "", row.jumlah)
if not row.tahun_id:
#print strftime('%Y',datetime.now())
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.rek_kode = ref.pajaks.rekenings.kode
row.rek_nama = ref.pajaks.rekenings.nama
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.unit_id==row.unit_id).scalar()
if not invoice_no:
row.no_id = 1
else:
row.no_id = invoice_no+1
row.kode = "".join([str(row.tahun_id), re.sub("[^0-9]", "", row.unit_kode),
str(row.no_id).rjust(6,'0')])
#if values['password']:
# row.password = values['password']
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('invoice %s sudah disimpan.' % row.kode)
def route_list(request):
return HTTPFound(location=request.route_url('invoice'))
def session_failed(request, session_name):
try:
session_name.set_appstruct(request.session[SESS_ADD_FAILED])
except:
pass
r = dict(form=session_name) #request.session[session_name])
del request.session[SESS_ADD_FAILED]
return r
@view_config(route_name='invoice-add', renderer='templates/invoice/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)
#request.session[SESS_ADD_FAILED] = request.params
#print e.render()
#return HTTPFound(location=request.route_url('invoice-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(ARInvoice).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'invoice ID %s not found.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='invoice-edit', renderer='templates/invoice/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:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('invoice-edit',
id=row.id))
save_request(dict(controls), request, row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict()
print values
form.set_appstruct(values)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='invoice-delete', renderer='templates/invoice/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=('delete','cancel'))
if request.POST:
if 'delete' in request.POST:
msg = 'invoice ID %d %s has been deleted.' % (row.id, row.kode)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row,
form=form.render())
##########
# Action #
##########
@view_config(route_name='invoice-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('wp_kode'))
columns.append(ColumnDT('op_kode'))
columns.append(ColumnDT('op_nama'))
columns.append(ColumnDT('rek_nama'))
#columns.append(ColumnDT('pokok'))
#columns.append(ColumnDT('denda'))
#columns.append(ColumnDT('bunga'))
columns.append(ColumnDT('jumlah', filter=_DTnumberformat))
columns.append(ColumnDT('unit_nama'))
query = DBSession.query(ARInvoice).\
join(Unit)
rowTable = DataTables(req, ARInvoice, query, columns)
return rowTable.output_result()
from email.utils import parseaddr
from datetime import (datetime, date)
from time import (strptime, strftime)
from sqlalchemy import (not_, or_)
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..tools import (
email_validator,
BULANS
)
from ..models import (
DBSession
)
from ..models.isipkd import (
Sptpd,
Unit,
Rekening,
UnitRekening,
)
from datatables import (
ColumnDT, DataTables)
SESS_ADD_FAILED = 'gagal tambah data'
SESS_EDIT_FAILED = 'gagal edit data'
#######
# Add #
#######
def form_validator(form, value):
def err_no_rangka():
raise colander.Invalid(form,
'No Rangka Harus diisi'
)
def err_nik():
raise colander.Invalid(form,
'NIK Harus diisi'
)
def err_no_handphone():
raise colander.Invalid(form,
'No handphone harus diisi'
)
def err_no_handphone():
raise colander.Invalid(form,
'Kode validasi harus diisi'
)
def get_periode(year=True):
adate = datetime.now()
amonth = adate.month - 1
amonth = amonth>0 and amonth or 12
if year:
ayear = amonth<12 and adate.year or adate.year-1
return ayear
else:
return amonth
def get_units():
q = DBSession.query(Unit.id,Unit.nama).filter(
Unit.kode.like("1.20.05.%")
).order_by(Unit.nama)
return q.all()
def get_rekenings():
q = DBSession.query(Rekening.id,Rekening.nama).filter(
Rekening.kode.like('4.3.1.03.02.%'), Rekening.is_summary==0
).filter(Rekening.is_summary==0).order_by(Rekening.nama)
return q.all()
class InformasiSchema(colander.Schema):
nama = colander.SchemaNode(
colander.String())
alamat_1 = colander.SchemaNode(
colander.String())
alamat_2 = colander.SchemaNode(
colander.String())
class AddSchema(colander.Schema):
"""appstruct = {
'readonly':'Read Only',
'readwrite':'Read and Write',
}
@colander.deferred
def deferred_missing(node, kw):
return appstruct['readonly']
"""
no_tagihan = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(),
#missing=deferred_missing,
)
#print '***',dict(get_units())
skpd = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=get_units()),
title = "SKPD"
)
rekening = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=get_rekenings()),
title = "Rekening"
)
informasi = InformasiSchema()
omset = colander.SchemaNode(
colander.Decimal(),
widget=widget.MoneyInputWidget(
size=20, options={'allowZero':False}),
title="Nilai"
)
tarif = colander.SchemaNode(
colander.Decimal(),
widget=widget.HiddenWidget(
size=20, options={'allowZero':False},
default=1)
)
pokok_pajak = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
default=0)
def get_form(request, class_form):
schema = class_form(validator=form_validator)
#schema = schema.bind(daftar_status=STATUS)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, user, row=None):
"""if not row:
row = User()
row.from_dict(values)
if values['password']:
row.password = values['password']
DBSession.add(row)
DBSession.flush()
return row
"""
row = {}
row['email'] = 'aagusti@1'
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Tunggu beberpa saat.')
def route_list(request):
return HTTPFound(location=request.route_url('pbbkb'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
########
# List #
########
@view_config(route_name='lain', renderer='templates/lain/list.pt',
permission='view')
def view_list(request):
#print request.user.id
#rows = DBSession.query(Sptpd).filter(Sptpd.create_uid==request.user.id).order_by('tahun','bulan')
return dict(request=request)
########
# Add #
########
@view_config(route_name='lain-add', renderer='templates/lain/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:
request.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=request.route_url('lain-add'))
save_request(dict(controls), request)
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED)
return dict(form=form.render())
########
# Edit #
########
def query_id(request):
return DBSession.query(Unit).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Rekening ID %s not found.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='lain-edit', renderer='templates/lain/edit.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:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('lain-edit',
id=row.id))
save_request(dict(controls), request, row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict()
return dict(form=form.render(appstruct=values))
##########
# Delete #
##########
@view_config(route_name='lain-delete', renderer='templates/lain/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=('delete','cancel'))
if request.POST:
if 'delete' in request.POST:
msg = 'Rekening ID %d %s has been deleted.' % (row.id, row.kode)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row,
form=form.render())
##########
# Action #
##########
@view_config(route_name='lain-act', renderer='json',
permission='view')
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('no_bayar'))
columns.append(ColumnDT('tahun'))
columns.append(ColumnDT('bulan'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('omset'))
columns.append(ColumnDT('tarif'))
columns.append(ColumnDT('pokok'))
columns.append(ColumnDT('status_bayar'))
query = DBSession.query(Sptpd)
rowTable = DataTables(req, Sptpd, query, columns)
return rowTable.output_result()
\ No newline at end of file
from email.utils import parseaddr
from datetime import (datetime, date)
from time import (strptime, strftime)
from sqlalchemy import (not_, or_)
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..tools import (
email_validator,
BULANS
)
from ..models import (
DBSession
)
from ..models.isipkd import (
Sptpd,
Unit,
Rekening,
UnitRekening,
)
from datatables import (
ColumnDT, DataTables)
SESS_ADD_FAILED = 'gagal tambah data'
SESS_EDIT_FAILED = 'gagal edit data'
#######
# Add #
#######
def form_validator(form, value):
def err_no_rangka():
raise colander.Invalid(form,
'No Rangka Harus diisi'
)
def err_nik():
raise colander.Invalid(form,
'NIK Harus diisi'
)
def err_no_handphone():
raise colander.Invalid(form,
'No handphone harus diisi'
)
def err_no_handphone():
raise colander.Invalid(form,
'Kode validasi harus diisi'
)
def get_periode(year=True):
adate = datetime.now()
amonth = adate.month - 1
amonth = amonth>0 and amonth or 12
if year:
ayear = amonth<12 and adate.year or adate.year-1
return ayear
else:
return amonth
def get_units():
q = DBSession.query(Unit.id,Unit.nama).filter(
Unit.kode.like("1.20.05.%")
).order_by(Unit.nama)
return q.all()
def get_rekenings():
q = DBSession.query(Rekening.id,Rekening.nama).filter(
Rekening.kode.like('4.1.1.05.%')
).filter(Rekening.is_summary==0).order_by(Rekening.nama)
return q.all()
class PeriodeSchema(colander.Schema):
tahun = colander.SchemaNode(
colander.Integer(),
default = get_periode())
bulan = colander.SchemaNode(
colander.Integer(),
default = get_periode(False),
widget=widget.SelectWidget(values=BULANS),)
class AddSchema(colander.Schema):
"""appstruct = {
'readonly':'Read Only',
'readwrite':'Read and Write',
}
@colander.deferred
def deferred_missing(node, kw):
return appstruct['readonly']
"""
no_tagihan = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(),
#missing=deferred_missing,
)
#print '***',dict(get_units())
skpd = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=get_units()),
title = "SKPD"
)
rekening = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=get_rekenings()),
title = "Rekening"
)
periode = PeriodeSchema()
omset = colander.SchemaNode(
colander.Decimal(),
widget=widget.MoneyInputWidget(
size=20, options={'allowZero':False})
)
tarif = colander.SchemaNode(
colander.Decimal(),
widget=widget.MoneyInputWidget(
size=20, options={'allowZero':False})
)
pokok_pajak = colander.SchemaNode(
colander.Integer(),
widget=widget.MoneyInputWidget(
size=20, options={'allowZero':False})
)
def get_form(request, class_form):
schema = class_form(validator=form_validator)
#schema = schema.bind(daftar_status=STATUS)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, user, row=None):
"""if not row:
row = User()
row.from_dict(values)
if values['password']:
row.password = values['password']
DBSession.add(row)
DBSession.flush()
return row
"""
row = {}
row['email'] = 'aagusti@1'
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Tunggu beberpa saat.')
def route_list(request):
return HTTPFound(location=request.route_url('pbbkb'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
########
# List #
########
@view_config(route_name='pbbkb', renderer='templates/pbbkb/list.pt',
permission='read')
def view_list(request):
#print request.user.id
#rows = DBSession.query(Sptpd).filter(Sptpd.create_uid==request.user.id).order_by('tahun','bulan')
return dict(request=request)
########
# Add #
########
@view_config(route_name='pbbkb-add', renderer='templates/pbbkb/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:
request.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=request.route_url('pbbkb-add'))
save_request(dict(controls), request)
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED)
return dict(form=form.render())
########
# Edit #
########
def query_id(request):
return DBSession.query(Unit).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Rekening ID %s not found.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='pbbkb-edit', renderer='templates/pbbkb/edit.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:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('pbbkb-edit',
id=row.id))
save_request(dict(controls), request, row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict()
return dict(form=form.render(appstruct=values))
##########
# Delete #
##########
@view_config(route_name='pbbkb-delete', renderer='templates/pbbkb/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=('delete','cancel'))
if request.POST:
if 'delete' in request.POST:
msg = 'Rekening ID %d %s has been deleted.' % (row.id, row.kode)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row,
form=form.render())
##########
# Action #
##########
@view_config(route_name='pbbkb-act', renderer='json',
permission='view')
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('no_bayar'))
columns.append(ColumnDT('tahun'))
columns.append(ColumnDT('bulan'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('omset'))
columns.append(ColumnDT('tarif'))
columns.append(ColumnDT('pokok'))
columns.append(ColumnDT('status_bayar'))
query = DBSession.query(Sptpd)
rowTable = DataTables(req, Sptpd, query, columns)
return rowTable.output_result()
\ No newline at end of file
from email.utils import parseaddr
from sqlalchemy import not_, func
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(
ObjekPajak,
SubjekPajak,
Unit,
Wilayah,
Pajak,
Rekening
)
from datatables import (
ColumnDT, DataTables)
SESS_ADD_FAILED = 'Gagal tambah Objek Pajak'
SESS_EDIT_FAILED = 'Gagal edit Objek Pajak'
from daftar import (STATUS, deferred_status,
daftar_subjekpajak, deferred_subjekpajak,
daftar_wilayah, deferred_wilayah,
daftar_unit, deferred_unit,
daftar_pajak, deferred_pajak,
)
########
# List #
########
@view_config(route_name='sptpd', renderer='templates/sptpd/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 sptpd %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(ObjekPajak).filter_by(id=uid)
r = q.first()
else:
r = None
q = DBSession.query(ObjekPajak).filter_by(kode=value['kode'])
found = q.first()
if r:
if found and found.id != r.id:
err_kode()
elif found:
err_email()
if 'nama' in value: # sptpdtional
found = ObjekPajak.get_by_nama(value['nama'])
if r:
if found and found.id != r.id:
err_name()
elif found:
err_name()
class AddSchema(colander.Schema):
subjekpajak_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_subjekpajak,
title="Subjek Pajak"
)
wilayah_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_wilayah,
title="Wilayah"
)
unit_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_unit,
title="SKPD"
)
pajak_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_pajak,
title="Pajak"
)
kode = colander.SchemaNode(
colander.String(),
)
nama = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="Uraian")
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_subjekpajak=daftar_subjekpajak(),
)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, row=None):
if not row:
row = ObjekPajak()
row.from_dict(values)
#if values['password']:
# row.password = values['password']
DBSession.add(row)
DBSession.flush()
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
print "****",values, "****", request
row = save(values, row)
request.session.flash('SPTPD %s sudah disimpan.' % row.kode)
def route_list(request):
return HTTPFound(location=request.route_url('sptpd'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
@view_config(route_name='sptpd-add', renderer='templates/sptpd/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:
request.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=request.route_url('sptpd-add'))
save_request(dict(controls), request)
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED)
return dict(form=form.render())
########
# Edit #
########
def query_id(request):
return DBSession.query(ObjekPajak).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'sptpd ID %s not found.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='sptpd-edit', renderer='templates/sptpd/edit.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:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('sptpd-edit',
id=row.id))
save_request(dict(controls), request, row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict()
return dict(form=form.render(appstruct=values))
##########
# Delete #
##########
@view_config(route_name='sptpd-delete', renderer='templates/sptpd/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=('delete','cancel'))
if request.POST:
if 'delete' in request.POST:
msg = 'sptpd ID %d %s has been deleted.' % (row.id, row.kode)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row,
form=form.render())
##########
# Action #
##########
@view_config(route_name='sptpd-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('registrasi'))
columns.append(ColumnDT('kode'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('pajak'))
columns.append(ColumnDT('wilayah'))
columns.append(ColumnDT('status'))
query = DBSession.query(ObjekPajak.id, ObjekPajak.kode,ObjekPajak.nama,
Rekening.kode.label('pajak'), SubjekPajak.kode.label('registrasi'),
Wilayah.nama.label('wilayah'), ObjekPajak.status).\
join(SubjekPajak).join(Wilayah).join(Pajak).join(Rekening)
rowTable = DataTables(req, ObjekPajak, query, columns)
return rowTable.output_result()
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h3>Tambah/Edit Register</h3>
<hr>
<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 class="col-md-6">
<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">
${structure:field.serialize()}
</div>
</div>
<div class="form-group" tal:define="field form['subjek_pajak_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">
${structure:field.serialize()}
</div>
</div>
<div class="form-group" tal:define="field form['objek_pajak_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">
${structure:field.serialize()}
</div>
</div>
<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()}
</div>
</div>
<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}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-4">
${structure:field.serialize()}
</div>
<div class="col-md-1">
s.d
</div>
<div class="col-md-4" tal:define="field form['periode_2']">
${structure:field.serialize()}
</div>
</div>
<div class="form-group" tal:define="field form['tgl_tetap']" 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()}
</div>
</div>
<div class="form-group" tal:define="field form['jatuh_tempo']" 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()}
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group" tal:define="field form['dasar']" 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()}
</div>
</div>
<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-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
*</p>
</div>
</div>
<div class="form-group" tal:define="field form['pokok']" 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>
<div class="form-group" tal:define="field form['denda']" 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>
<div class="form-group" tal:define="field form['bunga']" 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()}
</div>
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
<div class="form-group" tal:define="field form['jumlah']" 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()}
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2">
<button id="deformsave" name="simpan" type="submit" class="btn btn-primary "
value="simpan">Simpan</button>
<button id="deformcancel" name="batal" type="submit" class="btn btn-default "
value="batal">Batal</button>
</div>
</div>
</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 Objek ID #${row.id} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h3>Edit Objek</h3>
<hr>
<div tal:content="structure 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>Daftar No. Bayar</h4>
<hr>
<div class="container">
<!--form class="form-inline" role="form" id="frm_upload" name="frm_upload">
<label for="upload" class="control-label">Upload:</label>
<input type="text" class="form-control" id="upload">
<button type="submit" class="btn btn-default">Upload</button>
</form-->
</div>
<p>
<table id="table1" name="table1" class="table table-bordered table-hover table-condensed" >
<thead>
<tr>
<th>ID</th>
<th>Kode</th>
<th>Subjek</th>
<th>Objek</th>
<th>Uraian</th>
<th>Rekening</th>
<!--th>Pokok</th>
<th>Denda</th>
<th>Bunga</th-->
<th>Jumlah</th>
<th>SKPD</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 = "/invoice/";
var oTableUrl = oFormUrl+"grid/act";
$(document).ready(function () {
oTable = $('#table1').dataTable({
"sAjaxSource": oTableUrl,
"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, -1],
[10, 25, 50, "All"]
],
"aoColumnDefs": [
{"bSearchable": false, "bVisible": false, "aTargets": [0]}
],
"aoColumns": [
null,
{"sWidth": "100px", "sClass": "left"},
{"sWidth": "30px", "sClass": "center"},
{"sWidth": "30px", "sClass": "center"},
null,
null,
{"sWidth": "75px", "sClass": "right"},
//{"sWidth": "75px", "sClass": "center"},
//{"sWidth": "40px", "sClass": "center"},
//{"sWidth": "40px", "sClass": "center"},
null
],
});
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">Print</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_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>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h3>Tambah Objek</h3>
<hr>
<div tal:content="structure 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 Objek ID #${row.id} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h3>Edit Objek</h3>
<hr>
<div tal:content="structure 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>Daftar No. Bayar</h4>
<hr>
<div class="container">
<!--form class="form-inline" role="form" id="frm_upload" name="frm_upload">
<label for="upload" class="control-label">Upload:</label>
<input type="text" class="form-control" id="upload">
<button type="submit" class="btn btn-default">Upload</button>
</form-->
</div>
<p>
<table id="table1" name="table1" class="table table-bordered table-hover table-condensed" >
<thead>
<tr>
<th>ID</th>
<th>Registrasi</th>
<th>No.</th>
<th>Uraian</th>
<th>Rekening</th>
<th>Wilayah</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 = "/op/";
var oTableUrl = oFormUrl+"grid/act";
$(document).ready(function () {
oTable = $('#table1').dataTable({
"sAjaxSource": oTableUrl,
"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, -1],
[10, 25, 50, "All"]
],
"aoColumnDefs": [
{"bSearchable": false, "bVisible": false, "aTargets": [0]}
],
"aoColumns": [
null,
{"sWidth": "100px", "sClass": "left"},
{"sWidth": "30px", "sClass": "center"},
null,
{"sWidth": "75px", "sClass": "center"},
null,
{"sWidth": "40px", "sClass": "center"}
],
});
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">Print</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_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>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!