Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
irul
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 1a3f80a1
authored
Dec 13, 2024
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
penambahan checkbox pada datatable
1 parent
9097cc10
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
112 additions
and
40 deletions
opensipkd/base/__init__.py
opensipkd/base/views/__init__.py
opensipkd/base/views/base_views.py
opensipkd/base/views/routes.py
opensipkd/detable/detable.py
opensipkd/detable/templates/detable.pt
opensipkd/models/meta.py
opensipkd/base/__init__.py
View file @
1a3f80a
...
...
@@ -487,7 +487,6 @@ def add_view_config(config, module, view_name):
class_view
=
row
.
class_view
and
f
".{row.class_view}"
or
""
class_name
=
f
"{view_name}{class_view}"
attr
=
f
"view_{row.def_func}"
log
.
debug
(
f
"Class: {class_name} Attr: {attr}"
)
try
:
_views
=
importlib
.
import_module
(
class_name
)
views
=
_views
...
...
@@ -649,14 +648,7 @@ def main(global_config, **settings):
config
.
add_renderer
(
'json_rpc'
,
json_rpc
())
set_routes
(
config
)
# New Routes By Array
for
route
in
routes
:
if
len
(
route
)
>
4
and
str
(
route
[
4
])
==
'1'
:
config
.
add_jsonrpc_endpoint
(
route
[
0
],
route
[
1
],
default_renderer
=
"json_rpc"
)
else
:
config
.
add_route
(
route
[
0
],
route
[
1
])
titles
[
route
[
0
]]
=
route
[
2
]
routes_by_array
(
config
)
config
.
registry
[
'mailer'
]
=
mailer_factory_from_settings
(
settings
)
config
.
scan
()
...
...
@@ -664,3 +656,14 @@ def main(global_config, **settings):
config
.
scan
(
m
)
return
config
.
make_wsgi_app
()
def
routes_by_array
(
config
,
routs
=
routes
):
# New Routes By Array
for
route
in
routs
:
if
len
(
route
)
>
4
and
str
(
route
[
4
])
==
'1'
:
config
.
add_jsonrpc_endpoint
(
route
[
0
],
route
[
1
],
default_renderer
=
"json_rpc"
)
else
:
config
.
add_route
(
route
[
0
],
route
[
1
])
titles
[
route
[
0
]]
=
route
[
2
]
\ No newline at end of file
opensipkd/base/views/__init__.py
View file @
1a3f80a
import
logging
from
datetime
import
timedelta
import
colander
from
deform
import
(
Form
,
ValidationFailure
,
widget
,
Button
,
FileData
)
from
opensipkd.base
import
get_params
,
get_urls
from
opensipkd.models
import
(
DBSession
,
UserService
,
)
from
opensipkd.tools
import
mem_tmp_store
from
pyramid.httpexceptions
import
(
HTTPFound
,
HTTPForbidden
,
HTTPNotFound
,
HTTPInternalServerError
,
HTTPSeeOther
)
...
...
@@ -16,11 +11,19 @@ from pyramid.interfaces import IRoutesMapper
from
pyramid.renderers
import
render_to_response
from
pyramid.view
import
view_config
from
.base_views
import
BaseView
,
DataTables
,
ColumnDT
from
opensipkd.base
import
get_params
,
get_urls
from
opensipkd.models
import
(
DBSession
,
UserService
,
)
from
opensipkd.tools
import
mem_tmp_store
from
.base_views
import
BaseView
,
DataTables
_
=
TranslationStringFactory
(
'login'
)
log
=
logging
.
getLogger
(
__name__
)
from
datatables
import
ColumnDT
# , DataTables, get_urls)
def
no_action
():
test
=
ColumnDT
@view_config
(
context
=
HTTPNotFound
,
renderer
=
'templates/404.pt'
)
def
not_found
(
request
):
...
...
@@ -40,6 +43,13 @@ def not_found(request):
return
{}
# @view_config(context=HTTPNotFound, renderer='json')
# def not_found_json(request):
# pass
# request.response.status = 404
# return {"JSON"}
@view_config
(
context
=
HTTPInternalServerError
,
renderer
=
'templates/500.pt'
)
def
internal_server_error
(
request
):
return
{}
...
...
@@ -74,7 +84,6 @@ class FilesSchema(colander.SequenceSchema):
self
[
"file_name"
]
.
title
=
""
########
# Home #
########
...
...
opensipkd/base/views/base_views.py
View file @
1a3f80a
...
...
@@ -144,6 +144,7 @@ class BaseView(object):
self
.
allow_delete
=
True
self
.
allow_post
=
False
self
.
allow_unpost
=
False
self
.
allow_check
=
False
self
.
state_save
=
False
self
.
server_side
=
True
self
.
list_form
=
None
...
...
@@ -243,6 +244,7 @@ class BaseView(object):
allow_delete
=
kwargs
.
get
(
"allow_delete"
,
self
.
allow_delete
)
allow_post
=
kwargs
.
get
(
"allow_post"
,
self
.
allow_post
)
allow_unpost
=
kwargs
.
get
(
"allow_unpost"
,
self
.
allow_unpost
)
allow_check
=
kwargs
.
get
(
"allow_check"
,
self
.
allow_check
)
state_save
=
kwargs
.
get
(
"state_save"
,
self
.
state_save
)
filter_columns
=
kwargs
.
get
(
"filter_columns"
,
self
.
filter_columns
)
server_side
=
kwargs
.
get
(
"server_side"
,
self
.
server_side
)
...
...
@@ -270,6 +272,7 @@ class BaseView(object):
allow_delete
=
allow_delete
,
allow_post
=
allow_post
,
allow_unpost
=
allow_unpost
,
allow_check
=
allow_check
,
state_save
=
state_save
,
new_buttons
=
new_buttons
,
filter_columns
=
filter_columns
,
...
...
opensipkd/base/views/routes.py
View file @
1a3f80a
...
...
@@ -180,6 +180,7 @@ class Views(BaseView):
self
.
table
=
Route
self
.
list_schema
=
ListSchema
self
.
allow_delete
=
True
self
.
allow_check
=
True
self
.
form_scripts
=
"""
$('#parent_nm').bind('typeahead:selected', function (obj, datum, name) {
$('#parent_id').val(datum.id);
...
...
opensipkd/detable/detable.py
View file @
1a3f80a
...
...
@@ -115,6 +115,7 @@ class DeTable(field.Field):
allow_view
=
True
,
allow_post
=
False
,
allow_unpost
=
False
,
allow_check
=
False
,
filter_columns
=
False
,
**
kw
):
...
...
@@ -124,14 +125,24 @@ class DeTable(field.Field):
self
.
action
=
action
self
.
tableid
=
tableid
self
.
data
=
data
self
.
allow_edit
=
json
.
dumps
(
allow_edit
)
self
.
allow_delete
=
json
.
dumps
(
allow_delete
)
self
.
allow_view
=
json
.
dumps
(
allow_view
)
self
.
allow_post
=
json
.
dumps
(
allow_post
)
self
.
allow_unpost
=
json
.
dumps
(
allow_unpost
)
self
.
allow_check
=
json
.
dumps
(
allow_check
)
self
.
filter_columns
=
json
.
dumps
(
filter_columns
)
# Button yang dikirim sebagai tambahan
new_buttons
=
kw
.
get
(
"new_buttons"
)
or
()
action_suffix
=
f
"{action_suffix}{params}"
close_url
=
self
.
action
.
split
(
"/"
)
close_url
=
"/"
.
join
(
close_url
[:
-
1
])
close_url
.
replace
(
":/"
,
"://"
)
params
=
params
and
f
"?{params}"
or
""
dict_buttons
=
{
"close"
:
"{window.location = '
/
'; return false;}"
,
"close"
:
"{window.location = '
"
+
close_url
+
"
'; return false;}"
,
"add"
:
"{window.location = o
%
sUri+'/add
%
s';}"
%
(
tableid
,
params
),
"edit"
:
"""{
if (m
%
sID) window.location = o
%
sUri+'/'+m
%
sID+'/edit
%
s';
...
...
@@ -185,12 +196,7 @@ class DeTable(field.Field):
replace
(
';'
,
';
\n
'
)
self
.
tableid
=
tableid
self
.
scripts
=
''
.
join
(
_scripts
)
.
replace
(
';'
,
";
\n
"
)
self
.
allow_edit
=
json
.
dumps
(
allow_edit
)
self
.
allow_delete
=
json
.
dumps
(
allow_delete
)
self
.
allow_view
=
json
.
dumps
(
allow_view
)
self
.
allow_post
=
json
.
dumps
(
allow_post
)
self
.
allow_unpost
=
json
.
dumps
(
allow_unpost
)
self
.
filter_columns
=
json
.
dumps
(
filter_columns
)
table_widget
=
getattr
(
schema
,
"widget"
,
None
)
if
table_widget
is
None
:
table_widget
=
widget
.
TableWidget
()
...
...
opensipkd/detable/templates/detable.pt
View file @
1a3f80a
...
...
@@ -21,6 +21,7 @@
allow_view allow_view|field.allow_view;
allow_post allow_post|field.allow_post;
allow_unpost allow_unpost|field.allow_unpost;
allow_check allow_check|field.allow_check;
state_save state_save|field.state_save;
filter_columns filter_columns|field.filter_columns;
filter_scripts filter_scripts|field.filter_scripts;
...
...
@@ -46,7 +47,49 @@
</div>
</div>
</div>
<div tal:condition="allow_check">
<input type="checkbox" class="${tableid}checkAll">Pilih Semua
<script>
$(document).ready(function () {
$('.${tableid}checkAll').click(function () {
if (this.checked) {
console.log("AAAAAAAAAAAA");
$(".${tableid}_check").prop("checked", true);
} else {
console.log("BBBBBBBBBBBB");
$(".${tableid}_check").prop("checked", false);
}
});
$('.modal-inner-content td').click(function (event) {
if (!$(event.target).is('input')) {
$('input:checkbox', this).prop('checked', function (i, value) {
console.log(i, value);
//return !value;
});
//$('.${tableid}_check').on("click", function (event) {
// console.log(event);
// if (this.checked) {
// m${tableid}ChekList.push($(this).val());
// } else {
// m${tableid}CheckList.splice(m${tableid}CheckList.indexOf($(this).val()), 1);
// }
//});
}
});
$('.${tableid}_check').on("click", function (event) {
console.log(event);
if (this.checked) {
m${tableid}ChekList.push($(this).val());
} else {
m${tableid}CheckList.splice(m${tableid}CheckList.indexOf($(this).val()), 1);
}
})
});
</script>
</div>
<table id="${tableid}"
class="table table-bordered table-hover table-condensed dataTable no-footer">
<thead>
...
...
@@ -76,7 +119,11 @@
var o${tableid}Uri = "${url}";
var o${tableid}Url = o${tableid}Uri + "${url_suffix}";
var m${tableid}ID;
var m${tableid}ChekList = [];
deform.addCallback('${tableid}', function (oid) {
// $(document).ready(function () {
function displayEmptyID() {
$("#emptyID").show();
$('#emptyID').animate({opacity: 0.8}, 2000);
...
...
@@ -151,7 +198,7 @@
} else if (${tableid}Columns[co].hasOwnProperty("url")) {
let url = ${tableid}Columns[co].url;
${tableid}Columns[co].render = function (data) {
let result = "No Data"
let result = "No Data"
;
if (data != null) {
result = '<a href="' + url + data + '" target="_blank">Link</a> ';
}
...
...
@@ -159,22 +206,25 @@
}
} else if (${tableid}Columns[co].data === "id" && ${tableid}Columns[co].action === true) {
${tableid}Columns[co].render = function (id) {
let result = ""
if (${allow_
view
}) {
result = '<
a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true" title="View"></i></a
> ';
let result = ""
;
if (${allow_
check
}) {
result = '<
input type="checkbox" class="${tableid}_check" value="' + id + '" id="${tableid}check' + id + '"
> ';
}
if (${allow_edit}) {
if (${allow_view})
result += '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true" title="View"></i></a> ';
if (${allow_edit})
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true" title="Edit"></i></a> '
}
if (${allow_delete})
{
if (${allow_delete})
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true" title="Delete"></i></a>';
}
if (${allow_post})
{
if (${allow_post})
result += '<a href="${url}/' + id + '/post"><i class="fas fa-signs-post" aria-hidden="true" title="Post"></i></a>';
}
if (${allow_unpost})
{
if (${allow_unpost})
result += '<a href="${url}/' + id + '/unpost"><i class="fas fa-delete-left" aria-hidden="true" title="Unpost"></i></a>';
}
return result;
}
//columns[1].order = "order_asc";
...
...
@@ -219,10 +269,8 @@
${tableid}Params.ajax = o${tableid}Url;
}
${structure: filter_scripts}
o${tableid} = $('#${tableid}').DataTable(${tableid}Params);
let tb = tb_array.join(' ');
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
...
...
@@ -240,7 +288,6 @@
$(this).addClass('row_selected');
}
});
$(".${tableid}-control-filter").on('keyup', function (e) {
var code = e.keyCode || e.which;
if (code === 13) {
...
...
@@ -323,7 +370,6 @@
}
});
console.log("Read Data");
$(".${tableid}-control-filter").each(function (e) {
var col_id = $(this).attr("id")
...
...
@@ -345,6 +391,9 @@
});
${structure: btnscripts}
filter_table();
// });
${structure: filter_scripts}
});
</script>
</div>
\ No newline at end of file
opensipkd/models/meta.py
View file @
1a3f80a
from
sqlalchemy.ext.declarative
import
declarative_base
# from sqlalchemy.ext.declarative import declarative_base
from
sqlalchemy.orm
import
declarative_base
from
sqlalchemy.schema
import
MetaData
# Recommended naming convention used by Alembic, as various different database
...
...
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