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): ...@@ -56,7 +56,8 @@ class CommonModel(object):
def from_dict(self, values): def from_dict(self, values):
for column in self.__table__.columns: for column in self.__table__.columns:
if column.name in values: 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): def as_timezone(self, fieldname):
date_ = getattr(self, fieldname) date_ = getattr(self, fieldname)
...@@ -258,7 +259,7 @@ class RootFactory(object): ...@@ -258,7 +259,7 @@ class RootFactory(object):
self.request = request self.request = request
self.__acl__ = [(Allow, 'Admin', ALL_PERMISSIONS), self.__acl__ = [(Allow, 'Admin', ALL_PERMISSIONS),
(Allow, Authenticated, 'view'),] (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).\ rows = DBSession.query(Group.group_name, Route.perm_name).\
join(UserGroup).join(GroupRoutePermission).join(Route).\ join(UserGroup).join(GroupRoutePermission).join(Route).\
filter(UserGroup.user_id==self.request.user.id, filter(UserGroup.user_id==self.request.user.id,
...@@ -266,7 +267,7 @@ class RootFactory(object): ...@@ -266,7 +267,7 @@ class RootFactory(object):
if rows: if rows:
for r in rows: for r in rows:
self.__acl__.append((Allow, ''.join(['g:',r.group_name]), r.perm_name)) self.__acl__.append((Allow, ''.join(['g:',r.group_name]), r.perm_name))
"""
def init_model(): def init_model():
ziggurat_model_init(User, Group, UserGroup, GroupPermission, UserPermission, ziggurat_model_init(User, Group, UserGroup, GroupPermission, UserPermission,
UserResourcePermission, GroupResourcePermission, Resource, UserResourcePermission, GroupResourcePermission, Resource,
......
...@@ -77,7 +77,14 @@ class Pegawai(NamaModel, Base): ...@@ -77,7 +77,14 @@ class Pegawai(NamaModel, Base):
jabatan_id = Column(Integer,ForeignKey("jabatans.id")) jabatan_id = Column(Integer,ForeignKey("jabatans.id"))
unit_id = Column(Integer,ForeignKey("units.id")) unit_id = Column(Integer,ForeignKey("units.id"))
user_id = Column(Integer,ForeignKey("users.id"), nullable=True) user_id = Column(Integer,ForeignKey("users.id"), nullable=True)
users = relationship("User", backref=backref('pegawais'))
UniqueConstraint('kode') UniqueConstraint('kode')
@classmethod
def get_by_user(cls, user_id):
return DBSession.query(cls).filter(cls.user_id==user_id).all()
class PegawaiLogin(Base): class PegawaiLogin(Base):
__tablename__ = 'pegawai_users' __tablename__ = 'pegawai_users'
user_id = Column(Integer,ForeignKey("users.id"), primary_key=True) user_id = Column(Integer,ForeignKey("users.id"), primary_key=True)
...@@ -90,6 +97,7 @@ class Pajak(NamaModel, Base): ...@@ -90,6 +97,7 @@ class Pajak(NamaModel, Base):
rekening_id = Column(Integer,ForeignKey("rekenings.id")) rekening_id = Column(Integer,ForeignKey("rekenings.id"))
tahun = Column(Integer, nullable=False, default=0) tahun = Column(Integer, nullable=False, default=0)
tarif = Column(Float, default=0, nullable=False) tarif = Column(Float, default=0, nullable=False)
denda_rekening_id = Column(Integer, nullable=False, default=0)
UniqueConstraint('rekening_id','tahun', name='rekening_tahun') UniqueConstraint('rekening_id','tahun', name='rekening_tahun')
rekenings = relationship("Rekening", backref=backref('pajaks')) rekenings = relationship("Rekening", backref=backref('pajaks'))
...@@ -117,13 +125,12 @@ class SubjekPajak(NamaModel, Base): ...@@ -117,13 +125,12 @@ class SubjekPajak(NamaModel, Base):
UniqueConstraint('kode') UniqueConstraint('kode')
@classmethod @classmethod
def get_by_user(cls, user_id): 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): class ObjekPajak(NamaModel, Base):
__tablename__ = 'objekpajaks' __tablename__ = 'objekpajaks'
__table_args__ = (UniqueConstraint('subjekpajak_id', 'kode', __table_args__ = (UniqueConstraint('subjekpajak_id', 'kode',
name='objekpajak_kode_uq'), name='objekpajak_kode_uq'),)
)
status = Column(Integer, default=1) status = Column(Integer, default=1)
alamat_1 = Column(String(128)) alamat_1 = Column(String(128))
alamat_2 = Column(String(128)) alamat_2 = Column(String(128))
...@@ -134,7 +141,7 @@ class ObjekPajak(NamaModel, Base): ...@@ -134,7 +141,7 @@ class ObjekPajak(NamaModel, Base):
subjekpajaks = relationship('SubjekPajak', backref=backref('objekpajaks')) subjekpajaks = relationship('SubjekPajak', backref=backref('objekpajaks'))
pajaks = relationship('Pajak', backref=backref('objekpajaks')) pajaks = relationship('Pajak', backref=backref('objekpajaks'))
wilayahs = relationship('Wilayah', backref=backref('objekpajaks')) wilayahs = relationship('Wilayah', backref=backref('objekpajaks'))
units = relationship('Unit', backref=backref('objekpajaks'))
class ARInvoice(CommonModel, Base): class ARInvoice(CommonModel, Base):
__tablename__ = 'arinvoices' __tablename__ = 'arinvoices'
...@@ -147,6 +154,7 @@ class ARInvoice(CommonModel, Base): ...@@ -147,6 +154,7 @@ class ARInvoice(CommonModel, Base):
kode = Column(String(32), unique=True) kode = Column(String(32), unique=True)
unit_kode = Column(String(32)) unit_kode = Column(String(32))
unit_nama = Column(String(128)) unit_nama = Column(String(128))
rekening_id = Column(Integer, ForeignKey("rekenings.id"))
rek_kode = Column(String(16)) rek_kode = Column(String(16))
rek_nama = Column(String(64)) rek_nama = Column(String(64))
wp_kode = Column(String(16)) wp_kode = Column(String(16))
...@@ -167,7 +175,7 @@ class ARInvoice(CommonModel, Base): ...@@ -167,7 +175,7 @@ class ARInvoice(CommonModel, Base):
periode_2 = Column(Date) periode_2 = Column(Date)
tgl_tetap = Column(Date) tgl_tetap = Column(Date)
jatuh_tempo = 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) owner_id = Column(Integer)
create_uid = Column(Integer) create_uid = Column(Integer)
update_uid = Column(Integer) update_uid = Column(Integer)
...@@ -175,41 +183,61 @@ class ARInvoice(CommonModel, Base): ...@@ -175,41 +183,61 @@ class ARInvoice(CommonModel, Base):
update_date = Column(DateTime(timezone=True)) update_date = Column(DateTime(timezone=True))
#bulan = Column(Integer) #bulan = Column(Integer)
#tanggal = Column(Integer) #tanggal = Column(Integer)
subjekpajaks = relationship("SubjekPajak", backref=backref('arinvoices'))
objekpajaks = relationship("ObjekPajak", backref=backref('arinvoices'))
units = relationship("Unit", 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): class ARSts(NamaModel,Base):
__tablename__ = 'sts' __tablename__ = 'arsts'
id = Column(Integer, primary_key=True) tahun_id = Column(Integer)
no_bayar = Column(String(16)) unit_id = Column(Integer, ForeignKey("units.id"))
unit_id = Column(Integer) tgl_sts = Column(DateTime(timezone=True))
rekening_id = Column(Integer) unit_kode = Column(String(32))
pokok_pajak = Column(BigInteger) unit_nama = Column(String(128))
denda = Column(BigInteger) no_id = Column(Integer)
create_uid = Column(Integer) virified = Column(SmallInteger, nullable=False, default=0)
update_uid = Column(Integer) posted = Column(SmallInteger, nullable=False, default=0)
create_date = Column(DateTime(timezone=True)) create_uid = Column(Integer)
update_date = Column(DateTime(timezone=True)) update_uid = Column(Integer)
status_bayar = Column(SmallInteger) 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): class ARStsItem(Base):
__tablename__ = 'sts_item' __tablename__ = 'arsts_item'
sts_id = Column(Integer, primary_key=True) sts_id = Column(Integer, primary_key=True)
sspd_id = Column(Integer, primary_key=True) sspd_id = Column(Integer, ForeignKey('arsspds.id'),primary_key=True)
rekening_id = Column(Integer, ForeignKey('rekenings.id'), primary_key=True)
class SSPD(Base): jumlah = Column(BigInteger, nullable=False, default=0)
__tablename__ = 'sspd' sspds = relationship("ARSspd", backref=backref('arstsitems'))
sts_id = Column(Integer, primary_key=True) rekenings = relationship("Rekening", backref=backref('arstsitems'))
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))
class Param(Base): class Param(Base):
__tablename__ = 'params' __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): ...@@ -15,7 +15,7 @@ def group_finder(login, request):
r = [] r = []
for group_id in UserGroup.get_by_user(u): for group_id in UserGroup.get_by_user(u):
group = DBSession.query(Group).get(group_id) group = DBSession.query(Group).get(group_id)
r.append(group.group_name) r.append(''.join(['g:',group.group_name]))
return r return r
def get_user(request): 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 \ No newline at end of file
...@@ -6,12 +6,33 @@ from deform import ( ...@@ -6,12 +6,33 @@ from deform import (
ValidationFailure, ValidationFailure,
) )
from ..models import DBSession,User from ..models import DBSession,User, Group, Route
from ..models.isipkd import Param
from ..models.isipkd import( from ..models.isipkd import(
Wilayah, Jabatan, Unit, Rekening, SubjekPajak, Pajak, ObjekPajak 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): def email_validator(node, value):
name, email = parseaddr(value) name, email = parseaddr(value)
if not email or email.find('@') < 0: if not email or email.find('@') < 0:
...@@ -159,3 +180,84 @@ def deferred_objekpajak(node, kw): ...@@ -159,3 +180,84 @@ def deferred_objekpajak(node, kw):
values = kw.get('daftar_objekpajak',[]) values = kw.get('daftar_objekpajak',[])
return widget.SelectWidget(values=values) 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 \ No newline at end of file
...@@ -20,8 +20,10 @@ from ..models import ( ...@@ -20,8 +20,10 @@ from ..models import (
) )
from datatables import ( from datatables import (
ColumnDT, DataTables) ColumnDT, DataTables)
from daftar import (daftar_route, deferred_route,
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive, STATUS daftar_group, deferred_group
)
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive
SESS_ADD_FAILED = 'groupperm add failed' SESS_ADD_FAILED = 'groupperm add failed'
SESS_EDIT_FAILED = 'groupperm edit failed' SESS_EDIT_FAILED = 'groupperm edit failed'
...@@ -53,16 +55,17 @@ def form_validator(form, value): ...@@ -53,16 +55,17 @@ def form_validator(form, value):
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
group_id = colander.SchemaNode( group_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(Group.id,Group.group_name).all()), widget=deferred_group,
title="Group") title="Group")
route_id = colander.SchemaNode( route_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(Route.id,Route.nama).all()), widget=deferred_route,
title="Route") title="Route")
def get_form(request, class_form): def get_form(request, class_form):
schema = class_form(validator=form_validator) 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 schema.request = request
return Form(schema, buttons=('save','cancel')) return Form(schema, buttons=('save','cancel'))
...@@ -180,13 +183,10 @@ def view_act(request): ...@@ -180,13 +183,10 @@ def view_act(request):
columns = [] columns = []
columns.append(ColumnDT('group_id')) columns.append(ColumnDT('group_id'))
columns.append(ColumnDT('route_id')) columns.append(ColumnDT('route_id'))
columns.append(ColumnDT('group_name')) columns.append(ColumnDT('groups.group_name'))
columns.append(ColumnDT('route_name')) columns.append(ColumnDT('routes.nama'))
query = DBSession.query(GroupRoutePermission.route_id, query = DBSession.query(GroupRoutePermission).\
GroupRoutePermission.group_id,
Route.nama.label('route_name'),
Group.group_name).\
join(Route).join(Group) join(Route).join(Group)
rowTable = DataTables(req, GroupRoutePermission, query, columns) rowTable = DataTables(req, GroupRoutePermission, query, columns)
return rowTable.output_result() return rowTable.output_result()
...@@ -108,7 +108,6 @@ class AddSchema(colander.Schema): ...@@ -108,7 +108,6 @@ class AddSchema(colander.Schema):
) )
nama = colander.SchemaNode( nama = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop,
title="Uraian") title="Uraian")
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Integer(), colander.Integer(),
...@@ -118,7 +117,8 @@ class AddSchema(colander.Schema): ...@@ -118,7 +117,8 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema): class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(), id = colander.SchemaNode(colander.Integer(),
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget(readonly=True)) widget=widget.HiddenWidget(readonly=True),
title="")
def get_form(request, class_form): def get_form(request, class_form):
...@@ -166,13 +166,14 @@ def view_add(request): ...@@ -166,13 +166,14 @@ def view_add(request):
try: try:
c = form.validate(controls) c = form.validate(controls)
except ValidationFailure, e: except ValidationFailure, e:
request.session[SESS_ADD_FAILED] = e.render() return dict(form=form)
return HTTPFound(location=request.route_url('op-add')) #request.session[SESS_ADD_FAILED] = e.render()
#return HTTPFound(location=request.route_url('op-add'))
save_request(dict(controls), request) save_request(dict(controls), request)
return route_list(request) return route_list(request)
elif SESS_ADD_FAILED in request.session: elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED) return session_failed(request, SESS_ADD_FAILED)
return dict(form=form.render()) return dict(form=form)
######## ########
# Edit # # Edit #
...@@ -198,15 +199,14 @@ def view_edit(request): ...@@ -198,15 +199,14 @@ def view_edit(request):
try: try:
c = form.validate(controls) c = form.validate(controls)
except ValidationFailure, e: except ValidationFailure, e:
request.session[SESS_EDIT_FAILED] = e.render() return dict(form=form)
return HTTPFound(location=request.route_url('op-edit', save_request(dict(controls), request, row)
id=row.id))
save_request(dict(controls), request, row)
return route_list(request) return route_list(request)
elif SESS_EDIT_FAILED in request.session: elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED) return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict() values = row.to_dict()
return dict(form=form.render(appstruct=values)) form.set_appstruct(values)
return dict(form=form)
########## ##########
# Delete # # Delete #
...@@ -241,17 +241,29 @@ def view_act(request): ...@@ -241,17 +241,29 @@ def view_act(request):
if url_dict['act']=='grid': if url_dict['act']=='grid':
columns = [] columns = []
columns.append(ColumnDT('id')) columns.append(ColumnDT('id'))
columns.append(ColumnDT('subjekpajak.kode')) columns.append(ColumnDT('subjekpajaks.kode'))
columns.append(ColumnDT('kode')) columns.append(ColumnDT('kode'))
columns.append(ColumnDT('nama')) columns.append(ColumnDT('nama'))
columns.append(ColumnDT('pajak.kode')) columns.append(ColumnDT('pajaks.kode'))
columns.append(ColumnDT('wilayah.nama')) columns.append(ColumnDT('wilayahs.nama'))
columns.append(ColumnDT('status')) columns.append(ColumnDT('status'))
query = DBSession.query(ObjekPajak).join(SubjekPajak).join(Pajak).join(Wilayah) 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) rowTable = DataTables(req, ObjekPajak, query, columns)
return rowTable.output_result() 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): ...@@ -47,9 +47,9 @@ def form_validator(form, value):
'Kode pegawai %s sudah digunakan oleh ID %d' % ( 'Kode pegawai %s sudah digunakan oleh ID %d' % (
value['kode'], found.id)) value['kode'], found.id))
def err_kode(): def err_user(email):
raise colander.Invalid(form, 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: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
...@@ -62,8 +62,8 @@ def form_validator(form, value): ...@@ -62,8 +62,8 @@ def form_validator(form, value):
if r: if r:
if found and found.id != r.id: if found and found.id != r.id:
err_kode() err_kode()
if r and r.user_id: if r and r.user_id and value['login']:
err_user() err_user(r.users.email)
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
kode = colander.SchemaNode( kode = colander.SchemaNode(
colander.String(), colander.String(),
......
...@@ -227,3 +227,15 @@ def view_act(request): ...@@ -227,3 +227,15 @@ def view_act(request):
query = DBSession.query(Unit) query = DBSession.query(Unit)
rowTable = DataTables(req, Unit, query, columns) rowTable = DataTables(req, Unit, query, columns)
return rowTable.output_result() 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 @@ ...@@ -12,6 +12,8 @@
<!-- Bootstrap core CSS --> <!-- Bootstrap core CSS -->
<link href="/deform_static/css/bootstrap.min.css" rel="stylesheet"> <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"--> <!--link href="/deform_static/css/form.css" rel="stylesheet"-->
<!-- Custom styles for this template --> <!-- Custom styles for this template -->
...@@ -45,9 +47,9 @@ ...@@ -45,9 +47,9 @@
<li tal:attributes="class request.path == '/' and 'active'"><a href="/">Home</a></li> <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 == '/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 == '/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 == '/arinvoice' and 'active'"><a href="/arinvoice">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 == '/arsspd' and 'active'"><a href="/arsspd">Penerimaan</a></li>
<li tal:attributes="class request.path == '/sts' and 'active'"><a href="/sts">STS</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> <!--li tal:attributes="class request.path == '/pbbkb' and 'active'"><a href="/pbbkb">PBB-KB</a></li>
...@@ -57,7 +59,7 @@ ...@@ -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="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> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="/user">User</a></li> <li><a href="/user">User</a></li>
...@@ -69,10 +71,10 @@ ...@@ -69,10 +71,10 @@
<li><a href="/jabatan">Jabatan</a></li> <li><a href="/jabatan">Jabatan</a></li>
<li><a href="/pegawai">Pegawai</a></li> <li><a href="/pegawai">Pegawai</a></li>
<li><a href="/coa">Rekening</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="/wilayah">Wilayah</a></li>
<li><a href="/wp">Wajib Pajak/Pungut</a></li> <li><a href="/wp">Subyek Bayar</a></li>
<li><a href="/op">Objek Pajak</a></li> <li><a href="/op">Obyek Bayar</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
...@@ -106,12 +108,14 @@ ...@@ -106,12 +108,14 @@
<script type="text/javascript" src="/deform_static/scripts/bootstrap.min.js"></script> <script type="text/javascript" src="/deform_static/scripts/bootstrap.min.js"></script>
<script type="text/javascript" src="/deform_static/scripts/deform.js"></script> <script type="text/javascript" src="/deform_static/scripts/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/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.js"></script>
<script type="text/javascript" src="/static/js/pickadate/picker.date.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.custom.input-types-and-atts.js"></script>
<script type="text/javascript" src="/static/js/modernizr.js"></script> <script type="text/javascript" src="/static/js/modernizr.js"></script>
<div metal:define-slot="content"></div> <div metal:define-slot="content"></div>
</div> <!-- /container --> </div> <!-- /container -->
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
"bInfo": false, "bInfo": false,
"bFilter": true, "bFilter": true,
"bAutoWidth": false, "bAutoWidth": false,
"bSearch": true,
"bPaginate": true, "bPaginate": true,
"sPaginationType": "full_numbers", "sPaginationType": "full_numbers",
"lengthMenu": [ "lengthMenu": [
......
...@@ -44,9 +44,9 @@ ...@@ -44,9 +44,9 @@
"bProcessing": true, "bProcessing": true,
"sDom": '<"toolbar">lfrtip', "sDom": '<"toolbar">lfrtip',
"bScrollCollapse": true, "bScrollCollapse": true,
"bSort": false, "bSort": true,
"bInfo": false, "bInfo": false,
"bFilter": false, "bFilter": true,
"bAutoWidth": false, "bAutoWidth": false,
"bPaginate": true, "bPaginate": true,
"sPaginationType": "full_numbers", "sPaginationType": "full_numbers",
......
<html metal:use-macro="load: ../base.pt"> <html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550"> <div metal:fill-slot="content" class="form-550">
<h3>Tambah Objek</h3> <h3>Tambah Obyek Bayar</h3>
<hr> <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> </div>
</html> </html>
<html metal:use-macro="load: ../base.pt"> <html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550"> <div metal:fill-slot="content" class="form-550">
<h3>Edit Objek</h3> <h3>Edit Obyek Bayar</h3>
<hr> <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> </div>
</html> </html>
<html metal:use-macro="load: ../base.pt"> <html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550"> <div metal:fill-slot="content" class="form-550">
<h3>Edit Pegawai</h3> <h3>Edit Wlayah</h3>
<hr> <hr>
<div tal:content="structure form"/> <div tal:content="structure form"/>
</div> </div>
......
...@@ -2,6 +2,36 @@ ...@@ -2,6 +2,36 @@
<div metal:fill-slot="content" class="form-550"> <div metal:fill-slot="content" class="form-550">
<h3>Tambah Subjek</h3> <h3>Tambah Subjek</h3>
<hr> <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> </div>
</html> </html>
<html metal:use-macro="load: ../base.pt"> <html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550"> <div metal:fill-slot="content" class="form-550">
<h3>Edit Subjek</h3> <h3>Edit Subjek</h3>
<hr> <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> </div>
</html> </html>
...@@ -18,6 +18,7 @@ from ..models import ( ...@@ -18,6 +18,7 @@ from ..models import (
Group, Group,
UserGroup, UserGroup,
) )
from daftar import deferred_user, daftar_user, deferred_group, daftar_group
from datatables import ( from datatables import (
ColumnDT, DataTables) ColumnDT, DataTables)
...@@ -53,16 +54,17 @@ def form_validator(form, value): ...@@ -53,16 +54,17 @@ def form_validator(form, value):
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
user_id = colander.SchemaNode( user_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(User.id,User.email).all()), widget=deferred_user,
title="User") title="User")
group_id = colander.SchemaNode( group_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=DBSession.query(Group.id,Group.group_name).all()), widget=deferred_group,
title="Group") title="Group")
def get_form(request, class_form): def get_form(request, class_form):
schema = class_form(validator=form_validator) 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 schema.request = request
return Form(schema, buttons=('save','cancel')) return Form(schema, buttons=('save','cancel'))
......
...@@ -99,11 +99,13 @@ class AddSchema(colander.Schema): ...@@ -99,11 +99,13 @@ class AddSchema(colander.Schema):
colander.String() colander.String()
) )
alamat_1 = colander.SchemaNode( alamat_1 = colander.SchemaNode(
colander.String() colander.String(),
title ="Alamat"
) )
alamat_2 = colander.SchemaNode( alamat_2 = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop missing=colander.drop,
title =""
) )
kelurahan= colander.SchemaNode( kelurahan= colander.SchemaNode(
colander.String(), colander.String(),
...@@ -126,11 +128,6 @@ class AddSchema(colander.Schema): ...@@ -126,11 +128,6 @@ class AddSchema(colander.Schema):
colander.Integer(), colander.Integer(),
widget=deferred_status, widget=deferred_status,
title="Status") title="Status")
user_id = colander.SchemaNode(
colander.Integer(),
widget=deferred_user,
default=0,
title="User")
login = colander.SchemaNode( login = colander.SchemaNode(
colander.Boolean(), colander.Boolean(),
missing = colander.drop, missing = colander.drop,
...@@ -140,7 +137,8 @@ class AddSchema(colander.Schema): ...@@ -140,7 +137,8 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema): class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(), id = colander.SchemaNode(colander.Integer(),
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget(readonly=True)) widget=widget.HiddenWidget(readonly=True),
title="")
def get_form(request, class_form): def get_form(request, class_form):
...@@ -207,13 +205,14 @@ def view_add(request): ...@@ -207,13 +205,14 @@ def view_add(request):
try: try:
c = form.validate(controls) c = form.validate(controls)
except ValidationFailure, e: except ValidationFailure, e:
request.session[SESS_ADD_FAILED] = e.render() return dict(form=form)
return HTTPFound(location=request.route_url('wp-add')) #request.session[SESS_ADD_FAILED] = e.render()
#return HTTPFound(location=request.route_url('wp-add'))
save_request(dict(controls), request) save_request(dict(controls), request)
return route_list(request) return route_list(request)
elif SESS_ADD_FAILED in request.session: elif SESS_ADD_FAILED in request.session:
return session_failed(request, SESS_ADD_FAILED) return session_failed(request, SESS_ADD_FAILED)
return dict(form=form.render()) return dict(form=form)
######## ########
# Edit # # Edit #
...@@ -239,15 +238,17 @@ def view_edit(request): ...@@ -239,15 +238,17 @@ def view_edit(request):
try: try:
c = form.validate(controls) c = form.validate(controls)
except ValidationFailure, e: except ValidationFailure, e:
request.session[SESS_EDIT_FAILED] = e.render() return dict(form=form)
return HTTPFound(location=request.route_url('wp-edit', #request.session[SESS_EDIT_FAILED] = e.render()
id=row.id)) #return HTTPFound(location=request.route_url('wp-edit',
# id=row.id))
save_request(dict(controls), request, row) save_request(dict(controls), request, row)
return route_list(request) return route_list(request)
elif SESS_EDIT_FAILED in request.session: elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED) return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict() values = row.to_dict()
return dict(form=form.render(appstruct=values)) form.set_appstruct(values)
return dict(form=form)
########## ##########
# Delete # # Delete #
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!