Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 46c58fc4
authored
Aug 01, 2022
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
perbaikan form
1 parent
5e03bef7
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
228 additions
and
81 deletions
opensipkd/base/__init__.py
opensipkd/base/views/base_views.py
opensipkd/base/views/company.py
opensipkd/base/views/dati2.py
opensipkd/base/views/departemen.py
opensipkd/base/views/desa.py
opensipkd/base/views/eselon.py
opensipkd/base/views/groups.py
opensipkd/base/views/jabatan.py
opensipkd/base/views/kecamatan.py
opensipkd/base/views/log_app.py
opensipkd/base/views/menus.py
opensipkd/base/views/parameter.py
opensipkd/base/views/partner.py
opensipkd/base/views/posisi.py
opensipkd/base/views/provinsi.py
opensipkd/base/views/user.py
opensipkd/base/views/user_ext.py
opensipkd/detable/detable.py
opensipkd/detable/templates/detable.pt
opensipkd/jsonrpc_auth/__init__.py
opensipkd/base/__init__.py
View file @
46c58fc
...
...
@@ -6,7 +6,7 @@ try:
from
urllib
import
(
urlencode
,
quote
,
quote_plus
,
)
except
ImportError
:
from
urllib.parse
import
(
urlencode
,
quote
,
quote_plus
,
)
from
pyramid.events
import
NewRequest
from
pyramid.config
import
Configurator
from
pyramid_beaker
import
session_factory_from_settings
from
pyramid.events
import
subscriber
...
...
@@ -82,6 +82,16 @@ titles = {}
# return HTTPFound(location=noslash_path)
# return self.notfound_view(context, request)
def
add_cors_headers_response_callback
(
event
):
def
cors_headers
(
request
,
response
):
response
.
headers
.
update
({
'Access-Control-Allow-Origin'
:
'*'
,
'Access-Control-Allow-Methods'
:
'POST,GET,DELETE,PUT,OPTIONS'
,
'Access-Control-Allow-Headers'
:
'Origin, Content-Type, Accept, Authorization'
,
'Access-Control-Allow-Credentials'
:
'true'
,
'Access-Control-Max-Age'
:
'1728000'
,
})
event
.
request
.
add_response_callback
(
cors_headers
)
# https://groups.google.com/forum/#!topic/pylons-discuss/QIj4G82j04c
def
has_permission_
(
request
,
perm_names
,
context
=
None
):
...
...
@@ -396,6 +406,8 @@ def main(global_config, **settings):
config
=
cfg
config
.
set_security_policy
(
MySecurityPolicy
(
settings
[
"session.secret"
]))
config
.
add_subscriber
(
add_cors_headers_response_callback
,
NewRequest
)
config
.
add_request_method
(
get_user
,
'user'
,
reify
=
True
)
config
.
add_request_method
(
get_title
,
'title'
,
reify
=
True
)
config
.
add_request_method
(
get_company
,
'company'
,
reify
=
True
)
...
...
opensipkd/base/views/base_views.py
View file @
46c58fc
...
...
@@ -179,19 +179,23 @@ class BaseView(object):
del
self
.
req
.
session
[
session_name
]
return
r
def
view_list
(
self
,
arg
=
None
):
def
view_list
(
self
,
**
kwargs
):
if
self
.
list_schema
:
allow_edit
=
kwargs
.
get
(
"allow_edit"
,
True
)
allow_delete
=
kwargs
.
get
(
"allow_delete"
,
True
)
table
=
DeTable
(
self
.
list_schema
(),
action
=
self
.
req
.
route_url
(
self
.
list_route
),
action_suffix
=
"/grid/act"
,
buttons
=
self
.
list_buttons
,
request
=
self
.
req
)
request
=
self
.
req
,
allow_edit
=
allow_edit
,
allow_delete
=
allow_delete
)
resources
=
table
.
get_widget_resources
()
# resources=dict(css="", js="")
return
dict
(
form
=
table
.
render
(),
scripts
=
""
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
arg
=
arg
and
arg
or
{}
arg
=
kwargs
and
kwargs
or
{}
arg
.
update
(
url
=
self
.
list_url
,
col_defs
=
self
.
list_col_defs
,
cols
=
self
.
list_cols
,
buttons
=
self
.
list_buttons
)
return
arg
...
...
@@ -285,7 +289,7 @@ class BaseView(object):
if
'save'
in
self
.
req
.
POST
:
controls
=
self
.
req
.
POST
.
items
()
try
:
c
ontrols
=
form
.
validate
(
controls
)
c
=
form
.
validate
(
controls
)
except
ValidationFailure
as
e
:
# value = self.validation_failure(e.cstruct)
# value.update(self.before_add())
...
...
@@ -294,7 +298,7 @@ class BaseView(object):
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
values
=
dict
(
c
ontrols
)
values
=
dict
(
c
)
row
=
self
.
save_request
(
values
)
self
.
after_add
(
row
,
values
)
elif
"cancel"
in
self
.
req
.
POST
or
'batal'
in
self
.
req
.
POST
:
...
...
opensipkd/base/views/company.py
View file @
46c58fc
...
...
@@ -34,8 +34,22 @@ class EditSchema(AddSchema):
oid
=
"partner_id"
)
class
ListSchema
(
NamaSchema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
visible
=
False
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Action"
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
32
),
oid
=
"kode"
,
title
=
"Kode"
,
width
=
"100pt"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
64
),
oid
=
"nama"
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
CheckboxWidget
(),
oid
=
"status"
)
class
ViewCompany
(
BaseView
):
...
...
opensipkd/base/views/dati2.py
View file @
46c58fc
import
colander
from
deform
import
(
widget
,
)
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
(
view_config
,
)
from
.
import
widget_os
from
.provinsi
import
provinsi_widget
from
opensipkd.models
import
DBSession
,
ResDati2
,
kategori_dati2
,
ResProvinsi
from
..views
import
BaseView
_
=
TranslationStringFactory
(
"opensipkd"
)
SESS_ADD_FAILED
=
'Tambah dati2 gagal'
SESS_EDIT_FAILED
=
'Edit dati2 gagal'
...
...
@@ -43,11 +45,11 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
searchable
=
False
,
orderable
=
False
,
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
))
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
width
=
'100pt'
,
title
=
"Kode"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Nama"
)
provinsi
=
colander
.
SchemaNode
(
colander
.
String
(),
field
=
ResProvinsi
.
nama
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
width
=
"30pt"
)
class
ViewDati2
(
BaseView
):
...
...
opensipkd/base/views/departemen.py
View file @
46c58fc
...
...
@@ -99,11 +99,12 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"
ID
"
,
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"
Action
"
,
visible
=
False
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Kode"
,
width
=
'100pt'
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Nama"
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
title
=
"Status"
,
width
=
'50pt'
)
level_id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Level"
,
width
=
'50pt'
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
title
=
"Status"
,
width
=
'50pt'
,
widget
=
widget
.
CheckboxWidget
())
level_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
"Level"
,
width
=
'50pt'
)
parent
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Induk"
,
width
=
'200pt'
)
...
...
opensipkd/base/views/desa.py
View file @
46c58fc
import
colander
from
deform
import
(
widget
,
)
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
(
view_config
,
)
from
.dati2
import
dati2_widget
...
...
@@ -7,6 +8,7 @@ from .kecamatan import kecamatan_widget
from
.provinsi
import
provinsi_widget
from
opensipkd.models
import
DBSession
,
ResDesa
,
kategori_desa
,
ResKecamatan
,
ResProvinsi
,
ResDati2
from
..views
import
BaseView
_
=
TranslationStringFactory
(
"opensipkd"
)
SESS_ADD_FAILED
=
'Tambah desa gagal'
SESS_EDIT_FAILED
=
'Edit desa gagal'
...
...
@@ -56,11 +58,11 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
searchable
=
False
,
orderable
=
False
,
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
))
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
width
=
'100pt'
,
title
=
"Kode"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Nama"
)
kecamatan
=
colander
.
SchemaNode
(
colander
.
String
(),
field
=
ResKecamatan
.
nama
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
width
=
"30pt"
)
class
ViewDesa
(
BaseView
):
...
...
opensipkd/base/views/eselon.py
View file @
46c58fc
...
...
@@ -35,8 +35,22 @@ class EditSchema(AddSchema):
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
())
class
ListSchema
(
NamaSchema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
visible
=
False
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Action"
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
32
),
oid
=
"kode"
,
title
=
"Kode"
,
width
=
"100pt"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
64
),
oid
=
"nama"
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
CheckboxWidget
(),
oid
=
"status"
)
class
Views
(
BaseView
):
def
__init__
(
self
,
request
):
...
...
opensipkd/base/views/groups.py
View file @
46c58fc
...
...
@@ -40,7 +40,7 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
visible
=
False
,
title
=
"Action"
)
group_name
=
colander
.
SchemaNode
(
colander
.
String
(),
)
description
=
colander
.
SchemaNode
(
colander
.
String
())
...
...
opensipkd/base/views/jabatan.py
View file @
46c58fc
import
colander
import
os
import
colander
from
deform
import
(
widget
,
)
from
opensipkd.tools.buttons
import
btn_view
,
btn_add
,
btn_edit
,
btn_delete
,
btn_close
from
opensipkd.tools.report
import
csv_response
,
open_rml_pdf
,
open_rml_row
,
pdf_response
from
opensipkd.tools.report
import
csv_response
,
open_rml_pdf
,
open_rml_row
,
\
pdf_response
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
(
view_config
,
)
from
.partner_base
import
NamaSchema
from
opensipkd.models
import
(
DBSession
,
Jabatan
,
Eselon
,
Departemen
)
from
.partner_base
import
NamaSchema
from
..views
import
BaseView
,
deferred_jenis
_
=
TranslationStringFactory
(
"opensipkd"
)
SESS_ADD_FAILED
=
'Tambah jabatan gagal'
SESS_EDIT_FAILED
=
'Edit jabatan gagal'
JENIS
=
((
1
,
'Struktural'
),
(
2
,
'Fungsional'
),
(
3
,
'Keuangan'
),
JENIS
=
((
1
,
_
(
'structural'
,
default
=
'Structural'
)
),
(
2
,
_
(
'functional'
,
default
=
'Functional'
)
),
(
3
,
_
(
'finance'
,
default
=
'Finance'
)
),
)
...
...
@@ -50,12 +54,12 @@ class AddSchema(colander.Schema):
colander
.
Integer
(),
oid
=
"jenis"
,
widget
=
deferred_jenis
,
title
=
"Jenis"
)
title
=
_
(
"type"
,
default
=
"Jenis"
)
)
eselon_id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
oid
=
"eselon_id"
,
widget
=
deferred_eselon
,
title
=
"Eselon"
)
title
=
_
(
"eselon"
,
default
=
"Eselon"
)
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
oid
=
"status"
)
...
...
@@ -67,9 +71,22 @@ class EditSchema(AddSchema):
widget
=
widget
.
HiddenWidget
())
class
ListSchema
(
NamaSchema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
visible
=
False
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Action"
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
32
),
oid
=
"kode"
,
title
=
"Kode"
,
width
=
"100pt"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
64
),
oid
=
"nama"
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
CheckboxWidget
(),
oid
=
"status"
)
class
ViewJabatan
(
BaseView
):
...
...
@@ -84,7 +101,6 @@ class ViewJabatan(BaseView):
self
.
list_schema
=
ListSchema
# self.list_buttons = (btn_view, btn_add, btn_edit, btn_delete, btn_close)
def
get_bindings
(
self
,
row
=
None
):
return
dict
(
daftar_jenis
=
JENIS
,
daftar_eselon
=
daftar_eselon
())
...
...
@@ -124,7 +140,8 @@ class ViewJabatan(BaseView):
elif
url_dict
[
'act'
]
==
'hon'
:
term
=
'term'
in
params
and
params
[
'term'
]
or
''
q
=
DBSession
.
query
(
Jabatan
.
id
,
Jabatan
.
kode
,
Jabatan
.
nama
,
Jabatan
.
jenis
)
.
\
q
=
DBSession
.
query
(
Jabatan
.
id
,
Jabatan
.
kode
,
Jabatan
.
nama
,
Jabatan
.
jenis
)
.
\
filter
(
Jabatan
.
nama
.
ilike
(
'
%%%
s
%%
'
%
term
))
.
\
order_by
(
Jabatan
.
nama
)
rows
=
q
.
all
()
...
...
@@ -147,7 +164,8 @@ class ViewJabatan(BaseView):
elif
url_dict
[
'act'
]
==
'headofnama'
:
term
=
'term'
in
params
and
params
[
'term'
]
or
''
q
=
DBSession
.
query
(
Jabatan
.
id
,
Jabatan
.
kode
,
Jabatan
.
nama
,
Jabatan
.
jenis
)
.
\
q
=
DBSession
.
query
(
Jabatan
.
id
,
Jabatan
.
kode
,
Jabatan
.
nama
,
Jabatan
.
jenis
)
.
\
filter
(
Jabatan
.
nama
.
ilike
(
'
%%%
s
%%
'
%
term
))
.
\
order_by
(
Jabatan
.
nama
)
rows
=
q
.
all
()
...
...
@@ -160,7 +178,8 @@ class ViewJabatan(BaseView):
else
:
nama_jenis
=
'Fungsional'
d
=
{
'id'
:
k
[
0
],
'value'
:
k
[
2
]
+
' ('
+
nama_jenis
+
')'
,
'kode'
:
k
[
1
],
'nama'
:
k
[
2
]}
d
=
{
'id'
:
k
[
0
],
'value'
:
k
[
2
]
+
' ('
+
nama_jenis
+
')'
,
'kode'
:
k
[
1
],
'nama'
:
k
[
2
]}
r
.
append
(
d
)
return
r
elif
url_dict
[
'act'
]
==
'csv'
:
...
...
@@ -186,14 +205,18 @@ class ViewJabatan(BaseView):
rows
=
[]
for
r
in
query
.
all
():
s
=
rml_row
.
format
(
kode
=
r
.
kode
,
nama
=
r
.
nama
,
status
=
r
.
status
and
"Aktif"
or
"Pasif"
)
s
=
rml_row
.
format
(
kode
=
r
.
kode
,
nama
=
r
.
nama
,
status
=
r
.
status
and
"Aktif"
or
"Pasif"
)
rows
.
append
(
s
)
pdf
,
filename
=
open_rml_pdf
(
path
+
'/jabatan.rml'
,
rows
=
rows
,
company
=
request
.
company
,
departement
=
request
.
session
[
'departemen_nm'
],
departement
=
request
.
session
[
'departemen_nm'
],
address
=
request
.
address
,
alamat
=
Departemen
.
query_id
(
request
.
session
[
'departemen_id'
])
.
first
(),
alamat
=
Departemen
.
query_id
(
request
.
session
[
'departemen_id'
])
.
first
(),
periode
=
'01-01-2017 s.d 31-12-2017'
)
return
pdf_response
(
request
,
pdf
,
filename
)
...
...
@@ -237,7 +260,8 @@ class ViewJabatan(BaseView):
else
:
jabatan
=
None
q
=
Jabatan
.
query_kode
(
value
[
'kode'
])
# DBSession.query(Jabatan).filter_by(kode=value['kode'])
q
=
Jabatan
.
query_kode
(
value
[
'kode'
])
# DBSession.query(Jabatan).filter_by(kode=value['kode'])
found
=
q
.
first
()
if
jabatan
:
if
found
and
found
.
id
!=
jabatan
.
id
:
...
...
opensipkd/base/views/kecamatan.py
View file @
46c58fc
import
colander
from
deform
import
(
widget
,
)
from
pyramid.i18n
import
TranslationStringFactory
from
opensipkd.base.views.provinsi
import
provinsi_widget
from
opensipkd.models
import
DBSession
,
ResKecamatan
,
ResDati2
,
ResProvinsi
from
pyramid.view
import
(
view_config
,
)
...
...
@@ -10,6 +12,7 @@ from ..views import BaseView
SESS_ADD_FAILED
=
'Tambah kecamatan gagal'
SESS_EDIT_FAILED
=
'Edit kecamatan gagal'
_
=
TranslationStringFactory
(
"opensipkd"
)
@colander.deferred
...
...
@@ -52,12 +55,11 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
searchable
=
False
,
orderable
=
False
,
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
)
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
width
=
'100pt'
,
title
=
"Kode"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Nama"
)
kabupaten
=
colander
.
SchemaNode
(
colander
.
String
(),
field
=
ResDati2
.
nama
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
width
=
"30pt"
)
class
Views
(
BaseView
):
...
...
@@ -114,7 +116,7 @@ class Views(BaseView):
renderer
=
'templates/table.pt'
,
permission
=
'kecamatan'
)
def
view_list
(
self
):
return
super
(
Views
,
self
)
.
view_list
(
self
)
return
super
(
Views
,
self
)
.
view_list
()
@view_config
(
route_name
=
'kecamatan-act'
,
renderer
=
'json'
,
permission
=
'view'
)
...
...
opensipkd/base/views/log_app.py
View file @
46c58fc
...
...
@@ -5,6 +5,7 @@ from datatables import ColumnDT
from
deform
import
Form
,
widget
from
opensipkd.tools.buttons
import
btn_view
,
btn_delete
from
pyramid.httpexceptions
import
HTTPFound
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
view_config
from
opensipkd.base
import
DBSession
...
...
@@ -34,12 +35,12 @@ class EditSchema(AddSchema):
widget
=
widget
.
HiddenWidget
(),
)
_
=
TranslationStringFactory
(
"opensipkd"
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
(),
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
))
created_at
=
colander
.
SchemaNode
(
colander
.
DateTime
())
logger
=
colander
.
SchemaNode
(
...
...
opensipkd/base/views/menus.py
View file @
46c58fc
import
colander
from
deform
import
(
widget
,
)
from
pyramid.i18n
import
TranslationStringFactory
from
opensipkd.models
import
Menus
,
flush
from
pyramid.view
import
(
view_config
,
)
from
sqlalchemy.orm
import
aliased
from
..views
import
ColumnDT
,
DataTables
,
BaseView
_
=
TranslationStringFactory
(
"opensipkd"
)
SESS_ADD_FAILED
=
'Tambah menu gagal'
SESS_EDIT_FAILED
=
'Edit menu gagal'
...
...
@@ -70,7 +73,8 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"ID"
,
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
))
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Kode"
,
width
=
'100pt'
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"Nama"
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
title
=
"Status"
,
...
...
opensipkd/base/views/parameter.py
View file @
46c58fc
...
...
@@ -7,6 +7,7 @@ from opensipkd.models import (
DBSession
,
Parameter
)
class
AddSchema
(
colander
.
Schema
):
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
...
...
@@ -32,7 +33,31 @@ class EditSchema(AddSchema):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
(
readonly
=
True
),
visible
=
False
)
title
=
"Action"
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
"Action"
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
oid
=
"kode"
,
title
=
"Kode"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
oid
=
"nama"
,
title
=
"Nama"
)
value
=
colander
.
SchemaNode
(
colander
.
String
(),
widget
=
widget
.
TextAreaWidget
(
rows
=
5
),
oid
=
"value"
,
title
=
"Nilai"
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
CheckboxWidget
())
class
Views
(
BaseView
):
...
...
@@ -44,7 +69,7 @@ class Views(BaseView):
self
.
add_schema
=
AddSchema
self
.
edit_schema
=
EditSchema
self
.
table
=
Parameter
self
.
list_schema
=
Edi
tSchema
self
.
list_schema
=
Lis
tSchema
@view_config
(
route_name
=
'parameter'
,
renderer
=
'templates/table.pt'
,
permission
=
'user-edit'
)
...
...
opensipkd/base/views/partner.py
View file @
46c58fc
...
...
@@ -4,6 +4,7 @@ import colander
from
deform
import
(
widget
,
)
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
(
view_config
,
)
...
...
@@ -19,6 +20,7 @@ from opensipkd.models import DBSession, Partner
from
..
import
partner_idcard_folder
from
..views
import
BaseView
_
=
TranslationStringFactory
(
"opensipkd"
)
SESS_ADD_FAILED
=
'Tambah partner gagal'
SESS_EDIT_FAILED
=
'Edit partner gagal'
...
...
@@ -54,16 +56,26 @@ class EditSchema(AddSchema):
)
class
ListSchema
(
NamaSchema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
(),
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
))
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
32
),
oid
=
"kode"
,
title
=
"Kode"
,
width
=
"100pt"
)
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
64
),
oid
=
"nama"
)
email
=
colander
.
SchemaNode
(
colander
.
String
(),
oid
=
"email"
)
status
=
colander
.
SchemaNode
(
colander
.
Boolean
(),
widget
=
widget
.
CheckboxWidget
(),
oid
=
"status"
)
...
...
opensipkd/base/views/posisi.py
View file @
46c58fc
This diff is collapsed.
Click to expand it.
opensipkd/base/views/provinsi.py
View file @
46c58fc
import
colander
from
deform
import
(
widget
,
)
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
(
view_config
,
)
from
.
import
widget_os
from
opensipkd.models
import
DBSession
,
ResProvinsi
,
kategori_provinsi
from
..views
import
BaseView
_
=
TranslationStringFactory
(
"opensipkd"
)
SESS_ADD_FAILED
=
'Tambah provinsi gagal'
SESS_EDIT_FAILED
=
'Edit provinsi gagal'
...
...
@@ -41,7 +43,8 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
searchable
=
False
,
orderable
=
False
,
visible
=
False
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
title
=
_
(
"action"
,
default
=
"Action"
))
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
width
=
100
)
nama
=
colander
.
SchemaNode
(
colander
.
String
())
ibu_kota
=
colander
.
SchemaNode
(
colander
.
String
())
...
...
opensipkd/base/views/user.py
View file @
46c58fc
...
...
@@ -21,12 +21,14 @@ _ = TranslationStringFactory('user')
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
"
ID"
,
visible
=
False
,
title
=
"
Action"
,
searchable
=
False
)
email
=
colander
.
SchemaNode
(
colander
.
String
())
user_name
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
_
(
"user-name"
,
default
=
"User Name"
))
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
width
=
50
,
searchable
=
False
)
status
=
colander
.
SchemaNode
(
colander
.
Integer
(),
widget
=
widget
.
CheckboxWidget
(),
width
=
50
,
searchable
=
False
)
last_login
=
colander
.
SchemaNode
(
colander
.
String
(),
width
=
100
,
field
=
"last_login_date"
,
searchable
=
False
)
...
...
opensipkd/base/views/user_ext.py
View file @
46c58fc
...
...
@@ -25,7 +25,7 @@ class EditSchema(AddSchema):
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
field
=
"external_id"
)
id
=
colander
.
SchemaNode
(
colander
.
String
(),
field
=
"external_id"
,
title
=
"Action"
)
external_user_name
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
_
(
'User Name'
))
provider_name
=
(
colander
.
SchemaNode
(
colander
.
String
(),
title
=
_
(
'Provider'
)))
...
...
@@ -38,24 +38,24 @@ class UserExt(BaseView):
self
.
edit_schema
=
EditSchema
self
.
list_schema
=
ListSchema
self
.
list_route
=
"user-ext"
self
.
list_buttons
=
(
btn_
view
,
btn_delete
,
btn_close
)
self
.
list_buttons
=
(
btn_
close
,
)
self
.
table
=
ExternalIdentity
@view_config
(
route_name
=
'user-ext'
,
renderer
=
'templates/table.pt'
,
permission
=
'user-view'
)
def
view_list
(
self
):
form
=
super
(
UserExt
,
self
)
.
view_list
()
form
=
super
(
UserExt
,
self
)
.
view_list
(
allow_edit
=
False
,
allow_delete
=
False
)
return
form
@view_config
(
route_name
=
'user-ext-view'
,
renderer
=
'templates/form
_input
.pt'
,
route_name
=
'user-ext-view'
,
renderer
=
'templates/form.pt'
,
permission
=
'user-view'
)
def
view_view
(
self
):
return
super
(
UserExt
,
self
)
.
view_view
()
@view_config
(
route_name
=
'user-ext-delete'
,
renderer
=
'templates/form
_input
.pt'
,
route_name
=
'user-ext-delete'
,
renderer
=
'templates/form.pt'
,
permission
=
'user-edit'
)
def
view_delete
(
self
):
return
super
(
UserExt
,
self
)
.
view_delete
()
...
...
opensipkd/detable/detable.py
View file @
46c58fc
...
...
@@ -10,7 +10,7 @@ from chameleon.utils import Markup
from
deform
import
compat
from
deform
import
field
from
.
import
widget
# from deform import widget
log
=
logging
.
getLogger
(
__name__
)
...
...
@@ -166,24 +166,24 @@ class DeTable(field.Field):
for
f
in
schema
:
d
=
{
'data'
:
f
.
name
}
data
=
[]
if
hasattr
(
f
,
'width'
):
d
[
"width"
]
=
f
.
width
data
.
append
(
f
"width: '{f.width}'"
)
if
hasattr
(
f
,
'aligned'
):
d
[
"className"
]
=
f
.
aligned
data
.
append
(
f
"className: '{f.aligned}'"
)
if
hasattr
(
f
,
'searchable'
):
d
[
"searchable"
]
=
f
.
searchable
data
.
append
(
f
"searchable: {f.searchable}"
)
if
hasattr
(
f
,
'visible'
):
d
[
"visible"
]
=
f
.
visible
data
.
append
(
f
"visible: {f.visible}"
)
if
isinstance
(
f
.
widget
,
deform
.
widget
.
HiddenWidget
):
d
[
"visible"
]
=
False
if
isinstance
(
f
.
widget
,
deform
.
widget
.
CheckboxWidget
):
d
[
"checkbox"
]
=
True
else
:
d
[
"checkbox"
]
=
False
if
hasattr
(
f
,
'orderable'
):
d
[
"orderable"
]
=
f
.
orderable
...
...
@@ -199,8 +199,7 @@ class DeTable(field.Field):
"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}', "
\
d
[
"render"
]
=
f
"<script>$.fn.dataTable.render.number( '{separator}', "
\
f
"'{decimal}', {point}, '{currency}' )</script>"
if
'className'
not
in
d
:
d
[
"className"
]
=
"text-right"
...
...
opensipkd/detable/templates/detable.pt
View file @
46c58fc
...
...
@@ -17,7 +17,6 @@
data data|field.data;
allow_edit allow_edit|field.allow_edit;
allow_delete allow_delete|field.allow_delete;
edit_url 'edit.com';
"
tal:attributes="style style; class css_class; attributes|field.widget.attributes|{};"
i18n:domain="detable">
...
...
@@ -32,7 +31,6 @@
<thead>
<tr>
<th tal:repeat="child field">${child.title}</th>
<th tal:condition="allow_edit or allow_delete">Action</th>
</tr>
</thead>
<tbody>
...
...
@@ -43,7 +41,7 @@
</div>
</header>
<script
type="text/javascript"
>
<script>
deform.addCallback
('${tableid}', function (oid) {
let m${tableid}ID;
...
...
@@ -57,11 +55,16 @@
'</div>',
]
let columns = ${structure: columns};
let action_column = {
"data": "id",
"className": "text-center",
"width": 50,
"render": function (id) {
function render_checkbox(value) {
if (value == true) {
return '<i class="fas fa-check-square" aria-hidden="true">';
}
return '<i class="fas fa-rectangle-xmark" aria-hidden="true">';
}
if (columns[0].data == "id") {
columns[0].render = function (id) {
let result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true"></i></a> ';
if (${allow_edit}) {
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true"></i></a> '
...
...
@@ -72,8 +75,25 @@
return result;
}
columns[0].width = "40pt";
columns[0].orderable = false;
columns[0].className = "text-center";
columns[0].visible = true;
columns[1].order = "order_asc";
}
for (co in columns) {
if (columns[co].checkbox === true) {
columns[co].className = "text-center";
columns[co].width = "30pt";
columns[co].render = function (val) {
if (["", false, 0].indexOf(val) === -1) {
return render_checkbox(true);
} else return render_checkbox(false);
}
columns.push(action_column);
}
}
console.log(columns);
let language = {
"search": "Cari: ",
"paginate": {
...
...
@@ -96,6 +116,7 @@
autoWidth: false,
paginate: ${paginates},
paginationType: "full_numbers",
order: [],
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
...
...
@@ -104,8 +125,11 @@
"language": language,
}
if (${server_side}==false)
{params.data = ${data};}
if (${server_side}==false
)
{
params.data = ${data};
}
else
{
params.ajax = o${tableid}Url;
...
...
@@ -118,7 +142,7 @@
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
var
aData = o${tableid}.row(this).data();
let
aData = o${tableid}.row(this).data();
o${tableid}.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
m${tableid}ID = aData.id;
...
...
opensipkd/jsonrpc_auth/__init__.py
View file @
46c58fc
...
...
@@ -191,6 +191,8 @@ def add_jsonrpc_endpoint(config, name, *args, **kw):
def
setup_request
(
endpoint
,
request
):
""" Parse a JSON-RPC request body."""
print
(
request
.
__dict__
)
print
(
request
.
environ
.
get
(
"ACCESS_CONTROL_ALLOW_ORIGIN"
))
if
request
.
method
==
'GET'
:
parse_request_GET
(
request
)
elif
request
.
method
==
'POST'
:
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment