Commit bb6a6518 by aagusti

penambahan object pada result views

1 parent b58ade88
......@@ -150,6 +150,11 @@ def add_global(event):
event['get_params'] = get_params
event['get_urls'] = get_urls
event['get_csrf_token'] = get_csrf_token
event['get_params'] = get_params
def get_params(request, params, alternate=None, settings=None):
return get_params(params, alternate, settings)
def get_params(params, alternate=None, settings=None):
......@@ -162,7 +167,6 @@ def get_params(params, alternate=None, settings=None):
contoh penggunaan:
get_params('devel', False)
"""
if not settings:
settings = get_settings()
result = settings and params in settings and \
......@@ -175,6 +179,10 @@ def get_params(params, alternate=None, settings=None):
def get_ini(request, var):
return get_ini(var)
def get_ini(var):
settings = get_settings()
if var in settings and settings[var]:
return settings[var]
......@@ -497,6 +505,7 @@ def main(global_config, **settings):
config.add_request_method(disable_responsive, 'disable_responsive',
reify=True)
config.add_request_method(get_ini, 'get_ini', reify=True)
config.add_request_method(get_params, 'get_params', reify=True)
config.add_request_method(get_csrf_token, 'get_csrf_token', reify=True)
# config.add_translation_dirs('opensipkd.base:locale/')
......
$(document).ready(function () {
$('#departemen_nm').bind('typeahead:selected', function (obj, datum, name) {
$('#departemen_id').val(datum.id);
$('#departemen_kd').val(datum.kode);
console.log(datum.kode);
});
$('#departemen_nm').on('input',
function (e) {
let val = $('#departemen_nm').val();
if (val === null || val === "") {
$('#departemen_id').val("");
$('#departemen_kd').val("");
}
});
});
\ No newline at end of file
......@@ -220,6 +220,8 @@ class BaseView(object):
if self.list_schema:
allow_edit = kwargs.get("allow_edit", True)
allow_delete = kwargs.get("allow_delete", True)
allow_post = kwargs.get("allow_delete", False)
allow_unpost = kwargs.get("allow_delete", False)
state_save = kwargs.get("state_save", False)
schema = self.list_schema()
schema = schema.bind(request=self.req)
......@@ -233,7 +235,10 @@ class BaseView(object):
request=self.req,
allow_edit=allow_edit,
allow_delete=allow_delete,
state_save=state_save)
allow_post=allow_post,
allow_unpost=allow_unpost,
state_save=state_save,
)
resources = table.get_widget_resources()
# resources=dict(css="", js="")
return dict(form=table.render(), scripts="", css=resources["css"],
......@@ -251,9 +256,9 @@ class BaseView(object):
return self.route_list()
def next_edit(self, form, **kwargs):
return self.route_list()
return self.route_list(**kwargs)
def view_view(self): # row = query_id(request).first()
def view_view(self, **kwargs): # row = query_id(request).first()
request = self.req
row = self.query_id().first()
if not row:
......@@ -273,11 +278,22 @@ class BaseView(object):
form.set_appstruct(values)
table = self.get_item_table(row)
resources = form.get_widget_resources()
is_object = kwargs.get("is_object", False)
if is_object:
return dict(form=form,
readonly=True,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(readonly=True),
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"]
js=resources["js"],
**kwargs
)
def view_upload(self, exts=('.png', '.ico')):
......@@ -349,10 +365,9 @@ class BaseView(object):
def next_act(self):
url_dict = self.req.matchdict
raise HTTPNotFound
def jasper_response(self, **kwargs):
def pdf_response(self, **kwargs):
from opensipkd.base.tools.report import jasper_export
filename = jasper_export(self.report_file)
return file_response(self.req, filename=filename[0])
......@@ -375,9 +390,7 @@ class BaseView(object):
def list_filter(self, query):
return query
def view_act(self, **kwargs):
url_dict = self.req.matchdict
if url_dict['act'] == 'grid':
def get_list(self):
url = []
if not self.columns:
columns = []
......@@ -416,18 +429,22 @@ class BaseView(object):
query = self.list_filter(query)
row_table = DataTables(self.req.GET, query, columns)
result = row_table.output_result()
# for d in result["data"]:
# for k, v in d.items():
# if k in url and v:
# link = "/".join([self.home, nik_url, v])
# d[k] =f'<a href="{link}" target="_blank">View</a>'
return result
def view_act(self, **kwargs):
url_dict = self.req.matchdict
if url_dict['act'] == 'grid':
return self.get_list()
elif url_dict['act'] == 'csv':
return self.csv_response()
elif url_dict['act'] == 'pdf':
return self.jasper_response()
return self.pdf_response()
else:
return self.next_act()
......@@ -437,6 +454,7 @@ class BaseView(object):
form = self.get_form(self.add_schema, **kwargs)
table = self.get_item_table(**kwargs)
resources = form.get_widget_resources()
is_object = kwargs.get("is_object", False)
if self.req.POST:
if 'save' in self.req.POST:
controls = self.req.POST.items()
......@@ -458,11 +476,21 @@ class BaseView(object):
# log.debug(hasattr(e.field, k))
# if isinstance(f, colander.Date):
# e.cstruct[f] = date_from_str(e.cstruct[f])
if is_object:
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(e.cstruct),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
js=resources["js"],
**kwargs
)
values = dict(c)
row = self.save_request(values)
return self.after_add(row=row, **kwargs)
......@@ -474,12 +502,21 @@ class BaseView(object):
return self.route_list(**kwargs)
values = self.before_add()
form.set_appstruct(values)
if is_object:
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(), table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
def save(self, values, user, row=None):
log.debug("Save")
log.info("Save")
log.debug(values)
values.pop("id", None)
self.ses["old_email"] = user and user.email or None
......@@ -534,6 +571,8 @@ class BaseView(object):
def view_edit(self, **kwargs):
request = self.req
row = self.query_id().first()
is_object = kwargs.get("is_object", False)
if not row:
return self.id_not_found(**kwargs)
if not self.bindings:
......@@ -553,9 +592,17 @@ class BaseView(object):
try:
controls = form.validate(controls)
except ValidationFailure as e:
# log.debug(f"Edit Error: {str(e.error)}")
log.error(f"Edit Error: {str(e.error)}")
# log.debug(f"Edit Data: {e.cstruct}")
form.set_appstruct(e.cstruct)
if is_object:
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
......@@ -569,6 +616,14 @@ class BaseView(object):
values = self.get_values(row)
form.set_appstruct(values)
form = self.before_edit(form)
if is_object:
return dict(form=form,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(), table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
js=resources["js"])
......@@ -576,10 +631,12 @@ class BaseView(object):
def before_delete(self, row):
pass
def view_delete(self):
def view_delete(self, **kwargs):
request = self.req
q = self.query_id()
row = q.first()
is_object = kwargs.get("is_object", False)
if not row:
return self.id_not_found()
if not self.bindings:
......@@ -587,7 +644,12 @@ class BaseView(object):
if request.POST:
if 'delete' in request.POST:
msg = self.delete_msg(row)
try:
self.before_delete(row)
except Exception as e:
self.ses.flash(e, "error")
return self.route_list()
q.delete()
self.db_session.flush()
request.session.flash(msg)
......@@ -597,6 +659,15 @@ class BaseView(object):
table = self.get_item_table(row)
resources = form.get_widget_resources()
form.set_appstruct(self.get_values(row))
if is_object:
return dict(form=form,
readonly=True,
table=table and table.render() or None,
scripts=self.form_scripts,
css=resources["css"],
js=resources["js"],
**kwargs
)
return dict(form=form.render(readonly=True),
table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"],
......
......@@ -35,6 +35,14 @@ def departemen_widget(node, kw):
return widget.Select2Widget(values=values)
def departemen_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 AddSchema(colander.Schema):
parent_id = colander.SchemaNode(
colander.Integer(),
......
......@@ -114,6 +114,8 @@ class DeTable(field.Field):
allow_edit=True,
allow_delete=True,
allow_view=True,
allow_post=False,
allow_unpost=False,
**kw
):
# field.Field.__init__(self, schema, **kw)
......@@ -165,6 +167,8 @@ class DeTable(field.Field):
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)
table_widget = getattr(schema, "widget", None)
if table_widget is None:
table_widget = widget.TableWidget()
......
......@@ -19,6 +19,8 @@
allow_edit allow_edit|field.allow_edit;
allow_delete allow_delete|field.allow_delete;
allow_view allow_view|field.allow_view;
allow_post allow_post|field.allow_post;
allow_unpost allow_unpost|field.allow_unpost;
state_save state_save|field.state_save;
"
tal:attributes="style style; class css_class; attributes|field.widget.attributes|{};"
......@@ -97,13 +99,19 @@
${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"></i></a>&nbsp;';
result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true" title="View"></i></a>&nbsp;';
}
if (${allow_edit}) {
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true"></i></a>&nbsp;'
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true" title="Edit"></i></a>&nbsp;'
}
if (${allow_delete}) {
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true"></i></a>';
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true" title="Delete"></i></a>';
}
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}) {
result += '<a href="${url}/' + id + '/unpost"><i class="fas fa-delete-left" aria-hidden="true" title="Unpost"></i></a>';
}
return result;
}
......
......@@ -10,9 +10,10 @@ from sqlalchemy.orm import (
backref
)
from . import ResCompany
from . import ResCompany, DefaultModel, User
from ..models import DBSession, Base
from ..models import (NamaModel,
from ..models import (
NamaModel,
TABLE_ARGS)
......@@ -57,59 +58,64 @@ class Departemen(Base, NamaModel):
def get_list(cls):
return DBSession.query(cls.id, cls.nama).order_by(cls.nama).all()
# class DepartemenUser(Base, DefaultModel):
# __tablename__ = 'departemen_user'
# user_id = Column(Integer, ForeignKey(User.id), unique=True)
# departemen_id = Column(Integer, ForeignKey(Departemen.id))
# sub_departemen = Column(SmallInteger, nullable=True)
# departemen = relationship("Departemen", backref="user_departemen")
# user = relationship("User", backref="user_departemen")
# __table_args__ = TABLE_ARGS
#
# @classmethod
# def query_user_id(cls, user_id):
# return DBSession.query(cls).filter_by(user_id=user_id)
#
# @classmethod
# def get_kode(cls, user_id):
# row = cls.query_user_id(user_id).first()
# return row and row.departemen.kode or None
#
# @classmethod
# def ids(cls, user_id):
# r = ()
# departemens = DBSession.query(cls.departemen_id, cls.sub_departemen, Departemen.kode
# ).join(Departemen).filter(cls.departemen_id == Departemen.id,
# cls.user_id == user_id).all()
# for departemen in departemens:
# if departemen.sub_departemen:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode.ilike('%s%%' % departemen.kode)).all()
# else:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode == departemen.kode).all()
# for i in range(len(rows)):
# r = r + (rows[i])
# return r
#
# @classmethod
# def departemen_granted(cls, user_id, departemen_id):
# departemens = DBSession.query(cls.departemen_id, cls.sub_departemen, Departemen.kode
# ).join(Departemen).filter(cls.departemen_id == Departemen.id,
# cls.user_id == user_id).all()
# for departemen in departemens:
# if departemen.sub_departemen:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode.ilike('%s%%' % departemen.kode)).all()
# else:
# rows = DBSession.query(Departemen.id).filter(Departemen.kode == departemen.kode).all()
# for i in range(len(rows)):
# if int(rows[i][0]) == int(departemen_id):
# return True
# return False
#
# @classmethod
# def get_filtered(cls, request):
# filter = "'%s' LIKE public.departemens.kode||'%%'" % request.session['departemen_kd']
# q1 = DBSession.query(Departemen.kode, UserDepartemen.sub_departemen).join(UserDepartemen). \
# filter(UserDepartemen.user_id == request.user.id,
# UserDepartemen.departemen_id == Departemen.id,
# text(filter))
# return q1.first()
class DepartemenUser(Base, DefaultModel):
__tablename__ = 'departemen_user'
user_id = Column(Integer, ForeignKey(User.id), unique=True)
departemen_id = Column(Integer, ForeignKey(Departemen.id))
sub_departemen = Column(SmallInteger, nullable=True)
departemen = relationship("Departemen", backref="user_departemen")
user = relationship("User", backref="user_departemen")
__table_args__ = TABLE_ARGS
@classmethod
def query_user_id(cls, user_id):
return DBSession.query(cls).filter_by(user_id=user_id)
@classmethod
def get_kode(cls, user_id):
row = cls.query_user_id(user_id).first()
return row and row.departemen.kode or None
@classmethod
def ids(cls, user_id):
r = ()
departemens = DBSession.query(cls.departemen_id, cls.sub_departemen, Departemen.kode
).join(Departemen).filter(cls.departemen_id == Departemen.id,
cls.user_id == user_id).all()
for departemen in departemens:
if departemen.sub_departemen:
rows = DBSession.query(Departemen.id).filter(
Departemen.kode.ilike('%s%%' % departemen.kode)).all()
else:
rows = DBSession.query(Departemen.id).filter(
Departemen.kode == departemen.kode).all()
for i in range(len(rows)):
r = r + (rows[i])
return r
@classmethod
def departemen_granted(cls, user_id, departemen_id):
departemens = DBSession.query(cls.departemen_id, cls.sub_departemen, Departemen.kode
).join(Departemen).filter(cls.departemen_id == Departemen.id,
cls.user_id == user_id).all()
for departemen in departemens:
if departemen.sub_departemen:
rows = DBSession.query(Departemen.id).filter(
Departemen.kode.ilike('%s%%' % departemen.kode)).all()
else:
rows = DBSession.query(Departemen.id).filter(
Departemen.kode == departemen.kode).all()
for i in range(len(rows)):
if int(rows[i][0]) == int(departemen_id):
return True
return False
# @classmethod
# def get_filtered(cls, request):
# filter = "'%s' LIKE public.departemens.kode||'%%'" % request.session['departemen_kd']
# q1 = DBSession.query(Departemen.kode, UserDepartemen.sub_departemen).join(UserDepartemen). \
# filter(UserDepartemen.user_id == request.user.id,
# UserDepartemen.departemen_id == Departemen.id,
# text(filter))
# return q1.first()
import os
from setuptools import setup, find_packages
here = os.path.abspath(os.path.dirname(__file__))
......@@ -15,6 +16,8 @@ requires = [
'colander==1.8.3',
'pyramid',
'pyramid_tm',
"pyramid_beaker",
"pyramid_mailer",
'SQLAlchemy',
'transaction',
'waitress',
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!