Commit fdf95065 by aagusti

wp

1 parent ce0b07d1
......@@ -90,7 +90,7 @@ class DefaultModel(CommonModel):
cls.query_id(id).delete()
class KodeModel(DefaultModel):
kode = Column(String(64), unique=True)
kode = Column(String(64))
@classmethod
def query_kode(cls, kode):
return cls.query().filter_by(kode=kode)
......
......@@ -12,15 +12,16 @@ from sqlalchemy import (
ForeignKey,
UniqueConstraint
)
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, backref
from ..models import(
DBSession,
DefaultModel,
KodeModel,
NamaModel,
Base,
User
)
#####################
###########################
#
###########################
class Pkb(DefaultModel,Base):
......@@ -65,6 +66,7 @@ class UnitRekening(Base):
class Jabatan(NamaModel, Base):
__tablename__ = 'jabatans'
status = Column(Integer, default=1)
UniqueConstraint('kode')
#nama = Column(String(128))
class Pegawai(NamaModel, Base):
......@@ -73,7 +75,8 @@ class Pegawai(NamaModel, Base):
status = Column(Integer, default=1)
jabatan_id = Column(Integer,ForeignKey("jabatans.id"))
unit_id = Column(Integer,ForeignKey("units.id"))
user_id = Column(Integer,ForeignKey("users.id"), nullable=True)
UniqueConstraint('kode')
class PegawaiLogin(Base):
__tablename__ = 'pegawai_users'
user_id = Column(Integer,ForeignKey("users.id"), primary_key=True)
......@@ -98,15 +101,27 @@ class Wilayah(NamaModel,Base):
parent = relationship("Wilayah",
backref="child",
remote_side=[id])
class SubjekPajak(NamaModel, Base):
__tablename__ = 'subjekpajaks'
#nama = Column(String(128))
status = Column(Integer, default=1)
alamat_1 = Column(String(128))
alamat_2 = Column(String(128))
kelurahan = Column(String(128))
kecamatan = Column(String(128))
kota = Column(String(128))
user_id = Column(Integer, ForeignKey('users.id'), nullable=True)
user = relationship(User,backref=backref('subjekpajak'))
UniqueConstraint('kode')
@classmethod
def get_by_user(cls, user_id):
return DBSession.query(cls).filter(cls.user_id==user_id).first()
class ObjekPajak(NamaModel, Base):
__tablename__ = 'objekpajaks'
__table_args__ = (UniqueConstraint('subjekpajak_id', 'kode',
name='objekpajak_kode_uq'),
)
status = Column(Integer, default=1)
alamat_1 = Column(String(128))
alamat_2 = Column(String(128))
......@@ -114,10 +129,15 @@ class ObjekPajak(NamaModel, Base):
unit_id = Column(Integer,ForeignKey("units.id"))
pajak_id = Column(Integer, ForeignKey("pajaks.id"))
subjekpajak_id = Column(Integer, ForeignKey("subjekpajaks.id"))
subjekpajak = relationship(SubjekPajak, backref=backref('objekpajak'))
pajak = relationship(Pajak, backref=backref('objekpajak'))
wilayah = relationship(Wilayah, backref=backref('objekpajak'))
class Sptpd(Base):
__tablename__ = 'sptpds'
id = Column(Integer, primary_key=True)
kode = Column(String, unique=True)
unit_id = Column(Integer)
subjek_pajak_id = Column(Integer, ForeignKey("subjekpajaks.id"))
objek_pajak_id = Column(Integer, ForeignKey("objekpajaks.id"))
......@@ -155,7 +175,7 @@ class Sts(Base):
class StsItem(Base):
__tablename__ = 'sts_item'
sts_id = Column(Integer, primary_key=True)
sptpd_id = Column(Integer, primary_key=True)
sspd_id = Column(Integer, primary_key=True)
class SSPD(Base):
__tablename__ = 'sspd'
......
PajakData = {
'options': ['insert if not exists'],
'csv': 'pajak.csv',
}
id,kode,uraian,level_id,is_summary
id,kode,nama,level_id,is_summary
1,4.,PENDAPATAN DAERAH,1,1
2,4.1.,PENDAPATAN ASLI DAERAH,2,1
3,4.1.1.,Pajak Daerah,3,1
......
id,kode,uraian,level_id,is_summary
id,kode,nama,level_id,is_summary
1,1.,URUSAN WAJIB,1,1
2,1.01.,Pendidikan,2,1
3,1.01.01.,DINAS PENDIDIKAN,3,1
......
......@@ -10,6 +10,8 @@ from data.routes import RouteData
from data.apps import AppsData
from data.unit import UnitData
from data.rekening import RekeningData
from data.pajak import PajakData
from DbTools import (
get_pkeys,
execute,
......@@ -30,6 +32,7 @@ fixtures = [
('routes', RouteData),
('units', UnitData),
('rekenings', RekeningData),
('pajaks', PajakData),
]
def insert():
......
from email.utils import parseaddr
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..models import DBSession,User
from ..models.isipkd import(
Wilayah, Jabatan, Unit, Rekening, SubjekPajak, Pajak
)
def email_validator(node, value):
name, email = parseaddr(value)
if not email or email.find('@') < 0:
raise colander.Invalid(node, 'Invalid email format')
STATUS = (
(1, 'Aktif'),
(0, 'Inaktif'),
)
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
SUMMARIES = (
(1, 'Header'),
(0, 'Detail'),
)
@colander.deferred
def deferred_summary(node, kw):
values = kw.get('daftar_summary', [])
return widget.SelectWidget(values=values)
def daftar_wilayah():
rows = DBSession.query(Wilayah.id, Wilayah.nama).all()
r=[]
d = (0,'Pilih Wilayah')
r.append(d)
for row in rows:
d = (row.id, row.nama)
r.append(d)
return r
@colander.deferred
def deferred_wilayah(node, kw):
values = kw.get('daftar_wilayah',[])
return widget.SelectWidget(values=values)
def daftar_jabatan():
rows = DBSession.query(Jabatan.id, Jabatan.nama).all()
r=[]
d = (0,'Pilih Jabatan')
r.append(d)
for row in rows:
d = (row.id, row.nama)
r.append(d)
return r
@colander.deferred
def deferred_jabatan(node, kw):
values = kw.get('daftar_jabatan',[])
return widget.SelectWidget(values=values)
def daftar_unit():
rows = DBSession.query(Unit).filter_by(level_id=3).all()
r=[]
d = (0,'Pilih SKPD')
r.append(d)
for row in rows:
d = (row.id, row.kode+':'+row.nama)
r.append(d)
return r
@colander.deferred
def deferred_unit(node, kw):
values = kw.get('daftar_unit',[])
return widget.SelectWidget(values=values)
def daftar_rekening():
rows = DBSession.query(Rekening).filter_by(is_summary=0).all()
r=[]
d = (0,'Pilih REKENING')
r.append(d)
for row in rows:
d = (row.id, row.kode+':'+row.nama)
r.append(d)
return r
@colander.deferred
def deferred_rekening(node, kw):
values = kw.get('daftar_rekening',[])
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.email+':'+row.user_name)
r.append(d)
return r
@colander.deferred
def deferred_user(node, kw):
values = kw.get('daftar_user',[])
return widget.SelectWidget(values=values)
def daftar_pajak():
rows = DBSession.query(Pajak).all()
r=[]
d = (0,'Pilih PAJAK')
r.append(d)
for row in rows:
d = (row.id, row.kode+':'+row.nama)
r.append(d)
return r
@colander.deferred
def deferred_pajak(node, kw):
values = kw.get('daftar_pajak',[])
return widget.SelectWidget(values=values)
def daftar_subjekpajak():
rows = DBSession.query(SubjekPajak).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_subjekpajak(node, kw):
values = kw.get('daftar_subjekpajak',[])
return widget.SelectWidget(values=values)
\ No newline at end of file
......@@ -16,6 +16,8 @@ from ..models import DBSession
from ..models.isipkd import(
Jabatan,
)
from daftar import STATUS, deferred_status
from datatables import (
ColumnDT, DataTables)
......@@ -23,8 +25,6 @@ from datatables import (
SESS_ADD_FAILED = 'Gagal tambah jabatan'
SESS_EDIT_FAILED = 'Gagal edit jabatan'
from ..tools import STATUS
########
# List #
########
......@@ -37,11 +37,6 @@ def view_list(request):
#######
# Add #
#######
def email_validator(node, value):
name, email = parseaddr(value)
if not email or email.find('@') < 0:
raise colander.Invalid(node, 'Invalid email format')
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
......@@ -74,11 +69,6 @@ def form_validator(form, value):
elif found:
err_name()
@colander.deferred
def deferred_summary(node, kw):
values = kw.get('daftar_summary', [])
return widget.SelectWidget(values=values)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
......@@ -90,7 +80,7 @@ class AddSchema(colander.Schema):
status = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=STATUS),
widget=deferred_status,
title="Status")
......
......@@ -24,10 +24,17 @@ from ..models.isipkd import(
from datatables import (
ColumnDT, DataTables)
from daftar import (STATUS, deferred_status,
daftar_subjekpajak, deferred_subjekpajak,
daftar_wilayah, deferred_wilayah,
daftar_unit, deferred_unit,
daftar_pajak, deferred_pajak,
)
SESS_ADD_FAILED = 'Gagal tambah Objek Pajak'
SESS_EDIT_FAILED = 'Gagal edit Objek Pajak'
from ..tools import STATUS
from daftar import STATUS
########
# List #
########
......@@ -57,13 +64,15 @@ def form_validator(form, value):
r = q.first()
else:
r = None
q = DBSession.query(ObjekPajak).filter_by(kode=value['kode'])
q = DBSession.query(ObjekPajak).\
filter(ObjekPajak.kode==value['kode'],
ObjekPajak.subjekpajak_id==value['subjekpajak_id'])
found = q.first()
if r:
if found and found.id != r.id:
err_kode()
elif found:
err_email()
err_kode()
if 'nama' in value: # optional
found = ObjekPajak.get_by_nama(value['nama'])
if r:
......@@ -72,36 +81,26 @@ def form_validator(form, value):
elif found:
err_name()
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
class AddSchema(colander.Schema):
unit_select = DBSession.query(Unit.id, Unit.nama).filter(Unit.level_id>2).all()
wilayah_select = DBSession.query(Wilayah.id, Wilayah.nama).filter(Wilayah.level_id>1).all()
pajak_select = DBSession.query(Pajak.id, Pajak.nama).all()
sp_select = DBSession.query(SubjekPajak.id, SubjekPajak.nama).all()
subjekpajak_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=sp_select),
widget=deferred_subjekpajak,
title="Subjek Pajak"
)
wilayah_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=wilayah_select),
widget=deferred_wilayah,
title="Wilayah"
)
unit_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=unit_select),
widget=deferred_unit,
title="SKPD/Unit Kerja"
)
pajak_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=pajak_select),
widget=deferred_pajak,
title="Pajak"
)
kode = colander.SchemaNode(
......@@ -113,7 +112,7 @@ class AddSchema(colander.Schema):
title="Uraian")
status = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=STATUS),
widget=deferred_status,
title="Status")
class EditSchema(AddSchema):
......@@ -124,7 +123,11 @@ class EditSchema(AddSchema):
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_status=STATUS,
daftar_subjekpajak=daftar_subjekpajak(),
daftar_pajak=daftar_pajak(),
daftar_unit=daftar_unit(),
daftar_wilayah=daftar_wilayah())
schema.request = request
return Form(schema, buttons=('simpan','batal'))
......@@ -238,16 +241,17 @@ def view_act(request):
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT('id'))
columns.append(ColumnDT('registrasi'))
columns.append(ColumnDT('subjekpajak.kode'))
columns.append(ColumnDT('kode'))
columns.append(ColumnDT('nama'))
columns.append(ColumnDT('pajak'))
columns.append(ColumnDT('wilayah'))
columns.append(ColumnDT('pajak.kode'))
columns.append(ColumnDT('wilayah.nama'))
columns.append(ColumnDT('status'))
query = DBSession.query(ObjekPajak.id, ObjekPajak.kode,ObjekPajak.nama,
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()
......@@ -18,7 +18,7 @@ from ..models.isipkd import(
Rekening
)
from ..tools import STATUS
from daftar import STATUS, deferred_status, daftar_rekening, deferred_rekening
from datatables import (
ColumnDT, DataTables)
......@@ -61,11 +61,6 @@ def form_validator(form, value):
if found and found.id != r.id:
err_kode()
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
class AddSchema(colander.Schema):
rekening_select = DBSession.query(Rekening.id,Rekening.nama).\
filter(Rekening.level_id==5).all()
......@@ -77,7 +72,7 @@ class AddSchema(colander.Schema):
rekening_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=rekening_select),
widget=deferred_rekening,
title="Rekening")
tahun = colander.SchemaNode(
......@@ -89,7 +84,7 @@ class AddSchema(colander.Schema):
title='Tarif (%)')
status = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=STATUS),
widget=deferred_status,
title="Status")
......@@ -101,7 +96,8 @@ class EditSchema(AddSchema):
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_status=STATUS,
daftar_rekening=daftar_rekening())
schema.request = request
return Form(schema, buttons=('simpan','batal'))
......
......@@ -12,14 +12,16 @@ from deform import (
widget,
ValidationFailure,
)
from ..models import DBSession
from ..models import DBSession, User
from ..models.isipkd import(
Pegawai,
Jabatan,
Unit
)
from ..tools import STATUS
from daftar import (STATUS, deferred_status,
daftar_jabatan, deferred_jabatan,
daftar_unit, deferred_unit)
from datatables import (
ColumnDT, DataTables)
......@@ -39,17 +41,16 @@ def view_list(request):
#######
# Add #
#######
def email_validator(node, value):
name, email = parseaddr(value)
if not email or email.find('@') < 0:
raise colander.Invalid(node, 'Invalid email format')
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
'Kode pegawai %s sudah digunakan oleh ID %d' % (
value['kode'], found.id))
def err_kode():
raise colander.Invalid(form,
'User dengan Pegawai %s sudah ada' % (value['nama']))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Pegawai).filter_by(id=uid)
......@@ -61,17 +62,9 @@ def form_validator(form, value):
if r:
if found and found.id != r.id:
err_kode()
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
if r and r.user_id:
err_user()
class AddSchema(colander.Schema):
unit_select = DBSession.query(Unit.id,Unit.nama).\
filter(Unit.level_id==3).all()
jabatan_select = DBSession.query(Jabatan.id,Jabatan.nama).all()
kode = colander.SchemaNode(
colander.String(),
title="NIP")
......@@ -80,18 +73,23 @@ class AddSchema(colander.Schema):
unit_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=unit_select),
widget=deferred_unit,
title="SKPD")
jabatan_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=jabatan_select),
widget=deferred_jabatan,
title="Jabatan")
status = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=STATUS),
widget=deferred_status,
title="Status")
login = colander.SchemaNode(
colander.Boolean(),
missing = colander.drop,
title="Buat Login")
class EditSchema(AddSchema):
......@@ -102,26 +100,35 @@ class EditSchema(AddSchema):
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_status=STATUS, daftar_jabatan=daftar_jabatan(),
daftar_unit=daftar_unit())
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, row=None):
login = None
if 'login' in values and values['login']:
login = User()
login.user_password = values['kode']
login.status=values['status']
login.user_name=values['nama']
login.email=values['kode']+'@local'
DBSession.add(login)
DBSession.flush()
if not row:
row = Pegawai()
row.user_id = 'login' in values and values['login'] and not row.user_id and login.id or None
row.from_dict(values)
#if values['password']:
# row.password = values['password']
DBSession.add(row)
DBSession.flush()
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
print "****",values, "****", request
row = save(values, row)
request.session.flash('pegawai %s sudah disimpan.' % row.kode)
request.session.flash('Pegawai <strong>%s</strong> sudah disimpan.' % row.nama)
def route_list(request):
return HTTPFound(location=request.route_url('pegawai'))
......
......@@ -27,7 +27,12 @@ from datatables import (
SESS_ADD_FAILED = 'Gagal tambah Objek Pajak'
SESS_EDIT_FAILED = 'Gagal edit Objek Pajak'
from ..tools import STATUS
from daftar import (STATUS, deferred_status,
daftar_subjekpajak, deferred_subjekpajak,
daftar_wilayah, deferred_wilayah,
daftar_unit, deferred_unit,
daftar_pajak, deferred_pajak,
)
########
# List #
########
......@@ -71,37 +76,27 @@ def form_validator(form, value):
err_name()
elif found:
err_name()
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
class AddSchema(colander.Schema):
unit_select = DBSession.query(Unit.id, Unit.nama).filter(Unit.level_id>2).all()
wilayah_select = DBSession.query(Wilayah.id, Wilayah.nama).filter(Wilayah.level_id>1).all()
pajak_select = DBSession.query(Pajak.id, Pajak.nama).all()
sp_select = DBSession.query(SubjekPajak.id, SubjekPajak.nama).all()
subjekpajak_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=sp_select),
widget=deferred_subjekpajak,
title="Subjek Pajak"
)
wilayah_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=wilayah_select),
widget=deferred_wilayah,
title="Wilayah"
)
unit_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=unit_select),
title="SKPD/Unit Kerja"
widget=deferred_unit,
title="SKPD"
)
pajak_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=pajak_select),
widget=deferred_pajak,
title="Pajak"
)
kode = colander.SchemaNode(
......@@ -113,7 +108,7 @@ class AddSchema(colander.Schema):
title="Uraian")
status = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=STATUS),
widget=deferred_status,
title="Status")
class EditSchema(AddSchema):
......@@ -124,7 +119,9 @@ class EditSchema(AddSchema):
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_status=STATUS,
daftar_subjekpajak=daftar_subjekpajak(),
)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
......
......@@ -42,8 +42,10 @@
<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 == '/sptpd' and 'active'"><a href="/sptpd">Register Bayar</a></li>
<li tal:attributes="class request.path == '/sptpd' and 'active'"><a href="/sptpd">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 == '/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>
......
......@@ -19,7 +19,7 @@
<tr>
<th>ID</th>
<th>Registrasi</th>
<th>No. OP</th>
<th>No.</th>
<th>Uraian</th>
<th>Rekening</th>
<th>Wilayah</th>
......@@ -64,9 +64,9 @@
"aoColumns": [
null,
{"sWidth": "100px", "sClass": "left"},
{"sWidth": "50px", "sClass": "left"},
{"sWidth": "30px", "sClass": "center"},
null,
{"sWidth": "100px", "sClass": "center"},
{"sWidth": "75px", "sClass": "center"},
null,
{"sWidth": "40px", "sClass": "center"}
],
......
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h3>Tambah Objek</h3>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">Warning</h3>
</div>
<div class="panel-body">
Hapus Objek ID #${row.id} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content" class="form-550">
<h3>Edit Objek</h3>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<link href="/static/datatables/extensions/TableTools/css/dataTables.tableTools.min.css" rel="stylesheet">
<link href="/static/datatables/media/css/dataTables.bootstrap.css" rel="stylesheet">
<h4>Daftar No. Bayar</h4>
<hr>
<div class="container">
<!--form class="form-inline" role="form" id="frm_upload" name="frm_upload">
<label for="upload" class="control-label">Upload:</label>
<input type="text" class="form-control" id="upload">
<button type="submit" class="btn btn-default">Upload</button>
</form-->
</div>
<p>
<table id="table1" name="table1" class="table table-bordered table-hover table-condensed" >
<thead>
<tr>
<th>ID</th>
<th>Registrasi</th>
<th>No.</th>
<th>Uraian</th>
<th>Rekening</th>
<th>Wilayah</th>
<th>Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script src="/static/datatables/media/js/jquery.dataTables.min.js"></script>
<!--script src="/static/datatables/media/js/jquery.jeditable.js')}"></script-->
<script src="/static/datatables/media/js/jquery.dataTables.ext.js"></script>
<script src="/static/datatables/extensions/TableTools/media/js/ZeroClipboard.js"></script>
<script src="/static/datatables/media/js/dataTables.bootstrap.js"></script>
<script>
var mID;
var oTable;
var iPos;
var oFormUrl = "/op/";
var oTableUrl = oFormUrl+"grid/act";
$(document).ready(function () {
oTable = $('#table1').dataTable({
"sAjaxSource": oTableUrl,
"bServerSide": true,
"bProcessing": true,
"sDom": '<"toolbar">lfrtip',
"bScrollCollapse": true,
"bSort": true,
"bInfo": false,
"bFilter": true,
"bAutoWidth": false,
"bPaginate": true,
"sPaginationType": "full_numbers",
"lengthMenu": [
[10, 25, 50, -1],
[10, 25, 50, "All"]
],
"aoColumnDefs": [
{"bSearchable": false, "bVisible": false, "aTargets": [0]}
],
"aoColumns": [
null,
{"sWidth": "100px", "sClass": "left"},
{"sWidth": "30px", "sClass": "center"},
null,
{"sWidth": "75px", "sClass": "center"},
null,
{"sWidth": "40px", "sClass": "center"}
],
});
var tb_array = [
'<div class="btn-group pull-left">',
' <button id="btn_tambah" class="btn btn btn-primary pull-left" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary pull-left" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger pull-left" type="button">Hapus</button>',
' <button id="btn_print" class="btn btn btn-primary pull-left" type="button">Print</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
mID = '';
$(this).removeClass('selected');
} else {
iPos = oTable.fnGetPosition(this);
var aData = oTable.fnGetData(iPos);
mID = aData[0];
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
}
});
$('#btn_tambah').click(function () {
window.location = oFormUrl+'add';
});
$('#btn_edit').click(function () {
if (mID) {
window.location = oFormUrl+mID+'/edit';
} else {
alert('Silahkan pilih data yang akan diedit');
}
});
$('#btn_delete').click(function () {
if (mID) {
var hapus = confirm('Hapus data ini?');
if (hapus == true) {
window.location = oFormUrl+mID+'/delete';
};
} else {
alert('Silahkan pilih data yang akan dihapus');
}
});
});
</script>
</div>
</html>
......@@ -16,7 +16,8 @@ from ..models import DBSession
from ..models.isipkd import(
Wilayah,
)
from daftar import (
deferred_wilayah, daftar_wilayah)
from datatables import (
ColumnDT, DataTables)
......@@ -67,28 +68,6 @@ def form_validator(form, value):
elif found:
err_name()
@colander.deferred
def deferred_summary(node, kw):
values = kw.get('daftar_summary', [])
return widget.SelectWidget(values=values)
SUMMARIES = (
(1, 'Header'),
(0, 'Detail'),
)
def wilayah_select():
return DBSession.query(Wilayah.id, Wilayah.nama).all()
@colander.deferred
def deferred_wilayah_select(node, kw):
choices = kw.get('wilayah_select()')
return widget.SelectWidget(values=choices)
@colander.deferred
def deferred_wilayah_select_default(node, kw):
print kw
return kw[1]
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
......@@ -100,13 +79,10 @@ class AddSchema(colander.Schema):
title="Level")
parent_id = colander.SchemaNode(
colander.Integer(),
#default=deferred_wilayah_select_default,
#widget=deferred_wilayah_select,
widget=widget.SelectWidget(values=wilayah_select()),
widget=deferred_wilayah,
title="Parent",
missing=colander.drop)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(),
missing=colander.drop,
......@@ -115,7 +91,7 @@ class EditSchema(AddSchema):
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(choices=wilayah_select())
schema = schema.bind(daftar_wilayah=daftar_wilayah())
schema.request = request
return Form(schema, buttons=('simpan','batal'))
......@@ -123,8 +99,8 @@ def save(values, row=None):
if not row:
row = Wilayah()
row.from_dict(values)
#if values['password']:
# row.password = values['password']
if not row.parent_id or row.parent_id==0 or row.parent_id=='0':
row.parent_id=None
DBSession.add(row)
DBSession.flush()
return row
......@@ -132,7 +108,6 @@ def save(values, row=None):
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
print "****",values, "****", request
row = save(values, row)
request.session.flash('wilayah %s sudah disimpan.' % row.kode)
......
......@@ -12,7 +12,7 @@ from deform import (
widget,
ValidationFailure,
)
from ..models import DBSession
from ..models import DBSession, User, UserGroup, Group
from ..models.isipkd import(
SubjekPajak,
)
......@@ -20,7 +20,8 @@ from ..models.isipkd import(
from datatables import (
ColumnDT, DataTables)
from ..tools import STATUS
from daftar import (STATUS, deferred_status,
daftar_user, deferred_user)
SESS_ADD_FAILED = 'Gagal tambah wp'
......@@ -38,11 +39,6 @@ def view_list(request):
#######
# Add #
#######
def email_validator(node, value):
name, email = parseaddr(value)
if not email or email.find('@') < 0:
raise colander.Invalid(node, 'Invalid email format')
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
......@@ -51,8 +47,13 @@ def form_validator(form, value):
def err_name():
raise colander.Invalid(form,
'Uraian %s sudah digunakan oleh ID %d' % (
value['uraian'], found.id))
'Nama %s sudah digunakan oleh ID %d' % (
value['nama'], found.id))
def err_user():
raise colander.Invalid(form,
'User ID %s sudah digunakan oleh ID %d' % (
value['user_id'], found.id))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
......@@ -66,36 +67,76 @@ def form_validator(form, value):
if found and found.id != r.id:
err_kode()
elif found:
err_email()
if 'uraian' in value: # optional
found = SubjekPajak.get_by_uraian(value['uraian'])
err_kode()
if 'nama' in value: # optional
found = SubjekPajak.get_by_nama(value['nama'])
if r:
if found and found.id != r.id:
err_name()
elif found:
err_name()
if 'user_id' in value and int(value['user_id'])>0:
found = SubjekPajak.get_by_user(value['user_id'])
if r:
if found and found.id != r.id:
err_user()
elif found:
err_user()
if 'login' in value and int(value['user_id'])==0:
found = User.get_by_name(value['kode'])
if r:
if found and found.id != r.id:
err_user()
elif found:
err_user()
@colander.deferred
def deferred_status(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
kode = colander.SchemaNode(
colander.String(),
)
nama = colander.SchemaNode(
colander.String())
)
nama = colander.SchemaNode(
colander.String()
)
alamat_1 = colander.SchemaNode(
colander.String())
colander.String()
)
alamat_2 = colander.SchemaNode(
colander.String(),
missing=colander.drop)
status = colander.SchemaNode(
missing=colander.drop
)
kelurahan= colander.SchemaNode(
colander.String(),
missing=colander.drop
)
kecamatan= colander.SchemaNode(
colander.String(),
missing=colander.drop
)
kota = colander.SchemaNode(
colander.String(),
missing=colander.drop
)
propinsi = colander.SchemaNode(
colander.String(),
missing=colander.drop
)
status = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=STATUS),
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,
title='Buat Login'
)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.Integer(),
missing=colander.drop,
......@@ -104,24 +145,47 @@ class EditSchema(AddSchema):
def get_form(request, class_form):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS)
schema = schema.bind(daftar_status=STATUS,
daftar_user=daftar_user(),
)
schema.request = request
return Form(schema, buttons=('simpan','batal'))
def save(values, row=None):
login = None
if 'login' in values and values['login'] and int(values['user_id'])==0:
login = User()
login.user_password = values['kode']
login.status=values['status']
login.user_name=values['kode']
login.email=values['kode']+'@ws'
DBSession.add(login)
DBSession.flush()
if not row:
row = SubjekPajak()
row.from_dict(values)
#if values['password']:
# row.password = values['password']
if login:
row.user_id=login.id
if not row.user_id:
row.user_id=None
DBSession.add(row)
DBSession.flush()
if row.user_id:
q = DBSession.query(UserGroup).join(Group).filter(UserGroup.user_id==row.user_id,
Group.group_name=='wp').first()
if not q:
usergroup = UserGroup()
usergroup.user_id = row.user_id
usergroup.group_id = DBSession.query(Group.id).filter_by(group_name='wp').scalar()
DBSession.add(usergroup)
DBSession.flush()
return row
def save_request(values, request, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
print "****",values, "****", request
row = save(values, row)
request.session.flash('wp %s sudah disimpan.' % row.kode)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!