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 59ce6bc7
authored
Dec 10, 2024
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
datatable date
1 parent
8ec0c6d1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
103 additions
and
40 deletions
opensipkd/base/__init__.py
opensipkd/base/scripts/initializedb.py
opensipkd/base/views/base_views.py
opensipkd/base/views/routes.py
opensipkd/detable/detable.py
opensipkd/detable/templates/detable.pt
opensipkd/base/__init__.py
View file @
59ce6bc
...
@@ -500,6 +500,7 @@ def add_view_config(config, module, view_name):
...
@@ -500,6 +500,7 @@ def add_view_config(config, module, view_name):
renderer
=
renderers
)
renderer
=
renderers
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
str
(
e
))
log
.
error
(
str
(
e
))
log
.
error
(
dict
(
row
.
__dict__
))
config
.
scan
(
'.'
)
config
.
scan
(
'.'
)
...
...
opensipkd/base/scripts/initializedb.py
View file @
59ce6bc
...
@@ -46,7 +46,10 @@ def routes_callback(typ, **kwargs):
...
@@ -46,7 +46,10 @@ def routes_callback(typ, **kwargs):
return
None
return
None
value
=
splited_last
value
=
splited_last
elif
field
==
"class_view"
:
elif
field
==
"class_view"
:
if
data
[
"def_func"
]
==
"list"
and
not
data
[
"class_view"
]:
if
data
[
"def_func"
]
==
"list"
and
not
data
[
"class_view"
]
\
or
splited_last
not
in
[
"add"
,
"edit"
,
"delete"
,
"view"
,
"act"
,
"report"
]:
log
.
debug
(
splited
[
-
1
:])
log
.
debug
(
data
)
return
"_"
.
join
(
splited
[
1
:])
return
"_"
.
join
(
splited
[
1
:])
if
splited_last
==
"menu"
:
if
splited_last
==
"menu"
:
...
...
opensipkd/base/views/base_views.py
View file @
59ce6bc
...
@@ -136,7 +136,7 @@ class BaseView(object):
...
@@ -136,7 +136,7 @@ class BaseView(object):
self
.
list_buttons
=
(
btn_add
,
btn_close
)
self
.
list_buttons
=
(
btn_add
,
btn_close
)
self
.
columns
=
None
self
.
columns
=
None
self
.
form_params
=
dict
(
scripts
=
""
)
self
.
form_params
=
dict
(
scripts
=
""
)
self
.
list_url
=
''
self
.
list_url
=
[]
self
.
list_route
=
''
self
.
list_route
=
''
self
.
list_schema
=
colander
.
Schema
self
.
list_schema
=
colander
.
Schema
self
.
allow_view
=
True
self
.
allow_view
=
True
...
@@ -145,7 +145,9 @@ class BaseView(object):
...
@@ -145,7 +145,9 @@ class BaseView(object):
self
.
allow_post
=
False
self
.
allow_post
=
False
self
.
allow_unpost
=
False
self
.
allow_unpost
=
False
self
.
state_save
=
False
self
.
state_save
=
False
self
.
server_side
=
True
self
.
list_form
=
None
self
.
list_form
=
None
self
.
form_list
=
None
self
.
filter_columns
=
False
self
.
filter_columns
=
False
self
.
form_scripts
=
"""
self
.
form_scripts
=
"""
...
@@ -243,16 +245,18 @@ class BaseView(object):
...
@@ -243,16 +245,18 @@ class BaseView(object):
allow_unpost
=
kwargs
.
get
(
"allow_unpost"
,
self
.
allow_unpost
)
allow_unpost
=
kwargs
.
get
(
"allow_unpost"
,
self
.
allow_unpost
)
state_save
=
kwargs
.
get
(
"state_save"
,
self
.
state_save
)
state_save
=
kwargs
.
get
(
"state_save"
,
self
.
state_save
)
filter_columns
=
kwargs
.
get
(
"filter_columns"
,
self
.
filter_columns
)
filter_columns
=
kwargs
.
get
(
"filter_columns"
,
self
.
filter_columns
)
server_side
=
kwargs
.
get
(
"server_side"
,
self
.
server_side
)
schema
=
self
.
list_schema
()
schema
=
self
.
list_schema
()
schema
=
schema
.
bind
(
request
=
self
.
req
)
schema
=
schema
.
bind
(
request
=
self
.
req
)
list_url
=
kwargs
.
get
(
"list_url"
,
None
)
new_buttons
=
kwargs
.
get
(
"new_buttons"
)
new_buttons
=
kwargs
.
get
(
"new_buttons"
)
if
not
new_buttons
:
if
not
new_buttons
:
new_buttons
=
self
.
new_buttons
new_buttons
=
self
.
new_buttons
if
not
list_url
:
list_url
=
kwargs
.
get
(
"list_url"
,
self
.
list_url
)
if
not
list_url
and
self
.
list_route
:
list_url
=
self
.
req
.
route_url
(
self
.
list_route
)
list_url
=
self
.
req
.
route_url
(
self
.
list_route
)
action_suffix
=
kwargs
.
get
(
"action_suffix"
,
"/grid/act"
)
list_url
=
list_url
and
list_url
[
0
:
1
]
!=
"/"
and
"/"
+
list_url
or
list_url
action_suffix
=
list_url
and
kwargs
.
get
(
"action_suffix"
,
"/grid/act"
)
or
None
table
=
DeTable
(
schema
,
table
=
DeTable
(
schema
,
action
=
list_url
,
action
=
list_url
,
action_suffix
=
action_suffix
,
action_suffix
=
action_suffix
,
...
@@ -266,9 +270,14 @@ class BaseView(object):
...
@@ -266,9 +270,14 @@ class BaseView(object):
state_save
=
state_save
,
state_save
=
state_save
,
new_buttons
=
new_buttons
,
new_buttons
=
new_buttons
,
filter_columns
=
filter_columns
,
filter_columns
=
filter_columns
,
server_side
=
server_side
)
)
resources
=
table
.
get_widget_resources
()
resources
=
table
.
get_widget_resources
()
# resources=dict(css="", js="")
# resources=dict(css="", js="")
if
kwargs
.
get
(
"is_object"
):
return
dict
(
form
=
table
,
scripts
=
""
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
return
dict
(
form
=
table
.
render
(),
scripts
=
""
,
css
=
resources
[
"css"
],
return
dict
(
form
=
table
.
render
(),
scripts
=
""
,
css
=
resources
[
"css"
],
js
=
resources
[
"js"
])
js
=
resources
[
"js"
])
...
@@ -294,9 +303,13 @@ class BaseView(object):
...
@@ -294,9 +303,13 @@ class BaseView(object):
def
get_list
(
self
,
**
kwargs
):
def
get_list
(
self
,
**
kwargs
):
url
=
[]
url
=
[]
select_list
=
{}
select_list
=
{}
list_schema
=
kwargs
.
get
(
"list_schema"
)
if
not
list_schema
:
list_schema
=
self
.
list_schema
and
self
.
list_schema
or
self
.
form_list
if
not
self
.
columns
:
if
not
self
.
columns
:
columns
=
[]
columns
=
[]
for
d
in
self
.
list_schema
():
for
d
in
list_schema
():
global_search
=
True
global_search
=
True
search_method
=
hasattr
(
d
,
"search_method"
)
\
search_method
=
hasattr
(
d
,
"search_method"
)
\
and
getattr
(
d
,
"search_method"
)
or
"string_contains"
and
getattr
(
d
,
"search_method"
)
or
"string_contains"
...
@@ -406,11 +419,17 @@ class BaseView(object):
...
@@ -406,11 +419,17 @@ class BaseView(object):
def
next_edit
(
self
,
form
,
**
kwargs
):
def
next_edit
(
self
,
form
,
**
kwargs
):
return
self
.
route_list
(
**
kwargs
)
return
self
.
route_list
(
**
kwargs
)
def
returned_form
(
self
,
form
,
table
,
**
kwargs
):
def
returned_form
(
self
,
form
,
table
=
None
,
**
kwargs
):
resources
=
form
.
get_widget_resources
()
resources
=
form
.
get_widget_resources
()
readonly
=
"readonly"
in
kwargs
and
kwargs
[
"readonly"
]
or
False
readonly
=
"readonly"
in
kwargs
and
kwargs
[
"readonly"
]
or
False
kwargs
[
"readonly"
]
=
readonly
kwargs
[
"readonly"
]
=
readonly
is_object
=
kwargs
.
get
(
"is_object"
,
self
.
is_object
)
is_object
=
kwargs
.
get
(
"is_object"
,
self
.
is_object
)
if
dict
==
type
(
table
):
resources
[
"js"
]
.
extend
(
set
(
table
[
"js"
])
-
set
(
resources
[
"js"
]))
resources
[
"css"
]
.
extend
(
set
(
table
[
"css"
])
-
set
(
resources
[
"css"
]))
table
=
table
[
"form"
]
# resources["js"] = list(resources["js"])
# resources["css"] = list(resources["css"])
if
is_object
:
if
is_object
:
return
dict
(
form
=
form
,
return
dict
(
form
=
form
,
table
=
table
and
table
.
render
()
or
None
,
table
=
table
and
table
.
render
()
or
None
,
...
@@ -566,10 +585,10 @@ class BaseView(object):
...
@@ -566,10 +585,10 @@ class BaseView(object):
def
view_add
(
self
,
**
kwargs
):
def
view_add
(
self
,
**
kwargs
):
# bindings = self.get_bindings()
# bindings = self.get_bindings()
form
=
self
.
get_form
(
self
.
add_schema
,
**
kwargs
)
form
=
self
.
get_form
(
self
.
add_schema
,
**
kwargs
)
table
=
self
.
get_item_table
(
**
kwargs
)
resources
=
form
.
get_widget_resources
()
resources
=
form
.
get_widget_resources
()
is_object
=
kwargs
.
get
(
"is_object"
,
self
.
is_object
)
is_object
=
kwargs
.
get
(
"is_object"
,
self
.
is_object
)
kwargs
[
"is_object"
]
=
is_object
kwargs
[
"is_object"
]
=
is_object
table
=
self
.
get_item_table
(
**
kwargs
)
if
self
.
req
.
POST
:
if
self
.
req
.
POST
:
if
'save'
in
self
.
req
.
POST
:
if
'save'
in
self
.
req
.
POST
:
controls
=
self
.
req
.
POST
.
items
()
controls
=
self
.
req
.
POST
.
items
()
...
@@ -657,7 +676,11 @@ class BaseView(object):
...
@@ -657,7 +676,11 @@ class BaseView(object):
return
d
return
d
def
get_item_table
(
self
,
row
=
None
,
**
kwargs
):
def
get_item_table
(
self
,
row
=
None
,
**
kwargs
):
return
None
if
not
self
.
form_list
:
return
None
self
.
list_schema
=
self
.
form_list
kwargs
[
"is_object"
]
=
True
return
self
.
view_list
(
**
kwargs
)
def
before_edit
(
self
,
form
):
def
before_edit
(
self
,
form
):
"""
"""
...
@@ -748,6 +771,7 @@ class BaseView(object):
...
@@ -748,6 +771,7 @@ class BaseView(object):
form
=
self
.
get_form
(
form
=
self
.
get_form
(
self
.
edit_schema
,
buttons
=
(
btn_delete
,
btn_cancel
))
self
.
edit_schema
,
buttons
=
(
btn_delete
,
btn_cancel
))
table
=
self
.
get_item_table
(
row
)
table
=
self
.
get_item_table
(
row
)
resources
=
form
.
get_widget_resources
()
resources
=
form
.
get_widget_resources
()
form
.
set_appstruct
(
self
.
get_values
(
row
))
form
.
set_appstruct
(
self
.
get_values
(
row
))
kwargs
[
"readonly"
]
=
True
kwargs
[
"readonly"
]
=
True
...
...
opensipkd/base/views/routes.py
View file @
59ce6bc
...
@@ -140,7 +140,12 @@ class ListSchema(colander.Schema):
...
@@ -140,7 +140,12 @@ class ListSchema(colander.Schema):
path
=
colander
.
SchemaNode
(
path
=
colander
.
SchemaNode
(
colander
.
String
(),
title
=
'Path'
,
colander
.
String
(),
title
=
'Path'
,
searchable
=
True
)
searchable
=
True
)
template
=
colander
.
SchemaNode
(
class_view
=
colander
.
SchemaNode
(
colander
.
String
(),
searchable
=
False
,
global_search
=
False
,
)
def_func
=
colander
.
SchemaNode
(
colander
.
String
(),
colander
.
String
(),
searchable
=
False
,
searchable
=
False
,
global_search
=
False
,
global_search
=
False
,
...
...
opensipkd/detable/detable.py
View file @
59ce6bc
...
@@ -107,7 +107,7 @@ class DeTable(field.Field):
...
@@ -107,7 +107,7 @@ class DeTable(field.Field):
filters
=
'true'
,
filters
=
'true'
,
paginates
=
'true'
,
paginates
=
'true'
,
params
=
""
,
params
=
""
,
server_side
=
'true'
,
server_side
=
True
,
state_save
=
True
,
state_save
=
True
,
data
=
[],
data
=
[],
allow_edit
=
True
,
allow_edit
=
True
,
...
@@ -123,6 +123,7 @@ class DeTable(field.Field):
...
@@ -123,6 +123,7 @@ class DeTable(field.Field):
self
.
rows
=
kw
.
get
(
"rows"
)
self
.
rows
=
kw
.
get
(
"rows"
)
self
.
action
=
action
self
.
action
=
action
self
.
tableid
=
tableid
self
.
tableid
=
tableid
self
.
data
=
data
new_buttons
=
kw
.
get
(
"new_buttons"
)
or
()
new_buttons
=
kw
.
get
(
"new_buttons"
)
or
()
...
@@ -192,8 +193,7 @@ class DeTable(field.Field):
...
@@ -192,8 +193,7 @@ class DeTable(field.Field):
table_widget
=
widget
.
TableWidget
()
table_widget
=
widget
.
TableWidget
()
self
.
widget
=
table_widget
self
.
widget
=
table_widget
self
.
server_side
=
json
.
dumps
(
server_side
)
self
.
server_side
=
server_side
self
.
data
=
data
self
.
data
=
data
columns
=
[]
columns
=
[]
headers
=
[]
headers
=
[]
...
@@ -236,10 +236,13 @@ class DeTable(field.Field):
...
@@ -236,10 +236,13 @@ class DeTable(field.Field):
if
isinstance
(
f
.
widget
,
deform
.
widget
.
HiddenWidget
):
if
isinstance
(
f
.
widget
,
deform
.
widget
.
HiddenWidget
):
d
[
"visible"
]
=
False
d
[
"visible"
]
=
False
if
isinstance
(
f
.
widget
,
deform
.
widget
.
CheckboxWidget
):
el
if
isinstance
(
f
.
widget
,
deform
.
widget
.
CheckboxWidget
):
d
.
update
(
self
.
widget_checkbox
(
f
))
d
.
update
(
self
.
widget_checkbox
(
f
))
elif
isinstance
(
f
.
widget
,
deform
.
widget
.
SelectWidget
):
d
.
update
(
self
.
widget_select
(
f
))
else
:
else
:
d
[
"checkbox"
]
=
False
d
[
"wg_checkbox"
]
=
False
d
[
"wg_select"
]
=
False
if
hasattr
(
f
,
"url"
):
if
hasattr
(
f
,
"url"
):
url
=
f
.
url
url
=
f
.
url
d
[
"render"
]
=
"""
d
[
"render"
]
=
"""
...
@@ -294,7 +297,6 @@ class DeTable(field.Field):
...
@@ -294,7 +297,6 @@ class DeTable(field.Field):
# cols2.append(data)
# cols2.append(data)
filter_scripts
=
self
.
get_filter_scripts
(
f
)
filter_scripts
=
self
.
get_filter_scripts
(
f
)
self
.
filter_scripts
=
filter_scripts
self
.
filter_scripts
=
filter_scripts
self
.
filter_form
=
filter_form
self
.
filter_form
=
filter_form
...
@@ -313,8 +315,8 @@ class DeTable(field.Field):
...
@@ -313,8 +315,8 @@ class DeTable(field.Field):
def
widget_checkbox
(
self
,
column
):
def
widget_checkbox
(
self
,
column
):
d
=
{}
d
=
{}
d
[
"checkbox"
]
=
True
d
[
"
wg_
checkbox"
]
=
True
d
[
"
check
_val"
]
=
[
column
.
widget
.
true_val
,
column
.
widget
.
false_val
]
d
[
"
wg_checkbox
_val"
]
=
[
column
.
widget
.
true_val
,
column
.
widget
.
false_val
]
d
[
"className"
]
=
"text-center"
d
[
"className"
]
=
"text-center"
d
[
"width"
]
=
"30pt"
d
[
"width"
]
=
"30pt"
# d["render"] = """
# d["render"] = """
...
@@ -329,6 +331,16 @@ class DeTable(field.Field):
...
@@ -329,6 +331,16 @@ class DeTable(field.Field):
return
d
return
d
def
widget_select
(
self
,
column
):
d
=
{}
d
[
"wg_select"
]
=
True
d
[
"wg_select_val"
]
=
column
.
widget
.
values
if
column
.
widget
.
values
:
for
val
in
column
.
widget
.
values
:
if
hasattr
(
column
,
f
"color_{val}"
):
d
[
f
"color_{val}"
]
=
getattr
(
column
,
f
"color_{val}"
)
return
d
def
action_url
(
self
,
f
):
def
action_url
(
self
,
f
):
act
=
""
act
=
""
if
self
.
allow_view
:
if
self
.
allow_view
:
...
@@ -365,8 +377,8 @@ class DeTable(field.Field):
...
@@ -365,8 +377,8 @@ class DeTable(field.Field):
txt
=
f
'id="{col_id}" data-index={field_index} '
txt
=
f
'id="{col_id}" data-index={field_index} '
html
+=
'<div class="form-group">'
html
+=
'<div class="form-group">'
if
isinstance
(
f
.
widget
,
deform
.
widget
.
CheckboxWidget
):
if
isinstance
(
f
.
widget
,
deform
.
widget
.
CheckboxWidget
):
check_val
=
[
f
.
widget
.
true_val
,
f
.
widget
.
false_val
]
wg_
check_val
=
[
f
.
widget
.
true_val
,
f
.
widget
.
false_val
]
radio_val
=
[[
""
,
'Semua'
],
[
check_val
[
0
],
'Aktif'
],
[
check_val
[
1
],
'Pasif'
]]
radio_val
=
[[
""
,
'Semua'
],
[
wg_check_val
[
0
],
'Aktif'
],
[
wg_
check_val
[
1
],
'Pasif'
]]
html
+=
'<label class="" for="'
+
col_id
+
'">'
+
f
.
title
+
'</label>'
html
+=
'<label class="" for="'
+
col_id
+
'">'
+
f
.
title
+
'</label>'
html
+=
'<div class="input-group" id="'
+
col_id
+
'">'
html
+=
'<div class="input-group" id="'
+
col_id
+
'">'
for
rdo
in
range
(
len
(
radio_val
)):
for
rdo
in
range
(
len
(
radio_val
)):
...
@@ -381,26 +393,43 @@ class DeTable(field.Field):
...
@@ -381,26 +393,43 @@ class DeTable(field.Field):
html
+=
f
'{radio_val[rdo][1]}</label>'
html
+=
f
'{radio_val[rdo][1]}</label>'
html
+=
'</label>'
html
+=
'</label>'
html
+=
'</div>'
html
+=
'</div>'
elif
isinstance
(
f
.
widget
,
deform
.
widget
.
SelectWidget
):
# elif isinstance(f.typ, colander.Date):
wg_select_val
=
f
.
widget
.
values
# requirements = f.widget.requirements
html
+=
f
'<select class="form-control {self.tableid}-control-filter"'
# for requirement in requirements:
html
+=
f
'placeholder="{f.title}" {txt}/>'
# if type(requirement) == dict and "js" in requirement:
html
+=
'<option value="">Semua</option>'
# for req in requirement:
for
key
in
wg_select_val
:
#
html
+=
f
'<option value="{key}">{wg_select_val[key]}</option>'
# html += f'<input type="text" class="form-control {self.tableid}-control-filter hasDatePicker"'
html
+=
'</select>'
# html += f'placeholder="{f.title}" {txt}/>'
# html += """
elif
isinstance
(
f
.
typ
,
colander
.
Date
):
# <script type="text/javascript">
html
+=
f
'<div class="form-group" {txt}>'
# deform.addCallback(
html
+=
f
'<div class="input-group">'
# '%s',
html
+=
f
'<span class="input-group-addon">{f.title}</span>'
# function deform_cb(oid) {
html
+=
f
'<span class="input-group-addon"><input type="date" class="form-control {self.tableid}-control-filter hasDatePicker"'
# $('#'+oid).datepicker();
html
+=
f
'data-index={field_index} placeholder="{f.title} Awal" '
# }
html
+=
f
'name="{col_id}" id="{col_id}-min"/></span>'
# );
html
+=
f
'<span class="input-group-addon"><input type="date" class="form-control {self.tableid}-control-filter hasDatePicker"'
# </script>
html
+=
f
'data-index={field_index} placeholder="{f.title} Akhir" '
# """ % self.tableid
html
+=
f
'name="{col_id}" id="{col_id}-max" /></span>'
html
+=
f
'</div>'
html
+=
f
'</div>'
# html += """
# <script type="text/javascript">
# deform.addCallback(
# '%s',
# function deform_cb(oid) {
# $('#'+oid).datepicker();
# }
# );
# </script>
# """ % self.tableid
# requirements = f.widget.requirements
# for requirement in requirements:
# if type(requirement) == dict and "js" in requirement:
# for req in requirement:
#
else
:
else
:
html
+=
f
'<input type="text" class="form-control {self.tableid}-control-filter"'
html
+=
f
'<input type="text" class="form-control {self.tableid}-control-filter"'
html
+=
f
'placeholder="{f.title}" {txt}/>'
html
+=
f
'placeholder="{f.title}" {txt}/>'
...
@@ -410,6 +439,7 @@ class DeTable(field.Field):
...
@@ -410,6 +439,7 @@ class DeTable(field.Field):
def
get_filter_scripts
(
self
,
f
):
def
get_filter_scripts
(
self
,
f
):
return
""
return
""
"""
"""
for (let co in ${tableid}Columns) {
for (let co in ${tableid}Columns) {
if (${tableid}Columns[co].checkbox === true) {
if (${tableid}Columns[co].checkbox === true) {
...
...
opensipkd/detable/templates/detable.pt
View file @
59ce6bc
This diff is collapsed.
Click to expand it.
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