perubahan ke base 5

1 parent 3e14c155
from sqlalchemy import engine_from_config from sqlalchemy import engine_from_config
from .models import EisDBSession, EisBase # from .models import DBSession, EisBase
from opensipkd.tools import get_settings
def main(global_config, **settings): from pyramid.events import BeforeRender, subscriber
""" This function returns a Pyramid WSGI application. from opensipkd.base import get_params, BaseApp
""" import os
if 'eis.' in settings:
engine = engine_from_config(settings, 'eis.') class AppClass(BaseApp):
EisDBSession.configure(bind=engine) def __init__(self):
EisBase.metadata.bind = engine super().__init__()
self.base_dir = os.path.split(__file__)[0]
APP_CLASS = AppClass()
def includeme(config):
# APP_CLASS.init()
# APP_CLASS.static_views(config)
# SPPT_CLASS.route_from_list(config, routes, paket="opensipkd.pbb.esppt")
APP_CLASS.route_from_csv(config, "eispajak.views")
config.scan(".")
print("+", __name__, "includeme class loaded")
# url = 'pbb.url' in settings and settings['pbb.url'] and 'pbb.' or 'sqlalchemy.'
# # if not url:
# # url = 'pbbm.url' in settings and settings['pbbm.url'] and 'pbbm.' or 'sqlalchemy.'
# # log.debug(url)
# engine = engine_from_config(settings, url)
# PbbmDBSession.configure(bind=engine)
# PbbmBase.metadata.bind = engine
# set_routes(config, app_id=191)
# config.scan('.')
# log.info("Module PBB Monitoring Loaded")
# if 'eis.' in settings:
# engine = engine_from_config(settings, 'eis.')
# DBSession.configure(bind=engine)
# EisBase.metadata.bind = engine
@subscriber(BeforeRender)
def add_global(event):
event['get_eis_menus'] = APP_CLASS.get_menus
\ No newline at end of file \ No newline at end of file
from datetime import datetime
from sqlalchemy import ( from sqlalchemy import (
Column, func
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, from opensipkd.base.models import *
Base as EisBase, DBSession as EisDBSession, from opensipkd.base.models import (DefaultModel as BaseDefaultModel)
KodeModel as BaseKodeModel, NamaModel as BaseNamaModel)
TABLE_ARGS = {'extend_existing':True,
'schema':'eis'
}
class DefaultModel(BaseDefaultModel): class DefaultModel(BaseDefaultModel):
def save(self):
if self.id:
EisDBSession.merge(self)
else:
EisDBSession.add(self)
@classmethod
def query(cls):
return EisDBSession.query(cls)
@classmethod @classmethod
def count(cls): def count(cls):
return EisDBSession.query(func.count('id')).scalar() return DBSession.query(func.count('id')).scalar()
class KodeModel(DefaultModel, BaseKodeModel):
pass
class NamaModel(KodeModel, BaseNamaModel):
pass
from .eis import Eis, Slide, Chart, ChartItem, EisParams, ArPayment, LastUpdate
\ No newline at end of file \ No newline at end of file
from .eis import *
\ No newline at end of file \ No newline at end of file
from datetime import datetime
from sqlalchemy import ( from sqlalchemy import (
Column, Column,
Integer, Integer,
BigInteger, BigInteger,
SmallInteger, SmallInteger,
Text,
DateTime, DateTime,
String, String,
UniqueConstraint, UniqueConstraint,
ForeignKey, ForeignKey
Index
) )
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm import ( from sqlalchemy.orm import (
scoped_session, relationship
sessionmaker,
relationship, backref
) )
from ..models import (EisDBSession, DefaultModel, EisBase, NamaModel, TABLE_ARGS) from . import (DBSession, DefaultModel, Base, NamaModel, TABLE_ARGS, Base)
class Eis(EisBase, NamaModel): class Eis(Base, NamaModel):
__tablename__ = 'wells' __tablename__ = 'wells'
tahun = Column(Integer) tahun = Column(Integer)
amt_tahun = Column(BigInteger) amt_tahun = Column(BigInteger)
...@@ -33,7 +26,7 @@ class Eis(EisBase, NamaModel): ...@@ -33,7 +26,7 @@ class Eis(EisBase, NamaModel):
@classmethod @classmethod
def sum_data(cls, kode, tahun): def sum_data(cls, kode, tahun):
q = EisDBSession.query(cls).filter_by( q = DBSession.query(cls).filter_by(
kode==kode, kode==kode,
tahun=tahun).first() tahun=tahun).first()
if q: if q:
...@@ -47,13 +40,13 @@ class Eis(EisBase, NamaModel): ...@@ -47,13 +40,13 @@ class Eis(EisBase, NamaModel):
@classmethod @classmethod
def sum_order_id(cls, tahun): def sum_order_id(cls, tahun):
q = EisDBSession.query(cls).filter_by( q = DBSession.query(cls).filter_by(
tahun=tahun) tahun=tahun)
if q: if q:
return q return q
return return
class Slide(NamaModel, EisBase): class Slide(NamaModel, Base):
__tablename__ = 'slides' __tablename__ = 'slides'
source_type = Column(String(16)) #grid, image, chart-line, chart-pie, chart-bar source_type = Column(String(16)) #grid, image, chart-line, chart-pie, chart-bar
source_id = Column(String(128)) source_id = Column(String(128))
...@@ -61,7 +54,7 @@ class Slide(NamaModel, EisBase): ...@@ -61,7 +54,7 @@ class Slide(NamaModel, EisBase):
aktif = Column(SmallInteger, default=0) aktif = Column(SmallInteger, default=0)
__table_args__ = TABLE_ARGS __table_args__ = TABLE_ARGS
class Chart(NamaModel, EisBase): class Chart(NamaModel, Base):
__tablename__ = 'charts' __tablename__ = 'charts'
chart_type = Column(String(16)) chart_type = Column(String(16))
label = Column(String(128)) #digunakan jika chart membutuhkan label label = Column(String(128)) #digunakan jika chart membutuhkan label
...@@ -70,7 +63,7 @@ class Chart(NamaModel, EisBase): ...@@ -70,7 +63,7 @@ class Chart(NamaModel, EisBase):
__table_args__ = (UniqueConstraint('kode'), __table_args__ = (UniqueConstraint('kode'),
TABLE_ARGS) TABLE_ARGS)
class ChartItem(NamaModel, EisBase): class ChartItem(NamaModel, Base):
__tablename__ = 'chart_items' __tablename__ = 'chart_items'
value_1 = Column(BigInteger, default=0) value_1 = Column(BigInteger, default=0)
value_2 = Column(BigInteger, default=0) value_2 = Column(BigInteger, default=0)
...@@ -84,7 +77,7 @@ class ChartItem(NamaModel, EisBase): ...@@ -84,7 +77,7 @@ class ChartItem(NamaModel, EisBase):
value10 = Column(BigInteger, default=0) value10 = Column(BigInteger, default=0)
value11 = Column(BigInteger, default=0) value11 = Column(BigInteger, default=0)
value12 = Column(BigInteger, default=0) value12 = Column(BigInteger, default=0)
chart_id = Column(Integer, ForeignKey('eis.charts.id')) chart_id = Column(Integer, ForeignKey(Chart.id))
source_type = Column(String(32), default='realisasi') source_type = Column(String(32), default='realisasi')
rekening_kd = Column(String(128)) rekening_kd = Column(String(128))
color = Column(String(6)) color = Column(String(6))
...@@ -99,17 +92,17 @@ class ChartItem(NamaModel, EisBase): ...@@ -99,17 +92,17 @@ class ChartItem(NamaModel, EisBase):
__table_args__ = (UniqueConstraint('kode'), __table_args__ = (UniqueConstraint('kode'),
TABLE_ARGS) TABLE_ARGS)
class EisParams(NamaModel, EisBase): class EisParams(NamaModel, Base):
__tablename__ = 'params' __tablename__ = 'params'
last_update = Column(DateTime(timezone=False), nullable=True) last_update = Column(DateTime(timezone=False), nullable=True)
__table_args__ = (TABLE_ARGS) __table_args__ = (TABLE_ARGS)
class LastUpdate(DefaultModel, EisBase): class LastUpdate(DefaultModel, Base):
__tablename__ = 'last_update' __tablename__ = 'last_update'
wells = Column(DateTime(timezone=False), nullable=True) wells = Column(DateTime(timezone=False), nullable=True)
__table_args__ = (TABLE_ARGS) __table_args__ = (TABLE_ARGS)
class ArPayment(NamaModel, EisBase): class ArPayment(NamaModel, Base):
__tablename__ = 'ar_payment' __tablename__ = 'ar_payment'
tanggal = Column(DateTime(timezone=False)) tanggal = Column(DateTime(timezone=False))
denda = Column(BigInteger) denda = Column(BigInteger)
......
ChartData = {
'options': ['insert if not exists','delete first'],
'csv': ['chart.csv'],
}
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
kode,nama,path,status,type
eis,EIS,/eis,1,0
eis-carousel,Carousel,/eis/carousel,1,0
eis-carousel-act,Carousel Action,/eis/carousel/{act}/act,1,0
eis-carousel-add,Carousel Add,/eis/carousel/add,1,0
eis-carousel-edit,Carousel Edit,/eis/carousel/{id}/edit,1,0
eis-carousel-delete,Carousel Delete,/eis/carousel/{id}/delete,1,0
eis-dashboard,EIS,/eis/dashboard,1,0
eis-dashboard-act,EIS Act,/eis/dashboard/{act}/act,1,0
eis-dashboard-calc-all,EIS Calc ALL,/eis/dashboad/calc/all,1,0
eis-home,EIS Home,/eis/home,1,0
eis-act,EIS Home Act,/eis/{act}/act,1,0
eis-calc-all,EIS Calc ALL,/eis/calc/all,1,0
eis-chart,Chart,/eis/chart,1,0
eis-chart-act,EIS Chart Action,/eis/chart/{act}/act,1,0
eis-chart-add,EIS Chart Add,/eis/chart/add,1,0
eis-chart-edit,EIS Chart Edit,/eis/chart/{id}/edit,1,0
eis-chart-delete,EIS Chart Delet,/eis/chart/{id}/delete,1,0
eis-chart-item,Chart Item,/eis/chart/item/{chart_id},1,0
eis-chart-item-act,EIS Chart Item Action,/eis/chart/item/{chart_id}/{act}/act,1,0
eis-chart-item-add,EIS Chart Item Add,/eis/chart/item/{chart_id}/add,1,0
eis-chart-item-edit,EIS Chart Item Edit,/eis/chart/item/{chart_id}/{id}/edit,1,0
eis-chart-item-delete,EIS Chart Item Delet,/eis/chart/item/{chart_id}/{id}/delete,1,0
eis-item,EIS Item,/eis/item,1,0
eis-item-act,EIS Item Action,/eis/item/{act}/act,1,0
eis-item-add,EIS Item Add,/eis/item/add,1,0
eis-item-edit,EIS Item Edit,/eis/item/{id}/edit,1,0
eis-item-delete,EIS Item Delete,/eis/item/{id}/delete,1,0
eis-slide,EIS Slide,/eis/slide,1,0
eis-slide-act,EIS Slide Act,/eis/slide/{act}/act,1,0
eis-slide-add,EIS Slide Add,/eis/slide/add,1,0
eis-slide-edit,EIS Slide Edit,/eis/slide/{id}/edit,1,0
eis-slide-delete,EIS Slide Delete,/eis/slide/{id}/delete,1,0
RouteData = {
'options': ['insert if not exists','delete first'],
'csv': ['route.csv'],
'keys':['kode'],
}
SlideData = {
'options': ['insert if not exists','delete first'],
'csv': ['slide.csv'],
}
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 \ No newline at end of file
import os
import sys import sys
import transaction import transaction
import subprocess from sqlalchemy import (engine_from_config, )
from sqlalchemy import (
engine_from_config,
select,
)
from sqlalchemy.schema import CreateSchema
from pyramid.paster import ( from pyramid.paster import (
get_appsettings, get_appsettings,
setup_logging, setup_logging,
) )
from ..models import (
EisDBSession as ModuleDBSession,
EisBase as ModuleBase,
)
from ..models import * from ..models import *
from . import initial_data from opensipkd.base.scripts.initializedb import create_schema
#from .tools import mkdir
from ...scripts.initializedb import create_schema, read_file
from ...tools import get_settings
def main(settings): def main(argv=sys.argv):
'eis' config_uri = argv[1]
if 'eis.url' in settings and settings['eis.url']: setup_logging(config_uri)
engine = engine_from_config(settings, 'eis.') settings = get_appsettings(config_uri)
engine = engine_from_config(settings, 'sqlalchemy.')
else: Base.metadata.bind = engine
engine = ModuleDBSession.bind;
create_schema(engine, 'eis') create_schema(engine, 'eis')
ModuleBase.metadata.create_all(engine) Base.metadata.create_all(bind=engine)
ModuleDBSession.configure(bind=engine) DBSession.configure(bind=engine)
initial_data.insert()
transaction.commit() transaction.commit()
print('****EIS CREATED****') print('****EIS CREATED****')
from opensipkd.tools import *
\ No newline at end of file \ No newline at end of file
from ...views.base_views import BaseView as OsBaseView from opensipkd.base.views import base_views
from ...views.common import DataTables, ColumnDT from opensipkd.base.views import DataTables, ColumnDT
from ...views import widget class BaseView(base_views.BaseView):
from pyramid.view import (
view_config,
)
class BaseView(OsBaseView):
pass pass
...@@ -6,8 +6,7 @@ from pyramid.view import ( ...@@ -6,8 +6,7 @@ from pyramid.view import (
# HTTPFound, # HTTPFound,
# ) # )
from ..views import BaseView from ..views import BaseView
from ..models import EisDBSession from ..models import *
from ..models import Eis, Chart, ChartItem, Slide
#from ..tools import row2dict #from ..tools import row2dict
class dashboard(BaseView): class dashboard(BaseView):
...@@ -20,7 +19,7 @@ class dashboard(BaseView): ...@@ -20,7 +19,7 @@ class dashboard(BaseView):
@view_config(route_name='eis-dashboard', renderer='templates/dashboard.pt') @view_config(route_name='eis-dashboard', renderer='templates/dashboard.pt')
def view_app(self): def view_app(self):
tahun = self.ses['tahun'] tahun = self.ses['tahun']
datas = EisDBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) datas = DBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id)
if not datas: if not datas:
datas = {} datas = {}
return dict(project='EIS', datas=datas) return dict(project='EIS', datas=datas)
...@@ -35,7 +34,7 @@ class dashboard(BaseView): ...@@ -35,7 +34,7 @@ class dashboard(BaseView):
json_data['success']=False json_data['success']=False
if req.matchdict['act']=='grid': if req.matchdict['act']=='grid':
rows = EisDBSession.query(Eis).filter(Eis.id==id) rows = DBSession.query(Eis).filter(Eis.id==id)
if not rows: if not rows:
return json_data return json_data
...@@ -57,12 +56,12 @@ class dashboard(BaseView): ...@@ -57,12 +56,12 @@ class dashboard(BaseView):
# GRAFIK LINE/BAR # GRAFIK LINE/BAR
####################################################################### #######################################################################
elif req.matchdict['act']=='linebar': elif req.matchdict['act']=='linebar':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first() rows = DBSession.query(Chart).filter(Chart.id==id).first()
if not rows: if not rows:
return json_data return json_data
json_data['label'] = rows.label.split(',') json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\ rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id) order_by(ChartItem.id)
for row in rows: 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, json_data[row.source_type] = [row.value_1/row.chart.devider,row.value_2/row.chart.devider,row.value_3/row.chart.devider,
...@@ -78,12 +77,12 @@ class dashboard(BaseView): ...@@ -78,12 +77,12 @@ class dashboard(BaseView):
# GRAFIK LINGKARAN # GRAFIK LINGKARAN
####################################################################### #######################################################################
elif req.matchdict['act']=='pie': elif req.matchdict['act']=='pie':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first() rows = DBSession.query(Chart).filter(Chart.id==id).first()
if not rows: if not rows:
return json_data return json_data
json_data['label'] = rows.label.split(',') json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\ rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id) order_by(ChartItem.id)
json_data['rows'] = {} json_data['rows'] = {}
for row in rows: for row in rows:
......
import json
from pyramid.view import ( from pyramid.view import (
view_config, view_config,
) )
from pyramid.httpexceptions import (
HTTPFound,
)
from ..views import BaseView from ..views import BaseView
from ..models import EisDBSession from ..models import *
from ..models.eis import Eis, Chart, ChartItem, Slide from ..models.eis import Eis, Chart, ChartItem, Slide
from datatables import ColumnDT, DataTables from datatables import ColumnDT, DataTables
from sqlalchemy import not_, func, literal_column, and_, or_, String, Float from sqlalchemy import func, and_, String
from sqlalchemy.sql.expression import cast from sqlalchemy.sql.expression import cast
#from ..tools import row2dict
######## class EisView(BaseView):
# APP Home # @view_config(route_name='eis', renderer='templates/eis.pt',
######## permission='eis')
class eis(BaseView): def view_app(self):
def cek_value(self,value,devider,simbol): return{}
if value<devider: # return dict(project='EIS', datas=datas, tab_datas=tab_datas,
return "{0:,.0f}".format(value) # line_datas=line_datas, bar_datas=bar_datas,
else: # pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
return "{0:,.0f} {1}".format(value/devider,simbol)
# 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', # @view_config(route_name='eis', renderer='templates/eis.pt',
permission='eis') # permission='eis')
def view_app(self): # def view_app(self):
tahun = self.ses['tahun'] # tahun = self.ses['tahun']
datas = EisDBSession.query(Slide).filter(Slide.status==1).order_by(Slide.order_id) or {} # datas = DBSession.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 {} # tab_datas = DBSession.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 {} # line_datas = DBSession.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 {} # bar_datas = DBSession.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 {} # pie_datas = DBSession.query(Slide).filter(Slide.source_type=='chart-pie').order_by(Slide.order_id)or {}
return dict(project='EIS', datas=datas, tab_datas=tab_datas, # return dict(project='EIS', datas=datas, tab_datas=tab_datas,
line_datas=line_datas, bar_datas=bar_datas, # line_datas=line_datas, bar_datas=bar_datas,
pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014')) # pie_datas=pie_datas, )#, datas=Eis.sum_order_id('2014'))
@view_config(route_name='eis-act', renderer='json') # @view_config(route_name='eis-act', renderer='json')
def view_app_act(self): # def view_app_act(self):
tahun = self.ses['tahun'] # tahun = self.ses['tahun']
req = self.req # req = self.req
ses = req.session # ses = req.session
params = req.params # params = req.params
id = 'id' in params and params['id'] or 0 # id = 'id' in params and params['id'] or 0
json_data = {} # json_data = {}
json_data['success']=False # json_data['success']=False
if req.matchdict['act']=='grid': # if req.matchdict['act']=='grid':
rows = EisDBSession.query(Eis).filter(Eis.id==id) # rows = DBSession.query(Eis).filter(Eis.id==id)
if not rows: # if not rows:
return json_data # return json_data
for row in rows: # for row in rows:
row_dicted = row.to_dict() # row_dicted = row.to_dict()
amt_hari = float(row_dicted['amt_hari']) # amt_hari = float(row_dicted['amt_hari'])
amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari # amt_minggu = float(row_dicted['amt_minggu']) #+amt_hari
amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari # amt_bulan = float(row_dicted['amt_bulan']) #+amt_hari
amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan # amt_tahun = float(row_dicted['amt_tahun']) #+amt_bulan
json_data['success']= True # json_data['success']= True
json_data['tahun'] = self.cek_value(amt_tahun,1, '') # json_data['tahun'] = self.cek_value(amt_tahun,1, '')
json_data['bulan'] = self.cek_value(amt_bulan,1, '') # json_data['bulan'] = self.cek_value(amt_bulan,1, '')
json_data['minggu'] = self.cek_value(amt_minggu,1, '') # json_data['minggu'] = self.cek_value(amt_minggu,1, '')
json_data['hari'] = self.cek_value(amt_hari,1, '') # json_data['hari'] = self.cek_value(amt_hari,1, '')
return json_data # return json_data
####################################################################### # #######################################################################
# GRAFIK LINE/BAR # # GRAFIK LINE/BAR
####################################################################### # #######################################################################
elif req.matchdict['act']=='linebar': # elif req.matchdict['act']=='linebar':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first() # rows = DBSession.query(Chart).filter(Chart.id==id).first()
if not rows: # if not rows:
return json_data # return json_data
json_data['label'] = rows.label.split(',') # json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\ # rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id) # order_by(ChartItem.id)
for row in rows: # 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, # 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_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.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,] # row.value10/row.chart.devider,row.value11/row.chart.devider,row.value12/row.chart.devider,]
json_data['success']= True # json_data['success']= True
return json_data # return json_data
####################################################################### # #######################################################################
# GRAFIK LINGKARAN # # GRAFIK LINGKARAN
####################################################################### # #######################################################################
elif req.matchdict['act']=='pie': # elif req.matchdict['act']=='pie':
rows = EisDBSession.query(Chart).filter(Chart.id==id).first() # rows = DBSession.query(Chart).filter(Chart.id==id).first()
if not rows: # if not rows:
return json_data # return json_data
json_data['label'] = rows.label.split(',') # json_data['label'] = rows.label.split(',')
rows = EisDBSession.query(ChartItem).filter(ChartItem.chart_id==id).\ # rows = DBSession.query(ChartItem).filter(ChartItem.chart_id==id).\
order_by(ChartItem.id) # order_by(ChartItem.id)
json_data['rows'] = {} # json_data['rows'] = {}
for row in rows: # for row in rows:
anama = {} # anama = {}
anama['nama'] = row.nama # anama['nama'] = row.nama
anama['color'] = row.color # anama['color'] = row.color
anama ['highlight'] = row.highlight # anama ['highlight'] = row.highlight
anama ['value'] = row.value_1/row.chart.devider # anama ['value'] = row.value_1/row.chart.devider
json_data['rows'][row.nama] =anama # json_data['rows'][row.nama] =anama
json_data['success']= True # json_data['success']= True
return json_data # return json_data
elif req.matchdict['act']=='dasboard': # elif req.matchdict['act']=='dasboard':
# max_tahun = EisDBSession.query(func.max(Eis.tahun)).scalar() # # max_tahun = DBSession.query(func.max(Eis.tahun)).scalar()
max_tahun = ses['tahun'] # max_tahun = ses['tahun']
subqx = EisDBSession.query( # subqx = DBSession.query(
func.max(Eis.nama).label('nama'), # func.max(Eis.nama).label('nama'),
func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\ # func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\ # ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
ChartItem.value10+ChartItem.value11+ChartItem.value12).label('target'), # ChartItem.value10+ChartItem.value11+ChartItem.value12).label('target'),
func.sum(Eis.amt_bulan).label('amt_bulan'), # func.sum(Eis.amt_bulan).label('amt_bulan'),
func.sum(Eis.amt_tahun).label('amt_tahun'), # func.sum(Eis.amt_tahun).label('amt_tahun'),
func.sum( # func.sum(
(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+ChartItem.value_5+\ # (ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+ChartItem.value_5+\
ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+ChartItem.value10+\ # ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+ChartItem.value10+\
ChartItem.value11+ChartItem.value12) - Eis.amt_tahun).label('sisa_target'), # ChartItem.value11+ChartItem.value12) - Eis.amt_tahun).label('sisa_target'),
cast(func.round((func.sum(Eis.amt_tahun)/ # cast(func.round((func.sum(Eis.amt_tahun)/
func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\ # func.sum(ChartItem.value_1+ChartItem.value_2+ChartItem.value_3+ChartItem.value_4+\
ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\ # ChartItem.value_5+ChartItem.value_6+ChartItem.value_7+ChartItem.value_8+ChartItem.value_9+\
ChartItem.value10+ChartItem.value11+ChartItem.value12))*100,2),String).label('persen')).\ # ChartItem.value10+ChartItem.value11+ChartItem.value12))*100,2),String).label('persen')).\
join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\ # join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\ # join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
filter(Eis.tahun==max_tahun).\ # filter(Eis.tahun==max_tahun).\
group_by(Eis.kode,Eis.nama,Eis.tahun).order_by(Eis.kode).subquery() # group_by(Eis.kode,Eis.nama,Eis.tahun).order_by(Eis.kode).subquery()
subq = EisDBSession.query( # subq = DBSession.query(
(Eis.nama).label('nama'), # (Eis.nama).label('nama'),
(ChartItem.value_1*12).label('target'), # (ChartItem.value_1*12).label('target'),
(Eis.amt_bulan).label('amt_bulan'), # (Eis.amt_bulan).label('amt_bulan'),
(Eis.amt_tahun).label('amt_tahun'), # (Eis.amt_tahun).label('amt_tahun'),
((ChartItem.value_1*12) - Eis.amt_tahun).label('sisa_target'), # ((ChartItem.value_1*12) - Eis.amt_tahun).label('sisa_target'),
cast(func.round(((Eis.amt_tahun)/ # cast(func.round(((Eis.amt_tahun)/
(ChartItem.value_1*12))*100,2),String).label('persen')).\ # (ChartItem.value_1*12))*100,2),String).label('persen')).\
join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\ # join(ChartItem, and_(func.trim(ChartItem.rekening_kd)==func.trim(Eis.kode),ChartItem.source_type=='target')).\
join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\ # join(Chart, and_(Chart.id == ChartItem.chart_id, Chart.chart_type == 'line')).\
filter(Eis.tahun==max_tahun).\ # filter(Eis.tahun==max_tahun).\
order_by(Eis.kode).subquery() # order_by(Eis.kode).subquery()
query = EisDBSession.query().select_from(subq) # query = DBSession.query().select_from(subq)
columns = [ # columns = [
ColumnDT(subq.c.nama, mData="jenis_pajak"), # ColumnDT(subq.c.nama, mData="jenis_pajak"),
ColumnDT(subq.c.target, mData="target"), # ColumnDT(subq.c.target, mData="target"),
ColumnDT(subq.c.amt_bulan, mData="realisasi_bulan_ini"), # ColumnDT(subq.c.amt_bulan, mData="realisasi_bulan_ini"),
ColumnDT(subq.c.amt_tahun, mData="realisasi_sampai_dengan"), # ColumnDT(subq.c.amt_tahun, mData="realisasi_sampai_dengan"),
ColumnDT(subq.c.sisa_target, mData="sisa_target"), # ColumnDT(subq.c.sisa_target, mData="sisa_target"),
ColumnDT(subq.c.persen, mData="persen"), # ColumnDT(subq.c.persen, mData="persen"),
] # ]
rowTable = DataTables(req.GET, query, columns) # rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result() # return rowTable.output_result()
...@@ -15,12 +15,7 @@ from deform import ( ...@@ -15,12 +15,7 @@ from deform import (
widget, widget,
ValidationFailure, ValidationFailure,
) )
from ..models import ( from ..models import *
EisDBSession
)
from ..models.eis import (
Eis
)
from ..views import BaseView, ColumnDT, DataTables from ..views import BaseView, ColumnDT, DataTables
...@@ -121,13 +116,13 @@ class view_carousel(BaseView): ...@@ -121,13 +116,13 @@ class view_carousel(BaseView):
columns.append(ColumnDT(Eis.aktif, )) columns.append(ColumnDT(Eis.aktif, ))
columns.append(ColumnDT(func.to_char(Eis.updated, "DD-MM-YYYY"), )) columns.append(ColumnDT(func.to_char(Eis.updated, "DD-MM-YYYY"), ))
query = EisDBSession.query().select_from(Eis) query = DBSession.query().select_from(Eis)
rowTable = DataTables(request.GET, query, columns) rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result() return rowTable.output_result()
elif url_dict['act']=='hon': elif url_dict['act']=='hon':
term = 'term' in params and params['term'] or '' term = 'term' in params and params['term'] or ''
prefix = 'prefix' in params and params['prefix'] or '' prefix = 'prefix' in params and params['prefix'] or ''
qry = EisDBSession.query(Eis).\ qry = DBSession.query(Eis).\
filter(Eis.status == 1).\ filter(Eis.status == 1).\
filter(Eis.nama.ilike('%%%s%%' % term)).\ filter(Eis.nama.ilike('%%%s%%' % term)).\
order_by(Eis.nama) order_by(Eis.nama)
...@@ -221,7 +216,7 @@ class view_carousel(BaseView): ...@@ -221,7 +216,7 @@ class view_carousel(BaseView):
msg = 'Carousel ID %d %s sudah dihapus.' % (row.id, row.nama) msg = 'Carousel ID %d %s sudah dihapus.' % (row.id, row.nama)
try: try:
q.delete() q.delete()
EisDBSession.flush() DBSession.flush()
except: except:
msg = 'Carousel ID %d %s tidak dapat dihapus.' % (row.id, row.nama) msg = 'Carousel ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg) request.session.flash(msg)
...@@ -235,7 +230,7 @@ class view_carousel(BaseView): ...@@ -235,7 +230,7 @@ class view_carousel(BaseView):
def form_validator(form, value): def form_validator(form, value):
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
q = EisDBSession.query(Eis).filter_by(id=uid) q = DBSession.query(Eis).filter_by(id=uid)
row = q.first() row = q.first()
else: else:
row = None row = None
...@@ -273,8 +268,8 @@ def save(values, user, row=None): ...@@ -273,8 +268,8 @@ def save(values, user, row=None):
row.from_dict(values['amount']) row.from_dict(values['amount'])
row.status = 'status' in values and values['status'] and 1 or 0 row.status = 'status' in values and values['status'] and 1 or 0
row.aktif = 'aktif' in values and values['aktif'] and 1 or 0 row.aktif = 'aktif' in values and values['aktif'] and 1 or 0
EisDBSession.add(row) DBSession.add(row)
EisDBSession.flush() DBSession.flush()
return row return row
def route_list(request): def route_list(request):
...@@ -284,7 +279,7 @@ def route_list(request): ...@@ -284,7 +279,7 @@ def route_list(request):
# Edit # # Edit #
######## ########
def query_id(request): def query_id(request):
return EisDBSession.query(Eis).filter_by(id=request.matchdict['id']) return DBSession.query(Eis).filter_by(id=request.matchdict['id'])
def id_not_found(request): def id_not_found(request):
msg = 'Carousel ID %s Tidak Ditemukan.' % request.matchdict['id'] msg = 'Carousel ID %s Tidak Ditemukan.' % request.matchdict['id']
......
...@@ -16,7 +16,7 @@ from deform import ( ...@@ -16,7 +16,7 @@ from deform import (
ValidationFailure, ValidationFailure,
) )
from ..models import ( from ..models import (
EisDBSession DBSession
) )
from ..models.eis import ( from ..models.eis import (
Chart Chart
...@@ -94,14 +94,14 @@ class view_eis_chart(BaseView): ...@@ -94,14 +94,14 @@ class view_eis_chart(BaseView):
columns.append(ColumnDT(Chart.chart_type)) columns.append(ColumnDT(Chart.chart_type))
columns.append(ColumnDT(Chart.devider)) columns.append(ColumnDT(Chart.devider))
query = EisDBSession.query().select_from(Chart) query = DBSession.query().select_from(Chart)
rowTable = DataTables(req.GET, query, columns) rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result() return rowTable.output_result()
elif url_dict['act']=='hon': elif url_dict['act']=='hon':
term = 'term' in params and params['term'] or '' term = 'term' in params and params['term'] or ''
prefix = 'prefix' in params and params['prefix'] or '' prefix = 'prefix' in params and params['prefix'] or ''
chart_type = 'chart_type' in params and params['chart_type'] or '' chart_type = 'chart_type' in params and params['chart_type'] or ''
qry = EisDBSession.query(Chart).\ qry = DBSession.query(Chart).\
filter(Chart.status == 1, filter(Chart.status == 1,
Chart.chart_type==chart_type, Chart.chart_type==chart_type,
Chart.nama.ilike('%%%s%%' % term)).\ Chart.nama.ilike('%%%s%%' % term)).\
...@@ -121,7 +121,7 @@ class view_eis_chart(BaseView): ...@@ -121,7 +121,7 @@ class view_eis_chart(BaseView):
def form_validator(self, form, value): def form_validator(self, form, value):
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
q = EisDBSession.query(Chart).filter_by(id=uid) q = DBSession.query(Chart).filter_by(id=uid)
row = q.first() row = q.first()
else: else:
row = None row = None
...@@ -143,8 +143,8 @@ class view_eis_chart(BaseView): ...@@ -143,8 +143,8 @@ class view_eis_chart(BaseView):
row.updated = datetime.now() row.updated = datetime.now()
row.update_uid = user.id row.update_uid = user.id
row.aktif = 'aktif' in values and values['aktif'] and 1 or 0 row.aktif = 'aktif' in values and values['aktif'] and 1 or 0
EisDBSession.add(row) DBSession.add(row)
EisDBSession.flush() DBSession.flush()
return row return row
def save_request(self, values, row=None): def save_request(self, values, row=None):
...@@ -187,7 +187,7 @@ class view_eis_chart(BaseView): ...@@ -187,7 +187,7 @@ class view_eis_chart(BaseView):
# Edit # # Edit #
######## ########
def query_id(self): def query_id(self):
return EisDBSession.query(Chart).filter_by(id=self.req.matchdict['id']) return DBSession.query(Chart).filter_by(id=self.req.matchdict['id'])
def id_not_found(self): def id_not_found(self):
msg = 'Chart ID %s Tidak Ditemukan.' % self.req.matchdict['id'] msg = 'Chart ID %s Tidak Ditemukan.' % self.req.matchdict['id']
...@@ -237,7 +237,7 @@ class view_eis_chart(BaseView): ...@@ -237,7 +237,7 @@ class view_eis_chart(BaseView):
msg = 'Chart ID %d %s sudah dihapus.' % (row.id, row.nama) msg = 'Chart ID %d %s sudah dihapus.' % (row.id, row.nama)
try: try:
q.delete() q.delete()
EisDBSession.flush() DBSession.flush()
except: except:
msg = 'Chart ID %d %s tidak dapat dihapus.' % (row.id, row.nama) msg = 'Chart ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg) request.session.flash(msg)
......
...@@ -7,7 +7,7 @@ from pyramid.view import (view_config,) ...@@ -7,7 +7,7 @@ from pyramid.view import (view_config,)
from pyramid.httpexceptions import ( HTTPFound, ) from pyramid.httpexceptions import ( HTTPFound, )
import colander import colander
from deform import (Form, widget, ValidationFailure, ) from deform import (Form, widget, ValidationFailure, )
from ..models import EisDBSession from ..models import DBSession
from ..models.eis import ChartItem, Chart from ..models.eis import ChartItem, Chart
from ..views import BaseView, ColumnDT, DataTables from ..views import BaseView, ColumnDT, DataTables
...@@ -166,7 +166,7 @@ class view_eis_chart_item(BaseView): ...@@ -166,7 +166,7 @@ class view_eis_chart_item(BaseView):
columns.append(ColumnDT(ChartItem.value_5, )) columns.append(ColumnDT(ChartItem.value_5, ))
columns.append(ColumnDT(ChartItem.value_6, )) columns.append(ColumnDT(ChartItem.value_6, ))
query = EisDBSession.query().select_from(ChartItem).filter(ChartItem.chart_id==chart_id) query = DBSession.query().select_from(ChartItem).filter(ChartItem.chart_id==chart_id)
rowTable = DataTables(req.GET, query, columns) rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result() return rowTable.output_result()
...@@ -176,7 +176,7 @@ class view_eis_chart_item(BaseView): ...@@ -176,7 +176,7 @@ class view_eis_chart_item(BaseView):
def form_validator(self, form, value): def form_validator(self, form, value):
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
q = EisDBSession.query(ChartItem).filter_by(id=uid) q = DBSession.query(ChartItem).filter_by(id=uid)
row = q.first() row = q.first()
else: else:
row = None row = None
...@@ -201,8 +201,8 @@ class view_eis_chart_item(BaseView): ...@@ -201,8 +201,8 @@ class view_eis_chart_item(BaseView):
row.from_dict(values['values_1']) row.from_dict(values['values_1'])
row.from_dict(values['values_2']) row.from_dict(values['values_2'])
row.is_sum = 'is_sum' in values and values['is_sum'] and 1 or 0 row.is_sum = 'is_sum' in values and values['is_sum'] and 1 or 0
EisDBSession.add(row) DBSession.add(row)
EisDBSession.flush() DBSession.flush()
return row return row
def save_request(self, values, row=None): def save_request(self, values, row=None):
...@@ -250,7 +250,7 @@ class view_eis_chart_item(BaseView): ...@@ -250,7 +250,7 @@ class view_eis_chart_item(BaseView):
# Edit # # Edit #
######## ########
def query_id(self): def query_id(self):
return EisDBSession.query(ChartItem).filter_by(id=self.req.matchdict['id']) return DBSession.query(ChartItem).filter_by(id=self.req.matchdict['id'])
def id_not_found(self,chart_id): def id_not_found(self,chart_id):
msg = 'ChartItem ID %s Tidak Ditemukan.' % self.req.matchdict['id'] msg = 'ChartItem ID %s Tidak Ditemukan.' % self.req.matchdict['id']
......
...@@ -7,7 +7,7 @@ from pyramid.view import (view_config,) ...@@ -7,7 +7,7 @@ from pyramid.view import (view_config,)
from pyramid.httpexceptions import ( HTTPFound, ) from pyramid.httpexceptions import ( HTTPFound, )
import colander import colander
from deform import (Form, widget, ValidationFailure, ) from deform import (Form, widget, ValidationFailure, )
from ..models import EisDBSession from ..models import DBSession
#from ..models.eis import ARPaymentDetail as AR #from ..models.eis import ARPaymentDetail as AR
from ..views import BaseView, ColumnDT, DataTables from ..views import BaseView, ColumnDT, DataTables
...@@ -124,7 +124,7 @@ class view_eis_item(BaseView): ...@@ -124,7 +124,7 @@ class view_eis_item(BaseView):
columns.append(ColumnDT('tanggal', )) columns.append(ColumnDT('tanggal', ))
columns.append(ColumnDT('amount', )) columns.append(ColumnDT('amount', ))
query = EisDBSession.query().select_from(AR) query = DBSession.query().select_from(AR)
rowTable = DataTables(req.GET, query, columns) rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result() return rowTable.output_result()
...@@ -134,7 +134,7 @@ class view_eis_item(BaseView): ...@@ -134,7 +134,7 @@ class view_eis_item(BaseView):
def form_validator(self, form, value): def form_validator(self, form, value):
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
q = EisDBSession.query(AR).filter_by(id=uid) q = DBSession.query(AR).filter_by(id=uid)
row = q.first() row = q.first()
else: else:
row = None row = None
...@@ -157,8 +157,8 @@ class view_eis_item(BaseView): ...@@ -157,8 +157,8 @@ class view_eis_item(BaseView):
row.update_uid = user.id row.update_uid = user.id
row.disable = 'disable' in values and values['disable'] and 1 or 0 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 row.is_kota = 'is_kota' in values and values['is_kota'] and 1 or 0
EisDBSession.add(row) DBSession.add(row)
EisDBSession.flush() DBSession.flush()
return row return row
def save_request(self, values, row=None): def save_request(self, values, row=None):
...@@ -205,7 +205,7 @@ class view_eis_item(BaseView): ...@@ -205,7 +205,7 @@ class view_eis_item(BaseView):
# Edit # # Edit #
######## ########
def query_id(self): def query_id(self):
return EisDBSession.query(AR).filter_by(id=self.req.matchdict['id']) return DBSession.query(AR).filter_by(id=self.req.matchdict['id'])
def id_not_found(self): def id_not_found(self):
msg = 'AR ID %s Tidak Ditemukan.' % self.req.matchdict['id'] msg = 'AR ID %s Tidak Ditemukan.' % self.req.matchdict['id']
...@@ -272,7 +272,7 @@ class view_eis_item(BaseView): ...@@ -272,7 +272,7 @@ class view_eis_item(BaseView):
msg = 'AR ID %d %s sudah dihapus.' % (row.id, row.nama) msg = 'AR ID %d %s sudah dihapus.' % (row.id, row.nama)
try: try:
q.delete() q.delete()
EisDBSession.flush() DBSession.flush()
except: except:
msg = 'AR ID %d %s tidak dapat dihapus.' % (row.id, row.nama) msg = 'AR ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg) request.session.flash(msg)
......
...@@ -9,7 +9,7 @@ import colander ...@@ -9,7 +9,7 @@ import colander
from deform import (Form, ValidationFailure, FileData,) from deform import (Form, ValidationFailure, FileData,)
#from ..views import widget #from ..views import widget
from deform import widget from deform import widget
from ..models import EisDBSession from ..models import DBSession
from ..models.eis import Slide, Eis from ..models.eis import Slide, Eis
from sqlalchemy.sql.expression import update from sqlalchemy.sql.expression import update
from ..views import BaseView, ColumnDT, DataTables from ..views import BaseView, ColumnDT, DataTables
...@@ -139,7 +139,7 @@ class view_eis_slide(BaseView): ...@@ -139,7 +139,7 @@ class view_eis_slide(BaseView):
columns.append(ColumnDT(Slide.order_id)) columns.append(ColumnDT(Slide.order_id))
columns.append(ColumnDT(Slide.aktif)) columns.append(ColumnDT(Slide.aktif))
columns.append(ColumnDT(Slide.status)) columns.append(ColumnDT(Slide.status))
query = EisDBSession.query().select_from(Slide) query = DBSession.query().select_from(Slide)
rowTable = DataTables(req.GET, query, columns) rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result() return rowTable.output_result()
...@@ -149,7 +149,7 @@ class view_eis_slide(BaseView): ...@@ -149,7 +149,7 @@ class view_eis_slide(BaseView):
def form_validator(self, form, value): def form_validator(self, form, value):
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
q = EisDBSession.query(Slide).filter_by(id=uid) q = DBSession.query(Slide).filter_by(id=uid)
row = q.first() row = q.first()
else: else:
row = None row = None
...@@ -206,7 +206,7 @@ class view_eis_slide(BaseView): ...@@ -206,7 +206,7 @@ class view_eis_slide(BaseView):
# Edit # # Edit #
######## ########
def query_id(self): def query_id(self):
return EisDBSession.query(Slide).filter_by(id=self.req.matchdict['id']) return DBSession.query(Slide).filter_by(id=self.req.matchdict['id'])
def id_not_found(self): def id_not_found(self):
msg = 'Slide ID %s Tidak Ditemukan.' % self.req.matchdict['id'] msg = 'Slide ID %s Tidak Ditemukan.' % self.req.matchdict['id']
...@@ -265,7 +265,7 @@ class view_eis_slide(BaseView): ...@@ -265,7 +265,7 @@ class view_eis_slide(BaseView):
msg = 'Slide ID %d %s sudah dihapus.' % (row.id, row.nama) msg = 'Slide ID %d %s sudah dihapus.' % (row.id, row.nama)
try: try:
q.delete() q.delete()
EisDBSession.flush() DBSession.flush()
except: except:
msg = 'Slide ID %d %s tidak dapat dihapus.' % (row.id, row.nama) msg = 'Slide ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg) request.session.flash(msg)
...@@ -299,11 +299,11 @@ def save(values, user, row=None): ...@@ -299,11 +299,11 @@ def save(values, user, row=None):
row.update_uid = user.id row.update_uid = user.id
row.aktif = 'aktif' in values and values['aktif'] and 1 or 0 row.aktif = 'aktif' in values and values['aktif'] and 1 or 0
row.status = 'status' in values and values['status'] and 1 or 0 row.status = 'status' in values and values['status'] and 1 or 0
EisDBSession.add(row) DBSession.add(row)
EisDBSession.flush() DBSession.flush()
if 'aktif' in values and values['aktif']: if 'aktif' in values and values['aktif']:
stmt = update(Slide).where(Slide.id!=row.id).\ stmt = update(Slide).where(Slide.id!=row.id).\
values(aktif=0) values(aktif=0)
EisDBSession.execute(stmt) DBSession.execute(stmt)
EisDBSession.flush() DBSession.flush()
return row return row
<html metal:use-macro = "load: ../../../views/templates/base.pt"> <html metal:use-macro = "load: opensipkd.base.views:templates/base.pt">
<div metal:fill-slot="header"> <div metal:fill-slot="header">
<link href="/static/chart/legend/legend.css" rel="stylesheet"> <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/Chart.js"> </script>
......
<html metal:use-macro="load: base-eis.pt">
<div metal:fill-slot="scripts">
<script>
/*$(function(){
$('.carousel').carousel({
interval: 5000
});
});
*/
/*function formatNumber (num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
};
*/
function hide_other(){
$('.data').hide();
};
var bar_chart_options = {
responsive:true
};
</script>
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:0px;
}
@media (min-width: 767px) {
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:320px;
}
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
padding-left:0px;
}
@media (min-width: 767px) {
.subjudul {
padding-left:320px;
}
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
<div class="well" style="background-color:rgb(255,255,255); padding-top:75px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<h3 style="margin-top:5px;">EKSEKUTIF SUMMARY PAJAK DAERAH</h3>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
</div>
<div style="background-color:rgb(255,255,255);">
<div class="subjudul">
<div class="col-md-12 data" id="welcome" style="margin-bottom:50px;">
<center>
<div class="row">
<div class="col-md-12">
<h3 style="margin-top:5px;">SELAMAT DATANG</h3>
<h4>SILAHKAN PILIH MENU DI SEBELAH KIRI / ATAS LAYAR</h4>
</div>
</div>
</center>
</div>
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='grid'" id="grid-${dat.id}">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
})
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='image'" id="image-${dat.id}">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-line'" id="chart-line-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
; // "<%= value %>";
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-bar'" id="chart-bar-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-pie'" id="chart-pie-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</html>
<!DOCTYPE html>
<html lang="en-us" tal:define="
home request.home;
css css|[];
js js|[];
route_name route_name|request.matched_route.name;
">
<head>
<title>${request.app_name} | ${request.company}</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="shortcut icon" href="${home}/static/v3/img/favicon.png" type="image/x-icon">
<link rel="icon" href="${home}/static/v3/img/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="${home}/static/v3/css/gf_open_sans-400italic_700italic_300_400_700.css">
<link rel="stylesheet" type="text/css" media="screen" href="${home}/static/v3/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen"
href="${home}/static/v3/fonts/fontawesome-free-6.1.2-web/css/all.min.css">
<!-- SmartAdmin Styles : Caution! DO NOT change the order -->
<link rel="stylesheet" type="text/css" media="screen"
href="${home}/static/v3/css/smartadmin-production-plugins.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="${home}/static/v3/css/smartadmin-production.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="${home}/static/v3/css/smartadmin-skins.min.css">
<!-- We recommend you use "your_style.css" to override SmartAdmin
specific styles this will also ensure you retrain your customization with each SmartAdmin update. -->
<link rel="stylesheet" href="${home}/deform_static/css/form.css" >
<link rel="stylesheet" type="text/css" media="screen" href="${home}/static/v3/css/osipkd.css">
<!-- LOOP FORM CSS INCLUDED-->
<tal:loop tal:repeat="css_resource css">
<link rel="stylesheet" href="${home}${request.static_path(css_resource)}" type="text/css"
tal:condition="css_resource[:4]!='http'">
<link rel="stylesheet" href="${css_resource}" type="text/css" tal:condition="css_resource[:4]=='http'">
</tal:loop>
<!-- USE THIS SLOT TO INHSERT NEW CSS-->
<metal:css define-slot="css_files"></metal:css>
</head>
<body class="fixed-header">
<div id="loading" style="display:none;">
<img id="loading-image" src="${home}/static/img/ajax-loader.gif" alt="Loading..." />
</div>
<!-- #HEADER -->
<header id="header">
<div id="logo-group">
<!-- PLACE YOUR LOGO HERE -->
<h3 id="logo">
<a href="${home}/"><img src="${home}/static/img/logo.png" alt="LOGO"></a>
</h3>
<!-- END LOGO PLACEHOLDER -->
</div>
<!-- #PROJECTS: projects dropdown -->
<div class="project-context hidden-xs">
<span class="title-page">${request.title}</span>
</div>
<!-- end projects dropdown -->
<!-- #TOGGLE LAYOUT BUTTONS -->
<!-- pulled right: nav area -->
<div class="pull-right">
<!-- collapse menu button -->
<div id="hide-menu" class="btn-header pull-right">
<span> <a href="javascript:void(0);" data-action="toggleMenu" title="Collapse Menu"><i
class="fa fa-reorder"></i></a> </span>
</div>
<!-- end collapse menu -->
<!-- fullscreen button -->
<div id="fullscreen" class="btn-header transparent pull-right">
<span> <a href="javascript:void(0);" data-action="launchFullscreen" title="Full Screen">
<i class="fa fa-arrows-alt"></i></a> </span>
</div>
<!-- end fullscreen button -->
<!-- User info -->
<ul tal:condition="not request.user" class="header-dropdown-list hidden-xs">
<li>
<a href="${home}/login" class="dropdown-toggle"><i class="fa fa-lg fa-fw fa-user"></i>Login</a>
</li>
</ul>
<ul tal:condition="request.user" class="header-dropdown-list hidden-xs">
<li>
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-lg fa-fw fa-user"></i>
<span style="text-transform:capitalize"> ${request.user and request.user.nice_username() or ""}
</span>
<i class="fa fa-angle-down"></i> </a>
<ul class="dropdown-menu pull-right">
<li><a style="text-transform:capitalize" href="${request.route_url('base-profile')}">Profile</a>
</li>
<li tal:condition="not request.user.external">
<a style="text-transform:capitalize" href="${request.route_url('base-password')}">Ubah
password</a>
</li>
<li><a style="text-transform:capitalize" href="${request.route_url('base-logout')}">Logout</a>
</li>
<li tal:condition="request.user.api_key"><a style="text-transform:capitalize"
href="${home}/recreate-api-key">API Key</a></li>
<!-- <li talcondition="'core' in request.modules and change_unit(request)">
<a style="text-transform:capitalize" href="${home}/departemen/chg">Ubah
Organisasi</a>
</li> -->
</ul>
</li>
</ul>
<!-- end user info -->
</div>
<!-- end pulled right: nav area -->
</header>
<!-- END HEADER -->
<!-- Left panel : Navigation area -->
<!-- Note: This width of the aside area can be adjusted through LESS variables -->
<aside id="left-panel" style="padding-bottom:67px">
Menu
<!-- NAVIGATION : This navigation is also responsive-->
<nav class="smart-menu" id="menu">
<!-- Modul Menu -->
<ul metal:define-slot="navs"></ul>
<ul style="margin-top: 0; padding-top: 0;">
<li tal:repeat="menu get_base_menus()"
tal:attributes="class route_name in menu['route_name'] and 'active'">
<a tal:condition="python:not menu['children'] and (not menu['permission'] or has_permission(request, menu['permission']))"
href="${home}${menu['path']}">
<i tal:condition="menu['icon']" class="fa fa-lg fa-fw ${menu['icon']}"></i>
<span>${menu['nama']}</span>
</a>
<a tal:condition="python:menu['children'] and (not menu['permission'] or has_permission(request, menu['permission']))"
href="#">
<i tal:condition="menu['icon']" class="fa fa-lg fa-fw ${menu['icon']}"></i>
<span class="menu-item-parent">${menu['nama']}</span>
</a>
<ul
tal:condition="python:menu['children'] and (not menu['permission'] or has_permission(request, menu['permission']))">
<li tal:repeat="submenu menu['children']"
tal:attributes="class route_name in submenu['route_name'] and 'active'">
<a tal:condition="python:not submenu['children'] and (not menu['permission'] or has_permission(request, submenu['permission']))"
href="${home}${submenu['path']}">
<i tal:condition="submenu['icon']" class="fa fa-lg fa-fw ${submenu['icon']}"></i>
<span>${submenu['nama']}</span>
</a>
<a tal:condition="submenu['children']" href="#">
<i tal:condition="submenu['icon']" class="fa fa-lg fa-fw ${submenu['icon']}"></i>
<span class="menu-item-parent">${submenu['nama']}</span>
</a>
<ul tal:condition="submenu['children']">
<li tal:repeat="submenu2 submenu['children']"
tal:attributes="class route_name in submenu2['route_name'] and 'active'">
<a href="${home}${submenu2['path']}">${submenu2['nama']}</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<span class="minifyme" data-action="minifyMenu">
<i class="fa fa-arrow-circle-left hit"></i>
</span>
<span class="footer-side">&copy; OpenSIPKD.com
<script>document.write(new Date().getFullYear());</script>
</span>
</aside>
<!-- END NAVIGATION -->
<!-- JS -->
<script src="${home}/static/v3/js/jquery-2.1.1.min.js"></script>
<script>
if (!window.jQuery) {
document.write('<script src="${home}/static/v3/js/libs/jquery-2.1.1.min.js"><\/script>');
}
</script>
<!--?<script src="${home}/static/v3/js/jquery-ui-1.10.3.min.js"></script>-->
<script>
// if (!window.jQuery.ui) {
<!--? document.write('<script src="${home}/static/v3/js/libs/jquery-ui-1.10.3.min.js"><\/script>');-->
// }
</script>
<!-- IMPORTANT: APP CONFIG -->
<script src="${home}/static/v3/js/app.config.js"></script>
<!-- BOOTSTRAP JS -->
<script src="${home}/static/v3/js/bootstrap/bootstrap.min.js"></script>
<!-- FastClick: For mobile devices -->
<script src="${home}/static/v3/js/plugin/fastclick/fastclick.min.js"></script>
<!--[if IE 8]>
<h1>Your browser is out of date, please update your browser by going to www.microsoft.com/download</h1>
<![endif]-->
<!-- MAIN APP JS FILE -->
<script src="${home}/static/v3/js/app.min.js"></script>
<!-- PAGE RELATED PLUGIN(S) -->
<!--?<script src="${home}/static/v3/js/plugin/datatables/jquery.dataTables.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/datatables/dataTables.colVis.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/datatables/dataTables.tableTools.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/datatables/dataTables.bootstrap.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/datatable-responsive/datatables.responsive.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/bootstrap-timepicker/bootstrap-timepicker.min.js"></script>-->
<!--?<script src="${home}/deform_static/scripts/deform.js"></script>-->
<!--?<script src="${home}/deform_static/scripts/typeahead.min.js"></script>-->
<!--?<script src="${home}/deform_static/scripts/jquery.maskMoney-3.1.1.min.js"></script>-->
<!--?<script src="${home}/deform_static/tinymce/tinymce.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/tools.js"></script>-->
<!--?<script src="${home}/static/v3/js/notification/SmartNotification.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/plugin/masked-input/jquery.maskedinput.min.js"></script>-->
<!--?<script src="${home}/static/v3/js/select2.full.min.js"></script>-->
<!--?<script src="${home}/deform_static/scripts/file_upload.js"></script>-->
<script src="${home}/static/v3/js/osipkd.js"></script>
<!-- LOOP ON JS RESOURCE -->
<tal:loop tal:repeat="js_resource js">
<script src="${home}${request.static_path(js_resource)}" tal:condition="js_resource[:4]!='http'"></script>
<script src="${js_resource}" tal:condition="js_resource[:4]=='http'"></script>
</tal:loop>
<metal:js define-slot="js_files"></metal:js>
<!-- End isi Script-->
<!-- MAIN PANEL -->
<div id="main" role="main">
<!-- MAIN CONTENT -->
<div id="content">
<!-- Error session flash -->
<div tal:condition="request.session.peek_flash()">
<div class="alert alert-success" tal:repeat="message request.session.pop_flash()"><i
class="fa fa-fw fa-lg fa-check-circle"></i>&nbsp;${message}
</div>
</div>
<div tal:condition="request.session.peek_flash('error')">
<div class="alert alert-danger" tal:repeat="message request.session.pop_flash('error')"><i
class="fa fa-fw fa-lg fa-times-circle"></i>&nbsp;${message}
</div>
</div>
<!-- Error session flash -->
<!-- <div id="errors" name="errors"> -->
<div class="alert alert-danger" id="errors" name="errors" style="display:none;">errors</div>
<div class="alert alert-success" id="success" name="success" style="display:none;">success</div>
<!-- <div id="errors" name="errors"> -->
<!-- Global Alert -->
<div tal:condition="request.session.peek_flash()">
<div class="alert alert-success" tal:repeat="message request.session.pop_flash()">${message}</div>
</div>
<div tal:condition="request.session.peek_flash('error')">
<div class="alert alert-danger" tal:repeat="message request.session.pop_flash('error')">${message}</div>
</div>
<!-- End Global Alert -->
<!-- SLOT KONTEN -->
<div metal:define-slot="content"></div>
<!-- END SLOT KONTEN -->
</div>
<!-- END MAIN CONTENT -->
</div>
<!-- END MAIN PANEL -->
<!-- Define Script-->
<script metal:define-slot="scripts"></script>
</body>
</html>
\ No newline at end of file \ No newline at end of file
<html metal:use-macro="load: base-eis.pt"> <html metal:use-macro = "load: eis-base.pt">
<div metal:fill-slot="scripts"> </html>
<script>
/*$(function(){
$('.carousel').carousel({
interval: 5000
});
});
*/
/*function formatNumber (num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
};
*/
function hide_other(){
$('.data').hide();
};
var bar_chart_options = {
responsive:true
};
</script>
<style>
body {
/*background-image: url("static/img/bg1.jpg");*/
}
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:0px;
}
@media (min-width: 767px) {
.judul {
margin-top: 10px;
color: #777;
font-size: 40px;
font-weight: normal;
padding-left:320px;
}
}
.subjudul {
margin-bottom: 0px;
margin-bottom: 20px;
color: #777;
padding-left:0px;
}
@media (min-width: 767px) {
.subjudul {
padding-left:320px;
}
}
.alert {
border-radius: 0px !important;
}
.alert-judul {
color: #fff;
background-color: #6497C9;
border-color: #5580AA;
}
.alert-judul h3 {
margin-top: 4px !important;
margin-bottom: 4px !important;
}
</style>
<div class="well" style="background-color:rgb(255,255,255); padding-top:75px;">
<div class="judul">
<center>
<div class="row">
<div class="col-md-2">
<img class="" src="/static/img/logo.png" style="height:80px; width:80px;padding-bottom:5px;">
</div>
<div class="col-md-8">
<h3 style="margin-top:5px;">EKSEKUTIF SUMMARY PAJAK DAERAH</h3>
<h4>Tahun ${request.session['tahun']}</h4>
</div>
</div>
</center>
</div>
</div>
<div style="background-color:rgb(255,255,255);">
<div class="subjudul">
<div class="col-md-12 data" id="welcome" style="margin-bottom:50px;">
<center>
<div class="row">
<div class="col-md-12">
<h3 style="margin-top:5px;">SELAMAT DATANG</h3>
<h4>SILAHKAN PILIH MENU DI SEBELAH KIRI / ATAS LAYAR</h4>
</div>
</div>
</center>
</div>
<div tal:repeat="dat datas" class="item ${dat.aktif and 'active' or ''}">
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='grid'" id="grid-${dat.id}">
<div class="row">
<center>
<div class="row"> <!--TITLE-->
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row"> <!--hari minggu-->
<div class="col-md-6">
<div class="alert alert-success">
<h4>&nbsp;</h4>
<h4><u>Hari ini</u></h4>
<h2>Rp. <span id="hari_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-info">
<h4>&nbsp;</h4>
<h4><u>Minggu ini</u></h4>
<h2>Rp. <span id="minggu_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
<p>
<div class="row"> <!--bulan tahun-->
<div class="col-md-6">
<div class="alert alert-warning">
<h4>&nbsp;</h4>
<h4><u>Bulan ini</u></h4>
<h2>Rp. <span id="bulan_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
<div class="col-md-6">
<div class="alert alert-danger">
<h4>&nbsp;</h4>
<h4><u>Tahun ini</u></h4>
<h2>Rp. <span id="tahun_${dat.id}">...</span></h2>
<h4>&nbsp;</h4>
</div>
</div>
</div>
</center>
</div>
<!--SCRIPT-->
<script>
$(function(){
$.ajax({
type: "POST",
url: "/eis/grid/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
$("#hari_${dat.id}").html(html.hari);
$("#minggu_${dat.id}").html(html.minggu);
$("#bulan_${dat.id}").html(html.bulan);
$("#tahun_${dat.id}").html(html.tahun);
}
},
beforeSend: function () {
}
});
})
</script>
</div>
<div class="col-md-12" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='image'" id="image-${dat.id}">
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<img src="${dat.source_id}" height="500px">
</div>
</center>
</div>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-line'" id="chart-line-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var lineChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
; // "<%= value %>";
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
$(function(){
var ctx_${dat.id} = document.getElementById("canvas_${dat.id}").getContext("2d");
//window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true
//});
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
lineChartData_${dat.id}.labels.push(html.label[i]);
lineChartData_${dat.id}.datasets[0].data.push(html.target[i]);
lineChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myLine_${dat.id} = new Chart(ctx_${dat.id}).Line(lineChartData_${dat.id}, {
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), lineChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-bar'" id="chart-bar-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="col-md-12">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="canvas_${dat.id}" height="400px" width="800px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var barChartData_${dat.id} = {
labels : [],
datasets : [
{
label: "Target",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : []
},
{
label: "Realisasi",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : []
}
]
}
Chart.defaults.global.scaleLabel = function(label){
return label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
// return parseInt( label.value ).toLocaleString();
/*
This doesn't work in all browsers unfortunately yet:
parseInt( '1000' ).toLocaleString()
Result in Safari: 1.000
Result in FF und Chrome: 1.111
parseFloat( '1000.33' ).toLocaleString()
Result in Safari: 1000.33
Result in FF und Chrome: 1.000,33
*/
};
Chart.defaults.global.multiTooltipTemplate = function(label){
return label.datasetLabel + ': ' + label.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");}
;
var ctx_${dat.id} = $("#canvas_${dat.id}").get(0).getContext("2d");
$(function(){
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/linebar/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
for (i = 0; i < html.label.length; i++) {
barChartData_${dat.id}.labels.push(html.label[i]);
barChartData_${dat.id}.datasets[0].data.push(html.target[i]);
barChartData_${dat.id}.datasets[1].data.push(html.realisasi[i]);
}
window.myBar_${dat.id} = new Chart(ctx_${dat.id}).Bar(barChartData_${dat.id},
{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), barChartData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
<div class="col-md-12 data" style="margin-bottom:50px; display:none;"
tal:condition="dat.source_type=='chart-pie'" id="chart-pie-${dat.id}" >
<div class="row">
<center>
<div class="row">
<div class="alert alert-judul">
<h3>${dat.nama}</h3>
</div>
</div>
<div class="row">
<div class="col-md-10">
<canvas id="chart-area_${dat.id}" height="400px" width="600px"></canvas>
</div>
<div class="col-md-2">
<h5>Keterangan</h5>
<div id="legend_${dat.id}"></div>
</div>
</div>
</center>
</div>
<script>
var pieData_${dat.id} = [];
$(function(){
/*GET DATA PIE*/
var ctx_${dat.id} = document.getElementById("chart-area_${dat.id}").getContext("2d");
//window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id});
var npie = 0 ;
//GET DATA FROM SERVER
$.ajax({
type: "POST",
url: "/eis/pie/act",
data: "id=${dat.source_id}",
success: function (html) {
if (html.success == true) {
jQuery.each(html.rows, function(i, val) {
x = {
"value": val.value,
"color": "#"+val.color,
//highlight: "#"+val.highlight,
"label": val.nama}
npie = pieData_${dat.id}.push(x);
//alert(pieData_${dat.id}[npie].value());
});
window.myPie_${dat.id} = new Chart(ctx_${dat.id}).Pie(pieData_${dat.id},{
//responsive: true;
});
legend(document.getElementById('legend_${dat.id}'), pieData_${dat.id});
}
},
beforeSend: function () {
}
});
});
</script>
</div>
</div>
</div>
</div>
</div>
</html>
\ No newline at end of file \ No newline at end of file
...@@ -5,20 +5,19 @@ build-backend = 'setuptools.build_meta' ...@@ -5,20 +5,19 @@ build-backend = 'setuptools.build_meta'
#packages = ["opensipkd", "opensipkd.pbb", "opensipkd.pbb.esppt"] #packages = ["opensipkd", "opensipkd.pbb", "opensipkd.pbb.esppt"]
[tool.setuptools.packages.find] [tool.setuptools.packages.find]
include = ['eispajak.*'] include = ['eispajak']
[tool.mypy] [tool.mypy]
exclude = [ exclude = ['tmp' , 'build', 'dist', 'eispajak.egg-info', 'docs', 'tests']
]
show_error_codes = true show_error_codes = true
[[tool.mypy.overrides]] #[[tool.mypy.overrides]]
#
module = [ #module = [
] #]
warn_unused_ignores = true #warn_unused_ignores = true
strict = true #strict = true
[project] [project]
......
from ..tools import *
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!