register

1 parent 9d5001ab
Showing 942 changed files with 616 additions and 2437 deletions
# DeTable
Feature yang digunakan untuk memudahkan merender datatable dalam html
```python
import colander
from opensipkd.detable import DeTable
from opensipkd.tools.buttons import btn_view, btn_add, btn_edit, btn_delete, btn_close
from datatables import ColumnDT
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False,
orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt')
nama = colander.SchemaNode(colander.String())
@view_config(route_name='provinsi',
renderer='templates/list.pt',
permission='provinsi')
def view_list(self):
table = DeTable(ListSchema(), action=f"{self.home}/provinsi",
action_suffix="/grid/act",
buttons=(btn_view, btn_add, btn_edit, btn_delete, btn_close))
return dict(table=table.render(), scripts="")
# /provinsi/add
@view_config(route_name='provinsi-add',
renderer='templates/form_input.pt',
permission='provinsi')
def view_add(request):
pass
# /provinsi/{id}/edit
@view_config(route_name='provinsi-edit',
renderer='templates/form_input.pt',
permission='provinsi')
def view_edit(request):
pass
# /provinsi/{id}/delete
@view_config(route_name='provinsi-delete',
renderer='templates/form_input.pt',
permission='provinsi')
def view_delete(request):
pass
# /provinsi/{id}/view
@view_config(route_name='provinsi-view',
renderer='templates/form_input.pt',
permission='provinsi')
def view_view(request):
pass
# /provinsi/{act}/act
@view_config(route_name='provinsi-act',
renderer='json',
permission='provinsi')
def view_act(request):
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(ResProvinsi.id, mData='id'),
ColumnDT(ResProvinsi.kode, mData='kode'),
ColumnDT(ResProvinsi.nama, mData='nama'),
ColumnDT(ResProvinsi.status, mData='status'), ]
query = DBSession.query().select_from(ResProvinsi)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
```
## Contoh HTML
```html
<html metal:use-macro="load: ./base3.1.pt"
tal:define="
home request.route_url('home');">
<div metal:fill-slot="content">
<div class="jarviswidget jarviswidget-color-blueLight"> <!-- jarviswidget -->
<div tal:content="structure table"></div>
</div>
</div>
</html>
```
## DeTable Parameter
Lihat di deklarasi `class DeTable(field.Field):`
## SchemaNode Items
```python
colander.SchemaNode(
NodeType, -> colander.Integer(), colander.String()
searchable=False,
orderable=False,
visible=False,
width="20pt",
thousands=dict(separator='.', decimal=',', point=2) (not implemented),
widget=widget (not implemented)
)
\ No newline at end of file
......@@ -14,43 +14,44 @@ pyramid.debug_notfound = true
pyramid.debug_routematch = true
pyramid.debug_templates = true
default_locale_name = id
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
;pbb.url = oracle+oracledb://pbb:A@10.8.50.62:1521/simpbb
pbb.url = oracle://pbb:A@10.8.50.62:1521/simpbb
lib_dir = C:\app\instantclient_11_2
temp_dir = C:\tmp
pbb_pemda = 32.79
allow_register = true
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2
session.url = postgresql://aagusti:a@localhost:5432/demo2
pyramid.includes =
pyramid_tm
pyramid_beaker
pyramid_chameleon
pyramid_debugtoolbar
pyramid_rpc.jsonrpc
opensipkd.tools
opensipkd.pjdl.models
opensipkd.pjdl.apps
opensipkd.bphtb.models
opensipkd.bphtb.apps
pjdl_invoice_sspd=99
pjdl_invoice_sptpd=1
pjdl_invoice_stpd=False
pjdl_report_files=False #Isikan daftar file-report jika bukan default
devel = true
session.type = ext:database
session.secret = s0s3cr3ts
session.cookie_expires = true
session.key = WhatEver
session.url = postgresql://aagusti:a@localhost:5433/magelang
session.timeout = 3000
session.lock_dir = %(here)s/tmp
;login_tpl = opensipkd.samsat.jabar.views:templates/login.pt
timezone = Asia/Jakarta
;localization = id_ID.UTF-8
#localization = Indonesian_indonesia.1252
localization = English_Australia.1252
# Base Configuration
temp_files = C:\tmp
partner_doc = C:\\tmp\\docs\\partner\\
# Registrasi User
allow_register = 1
reg_form =
reg_idcard = 1
reg_captcha = 1
reg_verify = 1
;reg_form =
login_tpl =
login_captcha = 1
;login_tpl = opensipkd.samsat.jabar.views:templates/login.pt
;static_files = %(here)s/../files
;captcha_files = /tmp/captcha
;company = Opensipkd
......@@ -67,26 +68,20 @@ localization = English_Australia.1252
;
;#_host = http://localhost:5433/demo2
;
unoconv_py = C:\Program Files\LibreOffice\program\python.exe
unoconv_bin = C:\product\venv-lates\Scripts\unoconv
;unoconv_py = C:\Program Files\LibreOffice\program\python.exe
;unoconv_bin = C:\product\venv-lates\Scripts\unoconv
;
;modules =
menus = login:Login
pjdl:PJDL
bphtb:BPHTB
five:Five
; pjdl:PJDL
; bphtb:BPHTB
; five:Five
;app_name = GAJI ASN
;change_unit = False
;departemen_chg_id = 3
# Registrasi User
captcha_files = /tmp/captcha
reg_captcha = 0
;reg_idcard = 1
reg_verify = 1
reg_form =
;login_tpl =
# digunakan jika akan menggunakan form registrasi sendiri
......@@ -168,25 +163,15 @@ formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
# End logging configuration
[alembic_ziggurat]
script_location = ziggurat_foundations:migrations
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
# End logging configuration
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2
[alembic_base]
script_location = opensipkd.base:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
[alembic_models]
script_location = opensipkd.models:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
[alembic_pjdl]
script_location = opensipkd.pjdl.models:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5433/magelang
script_location = opensipkd.base.scripts:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2
[pytest]
filterwarnings =
......
###
# app configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
###
[app:main]
;[app:opensipkd_base]
use = egg:opensipkd_base
reload_templates = true
pyramid.debug_all = true
pyramid.debug_authorization = false
pyramid.debug_notfound = true
pyramid.debug_routematch = true
pyramid.debug_templates = true
default_locale_name = id
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2
session.url = postgresql://aagusti:a@localhost:5433/demo2
temp_dir = C:\tmp
allow_register = true
pyramid.includes =
pyramid_tm
pyramid_beaker
pyramid_chameleon
pyramid_debugtoolbar
pyramid_rpc.jsonrpc
session.type = ext:database
session.secret = s0s3cr3ts
session.cookie_expires = true
session.key = WhatEver
session.timeout = 3000
session.lock_dir = %(here)s/tmp
timezone = Asia/Jakarta
;localization = id_ID.UTF-8
#localization = Indonesian_indonesia.1252
localization = English_Australia.1252
;login_tpl = opensipkd.samsat.jabar.views:templates/login.pt
;static_files = %(here)s/../files
;captcha_files = /tmp/captcha
;company = Opensipkd
;ibukota = Bekasi
;departement = IT
;address_1 = Jalan....
;address_2 = Bekasi ...
;
;center.phone = 021123456789
;center.mobile = 081311045668
;center.email = aa.gustiana@gmail.com
;center.email_password =
;center.smtp_server =
;
;#_host = http://localhost:5433/demo2
;
;unoconv_py = C:\Program Files\LibreOffice\program\python.exe
;unoconv_bin = C:\product\venv-lates\Scripts\unoconv
;
;modules =
menus = login:Login
; pjdl:PJDL
; bphtb:BPHTB
; five:Five
;app_name = GAJI ASN
;change_unit = False
;departemen_chg_id = 3
# Registrasi User
;captcha_files = /tmp/captcha
;reg_captcha = 0
;reg_idcard = 1
;reg_verify = 1
;reg_form =
;login_tpl =
# digunakan jika akan menggunakan form registrasi sendiri
; PROXY
;trusted_proxy_headers = "forwarded x-forwarded-for x-forwarded-host x-forwarded-proto x-forwarded-port"
;url_prefix='/wsgi'
;
;[composite:main]
;use = egg:rutter#urlmap
;/ = opensipkd_base
;/wsgi/ = opensipkd_base
;[filter:proxy-prefix]
;use = egg:PasteDeploy#prefix
;prefix = /wsgi
;
;[pipeline:main]
;pipeline =
; proxy-prefix
; opensipkd_base
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543
# Begin logging configuration
[loggers]
keys = root, opensipkd, sqlalchemy
[handlers]
keys = console
#, filelog, tabel
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
#, filelog, tabel
[logger_opensipkd]
level = DEBUG
handlers =
qualname = opensipkd
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
[handler_filelog]
class = FileHandler
args = ('log_file_location','a')
level = INFO
formatter = generic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[handler_tabel]
class = opensipkd.base.handlers.SQLAlchemyHandler
args = ()
level = WARN
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
# End logging configuration
[alembic_ziggurat]
script_location = ziggurat_foundations:migrations
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2
[alembic_base]
script_location = opensipkd.base:alembic
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demo2
[pytest]
filterwarnings =
error
ignore::UserWarning
ignore:function ham\(\) is deprecated:DeprecationWarning
\ No newline at end of file
No preview for this file type
This diff could not be displayed because it is too large.
No preview for this file type
"""add partner_id to user
Revision ID: 044041bb09ef
Revises: 37ca8f816946
Create Date: 2021-12-14 15:35:58.361667
"""
# revision identifiers, used by Alembic.
revision = '044041bb09ef'
down_revision = '37ca8f816946'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
pass
def downgrade():
pass
"""add_route_type
Revision ID: 23f0ecac4377
Revises: 8ad1f7810384
Create Date: 2020-11-30 23:02:43.713034
"""
# revision identifiers, used by Alembic.
revision = '23f0ecac4377'
down_revision = '8ad1f7810384'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('routes', 'type'):
op.add_column('routes', sa.Column('type', sa.Integer, default=0))
if not helpers.table_has_column('routes', 'app_id'):
op.add_column('routes', sa.Column('app_id', sa.Integer, default=0))
def downgrade():
pass
"""alter users date fields with time zone
Revision ID: 35f453a443
Revises:
Create Date: 2015-02-06 15:59:42.859656
"""
# revision identifiers, used by Alembic.
revision = '35f453a443'
down_revision = None
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
op.alter_column('users', 'last_login_date',
type_=sa.DateTime(timezone=True),
existing_type=sa.DateTime(timezone=False))
op.alter_column('users', 'registered_date',
type_=sa.DateTime(timezone=True),
existing_type=sa.DateTime(timezone=False))
op.alter_column('users', 'security_code_date',
type_=sa.DateTime(timezone=True),
existing_type=sa.DateTime(timezone=False))
def downgrade():
pass
"""add partner_id to user
Revision ID: 37ca8f816946
Revises: 72dd62d47460
Create Date: 2021-12-01 16:28:19.147741
"""
# revision identifiers, used by Alembic.
revision = '37ca8f816946'
down_revision = '72dd62d47460'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('users', 'partner_id'):
op.add_column('users', sa.Column('partner_id', sa.Integer))
if not helpers.table_has_column('users', 'company_id'):
op.add_column('users', sa.Column('company_id', sa.Integer))
if not helpers.table_has_column('partner', 'company_id'):
op.add_column('partner', sa.Column('company_id', sa.Integer))
def downgrade():
pass
"""partner_rt_rw
Revision ID: 56a7d9c8b0c6
Revises: 91f07d138fe9
Create Date: 2022-08-21 21:32:37.318361
"""
# revision identifiers, used by Alembic.
revision = '56a7d9c8b0c6'
down_revision = '91f07d138fe9'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('partner', 'rt'):
op.add_column('partner', sa.Column('rt', sa.String(3)))
if not helpers.table_has_column('partner', 'rw'):
op.add_column('partner', sa.Column('rw', sa.String(3)))
if not helpers.table_has_column('partner', 'tempat_lahir'):
op.add_column('partner', sa.Column('tempat_lahir', sa.String(128)))
if not helpers.table_has_column('partner', 'tgl_lahir'):
op.add_column('partner',
sa.Column('tgl_lahir', sa.DateTime(timezone=False)))
if not helpers.table_has_column('partner', 'jenis_kelamin'):
op.add_column('partner', sa.Column('jenis_kelamin', sa.String(1)))
if not helpers.table_has_column('partner', 'gol_darah'):
op.add_column('partner', sa.Column('gol_darah', sa.String(2)))
if not helpers.table_has_column('partner', 'agama'):
op.add_column('partner', sa.Column('agama', sa.String(32)))
if not helpers.table_has_column('partner', 'perkawinan'):
op.add_column('partner', sa.Column('perkawinan', sa.String(2)))
if not helpers.table_has_column('partner', 'pekerjaan'):
op.add_column('partner', sa.Column('pekerjaan', sa.String(32)))
if not helpers.table_has_column('partner', 'kewarganegaraan'):
op.add_column('partner', sa.Column('kewarganegaraan', sa.String(10)))
def downgrade():
pass
"""menus add valu and action
Revision ID: 671617e55c56
Revises: f95c10a7ae98
Create Date: 2022-12-27 17:59:55.766347
"""
# revision identifiers, used by Alembic.
revision = '671617e55c56'
down_revision = 'f95c10a7ae98'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('menus', 'valu'):
op.add_column('menus',
sa.Column('valu', sa.String(256)))
if not helpers.table_has_column('menus', 'meth'):
op.add_column('menus',
sa.Column('meth', sa.String(256)))
if not helpers.table_has_column('menus', 'page_typ'):
op.add_column('menus',
sa.Column('page_typ', sa.String(256)))
def downgrade():
pass
"""change_route_status_null
Revision ID: 72dd62d47460
Revises: 23f0ecac4377
Create Date: 2020-11-30 23:08:14.118795
"""
# revision identifiers, used by Alembic.
revision = '72dd62d47460'
down_revision = '23f0ecac4377'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
pass
# op.alter_column('routes', 'status', nullable=False)
def downgrade():
pass
"""Add Wilayah to Partner
Revision ID: 86c1b4a1da16
Revises: 044041bb09ef
Create Date: 2022-04-14 23:50:08.268569
"""
# revision identifiers, used by Alembic.
revision = '86c1b4a1da16'
down_revision = '044041bb09ef'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('partner', 'provinsi_id'):
op.add_column('partner', sa.Column('provinsi_id', sa.Integer, default=0))
if not helpers.table_has_column('partner', 'dati2_id'):
op.add_column('partner', sa.Column('dati2_id', sa.Integer, default=0))
if not helpers.table_has_column('partner', 'kecamatan_id'):
op.add_column('partner', sa.Column('kecamatan_id', sa.Integer, default=0))
if not helpers.table_has_column('partner', 'desa_id'):
op.add_column('partner', sa.Column('desa_id', sa.Integer, default=0))
if not helpers.table_has_column('partner', 'company_id'):
op.add_column('partner', sa.Column('company_id', sa.Integer, default=0))
def downgrade():
pass
"""add_route_updated
Revision ID: 8ad1f7810384
Revises: da566162d3fb
Create Date: 2020-11-30 22:58:34.288664
"""
# revision identifiers, used by Alembic.
revision = '8ad1f7810384'
down_revision = 'da566162d3fb'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('routes', 'updated'):
op.add_column('routes', sa.Column('updated', sa.DateTime, default=0))
if not helpers.table_has_column('routes', 'create_uid'):
op.add_column('routes', sa.Column('create_uid', sa.Integer, default=0))
if not helpers.table_has_column('routes', 'update_uid'):
op.add_column('routes', sa.Column('update_uid', sa.Integer, default=0))
def downgrade():
pass
"""penambahan user device expired
Revision ID: 8e7057155823
Revises: 86c1b4a1da16
Create Date: 2022-07-08 14:58:39.378811
"""
# revision identifiers, used by Alembic.
revision = '8e7057155823'
down_revision = '86c1b4a1da16'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('user_device', 'expired'):
op.add_column('user_device', sa.Column('expired', sa.DateTime(timezone=True)))
op.alter_column('user_device', sa.Column('expired', sa.DateTime(timezone=True)))
if not helpers.table_has_column('routes', 'create_uid'):
op.add_column('routes', sa.Column('create_uid', sa.Integer, default=0))
if not helpers.table_has_column('routes', 'update_uid'):
op.add_column('routes', sa.Column('update_uid', sa.Integer, default=0))
def downgrade():
pass
"""tambah idcard
Revision ID: 91f07d138fe9
Revises: 8e7057155823
Create Date: 2022-07-11 18:29:13.867835
"""
# revision identifiers, used by Alembic.
revision = '91f07d138fe9'
down_revision = '8e7057155823'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('partner', 'idcard'):
op.add_column('partner',
sa.Column('idcard', sa.String(256)))
def downgrade():
pass
"""add app_id to route
Revision ID: c35162ddf851
Revises: e628a2dc0b23
Create Date: 2020-11-23 14:41:33.244797
"""
# revision identifiers, used by Alembic.
revision = 'c35162ddf851'
down_revision = 'e628a2dc0b23'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('routes', 'app_id'):
op.add_column('routes', sa.Column('app_id', sa.SmallInteger, default=0))
def downgrade():
pass
"""add_route_creted
Revision ID: da566162d3fb
Revises: c35162ddf851
Create Date: 2020-11-30 22:28:10.604024
"""
# revision identifiers, used by Alembic.
revision = 'da566162d3fb'
down_revision = 'c35162ddf851'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('routes', 'created'):
op.add_column('routes', sa.Column('created', sa.DateTime, default=0))
def downgrade():
pass
"""add users api_key
Revision ID: e628a2dc0b23
Revises: 35f453a443
Create Date: 2018-12-10 19:29:52.211689
"""
# revision identifiers, used by Alembic.
revision = 'e628a2dc0b23'
down_revision = '35f453a443'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('users', 'api_key'):
op.add_column('users', sa.Column('api_key', sa.String(256)))
def downgrade():
pass
"""Add nip to partner
Revision ID: f95c10a7ae98
Revises: 56a7d9c8b0c6
Create Date: 2022-08-22 18:17:00.798094
"""
# revision identifiers, used by Alembic.
revision = 'f95c10a7ae98'
down_revision = '56a7d9c8b0c6'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column('partner', 'nip'):
op.add_column('partner', sa.Column('nip', sa.String(32)))
if not helpers.table_has_column('partner', 'npwp'):
op.add_column('partner', sa.Column('npwp', sa.String(32)))
def downgrade():
pass
import logging
import traceback
from datetime import datetime
from hashlib import md5
import transaction
from opensipkd.models.handlers import (
Log,
LogDBSession,
)
class SQLAlchemyHandler(logging.Handler):
# A very basic logger that commits a LogRecord to the SQL Db
def emit(self, record):
trace = None
exc = record.__dict__['exc_info']
if exc:
trace = traceback.format_exc()
if 'waitress' in record.__dict__['name']:
return
t = datetime.now().strftime('%Y-%m-%d %H:%M:%S,%f')
level = record.__dict__['levelname']
logger = record.__dict__['name']
msg = record.__dict__['msg']
line_id = f'{t} {level} {msg}'
line_id = md5(line_id.encode('utf-8'))
line_id = line_id.hexdigest()
log = Log(
line_id=line_id, logger=logger, level=level, trace=trace,
msg=msg)
with transaction.manager:
LogDBSession.add(log)
#
# Indonesian translations for PACKAGE package
# This file is distributed under the same license as the PACKAGE package.
# <aagusti@desktop-pa2epik.localdomain>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE 1.0\n"
"POT-Creation-Date: 2022-07-30 20:57+0700\n"
"PO-Revision-Date: 2022-07-30 20:58+0700\n"
"Last-Translator: <aagusti@desktop-pa2epik.localdomain>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Lingua 4.15.0\n"
#. Default: User Name
#: opensipkd/base/views/user.py:28
msgid "user-name"
msgstr "Nama User"
#: opensipkd/base/views/user.py:50
msgid "Active"
msgstr ""
#: opensipkd/base/views/user.py:51
msgid "Archived"
msgstr ""
#: opensipkd/base/views/user.py:55
msgid "Hapus"
msgstr ""
#: opensipkd/base/views/user.py:58
msgid "Tidak ada"
msgstr ""
#: opensipkd/base/views/user.py:59
msgid "Buatkan"
msgstr ""
#. Default: ${username} berhasil ditambahkan.
#: opensipkd/base/views/user.py:129
msgid "user-added-with-password"
msgstr ""
#. Default: ${email} berhasil ditambahkan dan email untuk ubah kata kunci sudah
#. dikirim.
#: opensipkd/base/views/user.py:137
msgid "user-added"
msgstr ""
#. Default: User ${email} ID ${uid} has been deleted
#: opensipkd/base/views/user.py:199
msgid "user-deleted"
msgstr ""
#. Default: Email ${email} already used by user ID ${uid}
#: opensipkd/base/views/user.py:250
msgid "email-already-used"
msgstr ""
#: opensipkd/base/views/user.py:257
msgid "Invalid email format"
msgstr ""
#. Default: Only A-Z a-z, 0-9, and - characters are allowed
#: opensipkd/base/views/user.py:277
msgid "username-only-contain"
msgstr ""
#. Default: Only A-Z a-z or 0-9 at the start and end
#: opensipkd/base/views/user.py:283
msgid "username-first-end-alphanumeric"
msgstr ""
#. Default: Username ${username} already used by ID ${uid}
#: opensipkd/base/views/user.py:293
msgid "username-already-used"
msgstr ""
#: opensipkd/base/views/user.py:325
msgid "Email"
msgstr ""
#: opensipkd/base/views/user.py:327
msgid "Username"
msgstr ""
#: opensipkd/base/views/user.py:330
msgid "Group"
msgstr ""
#: opensipkd/base/views/user.py:332
msgid "API Key"
msgstr ""
#: opensipkd/base/views/user.py:345
msgid "Status"
msgstr ""
#
# Indonesian translations for PACKAGE package
# This file is distributed under the same license as the PACKAGE package.
# <aagusti@desktop-pa2epik.localdomain>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE 1.0\n"
"POT-Creation-Date: 2022-07-30 20:57+0700\n"
"PO-Revision-Date: 2022-07-30 20:58+0700\n"
"Last-Translator: <aagusti@desktop-pa2epik.localdomain>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Lingua 4.15.0\n"
#. Default: User Name
#: opensipkd/base/views/user.py:28
msgid "user-name"
msgstr "Nama User"
#: opensipkd/base/views/user.py:50
msgid "Active"
msgstr ""
#: opensipkd/base/views/user.py:51
msgid "Archived"
msgstr ""
#: opensipkd/base/views/user.py:55
msgid "Hapus"
msgstr ""
#: opensipkd/base/views/user.py:58
msgid "Tidak ada"
msgstr ""
#: opensipkd/base/views/user.py:59
msgid "Buatkan"
msgstr ""
#. Default: ${username} berhasil ditambahkan.
#: opensipkd/base/views/user.py:129
msgid "user-added-with-password"
msgstr ""
#. Default: ${email} berhasil ditambahkan dan email untuk ubah kata kunci sudah
#. dikirim.
#: opensipkd/base/views/user.py:137
msgid "user-added"
msgstr ""
#. Default: User ${email} ID ${uid} has been deleted
#: opensipkd/base/views/user.py:199
msgid "user-deleted"
msgstr ""
#. Default: Email ${email} already used by user ID ${uid}
#: opensipkd/base/views/user.py:250
msgid "email-already-used"
msgstr ""
#: opensipkd/base/views/user.py:257
msgid "Invalid email format"
msgstr ""
#. Default: Only A-Z a-z, 0-9, and - characters are allowed
#: opensipkd/base/views/user.py:277
msgid "username-only-contain"
msgstr ""
#. Default: Only A-Z a-z or 0-9 at the start and end
#: opensipkd/base/views/user.py:283
msgid "username-first-end-alphanumeric"
msgstr ""
#. Default: Username ${username} already used by ID ${uid}
#: opensipkd/base/views/user.py:293
msgid "username-already-used"
msgstr ""
#: opensipkd/base/views/user.py:325
msgid "Email"
msgstr ""
#: opensipkd/base/views/user.py:327
msgid "Username"
msgstr ""
#: opensipkd/base/views/user.py:330
msgid "Group"
msgstr ""
#: opensipkd/base/views/user.py:332
msgid "API Key"
msgstr ""
#: opensipkd/base/views/user.py:345
msgid "Status"
msgstr ""
log = __import__("logging").getLogger(__name__)
log.warning('Use opensipkd.models')
from opensipkd.models import *
from .meta import *
from .common import *
from .base import *
from .users import *
from .wilayah import *
from .partner import *
......@@ -11,7 +11,6 @@ from zope.sqlalchemy import register
_logging = logging.getLogger(__name__)
class MySession(Session):
def execute(self, clause, params=None, mapper=None, **kw):
# Your magic with clause here
......@@ -69,8 +68,7 @@ class CommonModel(object):
def from_dict(self, values, date_format="%d-%m-%Y"):
for column in self.__table__.columns:
if column.name in values:
_logging.debug(
f"{column.name}: {column.type}: {values[column.name]}")
_logging.debug(f"{column.name}: {column.type}: {values[column.name]}")
if type(column.type) is DateTime and date_format:
if values[column.name] and type(values[column.name]) is String:
setattr(self, column.name,
......@@ -112,7 +110,7 @@ class DefaultModel(CommonModel):
return query
@classmethod
def query_from(cls, columns=None, filters=None, db_session=DBSession):
def query_from(cls, db_session=DBSession, columns=None, filters=None):
query = db_session.query().select_from(cls)
for c in columns:
query = query.add_columns(c)
......
from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, ForeignKey
from sqlalchemy.orm import relationship, backref
from .base import NamaModel, DefaultModel, DBSession, KodeModel
from .meta import Base
# from .partner import Partner
from .users import User
class Route(Base, NamaModel):
__tablename__ = 'routes'
__table_args__ = {'extend_existing': True}
id = Column(Integer, primary_key=True)
kode = Column(String(128), unique=True)
path = Column(String(256), nullable=False, unique=True)
status = Column(Integer, nullable=False, server_default='1')
type = Column(SmallInteger, nullable=False, server_default='0')
app_id = Column(SmallInteger, nullable=False, server_default='0')
module = Column(String(256))
is_menu = Column(SmallInteger)
parent_id = Column(Integer, ForeignKey("routes.id"))
order_id = Column(Integer)
permission = Column(String(256))
class_view = Column(String(256))
def_func = Column(String(256))
template = Column(String(256))
icon = Column(String(256))
children = relationship(
"Route", backref=backref('parent', remote_side=[id]),
order_by="Route.order_id")
class Parameter(Base, NamaModel):
__tablename__ = 'parameters'
__table_args__ = {'extend_existing': True}
value = Column(String(256), nullable=False)
class Holiday(Base, DefaultModel):
__tablename__ = 'holiday'
tanggal = Column(DateTime)
@classmethod
def query_tanggal(cls, tanggal, db_session=DBSession):
return db_session.query(cls).filter_by(tanggal=tanggal)
class UserDeviceModel(Base, KodeModel):
__tablename__ = 'user_device'
user_id = Column(Integer, ForeignKey(User.id))
kode = Column(String(256))
token = Column(String(256))
logged_in = Column(Integer)
las_login_date = Column(DateTime(timezone=True))
expired = Column(DateTime(timezone=True))
user = relationship(User, backref=backref("devices"))
# class ResCompany(Base, NamaModel):
# __tablename__ = 'company'
# id = Column(Integer, primary_key=True)
# partner_id = Column(Integer, ForeignKey(Partner.id))
# partner = relationship("Partner", backref=backref("company"))
# parent_id = Column(Integer, ForeignKey("company.id"))
# children = relationship("ResCompany")
# parent = relationship(
# "ResCompany", remote_side=[id], primaryjoin="ResCompany.parent_id==ResCompany.id",
# overlaps="children"
# )
\ No newline at end of file
from sqlalchemy import (Column, Integer, String, DateTime, func, )
from sqlalchemy.orm import (scoped_session, sessionmaker, )
from ..models.base import CommonModel
from ..models.meta import Base
factory = sessionmaker(autoflush=True, autocommit=True)
LogDBSession = scoped_session(factory)
class Log(Base, CommonModel):
__tablename__ = 'logs'
id = Column(Integer, primary_key=True) # auto incrementing
line_id = Column(String(32), nullable=False, unique=True)
logger = Column(String) # the name of the logger. (e.g. myapp.views)
level = Column(String) # info, debug, or error?
trace = Column(String) # the full traceback printout
msg = Column(String, nullable=False)
created_at = Column(
DateTime(timezone=True),
nullable=False,
server_default=func.now()) # the current timestamp
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import MetaData
# Recommended naming convention used by Alembic, as various different database
# providers will autogenerate vastly different names making migrations more
# difficult. See: http://alembic.zzzcomputing.com/en/latest/naming.html
NAMING_CONVENTION = {
"ix": 'ix_%(column_0_label)s',
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s"
}
metadata = MetaData(naming_convention=NAMING_CONVENTION)
Base = declarative_base(metadata=metadata)
from sqlalchemy import (
Column,
Integer,
String,
SmallInteger,
DateTime, ForeignKey
)
from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.orm import backref
from .base import NamaModel, StandarModel
from .meta import (Base)
from .wilayah import ResProvinsi, ResDesa, ResKecamatan, ResDati2
class PartnerModel(NamaModel):
idcard = Column(String(256))
status = Column(Integer, default=1)
alamat_1 = Column(String(128))
alamat_2 = Column(String(128))
email = Column(String(40))
phone = Column(String(16))
fax = Column(String(16))
mobile = Column(String(16))
website = Column(String(64))
# pic = Column(String(16))
# pic_mobile = Column(String(16))
# pic_email = Column(String(16))
# pic_jabatan = Column(String(16))
@classmethod
def query_email(cls, email):
return cls.query().filter_by(email=email)
@classmethod
def query_mobile(cls, mobile):
return cls.query().filter_by(mobile=mobile)
class Partner(Base, PartnerModel):
__tablename__ = 'partner'
kelurahan = Column(String(128))
kecamatan = Column(String(128))
kota = Column(String(128))
provinsi = Column(String(128))
is_vendor = Column(SmallInteger, nullable=False, )
is_customer = Column(SmallInteger, nullable=False, )
# bank = Column(String(16))
# bank_accnt = Column(String(16))
# user_id = Column(Integer, ForeignKey(User.id), nullable=True) # referensi ke login
# departemen_id = Column(Integer, ForeignKey(Departemen.id)) # referensi ke default skpd
# users = relationship("User", backref=backref('partner'))
# departemen = relationship('Departemen', backref=backref('partner'))
rt = Column(String(3))
rw = Column(String(3))
tempat_lahir = Column(String(128))
tgl_lahir = Column(DateTime(timezone=False))
jenis_kelamin = Column(String(1))
gol_darah = Column(String(2))
agama = Column(String(32))
perkawinan = Column(String(2))
pekerjaan = Column(String(32))
kewarganegaraan = Column(String(10))
provinsi_id = Column(Integer, ForeignKey(ResProvinsi.id))
dati2_id = Column(Integer, ForeignKey(ResDati2.id))
kecamatan_id = Column(Integer, ForeignKey(ResKecamatan.id))
desa_id = Column(Integer, ForeignKey(ResDesa.id))
company_id = Column(Integer)
nip = Column(String(32))
res_provinsi = relationship(
"ResProvinsi", backref=backref('partner'))
res_dati2 = relationship(
"ResDati2", backref=backref('partner'))
res_kecamatan = relationship(
"ResKecamatan", backref=backref('partner'))
res_desa = relationship(
"ResDesa", backref=backref('partner'))
partner_files: Mapped["PartnerFiles"] = relationship(back_populates="partner")
# npwp = Column(String(16))
# npwpd = Column(String(16))
#
# @classmethod
# def query_user_id(cls, user_id):
# return cls.query().filter_by(user_id=user_id)
#
# @classmethod
# def query_user(cls, user):
# return cls.query_user_id(user.id)
@classmethod
def query_identity(cls, ident):
row = cls.query().filter_by(kode=ident).first()
if not row:
row = cls.query().filter_by(email=ident).first()
if not row:
row = cls.query().filter_by(mobile=ident).first()
return row
class PartnerFiles(Base, StandarModel):
__tablename__ = 'partner_files'
partner_id: Mapped[int] = mapped_column(ForeignKey(Partner.id))
file_name: Mapped[str] = mapped_column(String(256))
description: Mapped[str] = mapped_column(String(256), nullable=True)
partner: Mapped["Partner"] = relationship(back_populates="partner_files")
# class PartnerUserModel(Base, DefaultModel):
# __tablename__ = 'partner_user'
# partner_id = Column(Integer, ForeignKey(Partner.id))
# user_id = Column(Integer, ForeignKey(User.id))
\ No newline at end of file
from sqlalchemy import (
Column,
ForeignKey,
String,
SmallInteger,
)
from sqlalchemy.orm import relationship, backref
from . import TABLE_ARGS
from .common import (NamaModel)
from .meta import Base
kategori_provinsi = (
("provinsi", "Provinsi"),
("provinsi administratif", "Provinsi Administratif"),
)
class ResProvinsi(Base, NamaModel):
__tablename__ = 'res_provinsi'
__table_args__ = (TABLE_ARGS,)
kategori = Column(String(32))
ibu_kota = Column(String(64))
kategori_dati2 = (
("kota", "Kota"),
("kabupaten", "Kabupaten"),
("kota administratif", "Kota Administratif"),
("kabupaten administratif", "Kabupaten Administratif"),
)
class ResDati2(Base, NamaModel):
__tablename__ = 'res_dati2'
__table_args__ = (TABLE_ARGS,)
kategori = Column(String(32))
ibu_kota = Column(String(64))
provinsi_id = Column(SmallInteger, ForeignKey(ResProvinsi.id))
provinsi = relationship(ResProvinsi, backref=backref("dati2"))
@classmethod
def get_list(cls, provinsi_id):
qry = cls.query_list()
if provinsi_id:
qry = qry.filter(cls.provinsi_id == provinsi_id)
return qry.all()
class ResKecamatan(Base, NamaModel):
__tablename__ = 'res_kecamatan'
__table_args__ = (TABLE_ARGS,)
ibu_kota = Column(String(64))
dati2_id = Column(SmallInteger, ForeignKey(ResDati2.id))
dati2 = relationship(ResDati2, backref=backref("kecamatan"))
@classmethod
def get_list(cls, dati2_id=None):
qry = cls.query_list()
if dati2_id:
qry = qry.filter(cls.dati2_id == dati2_id)
return qry.all()
kategori_desa = (
("desa", "Desa"),
("kelurahan", "Kelurahan")
)
class ResDesa(Base, NamaModel):
__tablename__ = 'res_desa'
__table_args__ = (TABLE_ARGS,)
kategori = Column(String(32))
kecamatan_id = Column(SmallInteger, ForeignKey(ResKecamatan.id))
kecamatan = relationship(ResKecamatan, backref=backref("desa"))
@classmethod
def get_list(cls, kecamatan_id=None):
qry = cls.query_list()
if kecamatan_id:
qry = qry.filter(cls.kecamatan_id == kecamatan_id)
return qry.all()
<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<!DOCTYPE document SYSTEM "rml_1_0.dtd">
<document>
<template pagesize="21cm, 29.7cm">
<pageTemplate id="page1">
<pageGraphics>
<setFont name="Helvetica-Bold" size="12"/>
<drawCenteredString x="10.5cm" y="27.5cm">PEMERINTAH {company}</drawCenteredString >
<setFont name="Helvetica-Bold" size="10"/>
<drawCenteredString x="10.5cm" y="26.9cm">DAFTAR SKPD {departement}</drawCenteredString>
<!-- <setFont name="Helvetica-Bold" size="8"/>
<drawCenteredString x="10.5cm" y="26.7cm">{alamat}</drawCenteredString > -->
<image file="{logo}" preserveAspectRatio="1" x="2cm" y="749" width="50" height="50"/>
<image file="{line}" preserveAspectRatio="0" x="2cm" y="740" width="17cm" height="10"/>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="24cm"/>
</pageTemplate>
</template>
<stylesheet>
<paraStyle name="title"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="5"
alignment="center"/>
<paraStyle name="tableTitleCenter"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="10"
alignment="center"/>
<paraStyle name="tableBody"
fontName="Helvetica"
fontSize="8"
spaceAfter="5"/>
<paraStyle name="body"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<blockTableStyle id="table">
<blockFont name="Helvetica" size="10"/>
<blockFont name="Helvetica-Bold" size="10" start="2,0" stop="2,0"/>
<lineStyle kind="GRID" colorName="black"/>
<!-- <lineStyle kind="OUTLINE" colorName="black" thickness="2"/> -->
<!-- <blockBackground colorName="pink" start="0,0" stop="-1,0"/> -->
<blockBackground colorName="yellow" start="0,0" stop="-1,0"/>
</blockTableStyle>
<paraStyle name="h1" fontName="Helvetica-BoldOblique" fontSize="14" leading="36" spaceBefore="12"/>
<paraStyle name="normal" fontName="Helvetica" fontSize="10" leading="10" />
<paraStyle name="spaced" fontName="Helvetica" fontSize="10" leading="12" spaceBefore="12" spaceAfter="12"/>
<paraStyle name="intro" fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
</stylesheet>
<story>
<setNextTemplate name="page1"/>
<!-- <para style="title">DAFTAR SKPD UNIT KERJA</para> -->
<blockTable colWidths="2cm,13cm,2.5cm" style="table" >
<tr>
<td><para style="tableTitleCenter">Kode</para></td>
<td><para style="tableTitleCenter">Uraian</para></td>
<td><para style="tableTitleCenter">Status</para></td>
</tr>
{rows}
</blockTable>
<namedString id="last-page"><pageNumber/></namedString>
</story>
</document>
<tr>
<td><para style="tableBody">{kode}</para></td>
<td><para style="tableBody">{nama}</para></td>
<td><para style="tableBody">{status}</para></td>
</tr>
header ="""
JENIS GAJI : {jenis_gaji}
BULAN : {bulan}
KODE UNIT : {unit_kd}
UNIT KERJA : {unit_nm}
+----+------------------------------+-----+---------------------------------+---------------------+---------------+------+
| | | STA | P E N G H A S I L A N | P O T O N G A N | | |
| | |KAWIN|-----------+----------+----------+----------+----------| | |
| | NAMA | |GAPOK |-T.UMUM |-T.PPH |-PFK.BULOG|-I.ASKES | JUMLAH | |
|NO. | NIP.PEGAWAI | JML |TUNJ. KEL |-T.STRUK |-I.ASKES |-IWP. |-I.JKK/JKM| PENGHASILAN |TANDA |
|URUT| STATUS PEG. (PNS/CPNS) |ANAK/|a.IST/SUAMI|-T.FUNGS |-I.JKK/JKM|-TAPERUM |-LAIN-LAIN| BERSIH YANG |TANGAN|
| | |JIWA |b.ANAK |-T.TMBH.UM|-P BULAT |-PPH.PS.21| | DIBAYARKAN | |
| | | | |-T.BERAS |JML.KOTOR |-SEWA RMH |JML.POTNGN| | |
|----+------------------------------+-----+-----------+----------+----------+----------+----------+---------------+------|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|----+------------------------------+-----+-----------+----------+----------+----------+----------+---------------+------|
"""
+----+------------------------------+-----+---------------------------------+---------------------+---------------+------+
|{no}|{nama} | |GAPOK |-T.UMUM |-T.PPH |-PFK.BULOG|-I.ASKES | JUMLAH | |
| |{nip} {tgl_lahir} | JML |TUNJ. KEL |-T.STRUK |-I.ASKES |-IWP. |-I.JKK/JKM| PENGHASILAN |TANDA |
| |{peg_st}/{peg_kd}.{peg_tm} | NAK/|a.IST/SUAMI|-T.FUNGS |-I.JKK/JKM|-TAPERUM |-LAIN-LAIN| BERSIH YANG |TANGAN|
| |{gol_kd} - {gol_nm} |JIWA |b.ANAK |-T.TMBH.UM|-P BULAT |-PPH.PS.21| | DIBAYARKAN | |
| |MKG: {mk} Thn,{th} Bln.{bl} | | |-T.BERAS |JML.KOTOR |-SEWA RMH |JML.POTNGN| | |
|----+------------------------------+-----+-----------+----------+----------+----------+----------+---------------+------|
<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<!DOCTYPE document SYSTEM "rml_1_0.dtd">
<document>
<template pagesize="21cm, 29.7cm">
<pageTemplate id="page1">
<pageGraphics>
<setFont name="Helvetica-Bold" size="14"/>
<!-- <drawString x="2cm" y="27.4cm">PEMERINTAH {company}</drawString > -->
<drawCenteredString x="11.5cm" y="27.7cm">PEMERINTAH {company}</drawCenteredString >
<!-- <drawRightString x="19cm" y="27.7cm">PEMERINTAH {company}</drawRightString > -->
<setFont name="Helvetica-Bold" size="12"/>
<drawCenteredString x="11.5cm" y="27.2cm">{departement}</drawCenteredString>
<setFont name="Helvetica-Bold" size="8"/>
<drawCenteredString x="11.5cm" y="26.7cm">{address}</drawCenteredString >
<image file="{logo}" preserveAspectRatio="1" x="2cm" y="749" width="50" height="50"/>
<image file="{line}" preserveAspectRatio="0" x="2cm" y="740" width="17cm" height="10"/>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="24cm"/>
</pageTemplate>
<pageTemplate id="page2">
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="27.7cm">{waktu}</drawString>
<drawRightString x="19cm" y="27.7cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="26cm"/>
</pageTemplate>
</template>
<stylesheet>
<paraStyle name="title1"
fontName="Helvetica-Bold"
fontSize="16"
spaceAfter="16"
align="center"/>
<paraStyle name="title2"
fontName="Helvetica-Bold"
fontSize="14"
spaceAfter="10"/>
<paraStyle name="heading1"
fontName="Helvetica-Bold"
fontSize="12"
spaceAfter="12"/>
<paraStyle name="tableTitle"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="10"/>
<paraStyle name="tableBody"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<paraStyle name="body"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<blockTableStyle id="table">
<blockValign start="0,0" stop="-1,-1" value="TOP"/>
<blockAlignment value="left" start="0,0" stop="0,-1"/>
<blockAlignment value="centre" start="2,0" stop="2,-1"/>
<blockFont name="Helvetica" size="10"/>
<blockFont name="Helvetica-Bold" size="10" start="2,0" stop="2,0"/>
<lineStyle kind="GRID" colorName="black"/>
<!-- <lineStyle kind="OUTLINE" colorName="black" thickness="2"/> -->
<!-- <blockBackground colorName="pink" start="0,0" stop="-1,0"/> -->
<blockBackground colorName="yellow" start="0,0" stop="-1,0"/>
</blockTableStyle>
<paraStyle name="h1" fontName="Helvetica-BoldOblique" fontSize="14" leading="36" spaceBefore="12"/>
<paraStyle name="normal" fontName="Helvetica" fontSize="10" leading="10" />
<paraStyle name="spaced" fontName="Helvetica" fontSize="10" leading="12" spaceBefore="12" spaceAfter="12"/>
<paraStyle name="intro" fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
</stylesheet>
<story>
<setNextTemplate name="page2"/>
<para style="heading1">DAFTAR GROUP APLIKASI</para>
<blockTable colWidths="4cm,10cm,3cm" style="table" repeatRows="1">
<tr>
<td><para style="tableTitle">Group</para></td>
<td><para style="tableTitle">Deskripsi</para></td>
<td>Anggota</td>
</tr>
{rows}
</blockTable>
<namedString id="last-page"><pageNumber/></namedString>
</story>
</document>
<tr>
<td style="tableBody">{group_name}</td>
<td style="tableBody"><para style="tableBody">{description}</para></td>
<td style="tableBody">{member_count}</td>
</tr>
\ No newline at end of file
<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<!DOCTYPE document SYSTEM "rml_1_0.dtd">
<document>
<template pagesize="21cm, 29.7cm">
<pageTemplate id="page1">
<pageGraphics>
<setFont name="Helvetica-Bold" size="12"/>
<drawCenteredString x="10.5cm" y="27.5cm">PEMERINTAH {company}</drawCenteredString >
<setFont name="Helvetica-Bold" size="10"/>
<drawCenteredString x="10.5cm" y="26.9cm">DAFTAR PARTNER</drawCenteredString>
<!-- <setFont name="Helvetica-Bold" size="8"/>
<drawCenteredString x="10.5cm" y="26.7cm">{alamat}</drawCenteredString > -->
<image file="{logo}" preserveAspectRatio="1" x="2cm" y="749" width="50" height="50"/>
<image file="{line}" preserveAspectRatio="0" x="2cm" y="740" width="17cm" height="10"/>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="24cm"/>
</pageTemplate>
</template>
<stylesheet>
<paraStyle name="title"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="5"
alignment="center"/>
<paraStyle name="tableTitleCenter"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="10"
alignment="center"/>
<paraStyle name="tableBody"
fontName="Helvetica"
fontSize="8"
spaceAfter="5"/>
<paraStyle name="body"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<blockTableStyle id="table">
<blockValign start="0,0" stop="-1,-1" value="middle"/>
<blockFont name="Helvetica" size="10"/>
<blockFont name="Helvetica-Bold" size="10" start="2,0" stop="2,0"/>
<lineStyle kind="GRID" colorName="black"/>
<!-- <lineStyle kind="OUTLINE" colorName="black" thickness="2"/> -->
<!-- <blockBackground colorName="pink" start="0,0" stop="-1,0"/> -->
<blockBackground colorName="yellow" start="0,0" stop="-1,0"/>
</blockTableStyle>
<paraStyle name="h1" fontName="Helvetica-BoldOblique" fontSize="14" leading="36" spaceBefore="12"/>
<paraStyle name="normal" fontName="Helvetica" fontSize="10" leading="10" />
<paraStyle name="spaced" fontName="Helvetica" fontSize="10" leading="12" spaceBefore="12" spaceAfter="12"/>
<paraStyle name="intro" fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
</stylesheet>
<story>
<setNextTemplate name="page1"/>
<!-- <para style="title">DAFTAR PARTNER</para> -->
<blockTable colWidths="4cm,6cm,2.3cm,2.3cm,2.3cm" style="table" >
<tr>
<td><para style="tableTitleCenter">Kode</para></td>
<td><para style="tableTitleCenter">Nama Partner</para></td>
<td><para style="tableTitleCenter">Vendor</para></td>
<td><para style="tableTitleCenter">Customer</para></td>
<td><para style="tableTitleCenter">Status</para></td>
</tr>
{rows}
</blockTable>
<namedString id="last-page"><pageNumber/></namedString>
</story>
</document>
<tr>
<td vAlign="top"><para style="tableBody">{kode}</para></td>
<td vAlign="top"><para style="tableBody">{nama}</para></td>
<td vAlign="top"><para style="tableBody">{vendor}</para></td>
<td vAlign="top"><para style="tableBody">{is_customer}</para></td>
<td vAlign="top"><para style="tableBody">{status}</para></td>
</tr>
<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<!DOCTYPE document SYSTEM "rml_1_0.dtd">
<document>
<template pagesize="21cm, 29.7cm">
<pageTemplate id="page1">
<pageGraphics>
<setFont name="Helvetica-Bold" size="12"/>
<drawCenteredString x="10.5cm" y="27.5cm">PEMERINTAH {company}</drawCenteredString >
<setFont name="Helvetica-Bold" size="10"/>
<drawCenteredString x="10.5cm" y="26.9cm">DAFTAR PERMISSION</drawCenteredString>
<!-- <setFont name="Helvetica-Bold" size="8"/>
<drawCenteredString x="10.5cm" y="26.7cm">{alamat}</drawCenteredString > -->
<image file="{logo}" preserveAspectRatio="1" x="2cm" y="749" width="50" height="50"/>
<image file="{line}" preserveAspectRatio="0" x="2cm" y="740" width="17cm" height="10"/>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="24cm"/>
</pageTemplate>
</template>
<stylesheet>
<paraStyle name="title"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="5"
alignment="center"/>
<paraStyle name="tableTitleCenter"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="10"
alignment="center"/>
<paraStyle name="tableBody"
fontName="Helvetica"
fontSize="8"
spaceAfter="5"/>
<paraStyle name="body"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<blockTableStyle id="table">
<blockValign start="0,0" stop="-1,-1" value="middle"/>
<blockFont name="Helvetica" size="10"/>
<blockFont name="Helvetica-Bold" size="10" start="2,0" stop="2,0"/>
<lineStyle kind="GRID" colorName="black"/>
<!-- <lineStyle kind="OUTLINE" colorName="black" thickness="2"/> -->
<!-- <blockBackground colorName="pink" start="0,0" stop="-1,0"/> -->
<blockBackground colorName="yellow" start="0,0" stop="-1,0"/>
</blockTableStyle>
<paraStyle name="h1" fontName="Helvetica-BoldOblique" fontSize="14" leading="36" spaceBefore="12"/>
<paraStyle name="normal" fontName="Helvetica" fontSize="10" leading="10" />
<paraStyle name="spaced" fontName="Helvetica" fontSize="10" leading="12" spaceBefore="12" spaceAfter="12"/>
<paraStyle name="intro" fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
</stylesheet>
<story>
<setNextTemplate name="page1"/>
<!-- <para style="title">DAFTAR PARTNER</para> -->
<blockTable colWidths="4cm,6cm,2.3cm,2.3cm,2.3cm" style="table" >
<tr>
<td><para style="tableTitleCenter">Nama</para></td>
<td><para style="tableTitleCenter">Diskripsi</para></td>
</tr>
{rows}
</blockTable>
<namedString id="last-page"><pageNumber/></namedString>
</story>
</document>
<tr>
<td style="tableBody">{perm_name}</td>
<td style="tableBody">{description}</td>
</tr>
\ No newline at end of file
<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<!DOCTYPE document SYSTEM "rml_1_0.dtd">
<document>
<template pagesize="21cm, 29.7cm">
<pageTemplate id="page1">
<pageGraphics>
<setFont name="Helvetica-Bold" size="14"/>
<!-- <drawString x="2cm" y="27.4cm">PEMERINTAH {company}</drawString > -->
<drawCenteredString x="11.5cm" y="27.7cm">PEMERINTAH {company}</drawCenteredString >
<!-- <drawRightString x="19cm" y="27.7cm">PEMERINTAH {company}</drawRightString > -->
<setFont name="Helvetica-Bold" size="12"/>
<drawCenteredString x="11.5cm" y="27.2cm">{departement}</drawCenteredString>
<setFont name="Helvetica-Bold" size="8"/>
<drawCenteredString x="11.5cm" y="26.7cm">{address}</drawCenteredString >
<image file="{logo}" preserveAspectRatio="1" x="2cm" y="749" width="50" height="50"/>
<image file="{line}" preserveAspectRatio="0" x="2cm" y="740" width="17cm" height="10"/>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="24cm"/>
</pageTemplate>
<pageTemplate id="page2">
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="27.7cm">{waktu}</drawString>
<drawRightString x="19cm" y="27.7cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<pageGraphics>
<setFont name="Helvetica" size="10"/>
<drawString x="2cm" y="1.5cm">{waktu}</drawString>
<drawRightString x="19cm" y="1.5cm">Halaman <pageNumber/> / <getName id="last-page" default="1"/></drawRightString>
</pageGraphics>
<frame id="content" x1="2cm" y1="2cm" width="17cm" height="26cm"/>
</pageTemplate>
</template>
<stylesheet>
<paraStyle name="title1"
fontName="Helvetica-Bold"
fontSize="16"
spaceAfter="16"
align="center"/>
<paraStyle name="title2"
fontName="Helvetica-Bold"
fontSize="14"
spaceAfter="10"/>
<paraStyle name="heading1"
fontName="Helvetica-Bold"
fontSize="12"
spaceAfter="12"/>
<paraStyle name="tableTitle"
fontName="Helvetica-Bold"
fontSize="10"
spaceAfter="10"/>
<paraStyle name="tableBody"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<paraStyle name="body"
fontName="Helvetica"
fontSize="10"
spaceAfter="10"/>
<blockTableStyle id="table">
<blockValign start="0,0" stop="-1,-1" value="TOP"/>
<blockAlignment value="left" start="0,0" stop="0,-1"/>
<blockAlignment value="centre" start="2,0" stop="2,-1"/>
<blockFont name="Helvetica" size="10"/>
<blockFont name="Helvetica-Bold" size="10" start="2,0" stop="2,0"/>
<lineStyle kind="GRID" colorName="black"/>
<!-- <lineStyle kind="OUTLINE" colorName="black" thickness="2"/> -->
<!-- <blockBackground colorName="pink" start="0,0" stop="-1,0"/> -->
<blockBackground colorName="yellow" start="0,0" stop="-1,0"/>
</blockTableStyle>
<paraStyle name="h1" fontName="Helvetica-BoldOblique" fontSize="14" leading="36" spaceBefore="12"/>
<paraStyle name="normal" fontName="Helvetica" fontSize="10" leading="10" />
<paraStyle name="spaced" fontName="Helvetica" fontSize="10" leading="12" spaceBefore="12" spaceAfter="12"/>
<paraStyle name="intro" fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
</stylesheet>
<story>
<!-- <storyPlace x="4cm" y="700" width="500" height="73" origin="page"> -->
<!-- <para style="title1">PEMERINTAH {company}</para> -->
<!-- <hr color="white" thickness="8pt"/> -->
<!-- <para style="title2">{departement}</para> -->
<!-- <hr color="white" thickness="8pt"/> -->
<!-- <para style="heading1">{address}</para> -->
<!-- <illustration height="3" width="500" align="center"> -->
<!-- <fill color= "(0,0.5,0.5,0.0)" /> -->
<!-- <rect x="0" y = "-12" width="500" height="3" round="1" fill="1" stroke = "Yes" /> -->
<!-- </illustration> -->
<!-- </storyPlace> -->
<!-- <graphicsMode> -->
<!-- <drawCenteredString x="10.5cm" y="23cm">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx</drawCenteredString > -->
<!-- </graphicsMode> -->
<setNextTemplate name="page2"/>
<para style="heading1">DAFTAR USER APLIKASI</para>
<blockTable colWidths="4cm,10cm,3cm" style="table" repeatRows="1">
<tr>
<td><para style="tableTitle">User ID</para></td>
<td><para style="tableTitle">E-mail</para></td>
<td>Registrasi</td>
</tr>
{rows}
</blockTable>
<namedString id="last-page"><pageNumber/></namedString>
</story>
</document>
<tr>
<td style="tableBody">{user_name}</td>
<td style="tableBody"><para style="tableBody">{email}</para></td>
<td style="tableBody">{registered_date}</td>
</tr>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.20.0.final using JasperReports Library version 6.20.0-2bc7ab61c56f459e8176eb05c7705e145cd400ad -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="users" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="cc1a9dab-bb8a-4181-94ac-73c3dc91137c">
<property name="ireport.zoom" value="1.3310000000000004"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="New Data Adapter"/>
<queryString>
<![CDATA[SELECT * FROM users]]>
</queryString>
<field name="userid" class="java.lang.String"/>
<field name="nama" class="java.lang.String"/>
<field name="created" class="java.sql.Timestamp"/>
<field name="disabled" class="java.lang.Integer"/>
<field name="passwd" class="java.lang.String"/>
<field name="id" class="java.lang.Integer"/>
<field name="kd_kantor" class="java.lang.String"/>
<field name="kd_kanwil" class="java.lang.String"/>
<field name="kd_tp" class="java.lang.String"/>
<field name="kd_kanwil_bank" class="java.lang.String"/>
<field name="kd_kppbb_bank" class="java.lang.String"/>
<field name="kd_bank_tunggal" class="java.lang.String"/>
<field name="kd_bank_persepsi" class="java.lang.String"/>
<field name="nip" class="java.lang.String"/>
<field name="jabatan" class="java.lang.String"/>
<field name="handphone" class="java.lang.String"/>
<field name="token" class="java.lang.String"/>
<field name="security_code" class="java.lang.String"/>
<field name="last_login_date" class="java.sql.Timestamp"/>
<field name="user_name" class="java.lang.String"/>
<field name="user_password" class="java.lang.String"/>
<field name="email" class="java.lang.String"/>
<field name="status" class="java.lang.Integer"/>
<field name="registered_date" class="java.sql.Timestamp"/>
<field name="security_code_date" class="java.sql.Timestamp"/>
<field name="api_key" class="java.lang.String"/>
<field name="partner_id" class="java.lang.Integer"/>
<field name="company_id" class="java.lang.Integer"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="21" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="20" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="100" height="20" uuid="45c2cace-4a3f-495c-9002-be2f2ac8eca4"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[User Name]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="255" height="20" uuid="3a03e8b0-96f7-4754-b00e-ceae1a0e5aa9"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[Email]]></text>
</staticText>
<staticText>
<reportElement x="355" y="0" width="100" height="20" uuid="f19e05c8-f1bf-4d94-927d-07111ed068df"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[Status]]></text>
</staticText>
<staticText>
<reportElement x="455" y="0" width="100" height="20" uuid="8a8040c2-e6ba-4473-835f-c9cfe3568fb9"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[Last Login]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="22" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="aec5f07a-b9fb-4ce1-9e7e-957f6315acb0"/>
<textFieldExpression><![CDATA[$F{user_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="255" height="20" uuid="04eef3a7-87ca-4a27-9392-1368a6ba2fd1"/>
<textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="455" y="0" width="100" height="20" uuid="24a12a8f-a1e1-4ae3-adb7-bbcf450560ee"/>
<textFieldExpression><![CDATA[$F{registered_date}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="355" y="2" width="100" height="20" uuid="47051f05-f634-4c32-97cc-ce9af7b8f382"/>
<textFieldExpression><![CDATA[$F{status}.equals( 1 ) ? "Aktif" : ""]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
# kode, path, nama
routes = [
# ("user-area", "/user/area", "User Area"),
# ("user-area-add", "/user/area/add", "Tambah User Area"),
# ("user-area-edit", "/user/area/{id}/edit", "Edit User Area"),
# ("user-area-delete", "/user/area/{id}/delete", "Hapus User Area"),
# ("user-area-view", "/user/area/{id}/view", "Lihat User Area"),
# ("user-area-act", "/user/area/{act}/act", "Action User Area"),
# ("user-area-upload", "/user/area/upload", "Upload User Area"),
# ("user-departemen", "/user/departemen", "User Departemen"),
# ("user-departemen-add", "/user/departemen/add", "Tambah User Departemen"),
# ("user-departemen-edit",
# "/user/departemen/{id}/edit", "Edit User Departemen"),
# ("user-departemen-delete",
# "/user/departemen/{id}/delete", "Hapus User Departemen"),
# ("user-departemen-view",
# "/user/departemen/{id}/view", "Lihat User Departemen"),
# ("user-departemen-act",
# "/user/departemen/{act}/act", "Action User Departemen"),
# ("user-departemen-upload", "/user/departemen/upload", "Upload User Departemen"),
]
import os
import sys
import transaction
from sqlalchemy import engine_from_config
from pyramid.paster import (
get_appsettings,
setup_logging,
)
from opensipkd.models import (
DBSession,
Route,
)
MAIN_TPL = """RouteData = [
{data}
]
"""
ROW_TPL = """\
dict(
id={id},
kode='{kode}',
nama='{nama}',
path='{path}',
perm_name='{perm_name}',
),"""
def usage(argv):
cmd = os.path.basename(argv[0])
print('usage: %s <config_uri>\n'
'(example: "%s development.ini")' % (cmd, cmd))
sys.exit(1)
def main(argv=sys.argv):
if len(argv) != 2:
usage(argv)
config_uri = argv[1]
setup_logging(config_uri)
settings = get_appsettings(config_uri)
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
q = DBSession.query(Route).order_by('id')
data = []
for row in q:
row_s = ROW_TPL.format(id=row.id, kode=row.kode, nama=row.nama,
path=row.path, perm_name=row.perm_name)
data.append(row_s)
data_s = '\n'.join(data)
main_s = MAIN_TPL.format(data=data_s)
print(main_s)
import os
import re
import base64
from sqlalchemy import (
Table,
MetaData,
)
from sqlalchemy.schema import PrimaryKeyConstraint
from sqlalchemy.sql.expression import text
from opensipkd.models import (
Base,
BaseModel,
CommonModel,
DBSession,
User,
)
from .tools import get_fullpath
SQL_TABLE = """
SELECT c.oid, n.nspname, c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = :table_name
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 2, 3
"""
SQL_TABLE_SCHEMA = """
SELECT c.oid, n.nspname, c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = :table_name
AND n.nspname = :schema
ORDER BY 2, 3
"""
SQL_FIELDS = """
SELECT a.attname,
pg_catalog.format_type(a.atttypid, a.atttypmod),
(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
FROM pg_catalog.pg_attrdef d
WHERE d.adrelid = a.attrelid
AND d.adnum = a.attnum
AND a.atthasdef) AS substring,
a.attnotnull, a.attnum,
(SELECT c.collname
FROM pg_catalog.pg_collation c, pg_catalog.pg_type t
WHERE c.oid = a.attcollation
AND t.oid = a.atttypid
AND a.attcollation <> t.typcollation) AS attcollation,
NULL AS indexdef,
NULL AS attfdwoptions
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = :table_id AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum"""
def split_tablename(tablename):
t = tablename.split('.')
if t[1:]:
schema = t[0]
tablename = t[1]
else:
schema = None
return schema, tablename
def get_pkeys(table):
r = []
for c in table.constraints:
if c.__class__ is PrimaryKeyConstraint:
for col in c:
r.append(col.name)
return r
return r
def execute(engine, sql_file):
sql_file_ = get_fullpath(sql_file)
f = open(sql_file_)
sql = f.read()
f.close()
engine.execute(sql)
Generic single-database configuration.
\ No newline at end of file
alembic -c config -n section_name revision -m "notes "
\ No newline at end of file
"""Pyramid bootstrap environment. """
import logging
import os
import importlib.machinery
from alembic import context
......@@ -7,13 +8,14 @@ from pyramid.paster import (
setup_logging,
)
from sqlalchemy import engine_from_config
from opensipkd.models.meta import Base
from opensipkd.base.models.meta import Base
config = context.config
setup_logging(config.config_file_name)
settings = get_appsettings(config.config_file_name)
logging.info(settings)
target_metadata = Base.metadata
current_dir = os.path.split(__file__)[0]
......@@ -21,6 +23,9 @@ helper_file = os.path.join(current_dir, 'helpers.py')
loader = importlib.machinery.SourceFileLoader('alembic_helpers', helper_file)
helpers = loader.load_module()
version_table = 'alembic_models'
version_table_schema = 'public'
def run_migrations_offline():
"""Run migrations in 'offline' mode.
......@@ -35,7 +40,7 @@ def run_migrations_offline():
"""
context.configure(url=settings['sqlalchemy.url'],
version_table='alembic_base')
version_table=version_table)
with context.begin_transaction():
context.run_migrations()
......@@ -54,8 +59,8 @@ def run_migrations_online():
connection=connection,
target_metadata=target_metadata,
helpers=helpers,
version_table='alembic_base',
version_table_schema='public'
version_table=version_table,
version_table_schema=version_table_schema
)
try:
with context.begin_transaction():
......
......@@ -4,7 +4,6 @@ from alembic import op
from sqlalchemy.engine import reflection
import sqlalchemy as sa
def has_table(table, schema=None, insp=None):
if not insp:
engine = op.get_bind()
......@@ -22,35 +21,12 @@ def table_has_column(table, column, schema=None):
if column != col['name']:
continue
has_column = True
else:
has_column = True
return has_column
def table_has_seq(table, name, schema=None):
engine = op.get_bind()
insp = reflection.Inspector.from_engine(engine)
has_seq = False
if has_table(table, schema, insp):
for seq in insp.get_sequence_names(schema=schema):
if name != seq:
continue
has_seq = True
else:
has_seq = True
return has_seq
def fields_update(table, field, typ, schema=None, **kw):
def fields_update(table, field, typ, schema="public"):
context = op.get_context()
helpers = context.opts['helpers']
if not helpers.table_has_column(table, field, schema):
op.add_column(table, sa.Column(field, typ), schema=schema)
nullable = kw.get("nullable", None)
if nullable != None and nullable == False:
default = kw.get("default")
if default != None:
op.execute(
f"UPDATE {schema}.{table} SET {field} = {default}")
op.alter_column(table, field, nullable=False, schema=schema)
op.add_column(table,
sa.Column(field, typ), schema=schema)
\ No newline at end of file
urut,kode,nama,ibu_kota,kategori,provinsi_id/res_provinsi.kode
01,ID-JB.01,Kabupaten Bandung,Soreang,kabupaten,ID-JB
02,ID-JB.02,Kabupaten Bandung Barat,Ngamprah,kabupaten,ID-JB
03,ID-JB.03,Kabupaten Bekasi,Cikarang Pusat,kabupaten,ID-JB
04,ID-JB.04,Kabupaten Bogor,Cibinong,kabupaten,ID-JB
05,ID-JB.05,Kabupaten Ciamis,Ciamis,kabupaten,ID-JB
06,ID-JB.06,Kabupaten Cianjur,Cianjur,kabupaten,ID-JB
07,ID-JB.07,Kabupaten Cirebon,Sumber,kabupaten,ID-JB
08,ID-JB.08,Kabupaten Garut,Tarogong Kidul,kabupaten,ID-JB
09,ID-JB.9,Kabupaten Indramayu,Indramayu,kabupaten,ID-JB
10,ID-JB.10,Kabupaten Karawang,Karawang Barat,kabupaten,ID-JB
11,ID-JB.11,Kabupaten Kuningan,Kuningan,kabupaten,ID-JB
12,ID-JB.12,Kabupaten Majalengka,Majalengka,kabupaten,ID-JB
13,ID-JB.13,Kabupaten Pangandaran,Parigi,kabupaten,ID-JB
14,ID-JB.14,Kabupaten Purwakarta,Purwakarta,kabupaten,ID-JB
15,ID-JB.15,Kabupaten Subang,Subang,kabupaten,ID-JB
16,ID-JB.16,Kabupaten Sukabumi,Palabuhanratu,kabupaten,ID-JB
17,ID-JB.17,Kabupaten Sumedang,Sumedang Utara,kabupaten,ID-JB
18,ID-JB.18,Kabupaten Tasikmalaya,Singaparna,kabupaten,ID-JB
19,ID-JB.19,Kota Bandung,Bandung,kota,ID-JB
20,ID-JB.20,Kota Banjar,Banjar,kota,ID-JB
21,ID-JB.21,Kota Bekasi,Bekasi,kota,ID-JB
22,ID-JB.22,Kota Bogor,Bogor,kota,ID-JB
23,ID-JB.23,Kota Cimahi,Cimahi,kota,ID-JB
24,ID-JB.24,Kota Cirebon,Cirebon,kota,ID-JB
25,ID-JB.25,Kota Depok,Depok,kota,ID-JB
26,ID-JB.26,Kota Sukabumi,Sukabumi,kota,ID-JB
27,ID-JB.27,Kota Tasikmalaya,Tasikmalaya,kota,ID-JB
urut,kode,nama,ibu_kota,kategori,provinsi_id/res_propinsi.kode
01,ID-JB.01,Kabupaten Bandung,Soreang,kabupaten,ID-JB
02,ID-JB.02,Kabupaten Bandung Barat,Ngamprah,kabupaten,ID-JB
03,ID-JB.03,Kabupaten Bekasi,Cikarang Pusat,kabupaten,ID-JB
04,ID-JB.04,Kabupaten Bogor,Cibinong,kabupaten,ID-JB
05,ID-JB.05,Kabupaten Ciamis,Ciamis,kabupaten,ID-JB
06,ID-JB.06,Kabupaten Cianjur,Cianjur,kabupaten,ID-JB
07,ID-JB.07,Kabupaten Cirebon,Sumber,kabupaten,ID-JB
08,ID-JB.08,Kabupaten Garut,Tarogong Kidul,kabupaten,ID-JB
09,ID-JB.9,Kabupaten Indramayu,Indramayu,kabupaten,ID-JB
10,ID-JB.10,Kabupaten Karawang,Karawang Barat,kabupaten,ID-JB
11,ID-JB.11,Kabupaten Kuningan,Kuningan,kabupaten,ID-JB
12,ID-JB.12,Kabupaten Majalengka,Majalengka,kabupaten,ID-JB
13,ID-JB.13,Kabupaten Pangandaran,Parigi,kabupaten,ID-JB
14,ID-JB.14,Kabupaten Purwakarta,Purwakarta,kabupaten,ID-JB
15,ID-JB.15,Kabupaten Subang,Subang,kabupaten,ID-JB
16,ID-JB.16,Kabupaten Sukabumi,Palabuhanratu,kabupaten,ID-JB
17,ID-JB.17,Kabupaten Sumedang,Sumedang Utara,kabupaten,ID-JB
18,ID-JB.18,Kabupaten Tasikmalaya,Singaparna,kabupaten,ID-JB
19,ID-JB.19,Kota Bandung,Bandung,kota,ID-JB
20,ID-JB.20,Kota Banjar,Banjar,kota,ID-JB
21,ID-JB.21,Kota Bekasi,Bekasi,kota,ID-JB
22,ID-JB.22,Kota Bogor,Bogor,kota,ID-JB
23,ID-JB.23,Kota Cimahi,Cimahi,kota,ID-JB
24,ID-JB.24,Kota Cirebon,Cirebon,kota,ID-JB
25,ID-JB.25,Kota Depok,Depok,kota,ID-JB
26,ID-JB.26,Kota Sukabumi,Sukabumi,kota,ID-JB
27,ID-JB.27,Kota Tasikmalaya,Tasikmalaya,kota,ID-JB
No preview for this file type
kode,nama,dati2_id/res_dati2.kode
32.76.01,Pancoran Mas,ID-JB.25
32.76.02,Cimanggis,ID-JB.25
32.76.03,Sawangan,ID-JB.25
32.76.04,Limo,ID-JB.25
32.76.05,Sukmajaya,ID-JB.25
32.76.06,Beji,ID-JB.25
32.76.07,Cipayung,ID-JB.25
32.76.08,Cilodong,ID-JB.25
32.76.09,Cinere,ID-JB.25
32.76.10,Tapos,ID-JB.25
32.76.11,Bojongsari,ID-JB.25
kode,nama,kecamatan_id/res_kecamatan.kode,,,,,,,,,,,
32.76.01.01,Depok,32.76.01,,,,,,,,,,,
32.76.01.02,Depok Jaya,32.76.01,,,,,,,,,,,
32.76.01.03,Mampang,32.76.01,,,,,,,,,,,
32.76.01.04,Pancoran Mas,32.76.01,,,,,,,,,,,
32.76.01.05,Rangkapan Jaya,32.76.01,,,,,,,,,,,
32.76.01.06,Rangkapan Jaya Baru,32.76.01,,,,,,,,,,,
32.76.02.01,Cisalak Pasar,32.76.02,,,,,,,,,,,
32.76.02.02,Curug,32.76.02,,,,,,,,,,,
32.76.02.03,Harjamukti,32.76.02,,,,,,,,,,,
32.76.02.04,Mekarsari,32.76.02,,,,,,,,,,,
32.76.02.05,Pasir Gunung Selatan,32.76.02,,,,,,,,,,,
32.76.02.06,Tugu,32.76.02,,,,,,,,,,,
32.76.03.01,Bedahan,32.76.03,,,,,,,,,,,
32.76.03.02,Cinangka,32.76.03,,,,,,,,,,,
32.76.03.03,Kedaung,32.76.03,,,,,,,,,,,
32.76.03.04,Pasir Putih,32.76.03,,,,,,,,,,,
32.76.03.05,Pengasinan,32.76.03,,,,,,,,,,,
32.76.03.06,Sawangan Baru,32.76.03,,,,,,,,,,,
32.76.03.07,Sawangan Lama,32.76.03,,,,,,,,,,,
32.76.04.01,Grogol,32.76.04,,,,,,,,,,,
32.76.04.02,Krukut,32.76.04,,,,,,,,,,,
32.76.04.03,Limo,32.76.04,,,,,,,,,,,
32.76.04.04,Meruyung,32.76.04,,,,,,,,,,,
32.76.05.01,Abadijaya,32.76.05,,,,,,,,,,,
32.76.05.02,Baktijaya,32.76.05,,,,,,,,,,,
32.76.05.03,Cisalak,32.76.05,,,,,,,,,,,
32.76.05.04,Mekarjaya,32.76.05,,,,,,,,,,,
32.76.05.05,Sukmajaya,32.76.05,,,,,,,,,,,
32.76.05.06,Tirtajaya,32.76.05,,,,,,,,,,,
32.76.06.01,Beji,32.76.06,,,,,,,,,,,
32.76.06.02,Beji Timur,32.76.06,,,,,,,,,,,
32.76.06.03,Kemirimuka,32.76.06,,,,,,,,,,,
32.76.06.04,Kukusan,32.76.06,,,,,,,,,,,
32.76.06.05,Pondokcina,32.76.06,,,,,,,,,,,
32.76.06.06,Tanahbaru,32.76.06,,,,,,,,,,,
32.76.07.01,Cipayung,32.76.07,,,,,,,,,,,
32.76.07.02,Bojong Pondok Terong,32.76.07,,,,,,,,,,,
32.76.07.03,Cipayung,32.76.07,,,,,,,,,,,
32.76.07.04,Cipayung Jaya,32.76.07,,,,,,,,,,,
32.76.07.05,Pondok Jaya,32.76.07,,,,,,,,,,,
32.76.07.06,Ratujaya,32.76.07,,,,,,,,,,,
32.76.08.01,Cilodong,32.76.08,,,,,,,,,,,
32.76.08.02,Jatimulya,32.76.08,,,,,,,,,,,
32.76.08.03,Kalibaru,32.76.08,,,,,,,,,,,
32.76.08.04,Kalimulya,32.76.08,,,,,,,,,,,
32.76.08.05,Sukamaju,32.76.08,,,,,,,,,,,
32.76.09.01,Cinere,32.76.09,,,,,,,,,,,
32.76.09.02,Gandul,32.76.09,,,,,,,,,,,
32.76.09.03,Pangkalan Jati,32.76.09,,,,,,,,,,,
32.76.09.04,Pangkalan Jati Baru,32.76.09,,,,,,,,,,,
32.76.10.01,Cilangkap,32.76.10,,,,,,,,,,,
32.76.10.02,Cimpaeun,32.76.10,,,,,,,,,,,
32.76.10.03,Jatijajar,32.76.10,,,,,,,,,,,
32.76.10.04,Leuwinanggung,32.76.10,,,,,,,,,,,
32.76.10.05,Sukamaju Baru,32.76.10,,,,,,,,,,,
32.76.10.06,Sukatani,32.76.10,,,,,,,,,,,
32.76.10.07,Tapos,32.76.10,,,,,,,,,,,
32.76.11.01,Bojongsari Lama,32.76.11,,,,,,,,,,,
32.76.11.02,Bojongsaribaru,32.76.11,,,,,,,,,,,
32.76.11.03,Curug,32.76.11,,,,,,,,,,,
32.76.11.04,Durenmekar,32.76.11,,,,,,,,,,,
32.76.11.05,Durenseribu,32.76.11,,,,,,,,,,,
32.76.11.06,Pondokpetir,32.76.11,,,,,,,,,,,
32.76.11.07,Serua,32.76.11,,,,,,,,,,,
\ No newline at end of file
kecamatan_id/res_kecamatan.kode,kecamatan,nama,urut,kode
32.07.37,Banjaranyar,Banjaranyar,01,32.07.37.01
32.07.37,,Cigayam,02,32.07.37.02
32.07.37,,Cikaso,03,32.07.37.03
32.07.37,,Cikupa,04,32.07.37.04
32.07.37,,Kalijaya,05,32.07.37.05
32.07.37,,Karyamukti,06,32.07.37.06
32.07.37,,Langkapsari,07,32.07.37.07
32.07.37,,Pasawahan,08,32.07.37.08
32.07.37,,Sindangrasa,09,32.07.37.09
32.07.37,,Tanjungsari,10,32.07.37.10
32.07.18,Banjarsari,Banjarsari,01,32.07.18.01
32.07.18,,Cibadak,02,32.07.18.02
32.07.18,,Cicapar,03,32.07.18.03
32.07.18,,Ciherang,04,32.07.18.04
32.07.18,,Ciulu,05,32.07.18.05
32.07.18,,Kawasen,06,32.07.18.06
32.07.18,,Purwasari,07,32.07.18.07
32.07.18,,Ratawangi,08,32.07.18.08
32.07.18,,Sindangasih,09,32.07.18.09
32.07.18,,Sindanghayu,10,32.07.18.10
32.07.18,,Sindangsari,11,32.07.18.11
32.07.18,,Sukasari,12,32.07.18.12
32.07.32,Baregbeg,Baregbeg,01,32.07.32.01
32.07.32,,Jelat,02,32.07.32.02
32.07.32,,Karang Ampel,03,32.07.32.03
32.07.32,,Mekarjaya,04,32.07.32.04
32.07.32,,Petir Hilir,05,32.07.32.05
32.07.32,,Pusakanagara,06,32.07.32.06
32.07.32,,Saguling,07,32.07.32.07
32.07.32,,Sukamaju,08,32.07.32.08
32.07.32,,Sukamulya,09,32.07.32.09
32.07.01,Ciamis,Cisadap,01,32.07.01.01
32.07.01,,Imbanagara Raya,02,32.07.01.02
32.07.01,,Imbanagara,03,32.07.01.03
32.07.01,,Panyingkiran,04,32.07.01.04
32.07.01,,Pawindan,05,32.07.01.05
32.07.01,,Benteng,06,32.07.01.06
32.07.01,,Ciamis,07,32.07.01.07
32.07.01,,Cigembor,08,32.07.01.08
32.07.01,,Kertasari,09,32.07.01.09
32.07.01,,Linggasari,10,32.07.01.10
32.07.01,,Maleber,11,32.07.01.11
32.07.01,,Sindangrasa,12,32.07.01.12
32.07.05,Cidolog,Cidolog,01,32.07.05.01
32.07.05,,Ciparay,02,32.07.05.02
32.07.05,,Hegarmanah,03,32.07.05.03
32.07.05,,Janggala,04,32.07.05.04
32.07.05,,Jelegong,05,32.07.05.05
32.07.05,,Sukasari,06,32.07.05.06
32.07.06,Cihaurbeuti,Cihaurbeuti,01,32.07.06.01
32.07.06,,Cijulang,02,32.07.06.02
32.07.06,,Padamulya,03,32.07.06.03
32.07.06,,Pamokolan,04,32.07.06.04
32.07.06,,Pasirtamiang,05,32.07.06.05
32.07.06,,Sukahaji,06,32.07.06.06
32.07.06,,Sukahurip,07,32.07.06.07
32.07.06,,Sukamaju,08,32.07.06.08
32.07.06,,Sukamulya,09,32.07.06.09
32.07.06,,Sukasetia,10,32.07.06.10
32.07.06,,Sumberjaya,11,32.07.06.11
32.07.03,Cijeungjing,Bojongmengger,01,32.07.03.01
32.07.03,,Ciharalang,02,32.07.03.02
32.07.03,,Cijeungjing,03,32.07.03.03
32.07.03,,Dewasari,04,32.07.03.04
32.07.03,,Handapherang,05,32.07.03.05
32.07.03,,Karanganyar,06,32.07.03.06
32.07.03,,Karangkamulyan,07,32.07.03.07
32.07.03,,Kertabumi,08,32.07.03.08
32.07.03,,Kertaharja,09,32.07.03.09
32.07.03,,Pamalayan,10,32.07.03.10
32.07.03,,Utama,11,32.07.03.11
32.07.02,Cikoneng,Cikoneng,01,32.07.02.01
32.07.02,,Cimari,02,32.07.02.02
32.07.02,,Darmacaang,03,32.07.02.03
32.07.02,,Gegempalan,04,32.07.02.04
32.07.02,,Kujang,05,32.07.02.05
32.07.02,,Margaluyu,06,32.07.02.06
32.07.02,,Nasol,07,32.07.02.07
32.07.02,,Panaragan,08,32.07.02.08
32.07.02,,Sindangsari,09,32.07.02.09
32.07.29,Cimaragas,Beber,01,32.07.29.01
32.07.29,,Bojongmalang,02,32.07.29.02
32.07.29,,Cimaragas,03,32.07.29.03
32.07.29,,Jayakarsa,04,32.07.29.04
32.07.29,,Raksabaya,05,32.07.29.05
32.07.11,Cipaku,Bangbayang,01,32.07.11.01
32.07.11,,Buniseuri,02,32.07.11.02
32.07.11,,Ciakar,03,32.07.11.03
32.07.11,,Cieurih,04,32.07.11.04
32.07.11,,Cipaku,05,32.07.11.05
32.07.11,,Gereba,06,32.07.11.06
32.07.11,,Jalatrang,07,32.07.11.07
32.07.11,,Mekarsari,08,32.07.11.08
32.07.11,,Muktisari,09,32.07.11.09
32.07.11,,Pusakasari,10,32.07.11.10
32.07.11,,Selacai,11,32.07.11.11
32.07.11,,Selamanik,12,32.07.11.12
32.07.11,,Sukawening,13,32.07.11.13
32.07.30,Cisaga,Bangunharja,01,32.07.30.01
32.07.30,,Cisaga,02,32.07.30.02
32.07.30,,Danasari,03,32.07.30.03
32.07.30,,Girimukti,04,32.07.30.04
32.07.30,,Kepel,05,32.07.30.05
32.07.30,,Karyamulya,06,32.07.30.06
32.07.30,,Mekarmukti,07,32.07.30.07
32.07.30,,Sidamulya,08,32.07.30.08
32.07.30,,Sukahurip,09,32.07.30.09
32.07.30,,Tanjungjaya,10,32.07.30.10
32.07.30,,Wangunjaya,11,32.07.30.11
32.07.12,Jatinagara,Bayasari,01,32.07.12.01
32.07.12,,Cintanagara,02,32.07.12.02
32.07.12,,Dayeuhluhur,03,32.07.12.03
32.07.12,,Jatinagara,04,32.07.12.04
32.07.12,,Mulyasari,05,32.07.12.05
32.07.12,,Sukanagara,06,32.07.12.06
32.07.09,Kawali,Citeureup,01,32.07.09.01
32.07.09,,Karangpawitan,02,32.07.09.02
32.07.09,,Kawali,03,32.07.09.03
32.07.09,,Kawalimukti,04,32.07.09.04
32.07.09,,Linggapura,05,32.07.09.05
32.07.09,,Margamulya,06,32.07.09.06
32.07.09,,Purwasari,07,32.07.09.07
32.07.09,,Selasari,08,32.07.09.08
32.07.09,,Sindangsari,09,32.07.09.09
32.07.09,,Talagasari,10,32.07.09.10
32.07.09,,Winduraja,11,32.07.09.11
32.07.17,Lakbok,Baregbeg,01,32.07.17.01
32.07.17,,Cintajaya,02,32.07.17.02
32.07.17,,Cintaratu,03,32.07.17.03
32.07.17,,Kalapasawit,04,32.07.17.04
32.07.17,,Kertajaya,05,32.07.17.05
32.07.17,,Puloerang,06,32.07.17.06
32.07.17,,Sidaharja,07,32.07.17.07
32.07.17,,Sindangangin,08,32.07.17.08
32.07.17,,Sukanagara,09,32.07.17.09
32.07.17,,Tambakreja,10,32.07.17.10
32.07.34,Lumbung,Awiluar,01,32.07.34.01
32.07.34,,Cikupa,02,32.07.34.02
32.07.34,,Darmaraja,03,32.07.34.03
32.07.34,,Lumbung,04,32.07.34.04
32.07.34,,Lumbungsari,05,32.07.34.05
32.07.34,,Rawa,06,32.07.34.06
32.07.34,,Sadewata,07,32.07.34.07
32.07.34,,Sukaraharja,08,32.07.34.08
32.07.19,Pamarican,Bangunsari,01,32.07.19.01
32.07.19,,Bantarsari,02,32.07.19.02
32.07.19,,Kertahayu,03,32.07.19.03
32.07.19,,Margajaya,04,32.07.19.04
32.07.19,,Mekarmulya,05,32.07.19.05
32.07.19,,Neglasari,06,32.07.19.06
32.07.19,,Pamarican,07,32.07.19.07
32.07.19,,Pasirnagara,08,32.07.19.08
32.07.19,,Sidaharja,09,32.07.19.09
32.07.19,,Sidamulih,10,32.07.19.10
32.07.19,,Sukahurip,11,32.07.19.11
32.07.19,,Sukajadi,12,32.07.19.12
32.07.19,,Sukajaya,13,32.07.19.13
32.07.19,,Sukamukti,14,32.07.19.14
32.07.08,Panjalu,Bahara,01,32.07.08.01
32.07.08,,Ciomas,02,32.07.08.02
32.07.08,,Hujungtiwu,03,32.07.08.03
32.07.08,,Kertamandala,04,32.07.08.04
32.07.08,,Mandalare,05,32.07.08.05
32.07.08,,Maparah,06,32.07.08.06
32.07.08,,Panjalu,07,32.07.08.07
32.07.08,,Sandingtaman,08,32.07.08.08
32.07.10,Panawangan,Bangunjaya,01,32.07.10.01
32.07.10,,Cinyasag,02,32.07.10.02
32.07.10,,Gardujaya,03,32.07.10.03
32.07.10,,Girilaya,04,32.07.10.04
32.07.10,,Indragiri,05,32.07.10.05
32.07.10,,Jagabaya,06,32.07.10.06
32.07.10,,Karangpaningal,07,32.07.10.07
32.07.10,,Kertajaya,08,32.07.10.08
32.07.10,,Kertayasa,09,32.07.10.09
32.07.10,,Mekarbuana,10,32.07.10.10
32.07.10,,Nagarajati,11,32.07.10.11
32.07.10,,Nagarajaya,12,32.07.10.12
32.07.10,,Nagarapageuh,13,32.07.10.13
32.07.10,,Nagarawangi,14,32.07.10.14
32.07.10,,Natanegara,15,32.07.10.15
32.07.10,,Panawangan,16,32.07.10.16
32.07.10,,Sadapaingan,17,32.07.10.17
32.07.10,,Sagalaherang,18,32.07.10.18
32.07.07,Panumbangan,Banjarangsana,01,32.07.07.01
32.07.07,,Buanamekar,02,32.07.07.02
32.07.07,,Golat,03,32.07.07.03
32.07.07,,Jayagiri,04,32.07.07.04
32.07.07,,Kertaraharja,05,32.07.07.05
32.07.07,,Medanglayang,06,32.07.07.06
32.07.07,,Panumbangan,07,32.07.07.07
32.07.07,,Payungagung,08,32.07.07.08
32.07.07,,Payungsari,09,32.07.07.09
32.07.07,,Sindangbarang,10,32.07.07.10
32.07.07,,Sindangherang,11,32.07.07.11
32.07.07,,Sindangmukti,12,32.07.07.12
32.07.07,,Sukakerta,13,32.07.07.13
32.07.07,,Tanjungmulya,14,32.07.07.14
32.07.35,Purwadadi,Bantardawa,01,32.07.35.01
32.07.35,,Karangpaningal,02,32.07.35.02
32.07.35,,Kutawaringin,03,32.07.35.03
32.07.35,,Padaringan,04,32.07.35.04
32.07.35,,Pasirlawang,05,32.07.35.05
32.07.35,,Purwadadi,06,32.07.35.06
32.07.35,,Purwajaya,07,32.07.35.07
32.07.35,,Sidarahayu,08,32.07.35.08
32.07.35,,Sukamulya,09,32.07.35.09
32.07.13,Rajadesa,Andapraja,01,32.07.13.01
32.07.13,,Purwaraja,02,32.07.13.02
32.07.13,,Rajadesa,03,32.07.13.03
32.07.13,,Sirnabaya,04,32.07.13.04
32.07.13,,Sirnajaya,05,32.07.13.05
32.07.13,,Sukaharja,06,32.07.13.06
32.07.13,,Sukajaya,07,32.07.13.07
32.07.13,,Tanjungjaya,08,32.07.13.08
32.07.13,,Tanjungsari,09,32.07.13.09
32.07.13,,Tanjungsukur,10,32.07.13.10
32.07.13,,Tigaherang,11,32.07.13.11
32.07.15,Rancah,Bojonggedang,01,32.07.15.01
32.07.15,,Cileungsir,02,32.07.15.02
32.07.15,,Cisontrol,03,32.07.15.03
32.07.15,,Dadiharja,04,32.07.15.04
32.07.15,,Giriharja,05,32.07.15.05
32.07.15,,Jangalaharja,06,32.07.15.06
32.07.15,,Kawunglarang,07,32.07.15.07
32.07.15,,Karangpari,08,32.07.15.08
32.07.15,,Kiarapayung,09,32.07.15.09
32.07.15,,Patakaharja,10,32.07.15.10
32.07.15,,Rancah,11,32.07.15.11
32.07.15,,Situmandala,12,32.07.15.12
32.07.15,,Wangunsari,13,32.07.15.13
32.07.04,Sadananya,Bendasari,01,32.07.04.01
32.07.04,,Gunungsari,02,32.07.04.02
32.07.04,,Mangkubumi,03,32.07.04.03
32.07.04,,Sadananya,04,32.07.04.04
32.07.04,,Sukajadi,05,32.07.04.05
32.07.04,,Mekarjadi,06,32.07.04.06
32.07.04,,Tanjungsari,07,32.07.04.07
32.07.04,,Werasari,08,32.07.04.08
32.07.31,Sindangkasih,Budiasih,01,32.07.31.01
32.07.31,,Budiharja,02,32.07.31.02
32.07.31,,Gunungcupu,03,32.07.31.03
32.07.31,,Sindangkasih,04,32.07.31.04
32.07.31,,Sukamanah,05,32.07.31.05
32.07.31,,Sukaraja,06,32.07.31.06
32.07.31,,Sukaresik,07,32.07.31.07
32.07.31,,Sukasenang,08,32.07.31.08
32.07.31,,Wanasigra,09,32.07.31.09
32.07.14,Sukadana,Bunter,01,32.07.14.01
32.07.14,,Ciparigi,02,32.07.14.02
32.07.14,,Margaharja,03,32.07.14.03
32.07.14,,Margajaya,04,32.07.14.04
32.07.14,,Salakaria,05,32.07.14.05
32.07.14,,Sukadana,06,32.07.14.06
32.07.33,Sukamantri,Cibeureum,01,32.07.33.01
32.07.33,,Mekarwangi,02,32.07.33.02
32.07.33,,Sindanglaya,03,32.07.33.03
32.07.33,,Sukamantri,04,32.07.33.04
32.07.33,,Tenggerraharja,05,32.07.33.05
32.07.16,Tambaksari,Kadupandak,01,32.07.16.01
32.07.16,,Karangpaningal,02,32.07.16.02
32.07.16,,Kaso,03,32.07.16.03
32.07.16,,Mekarsari,04,32.07.16.04
32.07.16,,Sukasari,05,32.07.16.05
32.07.16,,Tambaksari,06,32.07.16.06
\ No newline at end of file
kode,nama,pangkat,ruang,tunjangan,status
"II/A","Eselon II A",2,"A",4000000,1
"II/B","Eselon II B",2,"B",8000000,1
"III/A","Eselon III A",3,"A",5500000,1
"III/B","Eselon III B",3,"B",5000000,1
"IV/A","Eselon IV A",4,"A",3500000,1
"IV/B","Eselon IV B",4,"B",2250000,1
"V/A","Eselon V A",5,"A",1500000,1
"STAFF","Staff",0,"0",1500000,1
\ No newline at end of file
kode,nama,jenis,status
01,Kepala,1,1
02,Sekretaris,1,1
03,Staf,1,1
04,Bendahara Umum Daerah,3,1
05,Kuasa Bendahara Umum Daerah,3,1
06,Pejabat Pelaksana Keuangan,3,1
07,Bendahara Penerimaan,3,1
08,Bendahara Pengeluaran,3,1
09,Pengurus Barang,3,1
10,PPTK,3,1
10,Pejabat PEmbuat Komitmen,3,1
\ No newline at end of file
kode,nama,kategori,dati2_id/res_dati2.kode
32.07.01,Ciamis,kecamatan,ID-JB.05
32.07.02,Cikoneng,kecamatan,ID-JB.05
32.07.03,Cijeungjing,kecamatan,ID-JB.05
32.07.04,Sadananya,kecamatan,ID-JB.05
32.07.05,Cidolog,kecamatan,ID-JB.05
32.07.06,Cihaurbeuti,kecamatan,ID-JB.05
32.07.07,Panumbangan,kecamatan,ID-JB.05
32.07.08,Panjalu,kecamatan,ID-JB.05
32.07.09,Kawali,kecamatan,ID-JB.05
32.07.10,Panawangan,kecamatan,ID-JB.05
32.07.11,Cipaku,kecamatan,ID-JB.05
32.07.12,Jatinagara,kecamatan,ID-JB.05
32.07.13,Rajadesa,kecamatan,ID-JB.05
32.07.14,Sukadana,kecamatan,ID-JB.05
32.07.15,Rancah,kecamatan,ID-JB.05
32.07.16,Tambaksari,kecamatan,ID-JB.05
32.07.17,Lakbok,kecamatan,ID-JB.05
32.07.18,Banjarsari,kecamatan,ID-JB.05
32.07.19,Pamarican,kecamatan,ID-JB.05
32.07.29,Cimaragas,kecamatan,ID-JB.05
32.07.30,Cisaga,kecamatan,ID-JB.05
32.07.31,Sindangkasih,kecamatan,ID-JB.05
32.07.32,Baregbeg,kecamatan,ID-JB.05
32.07.33,Sukamantri,kecamatan,ID-JB.05
32.07.34,Lumbung,kecamatan,ID-JB.05
32.07.35,Purwadadi,kecamatan,ID-JB.05
32.07.37,Banjaranyar,kecamatan,ID-JB.05
kode,url,nama,status,order_id,parent_id/menus.kode,icon,need_login,class_name
login,/login,Login,1,1,,,0,
reset-password,/reset/password,Reset Password,1,1,,,0,
register,/register,Register,1,1,,,0,
base,/,Base,1,1,,,0,
logout,/logout,Logout,1,2,base,,,
change-password,/password/{code},Ubah password,1,3,base,,,
menus,/menu,Menus,1,4,base,,,
departemen,/departemen,Departemen,1,5,base,,,
profile,/profile,Profile,1,6,base,,,
group,/group,Daftar group,1,7,base,,,
routes,/routes,Routes,1,8,base,,,
parameter,/parameter,Parameter,1,9,base,,,
partner,/partner,Partner,1,10,base,,,
departemen,/departemen,Organisasi,1,11,base,,,
permission,/permission,Daftar Permission,1,12,base,,,
eselon,/eselon,Daftar Eselon,1,13,base,,,
jabatan,/jabatan,Daftar Jabatan,1,14,base,,,
partner-departemen,/partner/departemen,Partner Departemen,1,15,base,,,
log,/log,Log Aplikasi,1,16,base,,,
provinsi,/provinsi,Provinsi,1,17,base,,,
dati2,/dati2,Kabupaten/Kota,1,18,base,,,
kecamatan,/kecamatan,Kecamatan,1,19,base,,,
desa,/desa,Desa/Kelurahan,1,20,base,,,
company,/company,Pemda,1,21,base,,,
kode,nama,pangkat,ruang
4e,Pembina Utama,IV,e
4d,Pembina UtamaMadya,IV,d
4c,Pembina Utama Muda,IV,c
4b,Pembina Tingkat I,IV,b
4a,Pembina,IV,a
3d,Penata Tingkat I,III,d
3c,Penata,III,c
3b,Penata Muda Tingkat I,III,b
3a,Penata Muda,III,a
2d,Pengatur Tingkat I,II,d
2c,Pengatur,II,c
2b,Pengatur Muda Tingkat I,II,b
2a,Pengatur Muda,II,a
1d,Juru Tingkat I,I,d
1c,Juru,I,c
1b,Juru Muda Tingkat I,I,b
1a,Juru Muda,I,a
\ No newline at end of file
nama,singkat,kode,ibu_kota,kategori
Aceh,Aceh,ID-AC,Banda Aceh,provinsi
Sumatra Utara,Sumut,ID-SU,Medan,provinsi
Sumatra Barat,Sumbar,ID-SB,Padang,provinsi
Riau,Riau,ID-RI,Pekanbaru,provinsi
Jambi,Jambi,ID-JA,Jambi,provinsi
Kepulauan Riau,Kepri,ID-KR,Tanjungpinang,provinsi
Bengkulu,Bengkulu,ID-BE,Bengkulu,provinsi
Sumatra Selatan,Sumsel,ID-SS,Palembang,provinsi
Kepulauan Bangka Belitung,Babel,ID-BB,Pangkalpinang,provinsi
Lampung,Lampung,ID-LA,Bandar Lampung,provinsi
Banten,Banten,ID-BT,Serang,provinsi
Daerah Khusus Ibukota Jakarta,DKI Jakarta,ID-JK,Tidak ada,provinsi
Jawa Barat,Jabar,ID-JB,Bandung,provinsi
Jawa Tengah,Jateng,ID-JT,Semarang,provinsi
Daerah Istimewa Yogyakarta,DIY,ID-YO,Yogyakarta,provinsi
Jawa Timur,Jatim,ID-JI,Surabaya,provinsi
Bali,Bali,ID-BA,Denpasar,provinsi
Nusa Tenggara Barat,NTB,ID-NB,Mataram,provinsi
Nusa Tenggara Timur,NTT,ID-NT,Kupang,provinsi
Kalimantan Barat,Kalbar,ID-KS,Pontianak,provinsi
Kalimantan Tengah,Kalteng,ID-KT,Palangka Raya,provinsi
Kalimantan Selatan,Kalsel,ID-KS,Banjarbaru,provinsi
Kalimantan Timur,Kaltim,ID-KI,Samarinda,provinsi
Kalimantan Utara,Kaltara,ID-KU,Tanjung Selor,provinsi
Sulawesi Barat,Sulbar,ID-SR,Mamuju,provinsi
Sulawesi Selatan,Sulsel,ID-SN,Makassar,provinsi
Sulawesi Tenggara,Sultra,ID-SG,Kendari,provinsi
Sulawesi Tengah,Sulteng,ID-ST,Palu,provinsi
Gorontalo,Gorontalo,ID-GO,Gorontalo,provinsi
Sulawesi Utara,Sulut,ID-SA,Manado,provinsi
Maluku Utara,Malut,ID-MU,Sofifi,provinsi
Maluku,Maluku,ID-MA,Ambon,provinsi
Papua Barat,Pabar,ID-PB,Manokwari,provinsi
Papua,Papua,ID-PA,Jayapura,provinsi
No preview for this file type
import sys
import re
import pytz
import transaction
from zope.sqlalchemy import register
from datetime import datetime
from hashlib import md5
from opensipkd.base import Base
from opensipkd.tools import create_datetime
from pyramid.paster import get_appsettings
from sqlalchemy import (
engine_from_config,
exc,
)
from sqlalchemy.orm import sessionmaker
from opensipkd.models.handlers import (
Log,
LogDBSession,
)
FIRST_LINE_PATTERN = r'^([\d]*)-([\d]*)-([\d]*) '\
r'([\d]*):([\d]*):([\d]*),([\d]*) '\
'(INFO|ERROR|WARNI) (.*)'
REGEX_FIRST_LINE = re.compile(FIRST_LINE_PATTERN)
def usage(argv):
print("command config log_file")
exit(1)
def main(argv=sys.argv):
def save():
if not line_id:
return
logger = loggers[0]
if logger.find('waitress') > -1:
return
msg = '\n'.join(lines)
row = Log(
created_at=created_at, msg=msg, line_id=line_id, level=level,
logger=logger)
LogDBSession.add(row)
try:
LogDBSession.flush()
except exc.IntegrityError as e:
s = str(e)
if s.find('duplicate key') == -1:
raise e
if len(argv) != 3:
usage(argv)
config_uri = argv[1]
settings = get_appsettings(config_uri)
tz = pytz.timezone(settings['timezone'])
engine = engine_from_config(settings, 'sqlalchemy.')
LogDBSession.configure(bind=engine)
log_file = argv[2]
lines = []
line_id = None
no = 0
with open(log_file, 'r') as f:
while True:
line = f.readline()
if not line:
save()
break
s = line.rstrip()
match = REGEX_FIRST_LINE.search(s)
if match:
save()
del lines[:]
line_id = md5(line.encode('utf-8')).hexdigest()
year, month, day, hour, minute, sec, msec, level, s = \
match.groups()
t = s.split()
s = ' '.join(t[1:])
loggers = t[0].strip('[]')
loggers = loggers.split('][')
without_tz = datetime(
int(year), int(month), int(day), int(hour),
int(minute), int(sec), int(msec)*1000)
created_at = tz.localize(without_tz) # with time zone
no += 1
print(f'#{no} {created_at}')
lines.append(s)
......@@ -6,11 +6,17 @@ import sys
from getpass import getpass
import transaction
from opensipkd.models import (
init_model, DBSession, Base, Group, UserGroup, Permission, GroupPermission,
User, Route, Eselon, Jabatan, ResProvinsi, ResDati2, ResKecamatan, ResDesa,
Menus, Pangkat)
from opensipkd.models.handlers import LogDBSession
from ..models.users import (
init_model, Group, UserGroup, Permission, GroupPermission, User,
UserPermission, ExternalIdentityMixin)
from ..models import (Partner, )
from ..models import (DBSession)
from ..models.handlers import (LogDBSession)
from ..models.meta import Base
# from ..models import (Base, LogDBSession)
# Route, Eselon, Jabatan, ResProvinsi, ResDati2, ResKecamatan, ResDesa,
# Menus, Pangkat
from pyramid.paster import (get_appsettings, setup_logging, )
from sqlalchemy import (desc, engine_from_config, select, Table, inspect)
from sqlalchemy import text
......@@ -24,61 +30,57 @@ from opensipkd.tools import get_ext
log = logging.getLogger(__name__)
# , mssql
# from .tools import mkdir
def routes_callback(typ, **kwargs):
if typ == "mapping":
return kwargs.get("value")
if typ == "value":
data = kwargs.get("data")
field = kwargs.get("field")
splited = data["kode"].split("-")
value = None
splited_last = splited[len(splited) - 1]
if field == "module":
value = splited[0]
elif field == "def_func":
if data["def_func"]:
return data["def_func"]
elif splited_last == 'menu':
return None
value = splited_last
elif field == "class_view":
if data["def_func"] == "list" and not data["class_view"] \
or splited_last not in ["add", "edit", "delete", "view", "act", "report", "upload"]:
log.debug(splited[-1:])
log.debug(data)
return "_".join(splited[1:])
if splited_last == "menu":
return None
value = "_".join(splited[1:-1])
elif field == "path":
if splited_last == "menu":
return "-".join(splited)
elif splited_last in ["act", "report"]:
return "/" + "/".join(splited[:-1]) + "/{act}/" + splited_last
elif splited_last == "report":
return "/" + "/".join(splited[:-1]) + "/{act}/act"
elif splited_last in ["edit", "view", "delete"]:
return "/" + "/".join(splited[:-1]) + "/{id}/" + splited_last
else:
return "/" + "/".join(splited)
elif field == "template":
if splited_last == "act":
return "json"
elif data["template"]:
return data["template"]
elif data["def_func"] == "list":
return "list.pt"
else:
return "form.pt"
return value
# def routes_callback(typ, **kwargs):
# if typ == "mapping":
# return kwargs.get("value")
# if typ == "value":
# data = kwargs.get("data")
# field = kwargs.get("field")
# splited = data["kode"].split("-")
# value = None
# splited_last = splited[len(splited) - 1]
# if field == "module":
# value = splited[0]
# elif field == "def_func":
# if data["def_func"]:
# return data["def_func"]
# elif splited_last == 'menu':
# return None
# value = splited_last
# elif field == "class_view":
# if data["def_func"] == "list" and not data["class_view"] \
# or splited_last not in ["add", "edit", "delete", "view", "act", "report", "upload"]:
# log.debug(splited[-1:])
# log.debug(data)
# return "_".join(splited[1:])
# if splited_last == "menu":
# return None
# value = "_".join(splited[1:-1])
# elif field == "path":
# if splited_last == "menu":
# return "-".join(splited)
# elif splited_last in ["act", "report"]:
# return "/" + "/".join(splited[:-1]) + "/{act}/" + splited_last
# elif splited_last == "report":
# return "/" + "/".join(splited[:-1]) + "/{act}/act"
# elif splited_last in ["edit", "view", "delete"]:
# return "/" + "/".join(splited[:-1]) + "/{id}/" + splited_last
# else:
# return "/" + "/".join(splited)
# elif field == "template":
# if splited_last == "act":
# return "json"
# elif data["template"]:
# return data["template"]
# elif data["def_func"] == "list":
# return "list.pt"
# else:
# return "form.pt"
# return value
def usage(argv):
......@@ -337,7 +339,6 @@ def append_csv(table, filename, keys, get_file_func=get_file,
db_session.flush()
if user:
print("Table: ", table.__name__, filter_)
row = db_session.query(User).filter_by(id=row.id).first()
init_model()
UserService.set_password(row, password)
......@@ -409,7 +410,6 @@ def main(argv=sys.argv):
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
LogDBSession.configure(bind=engine)
# alembic_run(config_uri) # alembicnya ziggurat
Base.metadata.create_all(bind=engine)
alembic_run(config_uri, "alembic_base")
# base_alembic_run(config_uri)
......@@ -430,31 +430,31 @@ def main(argv=sys.argv):
append_csv(GroupPermission, 'group_permission.csv',
['group_id', 'perm_name'])
# append_csv(Route, 'routes.csv', ['kode'])
append_csv(Menus, 'menus.csv', ['kode'])
append_csv(Eselon, 'eselon.csv', ['kode'])
append_csv(Jabatan, 'jabatan.csv', ['kode'])
restore_csv(Pangkat, 'pangkat.csv')
restore_csv(ResProvinsi, 'provinsi.csv')
transaction.commit()
restore_csv(ResDati2, 'dati2.csv')
transaction.commit()
restore_csv(ResKecamatan, 'kecamatan.csv')
transaction.commit()
restore_csv(ResDesa, 'desa.csv')
def delete_route(module):
try:
routes = Route.query().filter(Route.module == module).\
order_by(desc(Route.parent_id), desc(Route.order_id), ).limit(100)
for route in routes:
try:
Route.query_id(route.id).delete()
transaction.commit()
except Exception as e:
# print(str(e))
# print(route.nama, route.id, route.parent_id, )
# print("Error")
transaction.abort()
except Exception as e:
print(str(e))
# append_csv(Menus, 'menus.csv', ['kode'])
# append_csv(Eselon, 'eselon.csv', ['kode'])
# append_csv(Jabatan, 'jabatan.csv', ['kode'])
# restore_csv(Pangkat, 'pangkat.csv')
# restore_csv(ResProvinsi, 'provinsi.csv')
# transaction.commit()
# restore_csv(ResDati2, 'dati2.csv')
# transaction.commit()
# restore_csv(ResKecamatan, 'kecamatan.csv')
# transaction.commit()
# restore_csv(ResDesa, 'desa.csv')
# def delete_route(module):
# try:
# routes = Route.query().filter(Route.module == module).\
# order_by(desc(Route.parent_id), desc(Route.order_id), ).limit(100)
# for route in routes:
# try:
# Route.query_id(route.id).delete()
# transaction.commit()
# except Exception as e:
# # print(str(e))
# # print(route.nama, route.id, route.parent_id, )
# # print("Error")
# transaction.abort()
# except Exception as e:
# print(str(e))
import os
import sys
from opensipkd.tools import get_settings
def is_live(pid):
try:
os.kill(pid, 0)
except OSError:
return
return True
def get_pid(pidfile):
try:
f = open(pidfile, 'r')
pid_int = int(f.read().split()[0])
f.close()
return pid_int
except IOError:
return
except ValueError:
return
except IndexError:
return
def get_pid_file(pid_name=None, settings=None):
if not pid_name:
pid_name = os.path.split(sys.argv[0])[-1]
pid_name = os.path.splitext(pid_name)[0]
if not settings:
settings = get_settings()
dir_path = 'session.lock_dir'
if not os.path.exists(dir_path):
mkdir(dir_path)
return os.path.join(dir_path, pid_name)
def make_pid(pid_file, settings=None):
pid = get_pid(pid_file)
if pid and is_live(pid):
msg = 'PID saya {pid} masih ada.'.format(pid=pid)
print(msg)
sys.exit()
pid = os.getpid()
f = open(pid_file, 'w')
f.write(str(pid))
f.close()
return pid
def one_pid():
pid_file = get_pid_file()
make_pid(pid_file)
return pid_file
def mkdir(dir_name):
if not os.path.exists(dir_name):
os.makedirs(dir_name)
def get_fullpath(filename):
dir_name = os.path.split(__file__)[0]
return os.path.join(dir_name, filename)
import logging
# from opensipkd.tools import get_params
from opensipkd.models import (User, UserGroup, DBSession, )
from .models.users import (User, UserGroup, DBSession, )
from pyramid.security import remember, forget
log = logging.getLogger(__name__)
......
{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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"}
\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.

4.25 KB | W: | H:

5.05 KB | W: | H:

opensipkd/base/static/icon/default.png
opensipkd/base/static/icon/default.png
opensipkd/base/static/icon/default.png
opensipkd/base/static/icon/default.png
  • 2-up
  • Swipe
  • Onion skin
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!