Commit 088c91ba by aa.gusti

eis

0 parents
Showing 80 changed files with 3443 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 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 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
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
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
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
EisData = {
'options': ['insert if not exists','delete first'],
'csv': ['wells.csv'],
}
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
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
.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
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 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 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
<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
<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">
<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.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>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!