Commit de432130 by aagusti

20150323

1 parent 47490925
No preview for this file type
No preview for this file type
......@@ -56,7 +56,8 @@ class CommonModel(object):
def from_dict(self, values):
for column in self.__table__.columns:
if column.name in values:
setattr(self, column.name, values[column.name])
val = values[column.name] or None
setattr(self, column.name, val)
def as_timezone(self, fieldname):
date_ = getattr(self, fieldname)
......@@ -258,7 +259,7 @@ class RootFactory(object):
self.request = request
self.__acl__ = [(Allow, 'Admin', ALL_PERMISSIONS),
(Allow, Authenticated, 'view'),]
"""if self.request.user and self.request.matched_route:
if self.request.user and self.request.matched_route:
rows = DBSession.query(Group.group_name, Route.perm_name).\
join(UserGroup).join(GroupRoutePermission).join(Route).\
filter(UserGroup.user_id==self.request.user.id,
......@@ -266,7 +267,7 @@ class RootFactory(object):
if rows:
for r in rows:
self.__acl__.append((Allow, ''.join(['g:',r.group_name]), r.perm_name))
"""
def init_model():
ziggurat_model_init(User, Group, UserGroup, GroupPermission, UserPermission,
UserResourcePermission, GroupResourcePermission, Resource,
......
......@@ -77,7 +77,14 @@ class Pegawai(NamaModel, Base):
jabatan_id = Column(Integer,ForeignKey("jabatans.id"))
unit_id = Column(Integer,ForeignKey("units.id"))
user_id = Column(Integer,ForeignKey("users.id"), nullable=True)
users = relationship("User", backref=backref('pegawais'))
UniqueConstraint('kode')
@classmethod
def get_by_user(cls, user_id):
return DBSession.query(cls).filter(cls.user_id==user_id).all()
class PegawaiLogin(Base):
__tablename__ = 'pegawai_users'
user_id = Column(Integer,ForeignKey("users.id"), primary_key=True)
......@@ -90,6 +97,7 @@ class Pajak(NamaModel, Base):
rekening_id = Column(Integer,ForeignKey("rekenings.id"))
tahun = Column(Integer, nullable=False, default=0)
tarif = Column(Float, default=0, nullable=False)
denda_rekening_id = Column(Integer, nullable=False, default=0)
UniqueConstraint('rekening_id','tahun', name='rekening_tahun')
rekenings = relationship("Rekening", backref=backref('pajaks'))
......@@ -117,13 +125,12 @@ class SubjekPajak(NamaModel, Base):
UniqueConstraint('kode')
@classmethod
def get_by_user(cls, user_id):
return DBSession.query(cls).filter(cls.user_id==user_id).first()
return DBSession.query(cls).filter(cls.user_id==user_id).all()
class ObjekPajak(NamaModel, Base):
__tablename__ = 'objekpajaks'
__table_args__ = (UniqueConstraint('subjekpajak_id', 'kode',
name='objekpajak_kode_uq'),
)
name='objekpajak_kode_uq'),)
status = Column(Integer, default=1)
alamat_1 = Column(String(128))
alamat_2 = Column(String(128))
......@@ -134,7 +141,7 @@ class ObjekPajak(NamaModel, Base):
subjekpajaks = relationship('SubjekPajak', backref=backref('objekpajaks'))
pajaks = relationship('Pajak', backref=backref('objekpajaks'))
wilayahs = relationship('Wilayah', backref=backref('objekpajaks'))
units = relationship('Unit', backref=backref('objekpajaks'))
class ARInvoice(CommonModel, Base):
__tablename__ = 'arinvoices'
......@@ -147,6 +154,7 @@ class ARInvoice(CommonModel, Base):
kode = Column(String(32), unique=True)
unit_kode = Column(String(32))
unit_nama = Column(String(128))
rekening_id = Column(Integer, ForeignKey("rekenings.id"))
rek_kode = Column(String(16))
rek_nama = Column(String(64))
wp_kode = Column(String(16))
......@@ -167,7 +175,7 @@ class ARInvoice(CommonModel, Base):
periode_2 = Column(Date)
tgl_tetap = Column(Date)
jatuh_tempo = Column(Date)
status_bayar = Column(SmallInteger)
status_bayar = Column(SmallInteger, nullable=False, default=0) # 0 belum bayar 1 sudah bayar 2 batal
owner_id = Column(Integer)
create_uid = Column(Integer)
update_uid = Column(Integer)
......@@ -175,41 +183,61 @@ class ARInvoice(CommonModel, Base):
update_date = Column(DateTime(timezone=True))
#bulan = Column(Integer)
#tanggal = Column(Integer)
subjekpajaks = relationship("SubjekPajak", backref=backref('arinvoices'))
objekpajaks = relationship("ObjekPajak", backref=backref('arinvoices'))
units = relationship("Unit", backref=backref('arinvoices'))
UniqueConstraint(tahun_id,unit_id,no_id,name='ar_invoice_uq')
UniqueConstraint(tahun_id,unit_id,no_id,name='arinvoice_uq')
class ARSspd(CommonModel, Base):
__tablename__ = 'arsspds'
id = Column(Integer, primary_key=True)
tahun_id = Column(Integer)
unit_id = Column(Integer, ForeignKey("units.id"))
no_id = Column(Integer)
arinvoice_id = Column(Integer, ForeignKey("arinvoices.id"))
pembayaran_ke = Column(Integer)
bunga = Column(BigInteger)
bayar = Column(BigInteger)
tgl_bayar = Column(DateTime)
posted = Column(SmallInteger, nullable=False, default=0)
create_uid = Column(Integer)
update_uid = Column(Integer)
create_date = Column(DateTime(timezone=True))
update_date = Column(DateTime(timezone=True))
arinvoices = relationship("ARInvoice", backref=backref('arsspds'))
units = relationship("Unit", backref=backref('arsspds'))
posted = Column(SmallInteger, nullable=False, default=0)
arinvoices = relationship("ARInvoice", backref=backref('arsspds'))
UniqueConstraint(arinvoice_id,pembayaran_ke,name='arsspd_uq')
UniqueConstraint(tahun_id,unit_id,no_id,name='arsspd_no_uq')
class Sts(Base):
__tablename__ = 'sts'
id = Column(Integer, primary_key=True)
no_bayar = Column(String(16))
unit_id = Column(Integer)
rekening_id = Column(Integer)
pokok_pajak = Column(BigInteger)
denda = Column(BigInteger)
create_uid = Column(Integer)
update_uid = Column(Integer)
create_date = Column(DateTime(timezone=True))
update_date = Column(DateTime(timezone=True))
status_bayar = Column(SmallInteger)
class ARSts(NamaModel,Base):
__tablename__ = 'arsts'
tahun_id = Column(Integer)
unit_id = Column(Integer, ForeignKey("units.id"))
tgl_sts = Column(DateTime(timezone=True))
unit_kode = Column(String(32))
unit_nama = Column(String(128))
no_id = Column(Integer)
virified = Column(SmallInteger, nullable=False, default=0)
posted = Column(SmallInteger, nullable=False, default=0)
create_uid = Column(Integer)
update_uid = Column(Integer)
create_date = Column(DateTime(timezone=True))
update_date = Column(DateTime(timezone=True))
status_bayar = Column(SmallInteger)
units = relationship("Unit", backref=backref('arsts'))
jumlah = Column(BigInteger, nullable=False, default=0)
UniqueConstraint(tahun_id,unit_id,no_id,name='arsts_no_uq')
class StsItem(Base):
__tablename__ = 'sts_item'
class ARStsItem(Base):
__tablename__ = 'arsts_item'
sts_id = Column(Integer, primary_key=True)
sspd_id = Column(Integer, primary_key=True)
class SSPD(Base):
__tablename__ = 'sspd'
sts_id = Column(Integer, primary_key=True)
sptpd_id = Column(Integer, primary_key=True)
denda = Column(BigInteger)
bayar = Column(BigInteger)
tgl_bayar = Column(DateTime)
tgl_entri = Column(DateTime)
create_uid = Column(Integer)
update_uid = Column(Integer)
create_date = Column(DateTime(timezone=True))
update_date = Column(DateTime(timezone=True))
sspd_id = Column(Integer, ForeignKey('arsspds.id'),primary_key=True)
rekening_id = Column(Integer, ForeignKey('rekenings.id'), primary_key=True)
jumlah = Column(BigInteger, nullable=False, default=0)
sspds = relationship("ARSspd", backref=backref('arstsitems'))
rekenings = relationship("Rekening", backref=backref('arstsitems'))
class Param(Base):
__tablename__ = 'params'
......
id,kode,nama,path,factory,perm_name,disabled,created,updated,create_uid
1,"home","Home","/",,"''",0,"2015-03-08 16:45:45",,1
2,"login","Login","/login",,"''",0,"2015-03-08 16:45:45",,1
3,"logout","Logout","/logout",,"view",0,"2015-03-08 16:45:45",,1
4,"password","Ubah password","/password",,"view",0,"2015-03-08 16:45:45",,1
5,"forbidden","Forbidden","/forbidden",,"view",0,"2015-03-08 16:45:45",,1
7,"user","Users","/user",,"view",0,"2015-03-08 16:45:45",,1
8,"user-act","Baca User ","/user/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
9,"user-add","Tambah user","/user/add",,"add",0,"2015-03-08 16:45:45",,1
10,"user-edit","Edit user","/user/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
11,"user-delete","Hapus user","/user/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
12,"group","Group","/group",,"read",0,"2015-03-08 16:45:45",,1
13,"group-add","Tambah Group","/group/add",,"add",0,"2015-03-08 16:45:45",,1
14,"group-act","Baca Group","/group/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
15,"group-edit","Edit Group","/group/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
16,"group-delete","Hapus Group","/group/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
17,"pkb","Pajak Kendaraan Bermotor","/pkb",,"read",0,"2015-03-08 16:45:45",,1
18,"pkb-add","Tambah Pajak Kendaraan Bermotor","/pkb/add",,"add",0,"2015-03-08 16:45:45",,1
19,"pap","Pajak Air Permukaan","/pap",,"read",0,"2015-03-08 16:45:45",,1
20,"pap-add","Pajak Air Permukaan","/pap/add",,"add",0,"2015-03-08 16:45:45",,1
26,"coa","Rekening","/coa",,"read",0,"2015-03-08 16:45:45",,1
27,"coa-act","Baca Rekening","/coa/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
28,"coa-add","Tambah Rekening","/coa/add",,"add",0,"2015-03-08 16:45:45",,1
29,"coa-edit","Edit Rekening","/coa/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
40,"coa-delete","Hapus Rekening","/coa/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
41,"skpd","SKPD/Unit","/skpd",,"read",0,"2015-03-08 16:45:45",,1
42,"skpd-act","Baca SKPD","/skpd/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
43,"skpd-add","Tambah SKPD/Unit","/skpd/add",,"add",0,"2015-03-08 16:45:45",,1
44,"skpd-edit","Edit SKPD/Unit","/skpd/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
45,"skpd-delete","Hapus SKPD/Unit","/skpd/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
46,"jabatan","Jabatan","/jabatan",,"read",0,"2015-03-08 16:45:45",,1
47,"jabatan-act","Baca Jabatan","/jabatan/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
48,"jabatan-add","Tambah Jabatan","/jabatan/add",,"add",0,"2015-03-08 16:45:45",,1
49,"jabatan-edit","Edit Jabatan","/jabatan/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
50,"jabatan-delete","Hapus Jabatan","/jabatan/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
51,"pegawai","Pegawai","/pegawai",,"read",0,"2015-03-08 16:45:45",,1
52,"pegawai-act","Baca Pegawai","/pegawai/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
53,"pegawai-add","Tambah Pegawai","/pegawai/add",,"add",0,"2015-03-08 16:45:45",,1
54,"pegawai-edit","Edit Pegawai","/pegawai/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
55,"pegawai-delete","Hapus Pegawai","/pegawai/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
56,"pajak","Pajak","/pajak",,"read",0,"2015-03-08 16:45:45",,1
57,"pajak-act","Baca Pajak","/pajak/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
58,"pajak-add","Tambah Pajak","/pajak/add",,"add",0,"2015-03-08 16:45:45",,1
59,"pajak-edit","Edit Pajak","/pajak/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
60,"pajak-delete","Hapus Pajak","/pajak/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
61,"wilayah","Wilayah","/wilayah",,"read",0,"2015-03-08 16:45:45",,1
62,"wilayah-act","Baca Wilayah","/wilayah/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
63,"wilayah-add","Tambah Wilayah","/wilayah/add",,"add",0,"2015-03-08 16:45:45",,1
64,"wilayah-edit","Edit Wilayah","/wilayah/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
65,"wp","Wajib Pajak","/wp",,"read",0,"2015-03-08 16:45:45",,1
66,"wp-act","Baca Wajb Pajak","/wp/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
67,"wp-add","Tambah Wajib Pajak","/wp/add",,"add",0,"2015-03-08 16:45:45",,1
68,"wp-delete","Hapus Wajib Pajak","/pegawai/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
69,"op","Objek Pajak","/op",,"read",0,"2015-03-08 16:45:45",,1
70,"op-act","Baca Objek Pajak","/op/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
71,"op-add","Tambah Objek Pajak","/op/add",,"add",0,"2015-03-08 16:45:45",,1
72,"op-edit","Edit Objek Pajak","/op/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
73,"op-delete","Hapus Objek Pajak","/op/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
74,"arinvoice","Reg. Bayar","/arinvoice",,"read",0,"2015-03-08 16:45:45",,1
75,"arinvoice-act","Register Action","/arinvoice/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
76,"arinvoice-add","Tambah Reg. Bayar","/arinvoice/add",,"add",0,"2015-03-08 16:45:45",,1
77,"arinvoice-edit","Edit Reg. Bayar","/arinvoice/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
78,"arinvoice-delete","Hapus Reg. Bayar","/arinvoice/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
79,"arsspd","Penerimaan","/arsspd",,"read",0,"2015-03-08 16:45:45",,1
80,"arsspd-act","Baca SSPD","/arsspd/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
81,"arsspd-add","Tambah Penerimaan","/arsspd/add",,"add",0,"2015-03-08 16:45:45",,1
82,"arsspd-edit","Edit Penerimaaan","/arsspd/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
83,"arsspd-delete","Hapus Penerimaan","/arsspd/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
84,"wp-edit","Edit Wajib Pajak","/wp/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
85,"wilayah-delete","Hapus Wilayah","/wilayah/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
86,"usergroup","User Group","/usergroup",,"read",0,"2015-03-08 16:45:45",,1
87,"usergroup-act","User Group Action","/usergroup/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
88,"usergroup-add","Tambah User Group","/usergroup/add",,"add",0,"2015-03-08 16:45:45",,1
89,"usergroup-delete","Hapus User Group","/usergroup/{id}/{id2}/delete",,"delete",0,"2015-03-08 16:45:45",,1
90,"groupperm","Group Permission","/groupperm",,"read",0,"2015-03-08 16:45:45",,1
91,"groupperm-act","Group Permission Action","/groupperm/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
92,"groupperm-add","Tambah Group Permission","/groupperm/add",,"add",0,"2015-03-08 16:45:45",,1
93,"groupperm-delete","Hapus Group Permission","/groupperm/{id}/{id2}/delete",,"delete",0,"2015-03-08 16:45:45",,1
94,"arsts","Setoran","/arsts",,"read",0,"2015-03-08 16:45:45",,1
95,"arsts-act","Setoran Action","/arsts/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
96,"arsts-add","Tambah Setoran","/arsts/add",,"add",0,"2015-03-08 16:45:45",,1
97,"arsts-edit","Edit Setoran","/arsts/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
98,"arsts-delete","Hapus Setoran","/arsts/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
99,"arstsitem","Setoran Detail","/arstsitem",,"read",0,"2015-03-08 16:45:45",,1
100,"arstsitem-act","Setoran Detail Action","/arstsitem/{act}/act",,"read",0,"2015-03-08 16:45:45",,1
101,"arstsitem-add","Tambah Setoran Detail","/arstsitem/{id}/add",,"add",0,"2015-03-08 16:45:45",,1
102,"arstsitem-edit","Edit Setoran Detail","/arstsitem/{id}/edit",,"edit",0,"2015-03-08 16:45:45",,1
103,"arstsitem-delete","Hapus Setoran Detail","/arstsitem/{id}/delete",,"delete",0,"2015-03-08 16:45:45",,1
104,"arstsitem-list","Tambah Setoran Detail","/arstsitem/{id}/list",,"add",0,"2015-03-08 16:45:45",,1
......@@ -15,7 +15,7 @@ def group_finder(login, request):
r = []
for group_id in UserGroup.get_by_user(u):
group = DBSession.query(Group).get(group_id)
r.append(group.group_name)
r.append(''.join(['g:',group.group_name]))
return r
def get_user(request):
......
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,
ARSts,
Unit
)
from datatables import (
ColumnDT, DataTables)
SESS_ADD_FAILED = 'Gagal tambah STS'
SESS_EDIT_FAILED = 'Gagal edit STS'
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='arsts', renderer='templates/arsts/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(ARSts).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"
)
kode = colander.SchemaNode(
colander.String(),
title="Kode Bayar",
missing = colander.drop,
)
nama = colander.SchemaNode(
colander.String(),
title="Uraian"
)
tgl_sts = colander.SchemaNode(
colander.Date(),
)
jumlah = colander.SchemaNode(
colander.Integer(),
default = 0,
)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True),
oid='id'
)
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):
if not row:
row = ARSts()
row.from_dict(values)
row.jumlah = re.sub("[^0-9]", "", row.jumlah)
if not row.tahun_id:
row.tahun_id = datetime.now().strftime('%Y')
ref = Unit.get_by_id(row.unit_id)
row.unit_kode = ref.kode
row.unit_nama = ref.nama
if not row.kode and not row.no_id:
invoice_no = DBSession.query(func.max(ARSts.no_id)).\
filter(ARSts.tahun_id==row.tahun_id,
ARSts.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')])
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('No Bayar %s sudah disimpan.' % row.kode)
def route_list(request):
return HTTPFound(location=request.route_url('arsts'))
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='arsts-add', renderer='templates/arsts/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)
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(ARSts).filter(ARSts.id==request.matchdict['id'])
def id_not_found(request):
msg = 'No Bayar ID %s tidak ditemukan atau sudah dibayar.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
@view_config(route_name='arsts-edit', renderer='templates/arsts/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('arsts-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='arsts-delete', renderer='templates/arsts/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 = 'No Bayar ID %d %s sudah dihapus.' % (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='arsts-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('jumlah'))
columns.append(ColumnDT('jumlah', filter=_DTnumberformat))
columns.append(ColumnDT('units.nama'))
query = DBSession.query(ARSts).\
join(Unit)
rowTable = DataTables(req, ARSts, query, columns)
return rowTable.output_result()
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, _DTstrftime
from ..models import DBSession
from ..models.isipkd import(
Unit,
Wilayah,
Pajak,
Rekening,
ARSspd,
ARSts,
ARStsItem,
ARInvoice,
Unit
)
from datatables import (
ColumnDT, DataTables)
SESS_ADD_FAILED = 'Gagal tambah Pembayaran'
SESS_EDIT_FAILED = 'Gagal edit Pembayaran'
from daftar import (STATUS, deferred_status,
hitung_bunga
)
########
# List #
########
#######
# Add #
#######
def route_list(request):
return HTTPFound(location=request.route_url('arsts-edit', id = request.session['sts_id']))
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
def query_invoice(kode):
return DBSession.query(ARInvoice).\
filter(ARInvoice.kode==kode,
ARInvoice.status_bayar==0).first()
def query_invoice_id(id):
return DBSession.query(ARInvoice).\
filter(ARInvoice.id==id).first()
@view_config(route_name='arstsitem-add', renderer='templates/arstsitem/add.pt',
permission='add')
def view_add(request):
if 'all' == request.matchdict['id']:
rows = DBSession.query(ARSspd).join(ARInvoice).\
filter( ARInvoice.unit_id==request.session['unit_id'],
ARSspd.posted==0).all()
else:
rows = DBSession.query(ARSspd).join(ARInvoice).\
filter( ARInvoice.unit_id==request.session['unit_id'],
ARSspd.id == request.matchdict['id'],
ARSspd.posted==0).all()
for row in rows:
items=ARStsItem()
items.sts_id=request.session['sts_id']
items.sspd_id=row.id
items.rekening_id= row.arinvoices.rekening_id
items.jumlah=row.bayar-row.bunga
DBSession.add(items)
DBSession.flush()
print 'A'
if row.bunga>0:
items=ARStsItem()
items.sts_id=request.session['sts_id']
items.sspd_id=row.id
items.rekening_id= row.arinvoices.objek_pajaks.denda_rekening_id
items.jumlah=row.bunga
DBSession.add(items)
DBSession.flush()
row.posted = 1
DBSession.add(row)
DBSession.flush()
jumlah = DBSession.query(func.sum(ARStsItem.jumlah)).\
filter(ARStsItem.sts_id==request.session['sts_id']).scalar()
if jumlah:
rows = DBSession.query(ARSts).filter(ARSts.id==request.session['sts_id']).first()
rows.jumlah=jumlah
DBSession.add(rows)
DBSession.flush()
return route_list(request)
########
# Edit #
########
def query_id(request):
return DBSession.query(ARStsItem).\
filter(ARStsItem.sts_id == request.session['sts_id'],
ARStsItem.sspd_id == request.matchdict['id'])
def id_not_found(request):
msg = 'SSPD ID %s tidak ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
##########
# Delete #
##########
@view_config(route_name='arstsitem-delete', renderer='templates/arstsitem/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'))
msg = 'Penerimaan ID %d %s sudah dihapus.' % (row.sts_id, row.sspd_id)
q.delete()
DBSession.flush()
q = DBSession.query(ARSspd).filter(ARSspd.id==request.matchdict['id']).first()
q.posted = 0
DBSession.add(q)
DBSession.flush()
request.session.flash(msg)
return route_list(request)
#############
# SSPD LIST #
#############
def query_sts_id(request):
return DBSession.query(ARSts).filter_by(id=request.matchdict['id'])
@view_config(route_name='arstsitem-list', renderer='templates/arstsitem/list.pt',
permission='read')
def view_list(request):
q = query_sts_id(request)
row = q.first()
if not row:
return id_not_found(request)
request.session['unit_id'] = row.unit_id
request.session['sts_id'] = row.id
#TODO validate user_unit
"""if request.POST:
if 'delete' in request.POST:
msg = 'Penerimaan ID %d %s sudah dihapus.' % (row.id, row.kode)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
"""
return dict(row={})
##########
# Action #
##########
@view_config(route_name='arstsitem-act', renderer='json',
permission='read')
def view_act(request):
req = request
params = req.params
url_dict = req.matchdict
if url_dict['act']=='sspd':
columns = []
columns.append(ColumnDT('id'))
columns.append(ColumnDT('arinvoices.kode'))
columns.append(ColumnDT('arinvoices.wp_kode'))
columns.append(ColumnDT('arinvoices.op_kode'))
columns.append(ColumnDT('arinvoices.op_nama'))
columns.append(ColumnDT('arinvoices.rek_nama'))
columns.append(ColumnDT('bayar', filter=_DTnumberformat))
columns.append(ColumnDT('tgl_bayar', filter=_DTstrftime))
columns.append(ColumnDT('posted'))
query = DBSession.query(ARSspd).join(ARInvoice).\
filter(ARSspd.posted==0,
ARInvoice.unit_id==request.session['unit_id'])
rowTable = DataTables(req, ARSspd, query, columns)
return rowTable.output_result()
elif url_dict['act']=='grid':
columns = []
columns.append(ColumnDT('sspd_id'))
columns.append(ColumnDT('sts_id'))
columns.append(ColumnDT('rekening_id'))
columns.append(ColumnDT('rekenings.kode'))
columns.append(ColumnDT('rekenings.nama'))
columns.append(ColumnDT('jumlah', filter=_DTnumberformat))
query = DBSession.query(ARStsItem).join(Rekening).\
filter(ARStsItem.sts_id==request.session['sts_id'])
rowTable = DataTables(req, ARStsItem, query, columns)
return rowTable.output_result()
\ No newline at end of file
......@@ -6,12 +6,33 @@ from deform import (
ValidationFailure,
)
from ..models import DBSession,User
from ..models import DBSession,User, Group, Route
from ..models.isipkd import Param
from ..models.isipkd import(
Wilayah, Jabatan, Unit, Rekening, SubjekPajak, Pajak, ObjekPajak
)
def hitung_bunga(pokok, jatuh_tempo):
row = DBSession.query(Param.denda).first()
if row:
persen_denda = row.denda
else:
return 0
kini = date.today()
denda = bln_tunggakan = 0
jatuh_tempo = jatuh_tempo
x = (kini.year - jatuh_tempo.year) * 12
y = kini.month - jatuh_tempo.month
bln_tunggakan = x + y + 1
if kini.day <= jatuh_tempo.day:
bln_tunggakan -= 1
if bln_tunggakan < 1:
bln_tunggakan = 0
if bln_tunggakan > 24:
bln_tunggakan = 24
denda = bln_tunggakan * persen_denda / 100 * pokok
return denda
def email_validator(node, value):
name, email = parseaddr(value)
if not email or email.find('@') < 0:
......@@ -159,3 +180,84 @@ def deferred_objekpajak(node, kw):
values = kw.get('daftar_objekpajak',[])
return widget.SelectWidget(values=values)
@colander.deferred
def deferred_subjekpajak(node, kw):
values = kw.get('daftar_subjekpajak',[])
return widget.SelectWidget(values=values)
def daftar_objekpajak():
rows = DBSession.query(ObjekPajak).all()
r=[]
d = (0,'Pilih SP')
r.append(d)
for row in rows:
d = (row.id, row.kode+':'+row.nama)
r.append(d)
return r
@colander.deferred
def deferred_user(node, kw):
values = kw.get('daftar_user',[])
return widget.SelectWidget(values=values)
def daftar_user():
rows = DBSession.query(User).all()
r=[]
d = (0,'Pilih User')
r.append(d)
for row in rows:
d = (row.id, row.user_name+':'+row.email)
r.append(d)
return r
@colander.deferred
def deferred_group(node, kw):
values = kw.get('daftar_group',[])
return widget.SelectWidget(values=values)
def daftar_group():
rows = DBSession.query(Group).all()
r=[]
d = (0,'Pilih Group')
r.append(d)
for row in rows:
d = (row.id, row.group_name)
r.append(d)
return r
@colander.deferred
def deferred_route(node, kw):
values = kw.get('daftar_route',[])
return widget.SelectWidget(values=values)
def daftar_route():
rows = DBSession.query(Route).order_by(Route.kode).all()
r=[]
d = (0,'Pilih Route')
r.append(d)
for row in rows:
d = (row.id, row.nama)
r.append(d)
return r
auto_unit_nm = widget.AutocompleteInputWidget(
size=60,
values = '/skpd/hon/act',
min_length=1)
auto_unit_kode = widget.AutocompleteInputWidget(
size=60,
values = '/skpd/hoc/act',
min_length=1)
auto_wp_nm = widget.AutocompleteInputWidget(
size=60,
values = '/wp/hon/act',
min_length=1)
auto_op_nm = widget.AutocompleteInputWidget(
size=60,
values = '/op/hon/act',
min_length=1)
\ No newline at end of file
......@@ -20,8 +20,10 @@ from ..models import (
)
from datatables import (
ColumnDT, DataTables)
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive, STATUS
from daftar import (daftar_route, deferred_route,
daftar_group, deferred_group
)
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive
SESS_ADD_FAILED = 'groupperm add failed'
SESS_EDIT_FAILED = 'groupperm edit failed'
......@@ -53,16 +55,17 @@ def form_validator(form, value):
class AddSchema(colander.Schema):
group_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(Group.id,Group.group_name).all()),
widget=deferred_group,
title="Group")
route_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(Route.id,Route.nama).all()),
widget=deferred_route,
title="Route")
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_group=daftar_group(),
daftar_route=daftar_route())
schema.request = request
return Form(schema, buttons=('save','cancel'))
......@@ -180,13 +183,10 @@ def view_act(request):
columns = []
columns.append(ColumnDT('group_id'))
columns.append(ColumnDT('route_id'))
columns.append(ColumnDT('group_name'))
columns.append(ColumnDT('route_name'))
columns.append(ColumnDT('groups.group_name'))
columns.append(ColumnDT('routes.nama'))
query = DBSession.query(GroupRoutePermission.route_id,
GroupRoutePermission.group_id,
Route.nama.label('route_name'),
Group.group_name).\
query = DBSession.query(GroupRoutePermission).\
join(Route).join(Group)
rowTable = DataTables(req, GroupRoutePermission, query, columns)
return rowTable.output_result()
......@@ -108,7 +108,6 @@ class AddSchema(colander.Schema):
)
nama = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="Uraian")
status = colander.SchemaNode(
colander.Integer(),
......@@ -118,7 +117,8 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
widget=widget.HiddenWidget(readonly=True),
title="")
def get_form(request, class_form):
......@@ -166,13 +166,14 @@ def view_add(request):
try:
c = form.validate(controls)
except ValidationFailure, e:
request.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=request.route_url('op-add'))
return dict(form=form)
#request.session[SESS_ADD_FAILED] = e.render()
#return HTTPFound(location=request.route_url('op-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())
return dict(form=form)
########
# Edit #
......@@ -198,15 +199,14 @@ def view_edit(request):
try:
c = form.validate(controls)
except ValidationFailure, e:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('op-edit',
id=row.id))
save_request(dict(controls), request, row)
return dict(form=form)
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))
form.set_appstruct(values)
return dict(form=form)
##########
# Delete #
......@@ -241,17 +241,29 @@ def view_act(request):
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT('id'))
columns.append(ColumnDT('subjekpajak.kode'))
columns.append(ColumnDT('subjekpajaks.kode'))
columns.append(ColumnDT('kode'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('pajak.kode'))
columns.append(ColumnDT('wilayah.nama'))
columns.append(ColumnDT('pajaks.kode'))
columns.append(ColumnDT('wilayahs.nama'))
columns.append(ColumnDT('status'))
query = DBSession.query(ObjekPajak).join(SubjekPajak).join(Pajak).join(Wilayah)
""".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()
elif url_dict['act']=='hon':
term = 'term' in params and params['term'] or ''
rows = DBSession.query(ObjekPajak).\
filter(ObjekPajak.nama.ilike('%%%s%%' % term) ).all()
r = []
for k in rows:
print k
d={}
d['id'] = k.id
d['value'] = k.nama
d['sp_id'] = k.subjekpajaks.id
d['sp_nm'] = k.subjekpajaks.nama
d['unit_id'] = k.units.id
d['unit_nm'] = k.units.nama
r.append(d)
return r
......@@ -47,9 +47,9 @@ def form_validator(form, value):
'Kode pegawai %s sudah digunakan oleh ID %d' % (
value['kode'], found.id))
def err_kode():
def err_user(email):
raise colander.Invalid(form,
'User dengan Pegawai %s sudah ada' % (value['nama']))
'User ID untuk Pegawai %s sudah ada email # %s' % (value['nama'], email))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
......@@ -62,8 +62,8 @@ def form_validator(form, value):
if r:
if found and found.id != r.id:
err_kode()
if r and r.user_id:
err_user()
if r and r.user_id and value['login']:
err_user(r.users.email)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
......
......@@ -227,3 +227,15 @@ def view_act(request):
query = DBSession.query(Unit)
rowTable = DataTables(req, Unit, query, columns)
return rowTable.output_result()
elif url_dict['act']=='hon':
term = 'term' in params and params['term'] or ''
rows = DBSession.query(Unit.id, Unit.nama
).filter( Unit.is_summary==0,
Unit.nama.ilike('%%%s%%' % term) ).all()
r = []
for k in rows:
d={}
d['id'] = k[0]
d['value'] = k[1]
r.append(d)
return r
<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">
<div tal:condition="not row.arsspds"> Hapus No. Bayar ID #${row.id} Kode# ${row.kode} ? </div>
<div tal:condition="row.arsspds" >No. Bayar ID #${row.id} Kode# ${row.kode} tidak dapat dihapus</div>
</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 = "/arinvoice/";
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">
<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">
<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 Penerimaan</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>Tgl. Bayar</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 = "/arsspd/";
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"},
{"sWidth": "50px", "sClass": "center"},
],
});
var tb_array = [
'<div class="btn-group pull-left">',
' <button id="btn_tambah" class="btn btn btn-primary pull-left" type="button">Bayar</button>',
' <button id="btn_edit" class="btn btn btn-danger pull-left" type="button">Reversal</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">
<link href="/static/datatables/extensions/TableTools/css/dataTables.tableTools.min.css" rel="stylesheet">
<link href="/static/datatables/media/css/dataTables.bootstrap.css" rel="stylesheet">
<h3>Tambah/Edit STS</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 tal:condition="'id' in form">
<div tal:define="field form['id']">
${structure:field.serialize()}
</div>
</div>
<div class="form-group" tal:define="field form['unit_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-1" 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-11">
${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-1" 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-5">
${structure:field.serialize()}
<script>
$("#${field.oid}").attr("readonly", true);
</script>
</div>
<div tal:define="field form['tgl_sts']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-1" 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-5">
${structure:field.serialize()}
</div>
</div>
</div>
<div class="form-group" tal:define="field form['nama']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-1" 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-11">
${structure:field.serialize()}
</div>
</div>
<div class="form-group" tal:define="field form['jumlah']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-1" 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()}
<script>
$("#${field.oid}").attr("readonly", true);
</script>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-1">
<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>
<table id="table1" name="table1" class="table table-bordered table-hover table-condensed" >
<thead>
<tr>
<th>ID</th>
<th>SSPDID</th>
<th>RekID</th>
<th>Kode</th>
<th>Rekening</th>
<th>Jumlah</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 = "/arstsitem/";
var oTableUrl = oFormUrl+"grid/act";
$(document).ready(function () {
oTable = $('#table1').dataTable({
"sAjaxSource": oTableUrl,
"bServerSide": true,
"bProcessing": true,
"sDom": '<"toolbar">lfrtip',
"bScrollCollapse": true,
"bSort": true,
"bSearch": false,
"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,1,2]}
],
"aoColumns": [
null,
null,
null,
{"sWidth": "75px", "sClass": "right"},
null,
{"sWidth": "75px", "sClass": "right"},
],
});
var tb_array = [
'<div class="btn-group pull-left">',
' <button id="btn_tambah" class="btn btn btn-primary pull-left" type="button">Pilih</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+$("#id").val()+'/list';
});
$('#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">
<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 STS</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>Uraian</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 = "/arsts/";
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"},
null,
{"sWidth": "100px", "sClass": "right"},
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">
<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">
<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 Penerimaan</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>Tgl. Bayar</th>
<th>Pilih</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 = "/arstsitem/";
var oTableUrl = oFormUrl+"sspd/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": "50px", "sClass": "center"},
{"sWidth": "50px", "sClass": "center"},
],
});
var tb_array = [
'<div class="btn-group pull-left">',
' <button id="btn_semua" class="btn btn btn-primary pull-left" type="button">Semua</button>',
' <button id="btn_tambah" class="btn btn btn-primary pull-left" type="button">Terpilih</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_semua').click(function () {
if (confirm('Tambah semua ke STS?')==true) {
window.location = oFormUrl+'all/add';
}
});
$('#btn_tambah').click(function () {
if (mID) {
window.location = oFormUrl+mID+'/add';
} else {
alert('Silahkan pilih data yang akan ditambahkan');
}
});
});
</script>
</div>
</html>
......@@ -12,6 +12,8 @@
<!-- 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 -->
......@@ -45,9 +47,9 @@
<li tal:attributes="class request.path == '/' and 'active'"><a href="/">Home</a></li>
<li tal:attributes="class request.path == '/pkb/add' and 'active'"><a href="/pkb/add">PKB</a></li>
<li tal:attributes="class request.path == '/pap/add' and 'active'"><a href="/pap/add">PAP</a></li>
<li tal:attributes="class request.path == '/invoice' and 'active'"><a href="/invoice">No. Bayar</a></li>
<li tal:attributes="class request.path == '/sspd' and 'active'"><a href="/sspd">Penerimaan</a></li>
<li tal:attributes="class request.path == '/sts' and 'active'"><a href="/sts">STS</a></li>
<li tal:attributes="class request.path == '/arinvoice' and 'active'"><a href="/arinvoice">No. Bayar</a></li>
<li tal:attributes="class request.path == '/arsspd' and 'active'"><a href="/arsspd">Penerimaan</a></li>
<li tal:attributes="class request.path == '/arsts' and 'active'"><a href="/arsts">STS</a></li>
<!--li tal:attributes="class request.path == '/pbbkb' and 'active'"><a href="/pbbkb">PBB-KB</a></li>
......@@ -57,7 +59,7 @@
<li tal:condition="not request.user" tal:attributes="class request.path == '/login' and 'active'"><a href="/login">Login</a></li>
<li tal:condition="request.user and request.user.user_name=='admin'" class="dropdown" tal:attributes="class request.matched_route.name in ['user', 'user-add', 'user-edit', 'user-delete'] and 'active'">
<li class="dropdown" tal:attributes="class request.matched_route.name in ['user', 'user-add', 'user-edit', 'user-delete'] and 'active'">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/user">User</a></li>
......@@ -69,10 +71,10 @@
<li><a href="/jabatan">Jabatan</a></li>
<li><a href="/pegawai">Pegawai</a></li>
<li><a href="/coa">Rekening</a></li>
<li><a href="/pajak">Pajak & Tarif</a></li>
<li><a href="/pajak">Rekening & Tarif</a></li>
<li><a href="/wilayah">Wilayah</a></li>
<li><a href="/wp">Wajib Pajak/Pungut</a></li>
<li><a href="/op">Objek Pajak</a></li>
<li><a href="/wp">Subyek Bayar</a></li>
<li><a href="/op">Obyek Bayar</a></li>
</ul>
</li>
</ul>
......@@ -106,12 +108,14 @@
<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 -->
......
......@@ -48,6 +48,7 @@
"bInfo": false,
"bFilter": true,
"bAutoWidth": false,
"bSearch": true,
"bPaginate": true,
"sPaginationType": "full_numbers",
"lengthMenu": [
......
......@@ -44,9 +44,9 @@
"bProcessing": true,
"sDom": '<"toolbar">lfrtip',
"bScrollCollapse": true,
"bSort": false,
"bSort": true,
"bInfo": false,
"bFilter": false,
"bFilter": true,
"bAutoWidth": false,
"bPaginate": true,
"sPaginationType": "full_numbers",
......
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h3>Tambah Objek</h3>
<h3>Tambah Obyek Bayar</h3>
<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 tal:repeat="field form">
<div class="form-group" 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>
<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" class="form-550">
<h3>Edit Objek</h3>
<hr>
<div tal:content="structure form"/>
<h3>Edit Obyek Bayar</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 tal:repeat="field form">
<div class="form-group" 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>
<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" class="form-550">
<h3>Edit Pegawai</h3>
<h3>Edit Wlayah</h3>
<hr>
<div tal:content="structure form"/>
</div>
......
......@@ -2,6 +2,36 @@
<div metal:fill-slot="content" class="form-550">
<h3>Tambah Subjek</h3>
<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 tal:repeat="field form">
<div class="form-group" 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>
<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" class="form-550">
<h3>Edit Subjek</h3>
<hr>
<div tal:content="structure form"/>
<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 tal:repeat="field form">
<div class="form-group" 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>
<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>
......@@ -18,6 +18,7 @@ from ..models import (
Group,
UserGroup,
)
from daftar import deferred_user, daftar_user, deferred_group, daftar_group
from datatables import (
ColumnDT, DataTables)
......@@ -53,16 +54,17 @@ def form_validator(form, value):
class AddSchema(colander.Schema):
user_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(User.id,User.email).all()),
widget=deferred_user,
title="User")
group_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(Group.id,Group.group_name).all()),
widget=deferred_group,
title="Group")
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_user = daftar_user(),
daftar_group = daftar_group())
schema.request = request
return Form(schema, buttons=('save','cancel'))
......
......@@ -99,11 +99,13 @@ class AddSchema(colander.Schema):
colander.String()
)
alamat_1 = colander.SchemaNode(
colander.String()
colander.String(),
title ="Alamat"
)
alamat_2 = colander.SchemaNode(
colander.String(),
missing=colander.drop
missing=colander.drop,
title =""
)
kelurahan= colander.SchemaNode(
colander.String(),
......@@ -126,11 +128,6 @@ class AddSchema(colander.Schema):
colander.Integer(),
widget=deferred_status,
title="Status")
user_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_user,
default=0,
title="User")
login = colander.SchemaNode(
colander.Boolean(),
missing = colander.drop,
......@@ -140,7 +137,8 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
widget=widget.HiddenWidget(readonly=True),
title="")
def get_form(request, class_form):
......@@ -207,13 +205,14 @@ def view_add(request):
try:
c = form.validate(controls)
except ValidationFailure, e:
request.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=request.route_url('wp-add'))
return dict(form=form)
#request.session[SESS_ADD_FAILED] = e.render()
#return HTTPFound(location=request.route_url('wp-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())
return dict(form=form)
########
# Edit #
......@@ -239,15 +238,17 @@ def view_edit(request):
try:
c = form.validate(controls)
except ValidationFailure, e:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('wp-edit',
id=row.id))
return dict(form=form)
#request.session[SESS_EDIT_FAILED] = e.render()
#return HTTPFound(location=request.route_url('wp-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))
form.set_appstruct(values)
return dict(form=form)
##########
# Delete #
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!