Commit 088c91ba by aa.gusti

eis

0 parents
Showing 80 changed files with 5501 additions and 0 deletions
from sqlalchemy import engine_from_config
from .models import EisDBSession, EisBase
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
if 'eis.' in settings:
engine = engine_from_config(settings, 'eis.')
EisDBSession.configure(bind=engine)
EisBase.metadata.bind = engine
\ No newline at end of file \ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
from datetime import datetime
from sqlalchemy import (
Column,
Integer,
Text,
DateTime,
ForeignKey,
UniqueConstraint,
String,
SmallInteger
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
relationship,
backref
)
from zope.sqlalchemy import ZopeTransactionExtension
from ...models import (CommonModel, DefaultModel as BaseDefaultModel,
Base as EisBase, DBSession as EisDBSession)
TABLE_ARGS = {'extend_existing':True,
'schema':'eis'
}
class DefaultModel(BaseDefaultModel):
def save(self):
if self.id:
#Who knows another user edited, so use merge ()
EisDBSession.merge(self)
else:
EisDBSession.add(self)
@classmethod
def query(cls):
return EisDBSession.query(cls)
@classmethod
def query_id(cls, id):
return cls.query().filter_by(id=id)
@classmethod
def delete(cls, id):
cls.query_id(id).delete()
@classmethod
def count(cls):
return EisDBSession.query(func.count('id')).scalar()
class KodeModel(DefaultModel):
kode = Column(String(32))
status = Column(SmallInteger, nullable=False, default=0)
created = Column(DateTime, nullable=True, default=datetime.utcnow)
updated = Column(DateTime, nullable=True)
create_uid = Column(Integer, nullable=True, default=1)
update_uid = Column(Integer, nullable=True)
@classmethod
def query_kode(cls,kode):
return cls.query().filter_by(kode=kode)
@classmethod
def get_active(cls):
return cls.query().filter_by(status=1).all()
class NamaModel(KodeModel):
nama = Column(String(128))
@classmethod
def query_nama(cls, nama):
return cls.query().filter_by(nama=nama)
from .eis import Eis, Slide, Chart, ChartItem, LastUpdate
\ No newline at end of file \ No newline at end of file
No preview for this file type
No preview for this file type
from datetime import datetime
from sqlalchemy import (
Column,
Integer,
BigInteger,
SmallInteger,
Text,
DateTime,
String,
UniqueConstraint,
ForeignKey,
Index
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
relationship, backref
)
from ..models import (EisDBSession, DefaultModel, EisBase, NamaModel, TABLE_ARGS)
class Eis(EisBase, NamaModel):
__tablename__ = 'wells'
tahun = Column(Integer)
amt_tahun = Column(BigInteger)
amt_bulan = Column(BigInteger)
amt_minggu = Column(BigInteger)
amt_hari = Column(BigInteger)
order_id = Column(SmallInteger)
aktif = Column(SmallInteger)
__table_args__ = TABLE_ARGS
@classmethod
def sum_data(cls, kode, tahun):
q = EisDBSession.query(cls).filter_by(
kode==kode,
tahun=tahun).first()
if q:
sum_minggu = q.amt_minggu+q.amt_hari
sum_bulan = q.amt_bulan + sum_minggu
sum_tahun = q.amt_tahun + sum_bulan
return dict(sum_hari = sum_hari, sum_minggu = sum_minggu,
sum_bulan = sum_bulan, sum_tahun = sum_tahun)
return {}
@classmethod
def sum_order_id(cls, tahun):
q = EisDBSession.query(cls).filter_by(
tahun=tahun)
if q:
return q
return
class Slide(NamaModel, EisBase):
__tablename__ = 'slides'
source_type = Column(String(16)) #grid, image, chart-line, chart-pie, chart-bar
source_id = Column(String(128))
order_id = Column(Integer, default=0)
aktif = Column(SmallInteger, default=0)
__table_args__ = TABLE_ARGS
class Chart(NamaModel, EisBase):
__tablename__ = 'charts'
chart_type = Column(String(16))
label = Column(String(128)) #digunakan jika chart membutuhkan label
devider = Column(BigInteger, default=1)
status = Column(SmallInteger, default=0)
__table_args__ = (UniqueConstraint('kode'),
TABLE_ARGS)
class ChartItem(NamaModel, EisBase):
__tablename__ = 'chart_items'
value_1 = Column(BigInteger, default=0)
value_2 = Column(BigInteger, default=0)
value_3 = Column(BigInteger, default=0)
value_4 = Column(BigInteger, default=0)
value_5 = Column(BigInteger, default=0)
value_6 = Column(BigInteger, default=0)
value_7 = Column(BigInteger, default=0)
value_8 = Column(BigInteger, default=0)
value_9 = Column(BigInteger, default=0)
value10 = Column(BigInteger, default=0)
value11 = Column(BigInteger, default=0)
value12 = Column(BigInteger, default=0)
chart_id = Column(Integer, ForeignKey('eis.charts.id'))
source_type = Column(String(32), default='realisasi')
rekening_kd = Column(String(128))
color = Column(String(6))
highlight = Column(String(6))
is_sum = Column(SmallInteger, default=0)
updated = Column(DateTime)
created = Column(DateTime)
create_uid = Column(Integer)
update_uid = Column(Integer)
chart = relationship("Chart")
status = Column(SmallInteger, default=0)
__table_args__ = (UniqueConstraint('kode'),
TABLE_ARGS)
class LastUpdate(DefaultModel, EisBase):
__tablename__ = 'last_update'
wells = Column(DateTime(timezone=True), nullable=True)
No preview for this file type
File mode changed
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
"id","kode","status","created","updated","create_uid","update_uid","nama","chart_type","label","devider"
1,"4.1.1-00-B",1,"2014-12-28 12:06:39.614002","2015-05-28 19:37:47.495852",1,1,"REALISASI PAJAK DAERAH JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
2,"4.1.1-00-L",1,"2014-12-28 12:11:32.498004","2017-02-22 09:03:58.910665",1,1,"PAJAK DAERAH JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
3,"4.1.1.01-B",1,"2014-12-29 11:17:22.06886","2017-02-22 09:08:41.882188",1,1,"PAJAK HOTEL JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
4,"4.1.1.01-L",1,"2014-12-29 11:19:26.18124","2017-02-22 09:08:51.835333",1,1,"PAJAK HOTEL JAN- DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
5,"4.1.1.02-B",1,"2014-12-29 11:55:58.780526","2017-02-22 09:09:10.589506",1,1,"PAJAK RESTORAN JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
6,"4.1.1.02-L",1,"2014-12-29 11:57:04.227123","2017-02-22 15:18:24.083413",1,1,"PAJAK RESTORAN JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
7,"4.1.1.03-B",1,"2014-12-29 11:58:13.741331","2017-02-22 15:18:30.2299",1,1,"PAJAK HIBURAN JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
8,"4.1.1.03-L",1,"2014-12-29 11:59:30.94638","2017-02-22 15:18:38.756758",1,1,"PAJAK HIBURAN JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
9,"4.1.1.04-B",1,"2014-12-29 12:00:39.244166","2017-02-22 15:18:44.715674",1,1,"PAJAK REKLAME JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
10,"4.1.1.04-L",1,"2014-12-29 12:02:46.367873","2017-02-22 15:18:50.243311",1,1,"PAJAK REKLAME JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
11,"4.1.1.05-B",1,"2014-12-29 12:03:47.101836","2017-02-22 15:33:21.118884",1,1,"PAJAK PENERANGAN JALAN JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
12,"4.1.1.05-L",1,"2014-12-29 12:04:35.804791","2017-02-22 15:33:13.900201",1,1,"PAJAK PENERANGAN JALAN JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
13,"4.1.1.06-B",1,"2014-12-29 12:06:20.447922","2017-02-22 15:34:28.402379",1,1,"PAJAK PARKIR JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
14,"4.1.1.06-L",1,"2014-12-29 12:07:05.189443","2017-02-22 15:33:32.76189",1,1,"PAJAK PARKIR JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
15,"4.1.1.07-B",1,"2014-12-29 12:08:05.015374","2017-02-22 15:33:39.885396",1,1,"PAJAK AIR TANAH JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
16,"4.1.1.07-L",1,"2014-12-29 12:08:45.498793","2017-02-22 15:33:46.29623",1,1,"PAJAK AIR TANAH JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
17,"4.1.1.11-B",1,"2014-12-29 12:10:06.988958","2017-02-22 15:33:52.705748",1,1,"PAJAK BPHTB JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
18,"4.1.1.11-L",1,"2014-12-29 12:11:03.78594","2017-02-22 15:33:59.834643",1,1,"PAJAK BPHTB JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
20,"4.1.1.12-B",1,"2014-12-29 12:13:48.469949","2017-02-22 15:34:04.638847",1,1,"PAJAK BUMI DAN BANGUNAN PERDESAAN PERKOTAAN JAN-DES (BAR)","bar","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
21,"4.1.1.12-L",1,"2014-12-29 12:14:36.794257","2017-02-22 15:34:10.721423",1,1,"PAJAK BUMI DAN BANGUNAN PERDESAAN PERKOTAAN JAN-DES (LINE)","line","JAN, FEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES",1
22,"G-PIE-01",1,"2014-12-29 17:21:50.753007","2017-02-22 15:41:15.726212",1,1,"LINGKARAN PBB, BPHTB, LAINNYA","pie","LINGKARAN ",1
23,"G-PIE-02",1,"2014-12-29 17:25:33.598864","2017-02-22 15:41:21.251646",1,1,"PAJAK LAINNYA ","pie","PAJAK LAINNYA",1
\ No newline at end of file \ No newline at end of file
ChartData = {
'options': ['insert if not exists','delete first'],
'csv': ['chart.csv'],
}
"id","kode","status","created","updated","create_uid","update_uid","nama","value_1","value_2","value_3","value_4","value_5","value_6","value_7","value_8","value_9","value10","value11","value12","chart_id","source_type","rekening_kd","color","highlight","is_sum"
1,"T-4.1.1-001",1,"2014-12-28 12:07:37.758827","2017-04-27 14:48:15.509449",1,1,"TARGET",35000000000,45000000000,54917870000,70000000000,70000000000,76311575000,0,0,0,0,0,0,1,"target","4.1.1","A","A",0
2,"R-4.1.1-002",1,"2014-12-28 12:08:13.744299","2017-05-05 20:00:19.401678",1,1,"REALISASI",55924473072,60034106432,66704834856,75399453350,12242123958,0,0,0,0,0,0,0,1,"realisasi","4.1.1","C","C",0
3,"T-4.1.1-003",1,"2014-12-28 12:13:08.927284","2017-02-22 15:25:21.152061",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,2,"target","4.1.1","CCCCCC","CCCCCC",0
4,"R-4.1.1-004",1,"2014-12-28 12:21:35.643581","2017-05-05 20:00:19.593235",1,1,"REALISASI",55924473072,115958579504,182663414360,258062867710,270304991668,270304991668,270304991668,270304991668,270304991668,270304991668,270304991668,270304991668,2,"realisasi","4.1.1","9F9999","9F9000",0
6,"T-4.1.1.01-001",1,"2014-12-29 11:21:30.517391","2017-04-27 14:33:57.259486",1,1,"Target",1400000000,1400000000,1455000000,1400000000,1600000000,1778687500,0,0,0,0,0,0,3,"target","4.1.1.01","cc3300","cc3300",0
7,"R-4.1.1.01-002",1,"2014-12-29 11:21:52.517683","2017-05-05 19:59:58.850218",1,1,"Realisasi",1776310710,1434342714,1542772483,1979240533,89380000,0,0,0,0,0,0,0,3,"realisasi","4.1.1.01","cc3300","cc3300",0
9,"T-4.1.1.01-003",1,"2014-12-29 11:22:37.067962","2016-10-17 13:33:16.778029",1,1,"Target",0,0,0,0,0,0,0,0,0,0,0,0,4,"target","4.1.1.01",,,0
10,"R-4.1.1.01-004",1,"2014-12-29 11:23:02.783823","2017-05-05 20:00:03.016051",1,1,"Realisasi",1776310710,3210653424,4753425907,6732666440,6822046440,6822046440,6822046440,6822046440,6822046440,6822046440,6822046440,6822046440,4,"realisasi","4.1.1.01",,,0
11,"T-4.1.1.02-001",1,"2014-12-29 12:46:19.489062","2017-04-27 14:38:48.269228",1,1,"TARGET",14000000000,13500000000,13500000000,14000000000,16125000000,16000000000,0,0,0,0,0,0,5,"target","4.1.1.02",,,0
12,"R-4.1.1.02-002",1,"2014-12-29 12:47:11.72266","2017-05-05 19:59:58.850218",1,1,"REALISASI",19279239905,16322736536,14444421523,16795940056,270271579,0,0,0,0,0,0,0,5,"realisasi","4.1.1.02",,,0
17,"T-4.1.1.02-003",1,"2014-12-29 12:52:50.053863","2016-10-17 13:35:22.348317",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,6,"target","4.1.1.02",,,0
19,"R-4.1.1.02-004",1,"2014-12-29 12:54:42.213045","2017-05-05 20:00:03.016051",1,1,"REALISASI",19279239905,35601976441,50046397964,66842338020,67112609599,67112609599,67112609599,67112609599,67112609599,67112609599,67112609599,67112609599,6,"realisasi","4.1.1.02",,,0
20,"T-4.1.1.03-001",1,"2014-12-29 12:59:12.800176","2017-05-03 13:21:41.10512",1,1,"TARGET",3000000000,2500000000,1600000000,3000000000,3050000000,2500000000,0,0,0,0,0,0,7,"target","4.1.1.03","FF00FF","33FF00",0
21,"R-4.1.1.03-002",1,"2014-12-29 13:01:04.194405","2017-05-05 19:59:58.850218",1,1,"REALISASI",4068700610,3576796586,2716678837,3176870630,17168863,0,0,0,0,0,0,0,7,"realisasi","4.1.1.03",,,0
22,"T-4.1.1.03-003",1,"2014-12-29 13:02:37.858286","2016-10-17 13:39:37.42058",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,8,"target","4.1.1.03",,,0
23,"R-4.1.1.03-004",1,"2014-12-29 13:03:17.715093","2017-05-05 20:00:03.016051",1,1,"REALISASI",4068700610,7645497196,10362176033,13539046663,13556215526,13556215526,13556215526,13556215526,13556215526,13556215526,13556215526,13556215526,8,"realisasi","4.1.1.03",,,0
24,"T-4.1.1.04-001",1,"2014-12-29 13:05:30.72173","2017-04-27 14:42:52.217845",1,1,"TARGET",1000000000,1200000000,2000000000,1500000000,1500000000,1725000000,0,0,0,0,0,0,9,"target","4.1.1.04",,,0
25,"R-4.1.1.04-002",1,"2014-12-29 13:06:17.417716","2017-05-05 19:59:58.850218",1,1,"REALISASI",995852160,1331606586,1621631035,1487881279,151501786,0,0,0,0,0,0,0,9,"realisasi","4.1.1.04",,,0
26,"T-4.1.1.04-003",1,"2014-12-29 13:08:31.240944","2016-03-02 11:35:32.267272",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,10,"target","4.1.1.04",,,0
27,"R-4.1.1.04-004",1,"2014-12-29 13:09:03.925733","2017-05-05 20:00:03.016051",1,1,"REALISASI",995852160,2327458746,3949089781,5436971060,5588472846,5588472846,5588472846,5588472846,5588472846,5588472846,5588472846,5588472846,10,"realisasi","4.1.1.04",,,0
28,"T-4.1.1.05-001",1,"2014-12-29 13:10:52.328128","2016-11-15 10:40:19.276283",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,11,"target","4.1.1.05",,,0
29,"R-4.1.1.05-002",1,"2014-12-29 13:11:32.484373","2017-05-05 19:59:58.850218",1,1,"REALISASI",8383025652,0,0,0,0,0,0,0,0,0,0,0,11,"realisasi","4.1.1.05",,,0
30,"T-4.1.1.05-003",1,"2014-12-29 13:12:38.357145","2016-10-17 13:41:16.159794",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,12,"target","4.1.1.05",,,0
31,"R-4.1.1.05-004",1,"2014-12-29 13:13:05.033166","2017-05-05 20:00:03.016051",1,1,"REALISASI",8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,8383025652,12,"realisasi","4.1.1.05",,,0
32,"T-4.1.1.06-001",1,"2014-12-29 13:14:35.153023","2017-04-27 14:44:27.812773",1,1,"TARGET",2000000000,1000000000,1300000000,2000000000,1500000000,1337500000,0,0,0,0,0,0,13,"target","4.1.1.06",,,0
33,"R-4.1.1.06-002",1,"2014-12-29 13:15:26.781174","2017-05-05 19:59:58.850218",1,1,"REALISASI",2492214568,1706045272,2127984538,1787759557,132909250,0,0,0,0,0,0,0,13,"realisasi","4.1.1.06",,,0
34,"T-4.1.1.06-003",1,"2014-12-29 13:16:25.408782","2016-03-28 09:01:23.287282",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,14,"target","4.1.1.06",,,0
35,"R-4.1.1.06-004",1,"2014-12-29 13:16:53.769805","2017-05-05 20:00:03.016051",1,1,"REALISASI",2492214568,4198259840,6326244378,8114003935,8246913185,8246913185,8246913185,8246913185,8246913185,8246913185,8246913185,8246913185,14,"realisasi","4.1.1.06",,,0
36,"T-4.1.1.07-001",1,"2014-12-29 13:18:29.003303","2017-04-27 14:45:04.744587",1,1,"TARGET",100000000,150000000,312870000,200000000,200000000,262200000,0,0,0,0,0,0,15,"target","4.1.1.07",,,0
37,"R-4.1.1.07-002",1,"2014-12-29 13:19:03.049172","2017-05-05 19:59:58.850218",1,1,"REALISASI",49955410,132126825,174058176,71202515,38072466,0,0,0,0,0,0,0,15,"realisasi","4.1.1.07",,,0
38,"T-4.1.1.07-003",1,"2014-12-29 13:19:50.974005","2016-03-28 09:05:50.945889",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,16,"target","4.1.1.07",,,0
39,"R-4.1.1.07-004",1,"2014-12-29 13:20:26.916463","2017-05-05 20:00:03.016051",1,1,"REALISASI",49955410,182082235,356140411,427342926,465415392,465415392,465415392,465415392,465415392,465415392,465415392,465415392,16,"realisasi","4.1.1.07",,,0
40,"T-4.1.1.11-001",1,"2014-12-29 13:22:04.440312","2017-04-27 14:45:58.565065",1,1,"TARGET",10000000000,15000000000,25500000000,24000000000,24000000000,26500000000,0,0,0,0,0,0,17,"target","4.1.1.11",,,0
41,"R-4.1.11-002",1,"2014-12-29 13:22:33.918134","2017-05-05 20:00:17.783802",1,1,"REALISASI",12788740486,28975340124,31478558239,32206551385,7021433355,0,0,0,0,0,0,0,17,"realisasi","4.1.1.11",,,0
42,"T-4.1.1.11-003",1,"2014-12-29 13:23:41.351351","2016-03-28 09:07:58.962592",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,18,"target","4.1.1.11",,,0
43,"R-4.1.1.11-004",1,"2014-12-29 13:24:09.119499","2017-05-05 20:00:18.253923",1,1,"REALISASI",12788740486,41764080610,73242638849,105449190234,112470623589,112470623589,112470623589,112470623589,112470623589,112470623589,112470623589,112470623589,18,"realisasi","4.1.1.11",,,0
44,"T-4.1.1.12-001",1,"2014-12-29 13:25:59.89628","2017-04-27 14:50:37.058025",1,1,"TARGET",3000000000,3500000000,5000000000,15000000000,15000000000,18500000000,0,0,0,0,0,0,20,"target","4.1.1.12",,,0
45,"R-4.1.1.12-002",1,"2014-12-29 13:26:46.734346","2017-05-05 20:00:19.424296",1,1,"REALISASI",6090433571,6555111789,12598730025,17894007395,4521386659,0,0,0,0,0,0,0,20,"realisasi","4.1.1.12",0,,0
46,"T-4.1.1.12-003",1,"2014-12-29 13:27:47.964497","2016-10-17 13:43:04.83731",1,1,"TARGET",0,0,0,0,0,0,0,0,0,0,0,0,21,"target","4.1.1.12",,,0
47,"R-4.1.1.12-004",1,"2014-12-29 13:28:20.856161","2017-05-05 20:00:19.897317",1,1,"REALISASI",6090433571,12645545360,25244275385,43138282780,47659669439,47659669439,47659669439,47659669439,47659669439,47659669439,47659669439,47659669439,21,"realisasi","4.1.1.12",,,1
48,"G-PIE-PBB",1,"2014-12-29 17:22:56.827792","2017-05-05 20:00:20.422048",1,1,"PBB",47659669439,0,0,0,0,0,0,0,0,0,0,0,22,"realisasi","4.1.1.12","FF0000",,0
49,"G-PIE-BPHTB",1,"2014-12-29 17:23:23.531197","2017-05-05 20:00:18.940815",1,1,"BPHTB",112470623589,0,0,0,0,0,0,0,0,0,0,0,22,"realisasi","4.1.1.11","0000FF",,0
50,"G-PIE-LAINNYA",1,"2014-12-29 17:24:21.624603","2016-11-15 11:01:25.849969",1,1,"LAINNYA",0,0,0,0,0,0,0,0,0,0,0,0,22,"realisasi","4.1.1.01, 4.1.1.02, 4.1.1.01.03, 4.1.1.04, 4.1.1.05, 4.1.1.01.06, 4.1.1.07, 4.1.1.08, 4.1.1.09","00FF00",,0
51,"G-PIE-HOTEL",1,"2014-12-29 17:26:47.514064","2014-12-29 17:49:35.521499",1,1,"HOTEL",6822046440,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.01","e81135",,0
52,"G-PIE-REST",1,"2014-12-29 17:27:23.465552","2014-12-29 17:54:01.582678",1,1,"RESTORAN",67112609599,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.02","1dd75a",,0
53,"G-PIE-REK",1,"2014-12-29 17:28:08.611173","2014-12-29 17:50:06.265219",1,1,"REKLAME",5588472846,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.04","f2c81e",,0
54,"G-PIE-HIBURAN",1,"2014-12-29 17:28:50.463063","2014-12-29 17:50:20.156095",1,1,"HIBURAN",13556215526,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.03","1dccd7",,0
55,"G-PIE-PPJ",1,"2014-12-29 17:29:18.104021","2015-12-05 19:59:38.063275",1,1,"PPJ",8383025652,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.05","cd10a3",,0
56,"G-PIE-PARK",1,"2014-12-29 17:29:48.484898","2015-12-05 19:59:30.6719",1,1,"PARKIR",8246913185,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.06","e07d34",,0
57,"P-GIE-TANAH",1,"2014-12-29 17:30:22.49536","2015-12-05 19:59:20.347651",1,1,"AIR TANAH",465415392,0,0,0,0,0,0,0,0,0,0,0,23,"realisasi","4.1.1.07","2b45dd",,0
\ No newline at end of file \ No newline at end of file
ChartItemData = {
'options': ['insert if not exists','delete first'],
'csv': ['chart_item.csv'],
}
kode,nama,path,status
eis,EIS,/eis,1
eis-carousel,Carousel,/eis/carousel,1
eis-carousel-act,Carousel Action,/eis/carousel/{act}/act,1
eis-carousel-add,Carousel Add,/eis/carousel/add,1
eis-carousel-edit,Carousel Edit,/eis/carousel/{id}/edit,1
eis-carousel-delete,Carousel Delete,/eis/carousel/{id}/delete,1
eis-dashboard,EIS,/eis/dashboard,1
eis-dashboard-act,EIS Act,/eis/dashboard/{act}/act,1
eis-dashboard-calc-all,EIS Calc ALL,/eis/dashboad/calc/all,1
eis-home,EIS Home,/eis/home,1
eis-act,EIS Home Act,/eis/{act}/act,1
eis-calc-all,EIS Calc ALL,/eis/calc/all,1
eis-chart,Chart,/eis/chart,1
eis-chart-act,EIS Chart Action,/eis/chart/{act}/act,1
eis-chart-add,EIS Chart Add,/eis/chart/add,1
eis-chart-edit,EIS Chart Edit,/eis/chart/{id}/edit,1
eis-chart-delete,EIS Chart Delet,/eis/chart/{id}/delete,1
eis-chart-item,Chart Item,/eis/chart/item/{chart_id},1
eis-chart-item-act,EIS Chart Item Action,/eis/chart/item/{chart_id}/{act}/act,1
eis-chart-item-add,EIS Chart Item Add,/eis/chart/item/{chart_id}/add,1
eis-chart-item-edit,EIS Chart Item Edit,/eis/chart/item/{chart_id}/{id}/edit,1
eis-chart-item-delete,EIS Chart Item Delet,/eis/chart/item/{chart_id}/{id}/delete,1
eis-item,EIS Item,/eis/item,1
eis-item-act,EIS Item Action,/eis/item/{act}/act,1
eis-item-add,EIS Item Add,/eis/item/add,1
eis-item-edit,EIS Item Edit,/eis/item/{id}/edit,1
eis-item-delete,EIS Item Delete,/eis/item/{id}/delete,1
eis-slide,EIS Slide,/eis/slide,1
eis-slide-act,EIS Slide Act,/eis/slide/{act}/act,1
eis-slide-add,EIS Slide Add,/eis/slide/add,1
eis-slide-edit,EIS Slide Edit,/eis/slide/{id}/edit,1
eis-slide-delete,EIS Slide Delete,/eis/slide/{id}/delete,1
RouteData = {
'options': ['insert if not exists','delete first'],
'csv': ['route.csv'],
'keys':['kode'],
}
"id","kode","status","created","updated","create_uid","update_uid","nama","source_type","source_id","order_id","aktif"
1,"S-001",1,"2014-12-28 12:04:48.025396","2015-05-28 17:37:18.407979",1,1,"PAJAK DAERAH","grid",1,50,1
2,"S-002",1,"2014-12-28 12:09:39.174516","2014-12-31 14:58:33.612433",1,1,"TARGET DAN REALISASI PAJAK DAERAH","chart-bar",1,1,0
3,"S-003",1,"2014-12-28 12:10:00.808178","2015-05-28 17:31:39.612517",1,1,"PENCAPAIAN TARGET PAJAK DAERAH","chart-line",2,2,0
4,"S-004",1,"2014-12-28 12:24:03.41748","2014-12-29 13:39:54.542719",1,1,"PAJAK HOTEL ","grid",2,3,0
5,"S-005",1,"2014-12-29 11:25:19.681442","2014-12-31 14:59:14.894462",1,1,"TARGET DAN REALISASI PAJAK HOTEL","chart-bar",3,4,0
6,"S-006",1,"2014-12-29 13:52:42.049059","2014-12-31 17:48:22.730665",1,1,"PENCAPAIAN TARGET PAJAK HOTEL","chart-line",4,5,0
7,"S-007",1,"2014-12-29 13:54:29.968451","2014-12-29 13:54:29.968603",1,1,"PAJAK RESTORAN","grid",3,6,0
8,"S-008",1,"2014-12-29 13:55:39.553281","2014-12-31 14:59:30.433889",1,1,"TARGET DAN REALISASI PAJAK RESTORAN","chart-bar",5,7,0
9,"S-009",1,"2014-12-29 13:56:48.139024","2014-12-31 17:48:43.16015",1,1,"PENCAPAIAN TARGET PAJAK RESTORAN","chart-line",6,8,0
10,"S-010",1,"2014-12-29 13:59:00.161488","2014-12-29 13:59:00.161644",1,1,"PAJAK REKLAME","grid",4,9,0
11,"S-011",1,"2014-12-29 14:00:28.506668","2014-12-31 15:00:01.012053",1,1,"TARGET DAN REALISASI PAJAK REKLAME","chart-bar",9,10,0
12,"S-012",1,"2014-12-29 14:02:12.140367","2014-12-31 17:48:59.584242",1,1,"PENCAPAIAN TARGET PAJAK REKLAME","chart-line",10,11,0
13,"S-013",1,"2014-12-29 14:05:34.708476","2014-12-29 14:05:34.708634",1,1,"PAJAK HIBURAN ","grid",5,12,0
14,"S-014",1,"2014-12-29 14:06:58.921532","2014-12-31 15:00:24.885899",1,1,"TARGET DAN REALISASI PAJAK HIBURAN","chart-bar",7,13,0
15,"S-015",1,"2014-12-29 14:08:06.448603","2014-12-31 17:52:14.286166",1,1,"PENCAPAIAN TARGET PAJAK HIBURAN","chart-line",8,14,0
16,"S-016",1,"2014-12-29 14:09:22.855115","2014-12-29 14:09:46.545548",1,1,"PAJAK PENERANGAN JALAN ","grid",6,15,0
17,"S-017",1,"2014-12-29 14:11:22.577683","2014-12-31 15:00:39.723021",1,1,"TARGET DAN REALISASI PAJAK PENERANGAN JALAN","chart-bar",11,16,0
18,"S-018",1,"2014-12-29 14:13:09.981812","2014-12-31 17:52:37.209143",1,1,"PENCAPAIAN TARGET PAJAK PENERANGAN JALAN","chart-line",12,17,0
19,"S-019",1,"2014-12-29 14:14:34.964073","2014-12-29 14:14:34.964226",1,1,"PAJAK PARKIR ","grid",7,18,0
20,"S-020",1,"2014-12-29 14:17:24.450097","2014-12-31 15:00:59.217997",1,1,"TARGET DAN REALISASI PAJAK PARKIR","chart-bar",13,19,0
21,"S-021",1,"2014-12-29 14:18:49.758142","2015-05-28 17:36:56.031646",1,1,"PENCAPAIAN TARGET PAJAK PARKIR","chart-line",14,20,0
22,"S-022",1,"2014-12-29 14:20:01.210057","2014-12-29 14:20:01.210139",1,1,"PAJAK AIR TANAH ","grid",8,21,0
23,"S-023",1,"2014-12-29 14:21:03.250674","2014-12-31 15:01:22.830519",1,1,"TARGET DAN REALISASI PAJAK AIR TANAH","chart-bar",15,22,0
24,"S-024",1,"2014-12-29 14:22:20.803659","2014-12-31 18:03:20.627258",1,1,"PENCAPAIAN TARGET PAJAK AIR TANAH","chart-line",16,23,0
25,"S-025",1,"2014-12-29 14:23:40.114283","2014-12-29 14:23:40.114479",1,1,"PAJAK BPHTB ","grid",9,24,0
26,"S-026",1,"2014-12-29 14:24:47.067114","2014-12-31 15:01:39.349674",1,1,"TARGET DAN REALISASI PAJAK BPHTB","chart-bar",17,25,0
27,"S-027",1,"2014-12-29 14:25:42.152308","2014-12-31 18:03:43.315062",1,1,"PENCAPAIAN TARGET PAJAK BPHTB","chart-line",18,26,0
28,"S-028",1,"2014-12-29 14:27:14.1296","2014-12-29 14:27:14.12979",1,1,"PAJAK BUMI DAN BANGUNAN PERDESAAN PERKOTAAN ","grid",10,27,0
29,"S-029",1,"2014-12-29 14:28:07.632492","2014-12-31 15:02:07.907632",1,1,"TARGET DAN REALISASI PAJAK BUMI DAN BANGUNAN PERDESAAN PERKOTAAN","chart-bar",20,28,0
30,"S-030",1,"2014-12-29 14:29:09.281591","2014-12-31 18:04:03.60723",1,1,"PENCAPAIAN TARGET PAJAK BUMI DAN BANGUNAN PERDESAAN PERKOTAAN","chart-line",21,29,0
31,"S-031",1,"2014-12-29 17:31:35.504004","2014-12-29 17:31:52.54877",1,1,"KOMPOSISI PAJAK DAERAH","chart-pie",22,30,0
32,"S-033",1,"2014-12-29 17:32:45.525932","2014-12-29 17:32:45.526083",1,1,"KOMPOSISI PAJAK LAINNYA","chart-pie",23,34,0
\ No newline at end of file \ No newline at end of file
SlideData = {
'options': ['insert if not exists','delete first'],
'csv': ['slide.csv'],
}
"id","tahun","kode","nama","amt_tahun","amt_bulan","amt_minggu","amt_hari","order_id","aktif","status","created","updated","create_uid","update_uid"
1,2017,"4.1.1","PAJAK DAERAH",270304991668,12242123958,12242123958,3577607966,20,1,1,,"2017-05-05 20:00:19.353075",1,1
2,2017,"4.1.1.01","PAJAK HOTEL",6822046440,89380000,89380000,89380000,1,0,1,,"2017-05-05 19:59:57.119622",1,1
3,2017,"4.1.1.02","PAJAK RESTORAN",67112609599,270271579,270271579,209278299,2,0,1,,"2017-05-05 19:59:57.119622",1,1
5,2017,"4.1.1.03","PAJAK HIBURAN",13556215526,17168863,17168863,14288863,3,0,1,,"2017-05-05 19:59:57.119622",1,1
4,2017,"4.1.1.04","PAJAK REKLAME",5588472846,151501786,151501786,34788064,4,0,1,,"2017-05-05 19:59:57.119622",1,1
6,2017,"4.1.1.05","PAJAK PENERANGAN JALAN",8383025652,0,0,0,5,0,1,,"2017-05-05 19:59:57.119622",1,1
7,2017,"4.1.1.06","PAJAK PARKIR DAN GALIAN",8246913185,132909250,132909250,131334250,7,0,1,,"2017-05-05 19:59:57.119622",1,1
8,2017,"4.1.1.07","PAJAK AIR TANAH",465415392,38072466,38072466,13789027,8,0,1,,"2017-05-05 19:59:57.119622",1,1
9,2017,"4.1.1.11","PAJAK BPHTB",112470623589,7021433355,7021433355,1666770579,10,0,1,,"2017-05-05 20:00:17.482882",1,1
10,2017,"4.1.1.12","PAJAK BUMI DAN BANGUNAN PERDESAAN PERKOTAAN",47659669439,4521386659,4521386659,1417978884,12,0,1,,"2017-05-05 20:00:19.149218",1,1
\ No newline at end of file \ No newline at end of file
EisData = {
'options': ['insert if not exists','delete first'],
'csv': ['wells.csv'],
}
#!/usr/bin/python
# PEMBAYARAN SPPT Synchronizer
# Logic by: aa.gustiana@gmail.com
# Finishing by: sugiana@gmail.com
import sys
sys.path.insert(0, '/etc/opensipkd')
sys.path.insert(0, '/usr/share/opensipkd')
from db_connection import db_eis as db_url
from tools import humanize_time, print_log, eng_profile, stop_daemon
import os
import demon
import signal
import ntpath
from time import time
from datetime import datetime
from urllib import unquote_plus
from urlparse import urlparse
from optparse import OptionParser
from sqlalchemy import create_engine
from sqlalchemy.sql.expression import text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import DatabaseError
from sqlalchemy import Column, BigInteger, Integer, String, Boolean, DateTime, Sequence, Numeric
from sqlalchemy.exc import ProgrammingError
from sqlalchemy import select,func
from sqlalchemy.orm import create_session
db_url ="postgresql://osipkd:z30s@localhost/gaji_pns"
def info(s):
print_log(s)
log.info(s)
def error(s):
print_log(s, 'ERROR')
log.error(s)
def conf_info():
if not db_url:
print('Sesuaikan /etc/opensipkd/db_connection.py, lalu ' + \
'%s --configure' % SYNC_TABLE)
sys.exit()
###############################################################################
pars = OptionParser()
pars.add_option('-c', '--configure', action='store_true',
help='Configure database')
pars.add_option('', '--configuration-check', action='store_true',
help='Configuration check')
pars.add_option('', '--stop', action='store_true',
help='Stop daemon')
option, remain = pars.parse_args(sys.argv[1:])
conf_info()
if option.configuration_check:
sys.exit()
################################################################################
if option.stop:
stop_daemon(pid_file)
###############################################################################
SYNC_TABLE = ntpath.basename(sys.argv[0])
SYNC_SEQ = '%s_seq' % SYNC_TABLE
pid_file = '/var/run/%s.pid' % SYNC_TABLE
if pos_field_type==1:
SYNC_FIELD = "kd_kanwil, kd_kantor, "
SYNC_FIELD_NEW = "new.kd_kanwil, new.kd_kantor, "
else:
SYNC_FIELD = "kd_kanwil_bank, kd_kppbb_bank, kd_bank_tunggak, kd_bank_persepsi, "
SYNC_FIELD_NEW = "new.kd_kanwil_bank, new.kd_kppbb_bank, new.kd_bank_tunggak, new.kd_bank_persepsi, "
#Create Engine
eng_src = create_engine(db_url_src)
BasePg = declarative_base()
BasePg.metadata.bind = eng_src
eng_dst = create_engine(db_url_dst)
BaseOra = declarative_base()
BaseOra.metadata.bind = eng_dst
################################################################################
class Sync(BasePg):
__tablename__ = SYNC_TABLE
__table_args__ = {'extend_existing':True,
'schema' : db_schema_pg,
}
id = Column(BigInteger, primary_key=True)
kd_propinsi = Column(String(2), nullable=False)
kd_dati2 = Column(String(2), nullable=False)
kd_kecamatan = Column(String(3), nullable=False)
kd_kelurahan = Column(String(3), nullable=False)
kd_blok = Column(String(3), nullable=False)
no_urut = Column(String(4), nullable=False)
kd_jns_op = Column(String(1), nullable=False)
thn_pajak_sppt = Column(String(4), nullable=False)
pembayaran_sppt_ke = Column(Numeric(2,0), nullable=False)
if pos_field_type==2:
kd_kanwil_bank = Column(String(2), nullable=False)
kd_kppbb_bank = Column(String(2), nullable=False)
kd_bank_tunggal = Column(String(2), nullable=False)
kd_bank_persepsi = Column(String(2), nullable=False)
else:
kd_kanwil = Column(String(2), nullable=False)
kd_kantor = Column(String(2), nullable=False)
kd_tp = Column(String(2), nullable=False)
jns_sinkron = Column(String(1), nullable=False)
class BaseTable(object):
__tablename__ = ''
@classmethod
def get_count(cls):
return DBSession.query(func.count(cls.id)).first()
class PembayaranPg(BasePg):
__tablename__ = 'pembayaran_sppt'
__table_args__ = {'extend_existing':True,
'schema' : db_schema_pg,
'autoload':True,
}
class PembayaranOra(BaseOra):
__tablename__ = 'pembayaran_sppt'
__table_args__ = {'extend_existing':True,
'schema' : db_schema_ora,
'autoload':True
}
TRIGGER_SYNC_INSERT = """CREATE OR REPLACE FUNCTION %s.%s_AIU()
RETURNS TRIGGER AS
$BODY$
BEGIN
IF new.nip_rekam_byr_sppt='999999999' THEN
IF TG_OP='INSERT' THEN
INSERT INTO %s (kd_propinsi, kd_dati2, kd_kecamatan,
kd_kelurahan, kd_blok, no_urut, kd_jns_op, thn_pajak_sppt,
pembayaran_sppt_ke, %s kd_tp, jns_sinkron)
SELECT new.kd_propinsi, new.kd_dati2, new.kd_kecamatan,
new.kd_kelurahan, new.kd_blok, new.no_urut, new.kd_jns_op,
new.thn_pajak_sppt, new.pembayaran_sppt_ke, %s new.kd_tp, '2';
RETURN NEW;
ELSIF TG_OP='UPDATE' THEN
INSERT INTO %s (kd_propinsi, kd_dati2, kd_kecamatan,
kd_kelurahan, kd_blok, no_urut, kd_jns_op, thn_pajak_sppt,
pembayaran_sppt_ke, %s kd_tp, jns_sinkron)
SELECT new.kd_propinsi, new.kd_dati2, new.kd_kecamatan,
new.kd_kelurahan, new.kd_blok, new.no_urut, new.kd_jns_op,
new.thn_pajak_sppt, new.pembayaran_sppt_ke, %s new.kd_tp, '3';
RETURN NEW;
END IF;
ELSE
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
""" % (db_schema_pg, SYNC_TABLE,
SYNC_TABLE, SYNC_FIELD, SYNC_FIELD_NEW,
SYNC_TABLE, SYNC_FIELD, SYNC_FIELD_NEW)
TRIGGER_INSERT = """CREATE TRIGGER %s_trg
AFTER INSERT OR UPDATE ON %s.pembayaran_sppt FOR EACH ROW
EXECUTE PROCEDURE %s.%s_aiu();
""" % (SYNC_TABLE,db_schema_pg,db_schema_pg,SYNC_TABLE)
def init_db():
try:
BasePg.metadata.create_all(eng_src)
except DatabaseError, e:
print(e)
sys.exit()
print('Create table %s' % SYNC_TABLE)
seq = Sequence(SYNC_SEQ)
print('Create sequence %s' % SYNC_SEQ)
seq.create(eng_src)
create_trigger(eng_src, TRIGGER_SYNC_INSERT)
create_trigger(eng_src, TRIGGER_INSERT)
if option.configure:
init_db()
sys.exit()
pid = demon.make_pid(pid_file)
log = demon.Log('/var/log/%s.log' % SYNC_TABLE)
session = create_session()
#sync = Sync.create()
row = session.query(func.count(Sync.id).label('c')).first()
count = row.c
msg = 'Ada %d baris yang akan diselaraskan' % count
print_log(msg)
if not count:
os.remove(pid_file)
sys.exit()
log.info(msg)
sources = session.query(PembayaranPg,Sync).\
filter(Sync.kd_propinsi==PembayaranPg.kd_propinsi,
Sync.kd_dati2==PembayaranPg.kd_dati2,
Sync.kd_kecamatan==PembayaranPg.kd_kecamatan,
Sync.kd_kelurahan==PembayaranPg.kd_kelurahan,
Sync.kd_blok==PembayaranPg.kd_blok,
Sync.no_urut==PembayaranPg.no_urut,
Sync.kd_jns_op==PembayaranPg.kd_jns_op,
Sync.thn_pajak_sppt==PembayaranPg.thn_pajak_sppt,
Sync.pembayaran_sppt_ke==PembayaranPg.pembayaran_sppt_ke,
Sync.kd_kanwil==PembayaranPg.kd_kanwil,
Sync.kd_kantor==PembayaranPg.kd_kantor,
Sync.kd_tp==PembayaranPg.kd_tp,
).all()
row = 0
log_row = 0
awal = time()
for source in sources:
row += 1
log_row += 1
jenis = int(source.jns_sinkron)
try:
if jenis == 2: #Insert (copy data dari source ke target
adata = PembayaranOra()
adata.kd_propinsi = source.kd_propinsi
adata.kd_dati2 = source.kd_dati2
adata.kd_kecamatan = source.kd_kecamatan
adata.kd_kelurahan = source.kd_kelurahan
adata.kd_blok = source.kd_blok
adata.no_urut = source.no_urut
adata.kd_jns_op = source.kd_jns_op
adata.thn_pajak_sppt = source.thn_pajak_sppt
adata.pembayaran_sppt_ke = source.pembayaran_sppt_ke
if pos_field_type==1:
adata.kd_kanwil = source.kd_kanwil
adata.kd_kantor = source.kd_kantor
else:
adata.kd_kanwil_bank = source.kd_kanwil_bank
adata.kd_kppbb_bank = source.kd_kppbb_bank
adata.kd_bank_tunggal = source.kd_bank_tunggal
adata.kd_bank_persepsi = source.kd_bank_persepsi
adata.kd_tp = source.kd_tp
adata.denda_sppt = source.denda_sppt
adata.jml_sppt_yg_dibayar = source.jml_sppt_yg_dibayar
adata.tgl_rekam_bayar_sppt = source.tgl_rekam_bayar_sppt
adata.tgl_pembayaran_sppt = source.tgl_pembayaran_sppt
adata.nip_rekam_byr_sppt = source.nip_rekam_byr_sppt
session.add(adata)
elif jenis == 3: #Update (copy data dari source ke target
#adata = lambda source: {c.name: str(getattr(source, c.name)) for c in PembayaranOra.__table__.columns}
d = {}
for column in PembayaranOra.__table__.columns:
#print column.name, source.kd_propinsi
d[column.name] = str(getattr(source, column.name))
print adata
sys.exit()
session.query(PembayaranOra).filter(
source.kd_propinsi==PembayaranPg.kd_propinsi,
source.kd_dati2==PembayaranPg.kd_dati2,
source.kd_kecamatan==PembayaranPg.kd_kecamatan,
source.kd_kelurahan==PembayaranPg.kd_kelurahan,
source.kd_blok==PembayaranPg.kd_blok,
source.no_urut==PembayaranPg.no_urut,
source.kd_jns_op==PembayaranPg.kd_jns_op,
source.thn_pajak_sppt==PembayaranPg.thn_pajak_sppt,
source.pembayaran_sppt_ke==PembayaranPg.pembayaran_sppt_ke,
source.kd_kanwil==PembayaranPg.kd_kanwil,
source.kd_kantor==PembayaranPg.kd_kantor,
source.kd_tp==PembayaranPg.kd_tp,
).update(adata)
else:
print('Field jns_sinkron %d belum dibuat.' % jenis)
print('Periksa lagi programnya.')
sys.exit()
#session.query(Sync).filter(Sync.id==source.sync_id).delete()
#session.commit()
except Exception, e:
error(e[0])
# sys.exit()
if log_row == 100: # Hemat log file
durasi = time() - awal
kecepatan = durasi / row
sisa_row = count - row
estimasi_selesai = sisa_row * kecepatan
estimasi = humanize_time(estimasi_selesai)
msg = '%d / %d %s' % (row, count, estimasi)
print_log(msg)
log.info(msg)
log_row = 0
info('Selesai')
os.remove(pid_file)
import os
from .data.routes import RouteData
from ...scripts.initial_data import InitialData
from ..models import (
EisBase as ModuleBase,
CommonModel,
EisDBSession as ModuleDBSession,
)
from .data.routes import RouteData
from .data.slide import SlideData
from .data.wells import EisData
from .data.chart import ChartData
from .data.chart_item import ChartItemData
from ...scripts.DbTools import (
get_pkeys,
execute,
split_tablename,
)
from ..models import (
EisBase as ModuleBase,
CommonModel,
EisDBSession as ModuleDBSession,
Eis,Slide, Chart, ChartItem
)
fixtures = [
('routes', RouteData),
('eis.charts', ChartData),
('eis.chart_items', ChartItemData),
('eis.slides', SlideData),
('eis.wells', EisData),
]
def insert():
initialData = InitialData(ModuleBase, ModuleDBSession)
base_dir = os.path.split(__file__)[0]
initialData.insert(base_dir, fixtures)
\ No newline at end of file \ No newline at end of file
import os
import sys
import transaction
import subprocess
from sqlalchemy import (
engine_from_config,
select,
)
from sqlalchemy.schema import CreateSchema
from pyramid.paster import (
get_appsettings,
setup_logging,
)
from ..models import (
EisDBSession as ModuleDBSession,
EisBase as ModuleBase,
)
from ..models import *
from . import initial_data
#from .tools import mkdir
from ...scripts.initializedb import create_schema, read_file
from ...tools import get_settings
def main(settings):
'eis'
if 'eis.url' in settings and settings['eis.url']:
engine = engine_from_config(settings, 'eis.')
else:
engine = ModuleDBSession.bind;
create_schema(engine, 'eis')
ModuleBase.metadata.create_all(engine)
ModuleDBSession.configure(bind=engine)
initial_data.insert()
transaction.commit()
print('****EIS CREATED****')
body {
min-height: 2000px;
padding-top: 70px;
}
body {
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
--font-weight: 300;
--color: #ffffff;
--background: #bc2131;
font-size: 12px;
padding-top: 70px;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-weight: 300;
}
legend {
font-size: 14px;
}
.bar {
height: 18px;
background: green;
}
.typeahead{
font-size: 12px;
padding: 3px 6px;
height: 26px;
}
.form-control {
font-size: 12px;
padding: 3px 6px;
height: 26px;
}
.btn {
font-size: 12px;
padding: 3px 6px;
height: 26px;
}
.container {
}
.container .info {
font-size: 18px;
padding: 14px;
color: #fff;
}
.container .btn-menu {
text-align: left;
font-size: 16px;
padding: 14px 24px;
border-radius: 6px;
border: 0px none;
width: 100%;
margin-bottom: 10px;
}
.container .btn-login {
font-size: 18px;
padding: 10px 20px;
border-radius: 6px;
border: 0px none;
background: #BC2131;
background-image: linear-gradient(to bottom, #C6414E 0px, #BC2131 100%);
background-repeat: repeat-x;
margin-top:20px;
}
.container .btn-logout {
margin-top:12px;
}
.container .btn-login:hover {
background: #BC2131;
}
.container .btn-login .label {
display: block;
font-size: 8px;
}
/* dataTables Customize */
table.dataTable thead {
background-color: #EAEAEA;
}
table.dataTable thead > tr > th{
padding: 2px;
line-height: 30px;
}
table.dataTable tbody > tr > td{
padding: 2px;
line-height: 20px;
}
table.dataTable tr.even.selected td {
background-color: #B0BED9;
}
table.dataTable tr.odd.selected td {
background-color: #9FAFD1;
}
table.dataTable tr.even td {
background-color: #FFFFFF;
}
table.dataTable tr.odd td {
background-color: #E2E4FF;
}
table.dataTable tr td {
vertical-align: middle;
}
table.dataTable tbody > tr > td.dataTables_empty {
line-height:inherit;
}
table.dataTable tbody td {
padding: 2px 2px;
}
table.dataTable th.right,
table.dataTable td.right {
text-align: right;
}
table.dataTable th.center,
table.dataTable td.center {
text-align: center;
}
div.tab-content {
padding-top: 10px;
}
.form-horizontal .form-group {
margin-bottom: 4px !important;
}
body {
padding-top: 70px;
padding-bottom: 40px;
background-color: #fff;
}
.form-signin {
max-width: 400px;
padding: 10px;
margin: 0 auto;
background-color: #eee;
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin .checkbox {
font-weight: normal;
}
.form-signin .form-control {
position: relative;
font-size: 14px;
height: auto;
padding: 8px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.form-signin .form-control:focus {
z-index: 2;
}
.form-signin input[type="text"] {
margin-bottom: -1px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
\ No newline at end of file \ No newline at end of file
.content-image {
display: block;
}
.img-float {
float: left;
width: 150px;
height: 150px;
margin: 0 20px 10px 0;
padding: 10px;
border: 1px solid white;
display: inline-block;
-webkit-box-shadow: inset 0 0 20px #ADADAD;
box-shadow: inset 0 0 20px #ADADAD;
}
}
from ..tools import *
\ No newline at end of file \ No newline at end of file
from ...views.base_views import BaseView as OsBaseView
from ...views.common import DataTables, ColumnDT
from pyramid.view import (
view_config,
)
class BaseView(OsBaseView):
pass
# @view_config(route_name='eis', renderer='templates/home.pt')
# def view_home(self):
# return dict(modules = ['eis'])
\ No newline at end of file \ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
# import json
from pyramid.view import (
view_config,
)
# from pyramid.httpexceptions import (
# HTTPFound,
# )
from ..views import BaseView
from ..models import EisDBSession
from ..models import Eis, Chart, ChartItem, Slide
#from ..tools import row2dict
class dashboard(BaseView):
def cek_value(self,value,devider,simbol):
if value<devider:
return "{0:,.0f}".format(value)
else:
return "{0:,.2f} {1}".format(value/devider,simbol)
@view_config(route_name='eis-dashboard', renderer='templates/dashboard.pt')
def view_app(self):
tahun = self.ses['tahun']
datas = EisDBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id)
if not datas:
datas = {}
return dict(project='EIS', datas=datas)
@view_config(route_name='eis-dashboard-act', renderer='json')
def view_act(self):
tahun = self.ses['tahun']
req = self.req
params = req.params
id = 'id' in params and params['id'] or 0
json_data = {}
json_data['success']=False
if req.matchdict['act']=='grid':
rows = EisDBSession.query(Eis).filter(Eis.id==id)
if not rows:
return json_data
for row in rows:
row_dicted = row.to_dict()
amt_hari = float(row_dicted['amt_hari'])
amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
json_data['success']= True
json_data['tahun'] = self.cek_value(amt_tahun,1000000000, 'M')
json_data['bulan'] = self.cek_value(amt_bulan,1000000000, 'M')
json_data['minggu'] = self.cek_value(amt_minggu,1000000000, 'M')
json_data['hari'] = self.cek_value(amt_hari,1000000000, 'M')
return json_data
#######################################################################
# GRAFIK LINE/BAR
#######################################################################
elif req.matchdict['act']=='linebar':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first()
if not rows:
return json_data
json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id)
for row in rows:
json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider,
row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider,
row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
json_data['success']= True
return json_data
#######################################################################
# GRAFIK LINGKARAN
#######################################################################
elif req.matchdict['act']=='pie':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first()
if not rows:
return json_data
json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id)
json_data['rows'] = {}
for row in rows:
anama = {}
anama['nama'] = row.nama
anama['color'] = row.color
anama ['highlight'] = row.highlight
anama ['value'] = row.value_1/row.chart.devider
json_data['rows'][row.nama] =anama
json_data['success']= True
return json_data
import json
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from ..views import BaseView
from ..models import EisDBSession
from ..models.eis import Eis, Chart, ChartItem, Slide
#from ..tools import row2dict
########
# APP Home #
########
class eis(BaseView):
def cek_value(self,value,devider,simbol):
if value<devider:
return "{0:,.0f}".format(value)
else:
return "{0:,.0f} {1}".format(value/devider,simbol)
@view_config(route_name='eis', renderer='templates/eis.pt',
permission='eis')
def view_app(self):
tahun = self.ses['tahun']
datas = EisDBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {}
tab_datas = EisDBSession.query(Slide).filter(Slide.source_type=='grid').order_by(Slide.order_id) or {}
line_datas = EisDBSession.query(Slide).filter(Slide.source_type=='chart-line').order_by(Slide.order_id)or {}
bar_datas = EisDBSession.query(Slide).filter(Slide.source_type=='chart-bar').order_by(Slide.order_id)or {}
pie_datas = EisDBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {}
return dict(project='EIS', datas=datas, tab_datas=tab_datas,
line_datas=line_datas, bar_datas=bar_datas,
pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
@view_config(route_name='eis-act', renderer='json')
def view_app_act(self):
tahun = self.ses['tahun']
req = self.req
params = req.params
id = 'id' in params and params['id'] or 0
json_data = {}
json_data['success']=False
if req.matchdict['act']=='grid':
rows = EisDBSession.query(Eis).filter(Eis.id==id)
if not rows:
return json_data
for row in rows:
row_dicted = row.to_dict()
amt_hari = float(row_dicted['amt_hari'])
amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
json_data['success']= True
json_data['tahun'] = self.cek_value(amt_tahun,1, '')
json_data['bulan'] = self.cek_value(amt_bulan,1, '')
json_data['minggu'] = self.cek_value(amt_minggu,1, '')
json_data['hari'] = self.cek_value(amt_hari,1, '')
return json_data
#######################################################################
# GRAFIK LINE/BAR
#######################################################################
elif req.matchdict['act']=='linebar':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first()
if not rows:
return json_data
json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id)
for row in rows:
json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
row.value_4/row.chart.devider,row.value_5/row.chart.devider,row.value_6/row.chart.devider,
row.value_7/row.chart.devider,row.value_8/row.chart.devider,row.value_9/row.chart.devider,
row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
json_data['success']= True
return json_data
#######################################################################
# GRAFIK LINGKARAN
#######################################################################
elif req.matchdict['act']=='pie':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first()
if not rows:
return json_data
json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id)
json_data['rows'] = {}
for row in rows:
anama = {}
anama['nama'] = row.nama
anama['color'] = row.color
anama ['highlight'] = row.highlight
anama ['value'] = row.value_1/row.chart.devider
json_data['rows'][row.nama] =anama
json_data['success']= True
return json_data
import os
import uuid
#from ..tools import row2dict, xls_reader
from datetime import datetime
from sqlalchemy import not_, func
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..models import (
EisDBSession
)
from ..models.eis import (
Eis
)
from ..views import BaseView, ColumnDT, DataTables
SESS_ADD_FAILED = 'Tambah carousel gagal'
SESS_EDIT_FAILED = 'Edit carousel gagal'
rek_widget = widget.AutocompleteInputWidget(
size=60,
values = '/rekening/act/headof',
min_length=1)
class Amount(colander.Schema):
amt_tahun = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
amt_bulan = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
amt_minggu = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
amt_hari = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
class AddSchema(colander.Schema):
tahun = colander.SchemaNode(
colander.Integer())
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=18),
oid='kode')
nama = colander.SchemaNode(
colander.String(),
widget = rek_widget,
validator=colander.Length(max=128),
oid = 'nama')
order_id = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
amount = Amount()
status = colander.SchemaNode(
colander.Boolean())
aktif = colander.SchemaNode(
colander.Boolean())
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class view_carousel(BaseView):
########
# List #
########
@view_config(route_name='eis-carousel', renderer='templates/eis-carousel/list.pt',
permission='eis-carousel')
def view_list(self):
return dict(a={})
##########
# Action #
##########
@view_config(route_name='eis-carousel-act', renderer='json',
permission='eis-carousel-act')
def view_act(self):
ses = self.req.session
request = self.req
params = request.params
url_dict = request.matchdict
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT(Eis.id))
columns.append(ColumnDT(Eis.tahun))
columns.append(ColumnDT(Eis.kode))
columns.append(ColumnDT(Eis.nama))
columns.append(ColumnDT(Eis.amt_tahun, ))
columns.append(ColumnDT(Eis.amt_bulan, ))
columns.append(ColumnDT(Eis.amt_minggu, ))
columns.append(ColumnDT(Eis.amt_hari, ))
columns.append(ColumnDT(Eis.order_id, ))
columns.append(ColumnDT(Eis.status, ))
columns.append(ColumnDT(Eis.aktif, ))
columns.append(ColumnDT(func.to_char(Eis.updated, "DD-MM-YYYY"), ))
query = EisDBSession.query().select_from(Eis)
rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result()
@view_config(route_name='eis-carousel-add', renderer='templates/eis-carousel/add.pt',
permission='eis-carousel-add')
def view_add(self):
request = self.req
ses = self.ses
form = get_form(request, AddSchema)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
#request.session[SESS_ADD_FAILED] = e.render()
#form.set_appstruct(rowd)
return dict(form=form)
#return HTTPFound(location=request.route_url('carousel-add'))
save_request(request, dict(controls))
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return dict(form=form)
#return self.session_failed(SESS_ADD_FAILED)
return dict(form=form)
@view_config(route_name='eis-carousel-edit', renderer='templates/eis-carousel/add.pt',
permission='eis-carousel-edit')
def view_edit(self):
request = self.req
row = query_id(request).first()
if not row:
return id_not_found(request)
#values = row.to_dict()
rowd={}
rowd['id'] = row.id
rowd['tahun'] = row.tahun
rowd['kode'] = row.kode
rowd['nama'] = row.nama
rowd['order_id'] = row.order_id
rowd['status'] = row.status
rowd['aktif'] = row.aktif
rowd['amount'] = {}
rowd['amount']['amt_tahun'] = row.amt_tahun or 0
rowd['amount']['amt_bulan'] = row.amt_bulan or 0
rowd['amount']['amt_minggu'] = row.amt_minggu or 0
rowd['amount']['amt_hari'] = row.amt_hari or 0
form = get_form(request, EditSchema)
form.set_appstruct(rowd)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
return dict(form=form)
save_request(request, dict(controls), row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(SESS_EDIT_FAILED)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='eis-carousel-delete', renderer='templates/eis-carousel/delete.pt',
permission='eis-carousel-delete')
def view_delete(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return self.id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus','batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'Carousel ID %d %s sudah dihapus.' % (row.id, row.nama)
try:
q.delete()
EisDBSession.flush()
except:
msg = 'Carousel ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg)
return route_list(request)
return dict(row=row,
form=form.render())
#######
# Add #
#######
def form_validator(form, value):
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = EisDBSession.query(Eis).filter_by(id=uid)
row = q.first()
else:
row = None
def get_form(request, class_form, row=None):
schema = class_form(validator=form_validator)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan','batal'))
def session_failed(self, session_name):
#r = dict(form=self.session[session_name])
del self.session[session_name]
#return r
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Carousel sudah disimpan.')
def save(values, user, row=None):
# print(">>", values)
# sys.exit()
if not row:
row = Eis()
row.created = datetime.now()
row.create_uid = user.id
else:
row.updated = datetime.now()
row.update_uid = user.id
row.from_dict(values)
row.from_dict(values['amount'])
row.status = 'status' in values and values['status'] and 1 or 0
row.aktif = 'aktif' in values and values['aktif'] and 1 or 0
EisDBSession.add(row)
EisDBSession.flush()
return row
def route_list(request):
return HTTPFound(location=request.route_url('eis-carousel'))
########
# Edit #
########
def query_id(request):
return EisDBSession.query(Eis).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Carousel ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
import os
import uuid
#from ..tools import row2dict, xls_reader
from datetime import datetime
from sqlalchemy import not_, func
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from ..models import (
EisDBSession
)
from ..models.eis import (
Chart
)
from ..views import BaseView, ColumnDT, DataTables
SESS_ADD_FAILED = 'Tambah eis-chart gagal'
SESS_EDIT_FAILED = 'Edit eis-chart gagal'
@colander.deferred
def deferred_chart_type(node, kw):
values = kw.get('chart_types', [])
return widget.SelectWidget(values=values)
CHART_TYPES = (('line','Line'),
('bar','Bar'),
('pie', 'Pie'))
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=18),
oid='kode')
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
oid = 'nama')
label = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128))
chart_type = colander.SchemaNode(
colander.String(),
widget=deferred_chart_type
)
devider = colander.SchemaNode(
colander.Integer(),
default = 1000,
validator=colander.Range(min=1, max=1000000))
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class view_eis_chart(BaseView):
########
# List #
########
@view_config(route_name='eis-chart', renderer='templates/eis-chart/list.pt',
permission='read')
def view_list(self):
return dict(a={})
##########
# Action #
##########
@view_config(route_name='eis-chart-act', renderer='json',
permission='read')
def eis_chart_act(self):
ses = self.req.session
req = self.req
params = req.params
url_dict = req.matchdict
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT(Chart.id))
columns.append(ColumnDT(Chart.kode))
columns.append(ColumnDT(Chart.nama))
columns.append(ColumnDT(Chart.chart_type))
columns.append(ColumnDT(Chart.devider))
query = EisDBSession.query().select_from(Chart)
rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result()
#######
# Add #
#######
def form_validator(self, form, value):
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = EisDBSession.query(Chart).filter_by(id=uid)
row = q.first()
else:
row = None
def get_form(self, class_form, row=None):
schema = class_form(validator=self.form_validator)
schema = schema.bind(chart_types=CHART_TYPES)
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan','batal'))
def save(self, values, user, row=None):
if not row:
row = Chart()
row.created = datetime.now()
row.create_uid = user.id
row.from_dict(values)
row.updated = datetime.now()
row.update_uid = user.id
row.aktif = 'aktif' in values and values['aktif'] and 1 or 0
EisDBSession.add(row)
EisDBSession.flush()
return row
def save_request(self, values, row=None):
if 'id' in self.req.matchdict:
values['id'] = self.req.matchdict['id']
row = self.save(values, self.req.user, row)
self.req.session.flash('Chart sudah disimpan.')
def route_list(self):
return HTTPFound(location=self.req.route_url('eis-chart'))
def session_failed(self, session_name):
r = dict(form=self.session[session_name])
del self.session[session_name]
return r
@view_config(route_name='eis-chart-add', renderer='templates/eis-chart/add.pt',
permission='add')
def view_eis_chart_add(self):
req = self.req
ses = self.session
form = self.get_form(AddSchema)
if req.POST:
if 'simpan' in req.POST:
controls = req.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
req.session[SESS_ADD_FAILED] = e.render()
return HTTPFound(location=req.route_url('eis-chart-add'))
self.save_request(dict(controls))
return self.route_list()
elif SESS_ADD_FAILED in req.session:
return self.session_failed(SESS_ADD_FAILED)
return dict(form=form.render())
########
# Edit #
########
def query_id(self):
return EisDBSession.query(Chart).filter_by(id=self.req.matchdict['id'])
def id_not_found(self):
msg = 'Chart ID %s Tidak Ditemukan.' % self.req.matchdict['id']
request.session.flash(msg, 'error')
return route_list()
@view_config(route_name='eis-chart-edit', renderer='templates/eis-chart/add.pt',
permission='edit')
def view_eis_chart_edit(self):
request = self.req
row = self.query_id().first()
if not row:
return id_not_found(request)
form = self.get_form(EditSchema)
#form.set_appstruct(rowd)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
request.session[SESS_EDIT_FAILED] = e.render()
return HTTPFound(location=request.route_url('eis-chart-edit',
id=row.id))
self.save_request(dict(controls), row)
return self.route_list()
elif SESS_EDIT_FAILED in request.session:
return self.session_failed(SESS_EDIT_FAILED)
values = row.to_dict()
return dict(form=form.render(appstruct=values))
##########
# Delete #
##########
@view_config(route_name='eis-chart-delete', renderer='templates/eis-chart/delete.pt',
permission='delete')
def view_eis_chart_delete(self):
request = self.req
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus','batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'Chart ID %d %s sudah dihapus.' % (row.id, row.nama)
try:
q.delete()
EisDBSession.flush()
except:
msg = 'Chart ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg)
return self.route_list()
return dict(row=row,
form=form.render())
import os
import uuid
#from ..tools import row2dict, xls_reader
from datetime import datetime
from sqlalchemy import not_, func
from pyramid.view import (view_config,)
from pyramid.httpexceptions import ( HTTPFound, )
import colander
from deform import (Form, widget, ValidationFailure, )
from ..models import EisDBSession
from ..models.eis import ChartItem, Chart
from ..views import BaseView, ColumnDT, DataTables
SESS_ADD_FAILED = 'Tambah eis-chart-item gagal'
SESS_EDIT_FAILED = 'Edit eis-chart-item gagal'
def deferred_source_type(node, kw):
values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values)
SOURCE_TYPE = (
('target', 'Target'),
('realisasi', 'Realisasi'),
)
class Blok1(colander.Schema):
value_1 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_2 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_3 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_4 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_5 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_6 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
class Blok2(colander.Schema):
value_7 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_8 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value_9 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value10 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value11 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
value12 = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=18),
oid='kode')
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
oid = 'nama')
source_type = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
widget=widget.SelectWidget(values=SOURCE_TYPE)) # deferred_source_type)
is_sum = colander.SchemaNode(
colander.Boolean(),
title = 'Jumlah Kumulatif'
) # deferred_source_type)
rekening_kd = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
missing=colander.drop)
color = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=6),
missing=colander.drop)
highlight = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=6),
missing=colander.drop)
values_1 = Blok1()
values_2 = Blok2()
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class view_eis_chart_item(BaseView):
########
# List #
########
@view_config(route_name='eis-chart-item', renderer='templates/eis-chart-item/list.pt',
permission='eis-chart-item')
def view_list(self):
ses = self.req.session
req = self.req
params = req.params
url_dict = req.matchdict
id = url_dict['chart_id']
return dict(project='EIS', rows=Chart.query_id(id).first())
##########
# Action #
##########
@view_config(route_name='eis-chart-item-act', renderer='json',
permission='read')
def eis_chart_item_act(self):
ses = self.req.session
req = self.req
params = req.params
url_dict = req.matchdict
chart_id = url_dict['chart_id']
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT(ChartItem.id))
columns.append(ColumnDT(ChartItem.kode))
columns.append(ColumnDT(ChartItem.nama))
columns.append(ColumnDT(ChartItem.source_type))
columns.append(ColumnDT(ChartItem.value_1, ))
columns.append(ColumnDT(ChartItem.value_2, ))
columns.append(ColumnDT(ChartItem.value_3, ))
columns.append(ColumnDT(ChartItem.value_4, ))
columns.append(ColumnDT(ChartItem.value_5, ))
columns.append(ColumnDT(ChartItem.value_6, ))
query = EisDBSession.query().select_from(ChartItem).filter(ChartItem.chart_id==chart_id)
rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result()
#######
# Add #
#######
def form_validator(self, form, value):
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = EisDBSession.query(ChartItem).filter_by(id=uid)
row = q.first()
else:
row = None
def get_form(self, class_form, row=None):
schema = class_form(validator=self.form_validator)
schema = schema.bind(source_type=SOURCE_TYPE)
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan','batal'))
def save(self, values, user, row=None):
if not row:
row = ChartItem()
row.created = datetime.now()
row.create_uid = user.id
row.from_dict(values)
row.updated = datetime.now()
row.update_uid = user.id
row.is_sum = 'is_sum' in values and values['is_sum'] and 1 or 0
EisDBSession.add(row)
EisDBSession.flush()
return row
def save_request(self, values, row=None):
if 'id' in self.req.matchdict:
values['id'] = self.req.matchdict['id']
row = self.save(values, self.req.user, row)
self.req.session.flash('ChartItem sudah disimpan.')
def route_list(self,chart_id):
return HTTPFound(location=self.req.route_url('eis-chart-item',chart_id=chart_id) )
def session_failed(self, session_name):
#r = dict(form=self.session[session_name])
del self.session[session_name]
#return r
@view_config(route_name='eis-chart-item-add', renderer='templates/eis-chart-item/add.pt',
permission='add')
def view_eis_chart_item_add(self):
req = self.req
ses = self.session
form = self.get_form(AddSchema)
chart_id = req.matchdict['chart_id']
if req.POST:
if 'simpan' in req.POST:
controls = req.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
#req.session[SESS_ADD_FAILED] = e.render()
#form.set_appstruct(rowd)
return dict(form=form)
#return HTTPFound(location=req.route_url('eis-chart-item-add'))
self.save_request(dict(controls, chart_id=chart_id))
return self.route_list(chart_id)
elif SESS_ADD_FAILED in req.session:
return dict(form=form)
#return self.session_failed(SESS_ADD_FAILED)
return dict(form=form)
########
# Edit #
########
def query_id(self):
return EisDBSession.query(ChartItem).filter_by(id=self.req.matchdict['id'])
def id_not_found(self,chart_id):
msg = 'ChartItem ID %s Tidak Ditemukan.' % self.req.matchdict['id']
request.session.flash(msg, 'error')
return route_list(chart_id)
@view_config(route_name='eis-chart-item-edit', renderer='templates/eis-chart-item/add.pt',
permission='edit')
def view_eis_chart_item_edit(self):
request = self.req
row = self.query_id().first()
chart_id = request.matchdict['chart_id']
if not row:
return id_not_found(request)
#values = row.to_dict()
rowd={}
rowd['id'] = row.id
rowd['kode'] = row.kode
rowd['nama'] = row.nama
rowd['source_type'] = row.source_type
rowd['rekening_kd'] = row.rekening_kd
rowd['color'] = row.color
rowd['highlight'] = row.highlight
rowd['values_1'] = {}
rowd['values_1']['value_1'] = row.value_1
rowd['values_1']['value_2'] = row.value_2
rowd['values_1']['value_3'] = row.value_3
rowd['values_1']['value_4'] = row.value_4
rowd['values_1']['value_5'] = row.value_5
rowd['values_1']['value_6'] = row.value_6
rowd['values_2'] = {}
rowd['values_2']['value_7'] = row.value_7
rowd['values_2']['value_8'] = row.value_8
rowd['values_2']['value_9'] = row.value_9
rowd['values_2']['value10'] = row.value10
rowd['values_2']['value11'] = row.value11
rowd['values_2']['value12'] = row.value12
form = self.get_form(EditSchema)
form.set_appstruct(rowd)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
return dict(form=form)
#request.session[SESS_EDIT_FAILED] = e.render()
#return HTTPFound(location=request.route_url('eis-chart-item-edit',
# id=row.id))
self.save_request(dict(controls, chart_id=chart_id), row)
return self.route_list(chart_id)
elif SESS_EDIT_FAILED in request.session:
return self.session_failed(SESS_EDIT_FAILED)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='eis-chart-item-delete', renderer='templates/eis-chart-item/delete.pt',
permission='delete')
def view_eis_chart_item_delete(self):
request = self.req
chart_id = request.matchdict['chart_id']
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus','batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'ChartItem ID %d %s sudah dihapus.' % (row.id, row.nama)
try:
q.delete()
EisDBSession.flush()
except:
msg = 'ChartItem ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg)
return self.route_list(chart_id)
return dict(row=row,
form=form.render())
import os
import uuid
#from osipkd.tools import row2dict, xls_reader
from datetime import datetime
from sqlalchemy import not_, func
from pyramid.view import (view_config,)
from pyramid.httpexceptions import ( HTTPFound, )
import colander
from deform import (Form, widget, ValidationFailure, )
from ..models import EisDBSession
#from ..models.eis import ARPaymentDetail as AR
from ..views import BaseView, ColumnDT, DataTables
SESS_ADD_FAILED = 'Tambah eis-item gagal'
SESS_EDIT_FAILED = 'Edit eis-item gagal'
def deferred_sumber_id(node, kw):
values = kw.get('sumber_id', [])
return widget.SelectWidget(values=values)
SUMBER_ID = (
(1, 'Manual'),
(2, 'PBB'),
(3, 'BPHTB'),
(4, 'PADL'),
)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=18),
oid='kode')
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
oid = 'nama')
ref_kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
)
ref_nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
)
tanggal = colander.SchemaNode(
colander.Date(),
)
amount = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
default = 0
)
kecamatan_kd = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
missing=colander.drop)
kecamatan_nm = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
missing=colander.drop)
kelurahan_kd = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
missing=colander.drop
)
kelurahan_nm = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
missing=colander.drop)
is_kota = colander.SchemaNode(
colander.Boolean(),
) # deferred_source_type)
status = colander.SchemaNode(
colander.Boolean(),
) # deferred_source_type)
sumber_id = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
widget=widget.SelectWidget(values=SUMBER_ID)) # deferred_source_type)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class view_eis_item(BaseView):
########
# List #
########
@view_config(route_name='eis-item', renderer='templates/eis-item/list.pt',
permission='read')
def view_list(self):
ses = self.req.session
req = self.req
params = req.params
url_dict = req.matchdict
return dict(project='EIS')
##########
# Action #
##########
@view_config(route_name='eis-item-act', renderer='json',
permission='read')
def eis_item_act(self):
ses = self.req.session
req = self.req
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('ref_kode'))
columns.append(ColumnDT('ref_nama'))
columns.append(ColumnDT('tanggal', ))
columns.append(ColumnDT('amount', ))
query = EisDBSession.query().select_from(AR)
rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result()
#######
# Add #
#######
def form_validator(self, form, value):
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = EisDBSession.query(AR).filter_by(id=uid)
row = q.first()
else:
row = None
def get_form(self, class_form, row=None):
schema = class_form(validator=self.form_validator)
schema = schema.bind(sumber_id=SUMBER_ID)
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan','batal'))
def save(self, values, user, row=None):
if not row:
row = AR()
row.created = datetime.now()
row.create_uid = user.id
row.from_dict(values)
row.updated = datetime.now()
row.update_uid = user.id
row.disable = 'disable' in values and values['disable'] and 1 or 0
row.is_kota = 'is_kota' in values and values['is_kota'] and 1 or 0
EisDBSession.add(row)
EisDBSession.flush()
return row
def save_request(self, values, row=None):
if 'id' in self.req.matchdict:
values['id'] = self.req.matchdict['id']
row = self.save(values, self.req.user, row)
self.req.session.flash('AR sudah disimpan.')
def route_list(self):
return HTTPFound(location=self.req.route_url('eis-item') )
def session_failed(self, session_name):
#r = dict(form=self.session[session_name])
del self.session[session_name]
#return r
@view_config(route_name='eis-item-add', renderer='templates/eis-item/add.pt',
permission='add')
def view_eis_item_add(self):
req = self.req
ses = self.session
form = self.get_form(AddSchema)
if req.POST:
if 'simpan' in req.POST:
controls = req.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
#req.session[SESS_ADD_FAILED] = e.render()
#form.set_appstruct(rowd)
return dict(form=form)
#return HTTPFound(location=req.route_url('eis-item-add'))
self.save_request(dict(controls))
return self.route_list()
elif SESS_ADD_FAILED in req.session:
return dict(form=form)
#return self.session_failed(SESS_ADD_FAILED)
return dict(form=form)
########
# Edit #
########
def query_id(self):
return EisDBSession.query(AR).filter_by(id=self.req.matchdict['id'])
def id_not_found(self):
msg = 'AR ID %s Tidak Ditemukan.' % self.req.matchdict['id']
request.session.flash(msg, 'error')
return route_list()
@view_config(route_name='eis-item-edit', renderer='templates/eis-item/add.pt',
permission='edit')
def view_eis_item_edit(self):
request = self.req
row = self.query_id().first()
if not row:
return id_not_found(request)
#values = row.to_dict()
rowd={}
rowd['id'] = row.id
rowd['kode'] = row.kode
rowd['nama'] = row.nama
rowd['ref_kode'] = row.ref_kode
rowd['ref_nama'] = row.ref_nama
rowd['tanggal'] = row.tanggal
rowd['amount'] = row.amount
rowd['kecamatan_kd'] = row.kecamatan_kd
rowd['kecamatan_nm'] = row.kecamatan_nm
rowd['kelurahan_kd'] = row.kelurahan_kd
rowd['kelurahan_nm'] = row.kelurahan_nm
rowd['is_kota'] = row.is_kota
rowd['status'] = row.status
rowd['sumber_id'] = row.sumber_id
form = self.get_form(EditSchema)
form.set_appstruct(rowd)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
return dict(form=form)
#request.session[SESS_EDIT_FAILED] = e.render()
#return HTTPFound(location=request.route_url('eis-item-edit',
# id=row.id))
self.save_request(dict(controls), row)
return self.route_list()
elif SESS_EDIT_FAILED in request.session:
return self.session_failed(SESS_EDIT_FAILED)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='eis-item-delete', renderer='templates/eis-item/delete.pt',
permission='delete')
def view_eis_item_delete(self):
request = self.req
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus','batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'AR ID %d %s sudah dihapus.' % (row.id, row.nama)
try:
q.delete()
EisDBSession.flush()
except:
msg = 'AR ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg)
return self.route_list()
return dict(row=row,
form=form.render())
import os
import uuid
#from ..tools import row2dict, xls_reader
from datetime import datetime
from sqlalchemy import not_, func
from pyramid.view import (view_config,)
from pyramid.httpexceptions import ( HTTPFound, )
import colander
from deform import (Form, widget, ValidationFailure, )
from ..models import EisDBSession
from ..models.eis import Slide
from sqlalchemy.sql.expression import update
from ..views import BaseView, ColumnDT, DataTables
SESS_ADD_FAILED = 'Tambah eis-slide gagal'
SESS_EDIT_FAILED = 'Edit eis-slide gagal'
@colander.deferred
def deferred_slide_type(node, kw):
values = kw.get('slide_type', [])
return widget.SelectWidget(values=values)
SLIDE_TYPE = (('image','Gambar'),
('grid','Grid'),
('chart-line','Chart Garis'),
('chart-bar','Chart-Bar'),
('chart-pie', 'Chart-Pie'))
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=18),
oid='kode')
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
oid = 'nama')
source_type = colander.SchemaNode(
colander.String(),
widget=deferred_slide_type)
source_id = colander.SchemaNode(
colander.String(),
missing = colander.drop)
order_id = colander.SchemaNode(
colander.Integer(),
default = 0,
missing = 0)
aktif = colander.SchemaNode(
colander.Boolean())
status = colander.SchemaNode(
colander.Boolean())
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class view_eis_slide(BaseView):
########
# List #
########
@view_config(route_name='eis-slide', renderer='templates/eis-slide/list.pt',
permission='read')
def view_list(self):
return dict(a={})
##########
# Action #
##########
@view_config(route_name='eis-slide-act', renderer='json',
permission='read')
def eis_slide_act(self):
ses = self.req.session
req = self.req
params = req.params
url_dict = req.matchdict
if url_dict['act']=='grid':
columns = []
columns.append(ColumnDT(Slide.id))
columns.append(ColumnDT(Slide.kode))
columns.append(ColumnDT(Slide.nama))
columns.append(ColumnDT(Slide.source_type))
columns.append(ColumnDT(Slide.source_id))
columns.append(ColumnDT(Slide.order_id))
columns.append(ColumnDT(Slide.aktif))
columns.append(ColumnDT(Slide.status))
query = EisDBSession.query().select_from(Slide)
rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result()
#######
# Add #
#######
def form_validator(self, form, value):
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = EisDBSession.query(Slide).filter_by(id=uid)
row = q.first()
else:
row = None
def get_form(self, class_form, row=None):
schema = class_form(validator=self.form_validator)
schema = schema.bind(slide_type=SLIDE_TYPE)
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan','batal'))
def save(self, values, user, row=None):
if not row:
row = Slide()
row.created = datetime.now()
row.create_uid = user.id
row.from_dict(values)
row.updated = datetime.now()
row.update_uid = user.id
row.aktif = 'aktif' in values and values['aktif'] and 1 or 0
row.status = 'status' in values and values['status'] and 1 or 0
EisDBSession.add(row)
EisDBSession.flush()
if 'aktif' in values and values['aktif']:
stmt = update(Slide).where(Slide.id!=row.id).\
values(aktif=0)
EisDBSession.execute(stmt)
EisDBSession.flush()
return row
def save_request(self, values, row=None):
if 'id' in self.req.matchdict:
values['id'] = self.req.matchdict['id']
row = self.save(values, self.req.user, row)
self.req.session.flash('Slide sudah disimpan.')
def route_list(self):
return HTTPFound(location=self.req.route_url('eis-slide'))
def session_failed(self, session_name):
#r = dict(form=self.session[session_name])
del self.session[session_name]
#return r
@view_config(route_name='eis-slide-add', renderer='templates/eis-slide/add.pt',
permission='add')
def view_eis_slide_add(self):
req = self.req
ses = self.session
form = self.get_form(AddSchema)
if req.POST:
if 'simpan' in req.POST:
controls = req.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
#req.session[SESS_ADD_FAILED] = e.render()
#form.set_appstruct(rowd)
return dict(form=form)
#return HTTPFound(location=req.route_url('eis-slide-add'))
self.save_request(dict(controls))
return self.route_list()
elif SESS_ADD_FAILED in req.session:
return dict(form=form)
#return self.session_failed(SESS_ADD_FAILED)
return dict(form=form)
########
# Edit #
########
def query_id(self):
return EisDBSession.query(Slide).filter_by(id=self.req.matchdict['id'])
def id_not_found(self):
msg = 'Slide ID %s Tidak Ditemukan.' % self.req.matchdict['id']
request.session.flash(msg, 'error')
return route_list()
@view_config(route_name='eis-slide-edit', renderer='templates/eis-slide/add.pt',
permission='edit')
def view_eis_slide_edit(self):
request = self.req
row = self.query_id().first()
if not row:
return id_not_found(request)
#values = row.to_dict()
rowd={}
rowd['id'] = row.id
rowd['kode'] = row.kode
rowd['nama'] = row.nama
rowd['source_type'] = row.source_type
rowd['source_id'] = row.source_id
rowd['order_id'] = row.order_id
rowd['aktif'] = row.aktif
rowd['status'] = row.status
form = self.get_form(EditSchema)
form.set_appstruct(rowd)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
return dict(form=form)
#request.session[SESS_EDIT_FAILED] = e.render()
#return HTTPFound(location=request.route_url('eis-slide-edit',
# id=row.id))
self.save_request(dict(controls), row)
return self.route_list()
elif SESS_EDIT_FAILED in request.session:
return self.session_failed(SESS_EDIT_FAILED)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='eis-slide-delete', renderer='templates/eis-slide/delete.pt',
permission='delete')
def view_eis_slide_delete(self):
request = self.req
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus','batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'Slide ID %d %s sudah dihapus.' % (row.id, row.nama)
try:
q.delete()
EisDBSession.flush()
except:
msg = 'Slide ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg)
return self.route_list()
return dict(row=row,
form=form.render())
<html metal:use-macro="load: base.pt">
<div metal:fill-slot="left-menu">
<link href="/static/css/navbar-fixed-left.css" rel="stylesheet">
</div>
</html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: base.pt">
<div metal:fill-slot="left-menu">
<link href="/static/css/navbar-fixed-left.css" rel="stylesheet">
<div class="nav-side-menu">
<div class="brand">Eksekutif Summary</div>
<i class="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content"></i>
<div class="menu-list">
<ul id="menu-content" class="menu-content collapse out">
<!--li>
<a href="#">
<i class="fa fa-dashboard fa-lg"></i> Executive Summary
</a>
</li-->
<li data-toggle="collapse" data-target="#tabular" class="collapsed active">
<a href="#"><i class="fa fa-gift fa-lg"></i> Tabular <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="tabular">
<li tal:repeat="dat tab_datas"><a href="#" onclick="javascript:hide_other();$('#grid-${dat.id}').show();">${dat.nama}</a></li>
</ul>
<li data-toggle="collapse" data-target="#line" class="collapsed">
<a href="#"><i class="fa fa-globe fa-lg"></i> Line Graph <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="line">
<li tal:repeat="dat line_datas"><a href="#" onclick="javascript:hide_other();$('#chart-line-${dat.id}').show();">${dat.nama}</a></li>
</ul>
<li data-toggle="collapse" data-target="#bar" class="collapsed">
<a href="#"><i class="fa fa-car fa-lg"></i> Bar Graph <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="bar">
<li tal:repeat="dat bar_datas"><a href="#" onclick="javascript:hide_other();$('#chart-bar-${dat.id}').show();">${dat.nama}</a></li>
</ul>
<li data-toggle="collapse" data-target="#pie" class="collapsed">
<a href="#"><i class="fa fa-car fa-lg"></i> Pie Graph <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="pie">
<li tal:repeat="dat pie_datas"><a href="#" onclick="javascript:hide_other();$('#chart-pie-${dat.id}').show();">${dat.nama}</a></li>
</ul>
</ul>
</div>
</div>
</div>
</html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro = "load: ../../../views/templates/base.pt">
<div metal:fill-slot="header">
<link href="/static/chart/legend/legend.css" rel="stylesheet">
<script type="text/javascript" src="/static/chart/Chart.js"> </script>
<script type="text/javascript" src="/static/chart/legend/legend.js"> </script>
</div>
<div metal:fill-slot="company">
<a class="navbar-brand" href="/eis">${request.company}</a>
</div>
<div metal:fill-slot="navs">
<ul class="nav navbar-nav">
<li><a href="/eis" class="navbar-brand"><strong>${request.company}</strong></a></li>
<!-- Admin Menu -->
<li class="dropdown" tal:condition="request.user.user_name=='admin'">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Konfigurasi <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/eis/carousel">Carousel</a></li>
<li><a href="/eis/chart">Chart</a></li>
<!-- <li><a href="/eis-chart-item">Chart Item</a></li> -->
<li><a href="/eis/slide">Slide</a></li>
</ul>
</li>
</ul>
</div>
</html>
<html metal:use-macro="load: base.pt">
<div metal:fill-slot="content">
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
font-size: 30px;
font-weight: normal;
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
</div>
<div metal:fill-slot="scripts">
<div class="well" style="background-color:rgb(255,255,255); padding-top:5px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<!-- <h3 style="margin-top:5px;">${request.company}</h3> -->
<h2 style="margin-top:5px;">EKSEKUTIF SUMMARY</h2>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
<div id="myCarousel" class="carousel" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li tal:repeat="dat datas" id="${dat.source_type}" data-target="#myCarousel" data-slide-to="${repeat.dat.index}"
class="${dat.aktif and 'active' or ''}" style="background-color:rgb(0,0,0)"></li>
</ol>
<script>
</script>
<div class="carousel-inner" role="listbox">
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12" style="margin-bottom:50px;" tal:condition="dat.source_type=='grid'">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/dashboard/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px;" tal:condition="dat.source_type=='image'">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12" style="margin-bottom:50px;" tal:condition="dat.source_type=='chart-line'">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/dashboard/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px;" tal:condition="dat.source_type=='chart-bar'">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/dashboard/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px;" tal:condition="dat.source_type=='chart-pie'">
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/dashboard/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
<script>
$(function(){
$('.carousel').carousel({
interval: 5000
});
});
var bar_chart_options = {
responsive:true
};
/*****************************/
$(function(){
/*$('#myCarousel').on('slide.bs.carousel',
function () {
var slideFrom = $(this).find('.active').index();
var slideTo = $(this).find('.active').attr('id');
//var slideTo = $(e.relatedTarget).index();
//var toID = $(e.relatedTarget).attr('id');
//x = $('#myCarousel .active').index('#myCarousel .item')
//ctx_{dat.id}
console.log(slideFrom + '=>' + slideTo)
});*/
});
/*****************************/
/*****************************/
/*****************************/
/*****************************/
</script>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<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']" style="display: none;">
{structure:field.serialize()}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['tahun']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group" tal:define="field form['kode']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</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-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${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>
<script>
$('#nama').bind('typeahead:selected', function(obj, datum, name) {
$('#kode').val(datum.kode);
});
</script>
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['order_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="col-md-6">
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group" tal:define="field form['aktif']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div class="panel panel-default" title="">
<div class="panel-heading">Nilai</div>
<div class="panel-body">
${form.start_mapping('amount')}
<!--div class="row collapse collapse error"if field.error:-->
<div class="form-group" tal:repeat="field form['amount']">
<label class="control-label col-md-3">${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
${form.end_mapping('amount')}
</div>
</div>
</div>
<div class="col-md-12"></div>
<div class="form-group col-md-offset-5">
<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>
<script>
var nip_field='${field.oid}';
var nm_field ='${field.oid}';
var gj_field ='${field.oid}';
</script>
<script>
$('#${field.oid}').bind('typeahead:selected', function(obj, datum, name) {
$('#'+nip_field).val(datum.nip);
$('#'+nm_field).val(datum.nama);
$('#'+id_field).val(datum.id);
$('#'+gj_field).val(datum.gaji_bersih);
});
</script>
</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">Peringatan</h3>
</div>
<div class="panel-body">
Hapus Data #${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">
<h4>${request.title}</h4>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<table id="table1" class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Tahun</th>
<th>Kode</th>
<th>Uraian</th>
<th>Amt. Tahun</th>
<th>Amt. Bulan</th>
<th>Amt. Minggu</th>
<th>Amt. Hari</th>
<th>Order</th>
<th>Status</th>
<th>Aktif</th>
<th>Tgl.Update</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div metal:fill-slot="scripts">
<script>
var mID;
var mThn;
var oTable;
var oTableUrl = "/eis/carousel/grid/act";
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom : '<"toolbar">lfrtip',
processing : true,
serverSide : true,
ajax : oTableUrl,
stateSave : true,
scrollCollapse: true,
sort : true,
info : false,
filter : true,
autoWidth : false,
paginate : true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columnDefs: [{
searchable: false,
visible: false,
targets: [0]
}],
columns: [
null,
{"width": "50px"},
{"width": "60px"},
{"width": "350px", "sClass":"left"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "40px", "sClass":"center"},
{"width": "40px", "sClass":"center"},
{"width": "40px", "sClass":"center"},
{"width": "75px", "sClass":"center"},
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Pertama ",
"last" : "Akhir ",
"previous": "Mundur ",
"next" : "Maju ",
},
"lengthMenu": "Tampil _MENU_ baris "
},
});
var tb_array = [
'<div class="btn-carousel pull-left">',
' <button id="btn_add" class="btn btn btn-primary" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger" type="button">Hapus</button>',
' <!--button id="btn_pdf" class="btn btn btn-warning" type="button">PDF</button-->',
' <button id="btn_csv" class="btn btn btn-default" type="button">CSV</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var aData = oTable.row( this ).data();
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
mID = aData[0];
oTable.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
$('#btn_add').click(function () {
window.location = '/eis/carousel/add';
});
$('#btn_edit').click(function () {
if (mID) window.location = '/eis/carousel/'+mID+'/edit';
else alert('Pilih Baris yang akan di edit');
});
$('#btn_delete').click(function () {
if (mID) window.location = '/eis/carousel/'+mID+'/delete';
else alert('Pilih Baris yang akan di hapus');
});
})
</script>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<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']" style="display: none;">
{structure:field.serialize()}
</div>
</div>
<div class="col-md-8">
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['kode']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</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-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['source_type']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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="col-md-6">
<div class="form-group" tal:define="field form['is_sum']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-6" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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>
<div class="form-group" tal:define="field form['rekening_kd']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group">
<div class="col-sm-6">
<div class="form-group" tal:define="field form['color']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${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="col-sm-6">
<div class="form-group" tal:define="field form['highlight']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${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>
<div class="form-group">
<div class="col-md-6">
<div class="panel panel-default" title="">
<div class="panel-heading">Group 1</div>
<div class="panel-body">
${form.start_mapping('values_1')}
<!--div class="row collapse collapse error"if field.error:-->
<div class="form-group" tal:repeat="field form['values_1']">
<label class="control-label col-md-3">${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
${form.end_mapping('values_1')}
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default" title="">
<div class="panel-heading">Group 2</div>
<div class="panel-body">
${form.start_mapping('values_2')}
<!--div class="row collapse collapse error"if field.error:-->
<div class="form-group" tal:repeat="field form['values_2']">
<label class="control-label col-md-3">${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
${form.end_mapping('values_2')}
</div>
</div>
</div>
</div>
<div class="col-md-offset-2">
<div class="form-group">
<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>
</div>
</fieldset>
</form>
</div>
<script>
var nip_field='${field.oid}';
var nm_field ='${field.oid}';
var gj_field ='${field.oid}';
</script>
<script>
$('#${field.oid}').bind('typeahead:selected', function(obj, datum, name) {
$('#'+nip_field).val(datum.nip);
$('#'+nm_field).val(datum.nama);
$('#'+id_field).val(datum.id);
$('#'+gj_field).val(datum.gaji_bersih);
});
</script>
</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">Peringatan</h3>
</div>
<div class="panel-body">
${request.title} #${row.kode} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<form class="form-horizontal">
<div class="form-group">
<div class="form-group" id="item-kode">
<label for="kode" class="control-label col-md-2" id="req-kode">
Kode</label>
<div class="col-md-4">
<input type="text" class="form-control" value="${rows and rows.kode or None}">
</div>
</div>
<div class="form-group" id="item-uraian">
<label for="uraian" class="control-label col-md-2" id="req-uraian">
Uraian</label>
<div class="col-md-4">
<input type="text" class="form-control" value="${rows and rows.nama or None}">
</div>
</div>
</div>
</form>
<table id="table1" class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Kode</th>
<th>Uraian</th>
<th>Type</th>
<th>Nilai 1</th>
<th>Nilai 2</th>
<th>Nilai 3</th>
<th>Nilai 4</th>
<th>Nilai 5</th>
<th>Nilai 6</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div metal:fill-slot="scripts">
<script>
var mID;
var mThn;
var oTable;
var oTableUrl = "/eis/chart/item/${rows.id}/grid/act";;
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom : '<"toolbar">lfrtip',
processing : true,
serverSide : true,
ajax : oTableUrl,
stateSave : true,
scrollCollapse: true,
sort : true,
info : false,
filter : true,
autoWidth : false,
paginate : true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columnDefs: [{
searchable: false,
visible: false,
targets: [0]
}],
columns: [
null,
{"width": "75px"},
null,
{"width": "100px", "sClass":"left"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
{"width": "100px", "sClass":"right"},
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Pertama ",
"last" : "Akhir ",
"previous": "Mundur ",
"next" : "Maju ",
},
"lengthMenu": "Tampil _MENU_ baris "
},
});
var tb_array = [
'<div class="btn pull-left">',
' <button id="btn_back" class="btn btn btn-primary" type="button">Kembali</button>',
' <button id="btn_add" class="btn btn btn-primary" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger" type="button">Hapus</button>',
' <!--button id="btn_pdf" class="btn btn btn-warning" type="button">PDF</button-->',
' <button id="btn_csv" class="btn btn btn-default" type="button">CSV</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var aData = oTable.row( this ).data();
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
mID = aData[0];
oTable.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
$('#btn_back').click(function () {
window.location = '/eis/chart';
});
$('#btn_add').click(function () {
window.location = '/eis/chart/item/${rows.id}/add';
});
$('#btn_edit').click(function () {
if (mID) window.location = '/eis/chart/item/${rows.id}/'+mID+'/edit';
else alert('Pilih Baris yang akan di edit');
});
$('#btn_delete').click(function () {
if (mID) window.location = '/eis/chart/item/${rows.id}/'+mID+'/delete';
else alert('Pilih Baris yang akan di hapus');
});
})
</script>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<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">Peringatan</h3>
</div>
<div class="panel-body">
${request.title} #${row.kode} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<table id="table1" class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Kode</th>
<th>Uraian</th>
<th>Type</th>
<th>Pembagi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div metal:fill-slot="scripts">
<script>
var mID;
var mThn;
var oTable;
var oTableUrl = "/eis/chart/grid/act";
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom : '<"toolbar">lfrtip',
processing : true,
serverSide : true,
ajax : oTableUrl,
stateSave : true,
scrollCollapse: true,
sort : true,
info : false,
filter : true,
autoWidth : false,
paginate : true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columnDefs: [{
searchable: false,
visible: false,
targets: [0]
}],
columns: [
null,
{"width": "75px"},
null,
{"width": "75px"},
{"width": "75px", "sClass": "right"},
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Pertama ",
"last" : "Akhir ",
"previous": "Mundur ",
"next" : "Maju ",
},
"lengthMenu": "Tampil _MENU_ baris "
},
});
var tb_array = [
'<div class="btn pull-left">',
' <button id="btn_add" class="btn btn btn-primary" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger" type="button">Hapus</button>',
' <button id="btn_csv" class="btn btn btn-default" type="button">CSV</button>',
' <button id="btn_item" class="btn btn btn-warning" type="button">Item data</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var aData = oTable.row( this ).data();
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
mID = aData[0];
oTable.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
$('#btn_item').click(function () {
if (mID) window.location = '/eis/chart/item/'+mID;
else alert('Pilih Baris dulu');
});
$('#btn_add').click(function () {
window.location = '/eis/chart/add';
});
$('#btn_edit').click(function () {
if (mID) window.location = '/eis/chart/'+mID+'/edit';
else alert('Pilih Baris yang akan di edit');
});
$('#btn_delete').click(function () {
if (mID) window.location = '/eis/chart/'+mID+'/delete';
else alert('Pilih Baris yang akan di hapus');
});
})
</script>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<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']" style="display: none;">
{structure:field.serialize()}
</div>
</div>
<div class="col-md-8">
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['kode']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</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-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['ref_kode']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
</div>
<div class="form-group" tal:define="field form['ref_nama']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['amount']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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="col-md-6">
<div class="form-group" tal:define="field form['tanggal']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-6" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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>
<div class="form-group">
<div class="col-md-4">
<div class="form-group" tal:define="field form['kecamatan_kd']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-6" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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="col-md-8">
<div class="form-group" tal:define="field form['kecamatan_nm']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-5" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-7">
${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>
<div class="form-group">
<div class="col-md-4">
<div class="form-group" tal:define="field form['kelurahan_kd']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-6" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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="col-md-8">
<div class="form-group" tal:define="field form['kelurahan_nm']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-5" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-7">
${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>
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['sumber_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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>
<div class="col-md-offset-2">
<div class="form-group">
<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>
</div>
</fieldset>
</form>
</div>
<script>
var nip_field='${field.oid}';
var nm_field ='${field.oid}';
var gj_field ='${field.oid}';
</script>
<script>
$('#${field.oid}').bind('typeahead:selected', function(obj, datum, name) {
$('#'+nip_field).val(datum.nip);
$('#'+nm_field).val(datum.nama);
$('#'+id_field).val(datum.id);
$('#'+gj_field).val(datum.gaji_bersih);
});
</script>
</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">Peringatan</h3>
</div>
<div class="panel-body">
${request.title} #${row.kode} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<table id="table1" class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Kode</th>
<th>Uraian</th>
<th>Ref. Kode</th>
<th>Ref. Nama</th>
<th>Tanggal</th>
<th>Nilai</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div metal:fill-slot="scripts">
<script>
var mID;
var mThn;
var oTable;
var oTableUrl = "/eis-item/grid/act";;
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom : '<"toolbar">lfrtip',
processing : true,
serverSide : true,
ajax : oTableUrl,
stateSave : true,
scrollCollapse: true,
sort : true,
info : false,
filter : true,
autoWidth : false,
paginate : true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columnDefs: [{
searchable: false,
visible: false,
targets: [0]
}],
columns: [
null,
{"width": "75px"},
null,
{"width": "100px", "sClass":"left"},
null,
{"width": "75px", "sClass":"center"},
{"width": "100px", "sClass":"right"},
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Pertama ",
"last" : "Akhir ",
"previous": "Mundur ",
"next" : "Maju ",
},
"lengthMenu": "Tampil _MENU_ baris "
},
});
var tb_array = [
'<div class="btn pull-left">',
' <button id="btn_back" class="btn btn btn-primary" type="button">Kembali</button>',
' <button id="btn_add" class="btn btn btn-primary" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger" type="button">Hapus</button>',
' <!--button id="btn_pdf" class="btn btn btn-warning" type="button">PDF</button-->',
' <button id="btn_csv" class="btn btn btn-default" type="button">CSV</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var aData = oTable.row( this ).data();
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
mID = aData[0];
oTable.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
$('#btn_back').click(function () {
window.location = '/eis-chart';
});
$('#btn_add').click(function () {
window.location = '/eis-item/add';
});
$('#btn_edit').click(function () {
if (mID) window.location = '/eis-item/'+mID+'/edit';
else alert('Pilih Baris yang akan di edit');
});
$('#btn_delete').click(function () {
if (mID) window.location = '/eis-item/'+mID+'/delete';
else alert('Pilih Baris yang akan di hapus');
});
})
</script>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<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']" style="display: none;">
{structure:field.serialize()}
</div>
</div>
<div class="col-md-8">
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['kode']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</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-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group" tal:define="field form['source_type']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group" tal:define="field form['source_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-2" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-10">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<div class="form-group" tal:define="field form['order_id']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="form-group" tal:define="field form['is_aktif']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-6" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-6">
${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="col-md-3">
<div class="form-group" tal:define="field form['disabled']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-4" id="req-${field.oid}">
${field.title}</label>
<div class="col-md-8">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
</div>
</div>
<div class="col-md-6"></div>
<div class="form-group">
<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>
<script>
var nip_field='${field.oid}';
var nm_field ='${field.oid}';
var gj_field ='${field.oid}';
</script>
<script>
$('#${field.oid}').bind('typeahead:selected', function(obj, datum, name) {
$('#'+nip_field).val(datum.nip);
$('#'+nm_field).val(datum.nama);
$('#'+id_field).val(datum.id);
$('#'+gj_field).val(datum.gaji_bersih);
});
</script>
</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">Peringatan</h3>
</div>
<div class="panel-body">
${request.title} #${row.kode} ${row.nama} ?
</div>
</div>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<div tal:content="structure form"/>
</div>
</html>
<html metal:use-macro="load: ../base.pt">
<div metal:fill-slot="content">
<h4>${request.title}</h4>
<hr>
<table id="table1" class="table table-bordered table-hover table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Kode</th>
<th>Uraian</th>
<th>Type</th>
<th>URL/ID</th>
<th>Order</th>
<th>Aktif</th>
<th>Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div metal:fill-slot="scripts">
<script>
var mID;
var mThn;
var oTable;
var oTableUrl = "/eis/slide/grid/act";
$(document).ready(function () {
oTable = $('#table1').DataTable({
dom : '<"toolbar">lfrtip',
processing : true,
serverSide : true,
ajax : oTableUrl,
stateSave : true,
scrollCollapse: true,
sort : true,
info : false,
filter : true,
autoWidth : false,
paginate : true,
paginationType: "full_numbers",
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
columnDefs: [{
searchable: false,
visible: false,
targets: [0]
}],
columns: [
null,
{"width": "75px"},
null,
{"width": "100px"},
null,
{"width": "50px", "sClass":"center"},
{"width": "60px", "sClass":"center"},
{"width": "60px", "sClass":"center"},
],
"language": {
"search" : "Cari: ",
"paginate":{
"first" : "Pertama ",
"last" : "Akhir ",
"previous": "Mundur ",
"next" : "Maju ",
},
"lengthMenu": "Tampil _MENU_ baris "
},
});
var tb_array = [
'<div class="btn-eis-slide pull-left">',
' <button id="btn_add" class="btn btn btn-primary" type="button">Tambah</button>',
' <button id="btn_edit" class="btn btn btn-primary" type="button">Edit</button>',
' <button id="btn_delete" class="btn btn btn-danger" type="button">Hapus</button>',
' <!--button id="btn_pdf" class="btn btn btn-warning" type="button">PDF</button-->',
' <button id="btn_calc" class="btn btn btn-default" type="button">Hitung</button>',
' &nbsp;',
'</div>',
];
var tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#table1 tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var aData = oTable.row( this ).data();
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
mID = aData[0];
oTable.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
$('#btn_calc').click(function () {
window.location = '/eis/calc-all';
});
$('#btn_add').click(function () {
window.location = '/eis/slide/add';
});
$('#btn_edit').click(function () {
if (mID) window.location = '/eis/slide/'+mID+'/edit';
else alert('Pilih Baris yang akan di edit');
});
$('#btn_delete').click(function () {
if (mID) window.location = '/eis/slide/'+mID+'/delete';
else alert('Pilih Baris yang akan di hapus');
});
})
</script>
</div>
</html>
<html metal:use-macro="load: base-eis.pt">
<div metal:fill-slot="scripts">
<script>
/*$(function(){
$('.carousel').carousel({
interval: 5000
});
});
*/
/*function formatNumber (num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
};
*/
function hide_other(){
$('.data').hide();
};
var bar_chart_options = {
responsive:true
};
</script>
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:0px;
}
@media (min-width: 767px) {
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:320px;
}
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
padding-left:0px;
}
@media (min-width: 767px) {
.subjudul {
padding-left:320px;
}
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
<div class="well" style="background-color:rgb(255,255,255); padding-top:75px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<h3 style="margin-top:5px;">EKSEKUTIF SUMMARY PAJAK DAERAH</h3>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
</div>
<div style="background-color:rgb(255,255,255);">
<div class="subjudul">
<div class="col-md-12 data" id="welcome" style="margin-bottom:50px;">
<center>
<div class="row">
<div class="col-md-12">
<h3 style="margin-top:5px;">SELAMAT DATANG</h3>
<h4>SILAHKAN PILIH MENU DI SEBELAH KIRI / ATAS LAYAR</h4>
</div>
</div>
</center>
</div>
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='grid'" id="grid-${dat.id}">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
})
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='image'" id="image-${dat.id}">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-line'" id="chart-line-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
; // "<%= value %>";
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-bar'" id="chart-bar-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-pie'" id="chart-pie-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</html>
<html metal:use-macro="load: base.pt">
<div metal:fill-slot="content">
<!-- Main component for a primary marketing message or call to action -->
<div class="well">
<h1>${request.app_name} ${request.company} </h1>
<p><img src="/static/img/logo.png" class="img-float img-thumbnail"/>
Selamat datang di module Eksekutif Summary
<p>Aplikasi ini dibangun dengan menggunakan platform open source yang terdiri dari:</p>
<ul>
<li>Web Framework<a href="http://pylonsproject.org/">Pyramid</a> </li>
<li>Template <a href="https://pypi.python.org/pypi/ziggurat-foundations">Ziggurat Foundations</a></li>
<li>Template <a href="http://docs.pylonsproject.org/projects/pyramid-chameleon/en/latest/">Chameleon</a></li>
<li>Form Generator <a href="http://docs.pylonsproject.org/projects/deform/">Deform</a></li>
<li>CSS Framework <a href="http://getbootstrap.com">Bootstrap</a></li>
<li>Database <a href="http://postgresql.org">Postgres SQL</a></li>
</ul>
<h3>Silahkan pilih sub module berikut ini</h3>
<div><a href="/dashboard" class="btn btn-info" role="button">Dashboard</a>
<a href="/eis-home" class="btn btn-info" role="button">Interaktif</a></div>
<p>
</div><!--well-->
</div>
</html>
<html metal:use-macro="load: base.pt">
<div metal:fill-slot="left-menu">
<link href="/static/css/navbar-fixed-left.css" rel="stylesheet">
</div>
<div metal:fill-slot="scripts">
<script>
function hide_other(){
$('.data').hide();
};
var bar_chart_options = {
responsive:true
};
</script>
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:0px;
}
@media (min-width: 767px) {
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:320px;
}
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
padding-left:0px;
}
@media (min-width: 767px) {
.subjudul {
padding-left:320px;
}
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
<!-- menu left -->
<div class="nav-side-menu">
<div class="brand">Eksekutif Summary</div>
<i class="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content"></i>
<div class="menu-list">
<ul id="menu-content" class="menu-content collapse out">
<!--li>
<a href="#">
<i class="fa fa-dashboard fa-lg"></i> Executive Summary
</a>
</li-->
<li data-toggle="collapse" data-target="#tabular" class="collapsed active">
<a href="#"><i class="fa fa-gift fa-lg"></i> Tabular <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="tabular">
<li tal:repeat="dat tab_datas"><a href="#" onclick="javascript:hide_other();$('#grid-${dat.id}').show();">${dat.nama}</a>
</li>
</ul>
<li data-toggle="collapse" data-target="#line" class="collapsed">
<a href="#"><i class="fa fa-globe fa-lg"></i> Line Graph <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="line">
<li tal:repeat="dat line_datas"><a href="#" onclick="javascript:hide_other();$('#chart-line-${dat.id}').show();">${dat.nama}</a></li>
</ul>
<li data-toggle="collapse" data-target="#bar" class="collapsed">
<a href="#"><i class="fa fa-car fa-lg"></i> Bar Graph <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="bar">
<li tal:repeat="dat bar_datas"><a href="#" onclick="javascript:hide_other();$('#chart-bar-${dat.id}').show();">${dat.nama}</a></li>
</ul>
<li data-toggle="collapse" data-target="#pie" class="collapsed">
<a href="#"><i class="fa fa-car fa-lg"></i> Pie Graph <span class="arrow"></span></a>
</li>
<ul class="sub-menu collapse" id="pie">
<li tal:repeat="dat pie_datas"><a href="#" onclick="javascript:hide_other();$('#chart-pie-${dat.id}').show();">${dat.nama}</a></li>
</ul>
</ul>
</div>
<!-- end of menu left -->
</div>
<div class="well" style="background-color:rgb(255,255,255); padding-top:75px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<h3 style="margin-top:5px;">EKSEKUTIF SUMMARY PAJAK DAERAH</h3>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
</div>
<div style="background-color:rgb(255,255,255);">
<div class="subjudul">
<div class="col-md-12 data" id="welcome" style="margin-bottom:50px;">
<center>
<div class="row">
<div class="col-md-12">
<h3 style="margin-top:5px;">SELAMAT DATANG</h3>
<h4>SILAHKAN PILIH MENU DI SEBELAH KIRI / ATAS LAYAR</h4>
</div>
</div>
</center>
</div>
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='grid'" id="grid-${dat.id}">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
})
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='image'" id="image-${dat.id}">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-line'" id="chart-line-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
; // "<%= value %>";
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-bar'" id="chart-bar-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-pie'" id="chart-pie-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</html>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!