Commit b54f3f1a by aa.gusti

perbaikan form routes

1 parent 25e2a5fb
import logging
import colander import colander
from deform import (widget, ) from deform import (widget, )
from opensipkd.models import (DBSession, Route, )
from opensipkd.tools.buttons import btn_view, btn_edit, btn_delete from opensipkd.tools.buttons import btn_view, btn_edit, btn_delete
from pyramid.view import view_config from pyramid.view import view_config
from sqlalchemy.orm import aliased
from . import BaseView, get_urls
_logging = logging.getLogger(__name__)
@colander.deferred
def route_widget(node, kw):
values = kw.get('route_list', [])
return widget.AutocompleteInputWidget(values=values, placeholder="Pilih Induk")
from . import BaseView
from opensipkd.models import (DBSession, Route, ) def route_widget_form():
return widget.AutocompleteInputWidget(
size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/departemen_form.js"}),
)
class EditSchema(colander.Schema): class EditSchema(colander.Schema):
...@@ -14,19 +32,84 @@ class EditSchema(colander.Schema): ...@@ -14,19 +32,84 @@ class EditSchema(colander.Schema):
colander.String(), title='Path') colander.String(), title='Path')
nama = colander.SchemaNode( nama = colander.SchemaNode(
colander.String(), title='Nama') colander.String(), title='Nama')
module = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama Aplikasi Untuk Filtering"
)
is_menu = colander.SchemaNode(
colander.Integer(),
missing=colander.drop,
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
label="Checklist jika path merupakan Menu")
parent_id = colander.SchemaNode(
colander.Integer(),
# widget=widget.HiddenWidget,
missing=colander.drop,
oid="parent_id"
)
parent_nm = colander.SchemaNode(
colander.String(),
widget=route_widget,
missing=colander.drop,
oid="parent_nm"
)
order_id = colander.SchemaNode(
colander.Integer(),
missing=colander.drop,
description="Pengurutan Menu")
permission = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama permission untuk menentukan hak akses"
)
class_view = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama file tanpa extension yang berisi class Views")
def_func = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama fungsi dalam class"
)
template = colander.SchemaNode(
colander.String(),
missing=colander.drop,
default="form.pt",
descripton="Nama File template atau 'json' atau renderer")
icon = colander.SchemaNode(
colander.String(),
missing=colander.drop,
)
type = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
label="Checklist jika type url adalah json")
status = colander.SchemaNode(
colander.String(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"))
alias = aliased(Route)
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode( id = colander.SchemaNode(
colander.Integer(), widget=widget.HiddenWidget(), visible=False) colander.Integer(), widget=widget.HiddenWidget(), visible=False)
kode = colander.SchemaNode( kode = colander.SchemaNode(
colander.String()) colander.String())
parent = colander.SchemaNode(
colander.String(),
field=alias.kode)
nama = colander.SchemaNode( nama = colander.SchemaNode(
colander.String(), title='Nama') colander.String(), title='Nama')
path = colander.SchemaNode( path = colander.SchemaNode(
colander.String(), title='Path') colander.String(), title='Path')
type = colander.SchemaNode( type = colander.SchemaNode(
colander.String(), width="50pt") colander.String(), width="50pt")
status = colander.SchemaNode(
colander.Boolean(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"))
class Views(BaseView): class Views(BaseView):
...@@ -35,17 +118,35 @@ class Views(BaseView): ...@@ -35,17 +118,35 @@ class Views(BaseView):
self.form_params = dict(scripts="") self.form_params = dict(scripts="")
self.list_url = 'routes' self.list_url = 'routes'
self.list_route = 'routes' self.list_route = 'routes'
self.list_buttons=(btn_view, btn_edit, btn_delete) self.list_buttons = (btn_view, btn_edit, btn_delete)
# self.add_schema = AddSchema # self.add_schema = AddSchema
self.edit_schema = EditSchema self.edit_schema = EditSchema
self.table = Route self.table = Route
self.list_schema = ListSchema self.list_schema = ListSchema
self.form_scripts = """
$('#parent_nm').bind('typeahead:selected', function (obj, datum, name) {
$('#parent_id').val(datum.id);
$('#parent_kd').val(datum.kode);
console.log(datum.kode);
});
$('#parent_nm').on('input',
function (e) {
let val = $('#parent_nm').val();
if (val === null || val === "") {
$('#parent_id').val("");
$('#parent_kd').val("");
}
});
"""
@view_config( @view_config(
route_name='routes', renderer='templates/table.pt', route_name='routes', renderer='templates/table.pt',
permission='edit-title') permission='edit-title')
def view_list(self): def view_list(self):
return super().view_list() kwargs = {"allow_view": False,
"allow_delete": False}
return super().view_list(**kwargs)
def form_validator(self, form, values): def form_validator(self, form, values):
def err_nama(): def err_nama():
...@@ -89,7 +190,7 @@ class Views(BaseView): ...@@ -89,7 +190,7 @@ class Views(BaseView):
@view_config( @view_config(
route_name='routes-act', renderer='json', permission='edit-title') route_name='routes-act', renderer='json', permission='edit-title')
def routes_act(self): def view_act(self):
return super().view_act() return super().view_act()
@view_config( @view_config(
...@@ -97,3 +198,33 @@ class Views(BaseView): ...@@ -97,3 +198,33 @@ class Views(BaseView):
permission='edit-title') permission='edit-title')
def view_edit(self): def view_edit(self):
return super().view_edit() return super().view_edit()
def next_act(self, **kwargs):
row = kwargs.get("row")
params = self.req.params
url_dict = self.req.matchdict
if url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
q = Route.query(). \
filter(Route.status == 1,
Route.nama.ilike('%%%s%%' % term)) \
.order_by(Route.nama)
r = []
for k in q.all():
d = dict(id=k.id, value=k.nama, kode=k.kode, nama=k.nama)
r.append(d)
return r
def get_bindings(self, row=None):
return {"route_list": get_urls(f"{self.req.route_url('routes')}/hon/act")}
def get_values(self, row, istime=False, null=False):
values = super().get_values(row, istime, null)
if row.parent_id:
route = Route.query_id(row.parent_id).first()
values["parent_nm"] = route and route.nama or ""
_logging.debug(values)
return values
def list_join(self, query, **kwargs):
return query.outerjoin(alias, Route.parent_id == alias.id)
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!