Commit f86d23d2 by aagusti

penambahan module base_view

1 parent b88a61a8
# Basis Aplikasi openSIPKD
========================
Ini adalah basis dari seluruh aplikasi openSIPKD.
Pemasangan
----------
Pasang paket Debian yang dibutuhkan::
$ sudo apt-get install libxml2-dev libxslt1-dev libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev
Buat Python Virtual Environment, biasanya pada home directory::
$ python3 -m venv ~/env
$ ~/env/bin/pip install --upgrade pip setuptools
Install Production
------------------
$ ~/env/bin/pip install git+https://git.opensipkd.com/aa.gusti/opensipkd-base.git
$ cp ~/env/etc/live_opensipkd.tpl ~/env/etc/live_opensipkd.ini
Install Development::
-------------------
$ source ~/env/bin/activate
$ mkdir apps
$ cd apps
$ git clone https://git.opensipkd.com/bekasi/base.git@ciamis
$ env/bin/pip install -e base[dev]
$ cp ~/env/etc/test_opensipkd.tpl ~/env/etc/test_opensipkd.ini
Sesuaikan konfigurasi ``test_opensipkd.ini`` atau ``live_opensipkd.ini``
pada baris berikut ini::
sqlalchemy.url = postgresql://user:password@localhost:5432/db
session.url = postgresql://user:password@localhost:5432/db
[alembic_ziggurat]
sqlalchemy.url = postgresql://user:password@localhost:5432/db
script_location = ziggurat_foundation:migration
[alembic_base]
sqlalchemy.url = postgresql://user:password@localhost:5432/db
script_location = opensipkd.base:alembic
Handling Log File:
==================
Logging dapat dilakukan console, file atau tabel
>> Module yang akan di logging
[loggers]
keys = root, opensipkd, sqlalchemy
>> output handler gunakan sesuai kebutuhan tidak perlu semuanya
[handlers]
keys = console, file, table
>> output handler gunakan INFO pada level kalau sedang testing
[logger_opensipkd]
level = WARN
handlers = file, table
qualname = opensipkd
[handler_table]
class = opensipkd.base.handlers.SQLAlchemyHandler
args = ()
level = NOTSET #Sebaiknya hanya gunakan NOTSET atau WARN
formatter = generic
[handler_file]
class = FileHandler
args = ('/full/path/file.log', 'a')
level = NOTSET #Sebaiknya hanya gunakan NOTSET atau WARN
formatter = generic
[alembic]
sqlalchemy.url = postgresql://user:password@localhost:5432/db
script_location = alembic
```
Buat tabelnya::
$ ~/env/bin/initialize_opensipkd_db ~/env/etc/test_opensipkd.ini
Jalankan::
$ ~/env/bin/pserve --reload test.ini
# Penggunaan Proxy
## Apache::
Tambahkan line berikut ini didalam ``<VirtualHost>``::
```
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://server:port/
ProxyPassReverse / http://server:port/
<Proxy *>
allow from all
</Proxy>
```
Contoh::
```
<VirtualHost ip:80>
SuexecUserGroup "#uid" "#gid"
ServerName antrian.opensipkd.com
ServerAlias www.antrian.opensipkd.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:6552/
ProxyPassReverse / http://localhost:6552/
<Proxy *>
allow from all
</Proxy>
</VirtualHost>
```
# Virtual Directory
## Setting Ini File
### Ubah `[app:ain]` jadi `[app:opensipkd]`
```
;[app:main]
[app:opensipkd_base]
trusted_proxy_headers = "forwarded x-forwarded-for x-forwarded-host x-forwarded-proto x-forwarded-port"
url_prefix='/virtualdir' ; nama cirtual direktory
```
Tambahkan blok berikut ini dibawah ini file
```
[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /virtualdir ; nama virtual directory
[pipeline:main]
pipeline =
proxy-prefix
opensipkd_base
```
## Nginx::
```
location /virtualdir{
return 302 /virtualdir/;
}
location /virtualdir/ {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://127.0.0.1:6543/;
}
```
......@@ -40,12 +40,15 @@ class CommonModel(object):
values[item.__name__] = value
return values
def to_dict(self, null=False): # Elixir like
def to_dict(self, null=False, date_format="%d-%m-%Y"): # Elixir like
values = {}
for column in self.__table__.columns:
value = getattr(self, column.name)
if value or null:
values[column.name] = value
if type(column.type)==DateTime:
values[column.name] = value.strftime(date_format)
else:
values[column.name] = value
return values
......
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
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
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
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
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,,
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
No preview for this file type
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
......@@ -294,3 +294,10 @@ def main(argv=sys.argv):
append_csv(Route, 'routes.csv', ['kode'])
append_csv(Eselon, 'eselon.csv', ['kode'])
append_csv(Jabatan, 'jabatan.csv', ['kode'])
restore_csv(ResProvinsi, 'provinsi.csv')
restore_csv(ResDati2, 'dati2.csv')
restore_csv(ResKecamatan, 'kecamatan.csv')
DBSession.flush()
restore_csv(ResDesa, 'desa.csv')
DBSession.flush()
......@@ -67,7 +67,8 @@ class Home(BaseView):
return HTTPFound(location=request.route_url(modules_default))
elif not request.user:
return HTTPFound(location=request.route_url(modules_default))
return dict(modules=modules)
logo = get_params('logo', "static/img/logo.png")
return dict(modules=modules, logo=logo)
@view_config(context=HTTPForbidden, renderer='templates/403.pt')
......
......@@ -125,9 +125,10 @@ class BaseView(object):
def get_params(self, params):
return get_params(params)
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)):
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel), **bindings):
schema = class_form(validator=self.form_validator)
schema = schema.bind(request=self.req)
schema = schema.bind(request=self.req,
**bindings)
schema.request = self.req
if row:
schema.deserialize(row)
......@@ -148,16 +149,18 @@ class BaseView(object):
row = self.query_id().first()
if not row:
return self.id_not_found()
form = self.get_form(self.edit_schema, buttons=(btn_close,))
bindings = self.get_bindings()
form = self.get_form(self.edit_schema, buttons=(btn_close,), **bindings)
if request.POST:
return self.route_list()
form.set_appstruct(self.get_values(row))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
table = self.get_item_table(row)
return dict(form=form.render(readonly=True), table=table and table.render() or None, scripts=self.form_scripts)
def view_add(self):
form = self.get_form(self.add_schema)
bindings = self.get_bindings()
form = self.get_form(self.add_schema, **bindings)
if self.req.POST:
if 'save' in self.req.POST:
controls = self.req.POST.items()
......@@ -168,7 +171,14 @@ class BaseView(object):
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls))
return self.route_list()
return dict(form=form.render(), scripts=self.form_scripts)
table = self.get_item_table()
return dict(form=form.render(), table=table and table.render() or None, scripts=self.form_scripts)
def before_save(self, row):
pass
def after_save(self, row):
pass
def save(self, values, user, row=None):
if not row:
......@@ -181,11 +191,17 @@ class BaseView(object):
row.from_dict(values)
row.status = 'status' in values and values['status'] and 1 or 0
self.before_save(row)
DBSession.add(row)
DBSession.flush()
self.after_save(row)
return row
def save_request(self, values, row=None):
params = self.req.params
for p in params:
values[p] = params[p]
return self.save(values, self.req.user, row)
def id_not_found(self):
......@@ -194,22 +210,29 @@ class BaseView(object):
self.req.session.flash(msg, 'error')
return self.route_list()
def get_values(self, row):
def get_values(self, row, istime=False):
d = row.to_dict()
if 'tanggal' in d and d['tanggal']:
d["tanggal"] = dmy(row.tanggal)
# if 'tanggal' in d and d['tanggal']:
# d["tanggal"] = dmy(row.tanggal)
for f in d:
if type(d[f]) is str:
d[f]=d[f].strip()
d[f] = d[f].strip()
return d
def get_bindings(self):
return {}
def get_item_table(self, row=None):
return None
def view_edit(self):
request = self.req
row = self.query_id().first()
if not row:
return self.id_not_found()
form = self.get_form(self.edit_schema)
bindings = self.get_bindings()
form = self.get_form(self.edit_schema, **bindings)
if request.POST:
if 'save' in request.POST:
controls = request.POST.items()
......@@ -223,7 +246,8 @@ class BaseView(object):
return self.route_list()
values = self.get_values(row)
form.set_appstruct(values)
return dict(form=form.render(), scripts=self.form_scripts)
table = self.get_item_table(row)
return dict(form=form.render(), table=table and table.render() or None, scripts=self.form_scripts)
def view_delete(self):
request = self.req
......@@ -239,14 +263,16 @@ class BaseView(object):
DBSession.flush()
request.session.flash(msg)
return self.route_list()
form = self.get_form(self.edit_schema, buttons=(btn_delete, btn_cancel))
bindings = self.get_bindings()
form = self.get_form(self.edit_schema, buttons=(btn_delete, btn_cancel), **bindings)
form.set_appstruct(self.get_values(row))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
table = self.get_item_table(row)
return dict(form=form.render(), table=table and table.render() or None, scripts=self.form_scripts)
def query_id(self):
q = DBSession.query(self.table).filter_by(
id=self.req.matchdict['id'])
if self.req.user.company_id:
if hasattr(self.table, 'compnay_id') and self.req.user.company_id:
q = q.filter_by(company_id=self.req.user.company_id)
return q
......
......@@ -17,7 +17,6 @@ SESS_EDIT_FAILED = 'Edit pemda gagal'
@colander.deferred
def company_widget(node, kw):
values = kw.get('company_list', [])
print(values)
values.insert(0, ("", "Select Pemda"))
return widget.Select2Widget(values=values,
placeholder="Pilih Organisasi")
......
......@@ -2,12 +2,13 @@ import json
import colander
from deform import (widget, Form, )
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save, btn_add, btn_edit, btn_delete
from pyramid.view import (view_config, )
from .kecamatan import kecamatan_widget
from ..models import DBSession, ResDesa, kategori_desa, ResKecamatan
from ..views import ColumnDT, DataTables, BaseView
from ...detable import DeTable
SESS_ADD_FAILED = 'Tambah desa gagal'
SESS_EDIT_FAILED = 'Edit desa gagal'
......@@ -37,6 +38,12 @@ class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama")
kecamatan = colander.SchemaNode(colander.String())
status = colander.SchemaNode(colander.Integer(), width="30pt")
class ViewDesa(BaseView):
def __init__(self, request):
......@@ -122,10 +129,12 @@ class ViewDesa(BaseView):
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
@view_config(route_name='desa',
renderer='templates/list.pt',
renderer='templates/form_input.pt',
permission='desa')
def view_list(self):
return super().view_list()
table = DeTable(ListSchema(title="Desa/Kelurahan"), action=f"{self.home}/desa",
buttons=(btn_close, btn_add, btn_edit, btn_delete))
return dict(form=table.render(), scripts=self.form_scripts)
@view_config(route_name='desa-act', renderer='json',
permission='view')
......@@ -144,7 +153,7 @@ class ViewDesa(BaseView):
return row_table.output_result()
elif url_dict['act'] == 'select':
kecamatan_id = request.params["kecamatan_id"]
data = ResKecamatan.get_list(kecamatan_id)
data = ResDesa.get_list(kecamatan_id)
result = {f"{k[0]}": k[1] for k in data}
return result
......
......@@ -2,13 +2,14 @@ import json
import colander
from deform import (widget, Form, )
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save, btn_add, btn_edit, btn_delete
from pyramid.view import (view_config, )
from . import widget_os
from .dati2 import dati2_widget
from ..models import DBSession, ResKecamatan, ResDati2
from ..views import ColumnDT, DataTables, BaseView
from ...detable import DeTable
SESS_ADD_FAILED = 'Tambah kecamatan gagal'
SESS_EDIT_FAILED = 'Edit kecamatan gagal'
......@@ -29,8 +30,8 @@ def kecamatan_widget(node, kw):
class AddSchema(colander.Schema):
dati2_id = colander.SchemaNode(colander.String(),
widget=dati2_widget,
validator=colander.Length(max=32), oid="kode")
widget=dati2_widget,
validator=colander.Length(max=32), oid="kode")
kode = colander.SchemaNode(colander.String(),
validator=colander.Length(max=32), oid="kode")
nama = colander.SchemaNode(colander.String(), oid="nama")
......@@ -41,20 +42,28 @@ class EditSchema(AddSchema):
widget=widget.HiddenWidget(readonly=True))
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama")
kabupaten = colander.SchemaNode(colander.String())
status = colander.SchemaNode(colander.Integer(), width="30pt")
class ViewDati2(BaseView):
def __init__(self, request):
super(ViewDati2, self).__init__(request)
self.form_scripts = ""
self.list_col_defs = json.dumps(
[{"searchable": False, "visible": False, "targets": [0], }, {
"searchable": True, "orderable": True, "targets": [1, 2],
}])
self.list_cols = [{'title': "ID", 'data': "id"},
{'title': "Kab/Kota", 'data': "dati2", 'width': '200pt'},
{'title': "Kode", 'data': "kode", 'width': '100pt'},
{'title': "Nama", 'data': "nama"}, ]
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
'btn_close'
# self.list_col_defs = json.dumps(
# [{"searchable": False, "visible": False, "targets": [0], }, {
# "searchable": True, "orderable": True, "targets": [1, 2],
# }])
# self.list_cols = [{'title': "ID", 'data': "id"},
# {'title': "Kab/Kota", 'data': "dati2", 'width': '200pt'},
# {'title': "Kode", 'data': "kode", 'width': '100pt'},
# {'title': "Nama", 'data': "nama"}, ]
# self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
# 'btn_close'
self.form_params = dict(scripts="")
self.list_url = 'kecamatan'
self.list_route = 'kecamatan'
......@@ -125,10 +134,12 @@ class ViewDati2(BaseView):
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
@view_config(route_name='kecamatan',
renderer='templates/list.pt',
renderer='templates/form_input.pt',
permission='kecamatan')
def view_list(self):
return super().view_list()
table = DeTable(ListSchema(title="Kecamatan"), action=f"{self.home}/kecamatan",
buttons=(btn_close, btn_add, btn_edit, btn_delete))
return dict(form=table.render(), scripts=self.form_scripts)
@view_config(route_name='kecamatan-act', renderer='json',
permission='view')
......@@ -140,7 +151,7 @@ class ViewDati2(BaseView):
ColumnDT(ResKecamatan.kode, mData='kode'),
ColumnDT(ResKecamatan.nama, mData='nama'),
ColumnDT(ResKecamatan.status, mData='status'),
ColumnDT(ResDati2.nama, mData='dati2'),]
ColumnDT(ResDati2.nama, mData='kabupaten'), ]
query = DBSession.query().select_from(ResKecamatan) \
.join(ResDati2, ResDati2.id == ResKecamatan.dati2_id)
row_table = DataTables(request.GET, query, columns)
......@@ -151,7 +162,6 @@ class ViewDati2(BaseView):
result = {f"{k[0]}": k[1] for k in data}
return result
@view_config(route_name='kecamatan-add',
renderer='templates/form_input.pt', permission='kecamatan')
def view_add(self):
......
......@@ -30,7 +30,7 @@ def provinsi_widget(node, kw):
class AddSchema(colander.Schema):
kode = colander.SchemaNode(colander.Float(),
kode = colander.SchemaNode(colander.String(),
oid="kode",
validator=colander.Length(max=32), )
kategori = colander.SchemaNode(colander.String(),
......@@ -38,6 +38,7 @@ class AddSchema(colander.Schema):
validator=colander.Length(max=32), oid="kode")
nama = colander.SchemaNode(colander.String(), oid="nama")
ibu_kota = colander.SchemaNode(colander.String(), oid="nama", missing=colander.drop)
class EditSchema(AddSchema):
......@@ -47,11 +48,9 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt',
thousand={"separator": ',', "decimal": '.',
"point": 0}
)
kode = colander.SchemaNode(colander.String(), width=100)
nama = colander.SchemaNode(colander.String())
ibu_kota=colander.SchemaNode(colander.String())
class ViewProvinsi(BaseView):
......@@ -136,6 +135,7 @@ class ViewProvinsi(BaseView):
columns = [ColumnDT(ResProvinsi.id, mData='id'),
ColumnDT(ResProvinsi.kode, mData='kode'),
ColumnDT(ResProvinsi.nama, mData='nama'),
ColumnDT(ResProvinsi.ibu_kota, mData='ibu_kota'),
ColumnDT(ResProvinsi.status, mData='status'), ]
query = DBSession.query().select_from(ResProvinsi)
row_table = DataTables(request.GET, query, columns)
......
......@@ -40,7 +40,7 @@
<div class="col-sm-12 padding-thin">
<div class="box appname">
<div class="col-sm-3 padding-medium" align="center">
<img src="${home}static/img/logo.png" alt="">
<img src="${home}${logo}" alt="">
</div>
<div class="col-sm-9 padding-high">
<span class="about-appname">${request.app_name}</span><br>
......
......@@ -175,9 +175,56 @@ class Select2MsWidget(Select2Widget):
Same as :func:`~deform.widget.SelectWidget`, with some extra options
listed here.
tags: *bool*
Allow dynamic option creation ( default: ``False`` ).
See `select2 docs on tagging <https://select2.org/tagging>`_ for
more details.
"""
template = "select2_ms.pt"
class QtyWidget(Widget):
template = "opensipkd.base:/views/templates/qty.pt"
readonly_template = "opensipkd.base:/views/templates/readonly/qty.pt"
_pstruct_schema = SchemaNode(
Mapping(),
SchemaNode(_StrippedString(), name="qty"),
SchemaNode(_StrippedString(), name="measure"),
)
def serialize(self, field, cstruct, **kw):
if cstruct is null:
qty = 0
measure = 0
else:
qty, measure = cstruct.split("|", 3)
kw.setdefault("qty", qty)
kw.setdefault("measure", measure)
readonly = kw.get("readonly", self.readonly)
template = readonly and self.readonly_template or self.template
values = self.get_template_values(field, cstruct, kw)
return field.renderer(template, **values)
def deserialize(self, field, pstruct):
if pstruct is null:
return null
else:
try:
validated = self._pstruct_schema.deserialize(pstruct)
except Invalid as exc:
raise Invalid(field.schema, text_("Invalid pstruct: %s" % exc))
qty = validated["qty"]
measure = validated["measure"]
if not qty and not measure:
return null
result = "|".join([str(qty), str(measure)])
if not qty or not measure:
raise Invalid(field.schema, "Data tidak lengkap", result)
return result
<div tal:define="
name name|field.name;
style field.widget.style;
oid oid|field.oid;
css_class css_class|field.widget.css_class;
unicode unicode|str;
optgroup_class optgroup_class|field.widget.optgroup_class;
multiple multiple|field.widget.multiple;
url url|field.widget.url;
slave slave|field.widget.slave;"
tal:omit-tag="">
${field.start_mapping()}
<div class="row">
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon" i18n:translate="">Jumlah</span>
<input type="text" name="qty" value="${qty}"
class="span2 form-control ${css_class or ''}"
tal:attributes="style style;
qty_attributes|field.widget.qty_attributes|{};"
maxlength="8"
id="${oid}-qty"/>
</div>
</div>
<div class="col-xs-8">
<select name="measure" tal:attributes="
name name;
id oid;
class string: form-control ${css_class or ''};
data-placeholder field.widget.placeholder|None;
multiple multiple;
style style;
attributes|field.widget.attributes|{};">
<tal:loop tal:repeat="item values">
<optgroup tal:condition="isinstance(item, optgroup_class)"
tal:attributes="label item.label">
<option tal:repeat="(value, description) item.options"
tal:attributes="
selected python:field.widget.get_select_value(cstruct, value);
class css_class;
label field.widget.long_label_generator and description;
value value"
tal:content="field.widget.long_label_generator and field.widget.long_label_generator(item.label, description) or description"/>
</optgroup>
<option tal:condition="not isinstance(item, optgroup_class)"
tal:attributes="
selected python:field.widget.get_select_value(cstruct, item[0]);
class css_class;
value item[0]">${item[1]}</option>
</tal:loop>
</select>
</div>
</div>
{field.end_mapping()}
</div>
......@@ -99,21 +99,25 @@ class DeTable(field.Field):
action_suffix='/grid/act',
buttons=(),
tableid="detable",
# use_ajax=False,
sorts='true',
filters='true',
paginates='true',
params="",
# ajax_options="{}",
# autocomplete=None,
# focus="on",
# cols = None,
**kw
):
params = params and f"?{params}" or ""
btn_close_js = "{window.location = '/'; return false;}"
btn_add_js = "{window.location = o%sUri+'/add';}" % tableid
btn_edit_js = "{window.location = o%sUri+'/'+m%sID+'/edit'}" % (tableid, tableid)
btn_view_js = "{window.location = o%sUri+'/'+m%sID+'/view';}" % (tableid, tableid)
btn_delete_js = "{window.location = o%sUri+'/'+m%sID+'/delete';}" % (tableid, tableid)
btn_csv_js = "{window.location = o%sUri+'/csv/act';}" % tableid
btn_pdf_js = "{window.location = o%sUri+'/pdf/act';}" % tableid
btn_add_js = "{window.location = o%sUri+'/add%s';}" % (tableid, params)
btn_edit_js = "{window.location = o%sUri+'/'+m%sID+'/edit%s'}" % (tableid, tableid, params)
btn_view_js = "{window.location = o%sUri+'/'+m%sID+'/view%s';}" % (tableid, tableid, params)
btn_delete_js = "{window.location = o%sUri+'/'+m%sID+'/delete%s';}" % (tableid, tableid, params)
btn_csv_js = "{window.location = o%sUri+'/csv/act%s';}" % (tableid, params)
btn_pdf_js = "{window.location = o%sUri+'/pdf/act%s';}" % (tableid, params)
action_suffix=f"{action_suffix}{params}"
field.Field.__init__(self, schema, **kw)
_buttons = []
for button in buttons:
......@@ -130,7 +134,7 @@ class DeTable(field.Field):
name="{button.name}"
type="{button.type}"
class="btn {button.css_class}">
{button.title} </button>
{button.title} </button>\n
""")
_scripts.append(f'$("#{tableid + button.name}").click(function ()' +
eval('btn_' + button.name + '_js') + ');')
......@@ -170,26 +174,29 @@ class DeTable(field.Field):
data.append(f"orderable: {f.orderable}")
# thousand = hasattr(f, 'thousand') and f.thousand or None
# separator = thousand and "separator" in thousand and thousand["separator"] or ','
# decimal = thousand and "decimal" in thousand and thousand["decimal"] or '.'
# point = thousand and "point" in thousand and thousand["point"] or 2
# currency = thousand and "currency" in thousand and thousand["currency"] or ""
# if thousand or type(f.typ)==colander.Float():
# d["renderer"]=f"$.fn.dataTable.render.number( '{separator}', '{decimal}', {point}, '{currency}' )"
# if 'className' not in d:
# d["className"] = "text-right"
# data.append(f'renderer: $.fn.dataTable.render.number( "{separator}", "{decimal}", {point}, "{currency}" )')
thousand = hasattr(f, 'thousand') and f.thousand or None
separator = thousand and "separator" in thousand and thousand["separator"] or ','
decimal = thousand and "decimal" in thousand and thousand["decimal"] or '.'
point = thousand and "point" in thousand and thousand["point"] or 2
currency = thousand and "currency" in thousand and thousand["currency"] or ""
if thousand or type(f.typ)==colander.Float() or type(f.typ)==colander.Integer():
d["render"]=f"<script>$.fn.dataTable.render.number( '{separator}', '{decimal}', {point}, '{currency}' )</script>"
if 'className' not in d:
d["className"] = "text-right"
# data.append(f'renderer: $.fn.dataTable.render.number( "{separator}", "{decimal}", {point}, "{currency}" )')
columns.append(d)
cols2.append(data)
self.columns = json.dumps(columns)
self.columns = self.columns.replace('"<script>',"").replace('</script>"',"")
# self.columns = columns
# self.columns = json.dumps(cols2)
self.url = action
self.url_suffix = action_suffix
self.sorts = sorts
self.paginates=paginates
self.filters=filters
class Button(object):
"""
......
......@@ -9,7 +9,11 @@
columns columns|field.columns;
btnscripts scripts|field.scripts;
url url|field.url;
url_suffix url_suffix|field.url_suffix;"
url_suffix url_suffix|field.url_suffix;
sorts sorts|field.sorts;
filters filters|field.filters;
paginates paginates|field.paginates;
"
tal:attributes="style style;
class css_class;
attributes|field.widget.attributes|{};"
......@@ -70,11 +74,11 @@
ajax: o${tableid}Url,
stateSave: false,
scrollCollapse: true,
sort: true,
sort: ${sorts},
info: false,
filter: true,
filter: ${filters},
autoWidth: false,
paginate: true,
paginate: ${paginates},
paginationType: "full_numbers",
lengthMenu: [
......
from pyramid_rpc.jsonrpc import jsonrpc_method
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!