Commit 46c58fc4 by aagusti

perbaikan form

1 parent 5e03bef7
...@@ -6,7 +6,7 @@ try: ...@@ -6,7 +6,7 @@ try:
from urllib import (urlencode, quote, quote_plus, ) from urllib import (urlencode, quote, quote_plus, )
except ImportError: except ImportError:
from urllib.parse import (urlencode, quote, quote_plus, ) from urllib.parse import (urlencode, quote, quote_plus, )
from pyramid.events import NewRequest
from pyramid.config import Configurator from pyramid.config import Configurator
from pyramid_beaker import session_factory_from_settings from pyramid_beaker import session_factory_from_settings
from pyramid.events import subscriber from pyramid.events import subscriber
...@@ -82,6 +82,16 @@ titles = {} ...@@ -82,6 +82,16 @@ titles = {}
# return HTTPFound(location=noslash_path) # return HTTPFound(location=noslash_path)
# return self.notfound_view(context, request) # 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 # https://groups.google.com/forum/#!topic/pylons-discuss/QIj4G82j04c
def has_permission_(request, perm_names, context=None): def has_permission_(request, perm_names, context=None):
...@@ -396,6 +406,8 @@ def main(global_config, **settings): ...@@ -396,6 +406,8 @@ def main(global_config, **settings):
config = cfg config = cfg
config.set_security_policy(MySecurityPolicy(settings["session.secret"])) 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_user, 'user', reify=True)
config.add_request_method(get_title, 'title', reify=True) config.add_request_method(get_title, 'title', reify=True)
config.add_request_method(get_company, 'company', reify=True) config.add_request_method(get_company, 'company', reify=True)
......
...@@ -179,19 +179,23 @@ class BaseView(object): ...@@ -179,19 +179,23 @@ class BaseView(object):
del self.req.session[session_name] del self.req.session[session_name]
return r return r
def view_list(self, arg=None): def view_list(self, **kwargs):
if self.list_schema: if self.list_schema:
allow_edit=kwargs.get("allow_edit", True)
allow_delete=kwargs.get("allow_delete", True)
table = DeTable(self.list_schema(), table = DeTable(self.list_schema(),
action=self.req.route_url(self.list_route), action=self.req.route_url(self.list_route),
action_suffix="/grid/act", action_suffix="/grid/act",
buttons=self.list_buttons, buttons=self.list_buttons,
request=self.req) request=self.req,
allow_edit=allow_edit,
allow_delete=allow_delete)
resources = table.get_widget_resources() resources = table.get_widget_resources()
# resources=dict(css="", js="") # resources=dict(css="", 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"])
arg = arg and arg or {} arg = kwargs and kwargs or {}
arg.update(url=self.list_url, col_defs=self.list_col_defs, arg.update(url=self.list_url, col_defs=self.list_col_defs,
cols=self.list_cols, buttons=self.list_buttons) cols=self.list_cols, buttons=self.list_buttons)
return arg return arg
...@@ -285,7 +289,7 @@ class BaseView(object): ...@@ -285,7 +289,7 @@ class BaseView(object):
if 'save' in self.req.POST: if 'save' in self.req.POST:
controls = self.req.POST.items() controls = self.req.POST.items()
try: try:
controls = form.validate(controls) c = form.validate(controls)
except ValidationFailure as e: except ValidationFailure as e:
# value = self.validation_failure(e.cstruct) # value = self.validation_failure(e.cstruct)
# value.update(self.before_add()) # value.update(self.before_add())
...@@ -294,7 +298,7 @@ class BaseView(object): ...@@ -294,7 +298,7 @@ class BaseView(object):
table=table and table.render() or None, table=table and table.render() or None,
scripts=self.form_scripts, css=resources["css"], scripts=self.form_scripts, css=resources["css"],
js=resources["js"]) js=resources["js"])
values = dict(controls) values = dict(c)
row = self.save_request(values) row = self.save_request(values)
self.after_add(row, values) self.after_add(row, values)
elif "cancel" in self.req.POST or 'batal' in self.req.POST: elif "cancel" in self.req.POST or 'batal' in self.req.POST:
......
...@@ -34,8 +34,22 @@ class EditSchema(AddSchema): ...@@ -34,8 +34,22 @@ class EditSchema(AddSchema):
oid="partner_id") oid="partner_id")
class ListSchema(NamaSchema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), missing=colander.drop, visible=False) 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): class ViewCompany(BaseView):
......
import colander import colander
from deform import (widget, ) from deform import (widget, )
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from . import widget_os from . import widget_os
from .provinsi import provinsi_widget from .provinsi import provinsi_widget
from opensipkd.models import DBSession, ResDati2, kategori_dati2, ResProvinsi from opensipkd.models import DBSession, ResDati2, kategori_dati2, ResProvinsi
from ..views import BaseView from ..views import BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah dati2 gagal' SESS_ADD_FAILED = 'Tambah dati2 gagal'
SESS_EDIT_FAILED = 'Edit dati2 gagal' SESS_EDIT_FAILED = 'Edit dati2 gagal'
...@@ -43,11 +45,11 @@ class EditSchema(AddSchema): ...@@ -43,11 +45,11 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): 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") kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama") nama = colander.SchemaNode(colander.String(), title="Nama")
provinsi = colander.SchemaNode(colander.String(), field=ResProvinsi.nama) provinsi = colander.SchemaNode(colander.String(), field=ResProvinsi.nama)
status = colander.SchemaNode(colander.Integer(), width="30pt")
class ViewDati2(BaseView): class ViewDati2(BaseView):
......
...@@ -99,11 +99,12 @@ class EditSchema(AddSchema): ...@@ -99,11 +99,12 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): 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') kode = colander.SchemaNode(colander.String(), title="Kode", width='100pt')
nama = colander.SchemaNode(colander.String(), title="Nama") nama = colander.SchemaNode(colander.String(), title="Nama")
status = colander.SchemaNode(colander.Boolean(), title="Status", width='50pt') status = colander.SchemaNode(colander.Boolean(), title="Status", width='50pt',
level_id = colander.SchemaNode(colander.String(), title="Level", width='50pt') widget=widget.CheckboxWidget())
level_id = colander.SchemaNode(colander.Integer(), title="Level", width='50pt')
parent = colander.SchemaNode(colander.String(), title="Induk", width='200pt') parent = colander.SchemaNode(colander.String(), title="Induk", width='200pt')
......
import colander import colander
from deform import (widget, ) from deform import (widget, )
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from .dati2 import dati2_widget from .dati2 import dati2_widget
...@@ -7,6 +8,7 @@ from .kecamatan import kecamatan_widget ...@@ -7,6 +8,7 @@ from .kecamatan import kecamatan_widget
from .provinsi import provinsi_widget from .provinsi import provinsi_widget
from opensipkd.models import DBSession, ResDesa, kategori_desa, ResKecamatan, ResProvinsi, ResDati2 from opensipkd.models import DBSession, ResDesa, kategori_desa, ResKecamatan, ResProvinsi, ResDati2
from ..views import BaseView from ..views import BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah desa gagal' SESS_ADD_FAILED = 'Tambah desa gagal'
SESS_EDIT_FAILED = 'Edit desa gagal' SESS_EDIT_FAILED = 'Edit desa gagal'
...@@ -56,11 +58,11 @@ class EditSchema(AddSchema): ...@@ -56,11 +58,11 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): 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") kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama") nama = colander.SchemaNode(colander.String(), title="Nama")
kecamatan = colander.SchemaNode(colander.String(), field=ResKecamatan.nama) kecamatan = colander.SchemaNode(colander.String(), field=ResKecamatan.nama)
status = colander.SchemaNode(colander.Integer(), width="30pt")
class ViewDesa(BaseView): class ViewDesa(BaseView):
......
...@@ -35,8 +35,22 @@ class EditSchema(AddSchema): ...@@ -35,8 +35,22 @@ class EditSchema(AddSchema):
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget()) widget=widget.HiddenWidget())
class ListSchema(NamaSchema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(),visible=False) 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): class Views(BaseView):
def __init__(self, request): def __init__(self, request):
......
...@@ -40,7 +40,7 @@ class EditSchema(AddSchema): ...@@ -40,7 +40,7 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), visible=False) id = colander.SchemaNode(colander.Integer(), visible=False, title="Action")
group_name = colander.SchemaNode( group_name = colander.SchemaNode(
colander.String(), ) colander.String(), )
description = colander.SchemaNode(colander.String()) description = colander.SchemaNode(colander.String())
......
import colander
import os import os
import colander
from deform import (widget, ) 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, \
from opensipkd.tools.report import csv_response, open_rml_pdf, open_rml_row, pdf_response pdf_response
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from .partner_base import NamaSchema
from opensipkd.models import ( from opensipkd.models import (
DBSession, DBSession,
Jabatan, Jabatan,
Eselon, Departemen Eselon, Departemen
) )
from .partner_base import NamaSchema
from ..views import BaseView, deferred_jenis from ..views import BaseView, deferred_jenis
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah jabatan gagal' SESS_ADD_FAILED = 'Tambah jabatan gagal'
SESS_EDIT_FAILED = 'Edit jabatan gagal' SESS_EDIT_FAILED = 'Edit jabatan gagal'
JENIS = ((1, 'Struktural'), JENIS = ((1, _('structural', default='Structural')),
(2, 'Fungsional'), (2, _('functional', default='Functional')),
(3, 'Keuangan'), (3, _('finance', default='Finance')),
) )
...@@ -50,12 +54,12 @@ class AddSchema(colander.Schema): ...@@ -50,12 +54,12 @@ class AddSchema(colander.Schema):
colander.Integer(), colander.Integer(),
oid="jenis", oid="jenis",
widget=deferred_jenis, widget=deferred_jenis,
title="Jenis") title=_("type", default="Jenis"))
eselon_id = colander.SchemaNode( eselon_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
oid="eselon_id", oid="eselon_id",
widget=deferred_eselon, widget=deferred_eselon,
title="Eselon") title=_("eselon", default="Eselon"))
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Boolean(), colander.Boolean(),
oid="status") oid="status")
...@@ -67,9 +71,22 @@ class EditSchema(AddSchema): ...@@ -67,9 +71,22 @@ class EditSchema(AddSchema):
widget=widget.HiddenWidget()) widget=widget.HiddenWidget())
class ListSchema(NamaSchema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), id = colander.SchemaNode(colander.String(), title="Action")
visible=False) 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): class ViewJabatan(BaseView):
...@@ -84,7 +101,6 @@ class ViewJabatan(BaseView): ...@@ -84,7 +101,6 @@ class ViewJabatan(BaseView):
self.list_schema = ListSchema self.list_schema = ListSchema
# self.list_buttons = (btn_view, btn_add, btn_edit, btn_delete, btn_close) # self.list_buttons = (btn_view, btn_add, btn_edit, btn_delete, btn_close)
def get_bindings(self, row=None): def get_bindings(self, row=None):
return dict(daftar_jenis=JENIS, return dict(daftar_jenis=JENIS,
daftar_eselon=daftar_eselon()) daftar_eselon=daftar_eselon())
...@@ -124,7 +140,8 @@ class ViewJabatan(BaseView): ...@@ -124,7 +140,8 @@ class ViewJabatan(BaseView):
elif url_dict['act'] == 'hon': elif url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or '' 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)). \ filter(Jabatan.nama.ilike('%%%s%%' % term)). \
order_by(Jabatan.nama) order_by(Jabatan.nama)
rows = q.all() rows = q.all()
...@@ -147,7 +164,8 @@ class ViewJabatan(BaseView): ...@@ -147,7 +164,8 @@ class ViewJabatan(BaseView):
elif url_dict['act'] == 'headofnama': elif url_dict['act'] == 'headofnama':
term = 'term' in params and params['term'] or '' 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)). \ filter(Jabatan.nama.ilike('%%%s%%' % term)). \
order_by(Jabatan.nama) order_by(Jabatan.nama)
rows = q.all() rows = q.all()
...@@ -160,7 +178,8 @@ class ViewJabatan(BaseView): ...@@ -160,7 +178,8 @@ class ViewJabatan(BaseView):
else: else:
nama_jenis = 'Fungsional' 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) r.append(d)
return r return r
elif url_dict['act'] == 'csv': elif url_dict['act'] == 'csv':
...@@ -186,14 +205,18 @@ class ViewJabatan(BaseView): ...@@ -186,14 +205,18 @@ class ViewJabatan(BaseView):
rows = [] rows = []
for r in query.all(): 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) rows.append(s)
pdf, filename = open_rml_pdf(path + '/jabatan.rml', rows=rows, pdf, filename = open_rml_pdf(path + '/jabatan.rml', rows=rows,
company=request.company, company=request.company,
departement=request.session['departemen_nm'], departement=request.session[
'departemen_nm'],
address=request.address, 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') periode='01-01-2017 s.d 31-12-2017')
return pdf_response(request, pdf, filename) return pdf_response(request, pdf, filename)
...@@ -237,7 +260,8 @@ class ViewJabatan(BaseView): ...@@ -237,7 +260,8 @@ class ViewJabatan(BaseView):
else: else:
jabatan = None 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() found = q.first()
if jabatan: if jabatan:
if found and found.id != jabatan.id: if found and found.id != jabatan.id:
......
import colander import colander
from deform import (widget, ) from deform import (widget, )
from pyramid.i18n import TranslationStringFactory
from opensipkd.base.views.provinsi import provinsi_widget from opensipkd.base.views.provinsi import provinsi_widget
from opensipkd.models import DBSession, ResKecamatan, ResDati2, ResProvinsi from opensipkd.models import DBSession, ResKecamatan, ResDati2, ResProvinsi
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
...@@ -10,6 +12,7 @@ from ..views import BaseView ...@@ -10,6 +12,7 @@ from ..views import BaseView
SESS_ADD_FAILED = 'Tambah kecamatan gagal' SESS_ADD_FAILED = 'Tambah kecamatan gagal'
SESS_EDIT_FAILED = 'Edit kecamatan gagal' SESS_EDIT_FAILED = 'Edit kecamatan gagal'
_ = TranslationStringFactory("opensipkd")
@colander.deferred @colander.deferred
...@@ -52,12 +55,11 @@ class EditSchema(AddSchema): ...@@ -52,12 +55,11 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, id = colander.SchemaNode(colander.Integer(),
orderable=False, visible=False) title=_("action", default="Action"))
kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode") kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama") nama = colander.SchemaNode(colander.String(), title="Nama")
kabupaten = colander.SchemaNode(colander.String(), field=ResDati2.nama) kabupaten = colander.SchemaNode(colander.String(), field=ResDati2.nama)
status = colander.SchemaNode(colander.Integer(), width="30pt")
class Views(BaseView): class Views(BaseView):
...@@ -114,7 +116,7 @@ class Views(BaseView): ...@@ -114,7 +116,7 @@ class Views(BaseView):
renderer='templates/table.pt', renderer='templates/table.pt',
permission='kecamatan') permission='kecamatan')
def view_list(self): 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', @view_config(route_name='kecamatan-act', renderer='json',
permission='view') permission='view')
......
...@@ -5,6 +5,7 @@ from datatables import ColumnDT ...@@ -5,6 +5,7 @@ from datatables import ColumnDT
from deform import Form, widget from deform import Form, widget
from opensipkd.tools.buttons import btn_view, btn_delete from opensipkd.tools.buttons import btn_view, btn_delete
from pyramid.httpexceptions import HTTPFound from pyramid.httpexceptions import HTTPFound
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config from pyramid.view import view_config
from opensipkd.base import DBSession from opensipkd.base import DBSession
...@@ -34,12 +35,12 @@ class EditSchema(AddSchema): ...@@ -34,12 +35,12 @@ class EditSchema(AddSchema):
widget=widget.HiddenWidget(), widget=widget.HiddenWidget(),
) )
_ = TranslationStringFactory("opensipkd")
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), id = colander.SchemaNode(colander.Integer(),
missing=colander.drop, title=_("action", default="Action"))
widget=widget.HiddenWidget(),
visible=False)
created_at = colander.SchemaNode( created_at = colander.SchemaNode(
colander.DateTime()) colander.DateTime())
logger = colander.SchemaNode( logger = colander.SchemaNode(
......
import colander import colander
from deform import (widget, ) from deform import (widget, )
from pyramid.i18n import TranslationStringFactory
from opensipkd.models import Menus, flush from opensipkd.models import Menus, flush
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from ..views import ColumnDT, DataTables, BaseView from ..views import ColumnDT, DataTables, BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah menu gagal' SESS_ADD_FAILED = 'Tambah menu gagal'
SESS_EDIT_FAILED = 'Edit menu gagal' SESS_EDIT_FAILED = 'Edit menu gagal'
...@@ -70,7 +73,8 @@ class EditSchema(AddSchema): ...@@ -70,7 +73,8 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): 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') kode = colander.SchemaNode(colander.String(), title="Kode", width='100pt')
nama = colander.SchemaNode(colander.String(), title="Nama") nama = colander.SchemaNode(colander.String(), title="Nama")
status = colander.SchemaNode(colander.Boolean(), title="Status", status = colander.SchemaNode(colander.Boolean(), title="Status",
......
...@@ -7,6 +7,7 @@ from opensipkd.models import ( ...@@ -7,6 +7,7 @@ from opensipkd.models import (
DBSession, DBSession,
Parameter) Parameter)
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
kode = colander.SchemaNode( kode = colander.SchemaNode(
colander.String(), colander.String(),
...@@ -32,7 +33,31 @@ class EditSchema(AddSchema): ...@@ -32,7 +33,31 @@ class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), id = colander.SchemaNode(colander.String(),
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget(readonly=True), 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): class Views(BaseView):
...@@ -44,7 +69,7 @@ class Views(BaseView): ...@@ -44,7 +69,7 @@ class Views(BaseView):
self.add_schema = AddSchema self.add_schema = AddSchema
self.edit_schema = EditSchema self.edit_schema = EditSchema
self.table = Parameter self.table = Parameter
self.list_schema = EditSchema self.list_schema = ListSchema
@view_config(route_name='parameter', renderer='templates/table.pt', @view_config(route_name='parameter', renderer='templates/table.pt',
permission='user-edit') permission='user-edit')
......
...@@ -4,6 +4,7 @@ import colander ...@@ -4,6 +4,7 @@ import colander
from deform import ( from deform import (
widget, widget,
) )
from pyramid.i18n import TranslationStringFactory
from pyramid.view import ( from pyramid.view import (
view_config, view_config,
) )
...@@ -19,6 +20,7 @@ from opensipkd.models import DBSession, Partner ...@@ -19,6 +20,7 @@ from opensipkd.models import DBSession, Partner
from .. import partner_idcard_folder from .. import partner_idcard_folder
from ..views import BaseView from ..views import BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah partner gagal' SESS_ADD_FAILED = 'Tambah partner gagal'
SESS_EDIT_FAILED = 'Edit partner gagal' SESS_EDIT_FAILED = 'Edit partner gagal'
...@@ -54,16 +56,26 @@ class EditSchema(AddSchema): ...@@ -54,16 +56,26 @@ class EditSchema(AddSchema):
) )
class ListSchema(NamaSchema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), id = colander.SchemaNode(colander.Integer(),
missing=colander.drop, title=_("action", default="Action"))
widget=widget.HiddenWidget(), 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( email = colander.SchemaNode(
colander.String(), colander.String(),
oid="email") oid="email")
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Boolean(), colander.Boolean(),
widget=widget.CheckboxWidget(),
oid="status") oid="status")
......
...@@ -6,7 +6,8 @@ from pyramid.view import (view_config, ) ...@@ -6,7 +6,8 @@ from pyramid.view import (view_config, )
from sqlalchemy import or_ from sqlalchemy import or_
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from opensipkd.models import DBSession as PartnerDBSession, DBSession, ResCompany from opensipkd.models import DBSession as PartnerDBSession, DBSession, \
ResCompany
from opensipkd.models import Departemen, Jabatan from opensipkd.models import Departemen, Jabatan
from opensipkd.models import Partner, PartnerDepartemen from opensipkd.models import Partner, PartnerDepartemen
from opensipkd.tools import dmy, date_from_str from opensipkd.tools import dmy, date_from_str
...@@ -65,11 +66,11 @@ class AddSchema(colander.Schema): ...@@ -65,11 +66,11 @@ class AddSchema(colander.Schema):
mulai = colander.SchemaNode( mulai = colander.SchemaNode(
colander.String(), colander.String(),
oid="mulai", oid="mulai",
widget=widget.TextInputWidget(css_class="date")) widget=widget.DateInputWidget(format="dd-mm-yyyy"))
selesai = colander.SchemaNode( selesai = colander.SchemaNode(
colander.String(), colander.String(),
oid="selesai", oid="selesai",
widget=widget.TextInputWidget(css_class="date")) widget=widget.DateInputWidget(format="dd-mm-yyyy"))
class EditSchema(AddSchema): class EditSchema(AddSchema):
...@@ -78,108 +79,121 @@ class EditSchema(AddSchema): ...@@ -78,108 +79,121 @@ class EditSchema(AddSchema):
widget=widget.HiddenWidget()) widget=widget.HiddenWidget())
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), title="Action")
nama = colander.SchemaNode(
colander.String(), field=Partner.nama)
mulai = colander.SchemaNode(
colander.String())
selesai = colander.SchemaNode(
colander.String())
class ViewPartner(BaseView): class ViewPartner(BaseView):
def __init__(self, request): def __init__(self, request):
super(ViewPartner, self).__init__(request) super(ViewPartner, self).__init__(request)
self.form_scripts = """ self.list_schema = ListSchema
$(document).ready(function () { self.table = PartnerDepartemen
self.add_schema = AddSchema
$('#pegawai_nm').typeahead({ self.edit_schema = EditSchema
"hint" : true, # self.form_scripts = """
"highlight": true, # $(document).ready(function () {
"minLength": 1, #
"remote" : { # $('#pegawai_nm').typeahead({
url: "/partner/hon/act?term=%QUERY", # "hint" : true,
beforeSend: function () { # "highlight": true,
$('#partner_nm').addClass("loading"); # "minLength": 1,
}, # "remote" : {
filter: function(parsedResponse){ # url: "/partner/hon/act?term=%QUERY",
$('#partner_nm').removeClass('loading'); # beforeSend: function () {
return parsedResponse; # $('#partner_nm').addClass("loading");
} # },
}, # filter: function(parsedResponse){
},{ # $('#partner_nm').removeClass('loading');
"name" : 'partner_nm', # return parsedResponse;
"displayKey": 'value', # }
}); # },
# },{
$('#partner_nm').bind('typeahead:selected', function(obj, datum, name) { # "name" : 'partner_nm',
$('#partner_id').val(datum.id); # "displayKey": 'value',
$('#partner_nm').val(datum.nama); # });
}); #
# $('#partner_nm').bind('typeahead:selected', function(obj, datum, name) {
$('#departemen_nm').typeahead({ # $('#partner_id').val(datum.id);
"hint" : true, # $('#partner_nm').val(datum.nama);
"highlight": true, # });
"minLength": 1, #
"remote" : { # $('#departemen_nm').typeahead({
url: "/departemen/hon/act?term=%QUERY", # "hint" : true,
beforeSend: function () { # "highlight": true,
$('#departemen_nm').addClass("loading"); # "minLength": 1,
}, # "remote" : {
filter: function(parsedResponse){ # url: "/departemen/hon/act?term=%QUERY",
$('#departemen_nm').removeClass('loading'); # beforeSend: function () {
return parsedResponse; # $('#departemen_nm').addClass("loading");
} # },
}, # filter: function(parsedResponse){
},{ # $('#departemen_nm').removeClass('loading');
"name" : 'departemen_nm', # return parsedResponse;
"displayKey": 'value', # }
}); # },
# },{
$('#departemen_nm').bind('typeahead:selected', function(obj, datum, name) { # "name" : 'departemen_nm',
$('#departemen_id').val(datum.id); # "displayKey": 'value',
}); # });
#
# $('#departemen_nm').bind('typeahead:selected', function(obj, datum, name) {
# $('#departemen_id').val(datum.id);
$('#jabatan_nm').typeahead({ # });
"hint" : true, #
"highlight": true, #
"minLength": 1, #
"remote" : { # $('#jabatan_nm').typeahead({
url: "/partner/departemen/hon_jabatannm/act?term=%QUERY", # "hint" : true,
beforeSend: function () { # "highlight": true,
$('#jabatan_nm').addClass("loading"); # "minLength": 1,
}, # "remote" : {
filter: function(parsedResponse){ # url: "/partner/departemen/hon_jabatannm/act?term=%QUERY",
$('#jabatan_nm').removeClass('loading'); # beforeSend: function () {
return parsedResponse; # $('#jabatan_nm').addClass("loading");
} # },
}, # filter: function(parsedResponse){
},{ # $('#jabatan_nm').removeClass('loading');
"name" : 'jabatan_nm', # return parsedResponse;
"displayKey": 'value', # }
}); # },
# },{
$('#jabatan_nm').bind('typeahead:selected', function(obj, datum, name) { # "name" : 'jabatan_nm',
$('#jabatan_id').val(datum.id); # "displayKey": 'value',
$('#jabatan_nm').val(datum.value); # });
#
}); # $('#jabatan_nm').bind('typeahead:selected', function(obj, datum, name) {
}); # $('#jabatan_id').val(datum.id);
""" # $('#jabatan_nm').val(datum.value);
#
self.list_col_defs = json.dumps( # });
[{"searchable": False, "visible": False, "targets": [0], }, { # });
"searchable": True, "orderable": True, "targets": [1, 2], # """
}]) #
self.list_cols = [{'title': "ID", 'data': "id"}, # self.list_col_defs = json.dumps(
{'title': "NIP", 'data': "nik", 'width': '100pt'}, # [{"searchable": False, "visible": False, "targets": [0], }, {
{'title': "Nama", 'data': "nama"}, # "searchable": True, "orderable": True, "targets": [1, 2],
{'title': "Unit Kerja", 'data': "departemen"}, # }])
{'title': "Jabatan", 'data': "jabatan"}, # self.list_cols = [{'title': "ID", 'data': "id"},
{'title': "Pemda", 'data': "jenis"}, # {'title': "NIP", 'data': "nik", 'width': '100pt'},
{'title': "Mulai", 'data': "mulai"}, # {'title': "Nama", 'data': "nama"},
{'title': "Selesai", 'data': "selesai"}, ] # {'title': "Unit Kerja", 'data': "departemen"},
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \ # {'title': "Jabatan", 'data': "jabatan"},
'btn_close' # {'title': "Pemda", 'data': "jenis"},
self.form_params = dict(scripts="") # {'title': "Mulai", 'data': "mulai"},
self.list_url = 'partner/departemen' # {'title': "Selesai", 'data': "selesai"}, ]
# self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
# 'btn_close'
# self.form_params = dict(scripts="")
# self.list_url = 'partner/departemen'
self.list_route = 'partner-departemen' self.list_route = 'partner-departemen'
@staticmethod def form_validator(self, form, value):
def form_validator(form, value):
def err_partner(): def err_partner():
raise colander.Invalid(form, raise colander.Invalid(form,
'Partner Belum Dipilih') 'Partner Belum Dipilih')
...@@ -199,22 +213,6 @@ class ViewPartner(BaseView): ...@@ -199,22 +213,6 @@ class ViewPartner(BaseView):
elif not value['partner_id']: elif not value['partner_id']:
err_partner() err_partner()
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=self.form_validator)
schema = schema.bind(request=self.req)
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
def save(self, values, user, row=None):
if not row:
row = PartnerDepartemen()
row.from_dict(values)
PartnerDBSession.add(row)
PartnerDBSession.flush()
return row
def save_request(self, values, row=None): def save_request(self, values, row=None):
request = self.req request = self.req
if 'id' in request.matchdict: if 'id' in request.matchdict:
...@@ -234,34 +232,13 @@ class ViewPartner(BaseView): ...@@ -234,34 +232,13 @@ class ViewPartner(BaseView):
values['jabatan_id'] = query_struktural values['jabatan_id'] = query_struktural
row = self.save(values, request.user, row) row = self.save(values, request.user, row)
request.session.flash('Posisi Partner sudah disimpan.') request.session.flash('Posisi Partner sudah disimpan.')
return row
def route_list(self, ): @view_config(route_name='partner-departemen', renderer='templates/form.pt',
return HTTPFound(location=self.req.route_url(self.list_route))
def session_failed(self, session_name):
r = dict(form=self.request.session[session_name])
del self.request.session[session_name]
return r
def query_id(self):
return PartnerDBSession.query(PartnerDepartemen).filter_by(id=self.req.matchdict['id'])
def id_not_found(self):
msg = 'Posisi Partner ID %s Tidak Ditemukan.' % self.req.matchdict['id']
self.req.session.flash(msg, 'error')
return self.route_list()
########
# List #
########
@view_config(route_name='partner-departemen', renderer='templates/list.pt',
permission='view') permission='view')
def view_list(self): def view_list(self):
return super().view_list() return super().view_list()
##########
# Action #
##########
@view_config(route_name='partner-departemen-act', renderer='json', @view_config(route_name='partner-departemen-act', renderer='json',
permission='view') permission='view')
def view_act(self): def view_act(self):
...@@ -283,11 +260,14 @@ class ViewPartner(BaseView): ...@@ -283,11 +260,14 @@ class ViewPartner(BaseView):
ColumnDT(PartnerDepartemen.selesai, mData='selesai'), ColumnDT(PartnerDepartemen.selesai, mData='selesai'),
] ]
q = PartnerDBSession.query().select_from(PartnerDepartemen) \ q = PartnerDBSession.query().select_from(PartnerDepartemen) \
.join(Departemen, PartnerDepartemen.departemen_id == Departemen.id) \ .join(Departemen,
PartnerDepartemen.departemen_id == Departemen.id) \
.outerjoin(ResCompany, Departemen.company_id == ResCompany.id) \ .outerjoin(ResCompany, Departemen.company_id == ResCompany.id) \
.outerjoin(Partner, Partner.id == PartnerDepartemen.partner_id) \ .outerjoin(Partner, Partner.id == PartnerDepartemen.partner_id) \
.outerjoin(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)) \ .outerjoin(Jabatan,
.outerjoin(struktural, (PartnerDepartemen.jabatan_id == struktural.id)) \ (PartnerDepartemen.jabatan_id == Jabatan.id)) \
.outerjoin(struktural,
(PartnerDepartemen.jabatan_id == struktural.id)) \
.order_by(Partner.nama) .order_by(Partner.nama)
if self.req.user.company_id: if self.req.user.company_id:
q = q.filter(Departemen.company_id == self.req.user.company_id) q = q.filter(Departemen.company_id == self.req.user.company_id)
...@@ -354,7 +334,8 @@ class ViewPartner(BaseView): ...@@ -354,7 +334,8 @@ class ViewPartner(BaseView):
join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)). \ join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)). \
filter(Partner.nama.ilike('%%%s%%' % term)). \ filter(Partner.nama.ilike('%%%s%%' % term)). \
filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \ filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \
filter(or_(Jabatan.kode == '101', Jabatan.kode == '102', Jabatan.kode == '103', Jabatan.kode == filter(or_(Jabatan.kode == '101', Jabatan.kode == '102',
Jabatan.kode == '103', Jabatan.kode ==
'104')). \ '104')). \
order_by(Partner.nama) order_by(Partner.nama)
if self.req.user.company_id: if self.req.user.company_id:
...@@ -369,7 +350,8 @@ class ViewPartner(BaseView): ...@@ -369,7 +350,8 @@ class ViewPartner(BaseView):
elif url_dict['act'] == 'hon_jabatannm': elif url_dict['act'] == 'hon_jabatannm':
term = 'term' in params and params['term'] or '' 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)). \ filter(Jabatan.nama.ilike('%%%s%%' % term)). \
order_by(Jabatan.nama) order_by(Jabatan.nama)
if self.req.user.company_id: if self.req.user.company_id:
...@@ -392,19 +374,8 @@ class ViewPartner(BaseView): ...@@ -392,19 +374,8 @@ class ViewPartner(BaseView):
r.append(d) r.append(d)
return r return r
@view_config(route_name='partner-departemen-view', def get_values(self, row, istime=False):
renderer='templates/form_input.pt', permission='partner-departemen') values = super().get_values(row, istime)
def view_view(self): # row = query_id(request).first()
request = self.req
row = self.query_id().first()
if not row:
return self.id_not_found()
form = self.get_form(EditSchema, buttons=(btn_close,))
if request.POST:
return self.route_list()
values = row.to_dict()
values['nama'] = row.partner.nama values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama values['jabatan'] = row.jabatan.nama
values['departemen'] = row.departemen.nama values['departemen'] = row.departemen.nama
...@@ -417,120 +388,33 @@ class ViewPartner(BaseView): ...@@ -417,120 +388,33 @@ class ViewPartner(BaseView):
if jb: if jb:
values['struktural_nm'] = jb.nama values['struktural_nm'] = jb.nama
form.set_appstruct(self.get_values(row, values)) return values
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
@view_config(route_name='partner-departemen-view',
renderer='templates/form.pt', permission='partner-departemen')
def view_view(self): # row = query_id(request).first()
return super().view_view()
######### def before_add(self):
# Add # values = {'departemen_id': self.ses['departemen_id'],
######### 'departemen_nm': self.ses['departemen_nm'],
@view_config(route_name='partner-departemen-add', renderer='templates/form_input.pt', 'departemen_kd': self.ses['departemen_kd']}
return values
@view_config(route_name='partner-departemen-add',
renderer='templates/form.pt',
permission='partner-departemen') permission='partner-departemen')
def view_add(self): def view_add(self):
request = self.req return super().view_add()
form = self.get_form(AddSchema)
values = {} @view_config(route_name='partner-departemen-edit',
if request.POST: renderer='templates/form.pt',
if 'save' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
form.render(appstruct=e.cstruct)
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls))
return self.route_list()
values['departemen_id'] = self.ses['departemen_id']
values['departemen_nm'] = self.ses['departemen_nm']
values['departemen_kd'] = self.ses['departemen_kd']
form.set_appstruct(values)
return dict(form=form.render(), scripts=self.form_scripts)
##########
# Edit #
##########
@view_config(route_name='partner-departemen-edit', renderer='templates/form_input.pt',
permission='partner-departemen') permission='partner-departemen')
def view_edt(self): def view_edt(self):
request = self.req return super().view_edit()
row = self.query_id().first()
if not row:
return self.id_not_found()
form = self.get_form(EditSchema)
if request.POST:
if 'save' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
form.render(appstruct=e.cstruct)
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls), row)
return self.route_list()
values = row.to_dict()
values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama
values['departemen'] = row.departemen.nama
values['mulai'] = dmy(row.mulai)
values['selesai'] = dmy(row.selesai)
if not row.jabatan_id:
values['jabatan_id'] = 0
else:
jb = Jabatan.query_id(row.jabatan_id).first()
if jb:
values['struktural_nm'] = jb.nama
form.set_appstruct(self.get_values(row, values)) @view_config(route_name='partner-departemen-delete',
return dict(form=form.render(), scripts=self.form_scripts) renderer='templates/form.pt',
##########
# Delete #
##########
@view_config(route_name='partner-departemen-delete', renderer='templates/form_input.pt',
permission='partner-departemen') permission='partner-departemen')
def view_del(self): def view_del(self):
request = self.req return super().view_delete()
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found()
if request.POST:
if 'delete' in request.POST:
msg = 'Posisi Partner ID %d %s sudah dihapus.' % (row.id, row.partner.nama)
# qry_login = PartnerLogin.query_partner(request.params['id'])
# if qry_login.first():
# try:
# qry_login.delete()
# except:
# self.session.flash('Gagal Hapus')
# return dict(row=row, form=form.render())
q.delete()
PartnerDBSession.flush()
request.session.flash(msg)
return self.route_list()
form = self.get_form(EditSchema,
buttons=(btn_delete, btn_cancel))
values = row.to_dict()
values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama
values['departemen'] = row.departemen.nama
values['mulai'] = dmy(row.mulai)
values['selesai'] = dmy(row.selesai)
if not row.jabatan_id:
values['jabatan_id'] = 0
else:
jb = Jabatan.query_id(row.jabatan_id).first()
if jb:
values['struktural_nm'] = jb.nama
form.set_appstruct(self.get_values(row, values))
return dict(row=row, form=form.render(readonly=True), scripts=self.form_scripts)
def get_values(self, row, values=None):
if not values:
values = row.to_dict()
return values
import colander import colander
from deform import (widget, ) from deform import (widget, )
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, ) from pyramid.view import (view_config, )
from . import widget_os from . import widget_os
from opensipkd.models import DBSession, ResProvinsi, kategori_provinsi from opensipkd.models import DBSession, ResProvinsi, kategori_provinsi
from ..views import BaseView from ..views import BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah provinsi gagal' SESS_ADD_FAILED = 'Tambah provinsi gagal'
SESS_EDIT_FAILED = 'Edit provinsi gagal' SESS_EDIT_FAILED = 'Edit provinsi gagal'
...@@ -41,7 +43,8 @@ class EditSchema(AddSchema): ...@@ -41,7 +43,8 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): 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) kode = colander.SchemaNode(colander.String(), width=100)
nama = colander.SchemaNode(colander.String()) nama = colander.SchemaNode(colander.String())
ibu_kota=colander.SchemaNode(colander.String()) ibu_kota=colander.SchemaNode(colander.String())
......
...@@ -21,12 +21,14 @@ _ = TranslationStringFactory('user') ...@@ -21,12 +21,14 @@ _ = TranslationStringFactory('user')
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), id = colander.SchemaNode(colander.String(),
title="ID", visible=False, title="Action",
searchable=False) searchable=False)
email = colander.SchemaNode(colander.String()) email = colander.SchemaNode(colander.String())
user_name = colander.SchemaNode(colander.String(), user_name = colander.SchemaNode(colander.String(),
title=_("user-name", default="User Name")) 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, last_login = colander.SchemaNode(colander.String(), width=100,
field="last_login_date", field="last_login_date",
searchable=False) searchable=False)
......
...@@ -25,7 +25,7 @@ class EditSchema(AddSchema): ...@@ -25,7 +25,7 @@ class EditSchema(AddSchema):
class ListSchema(colander.Schema): 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( external_user_name = colander.SchemaNode(
colander.String(), title=_('User Name')) colander.String(), title=_('User Name'))
provider_name = (colander.SchemaNode(colander.String(), title=_('Provider'))) provider_name = (colander.SchemaNode(colander.String(), title=_('Provider')))
...@@ -38,24 +38,24 @@ class UserExt(BaseView): ...@@ -38,24 +38,24 @@ class UserExt(BaseView):
self.edit_schema = EditSchema self.edit_schema = EditSchema
self.list_schema = ListSchema self.list_schema = ListSchema
self.list_route = "user-ext" self.list_route = "user-ext"
self.list_buttons = (btn_view, btn_delete, btn_close) self.list_buttons = (btn_close,)
self.table = ExternalIdentity self.table = ExternalIdentity
@view_config( @view_config(
route_name='user-ext', renderer='templates/table.pt', route_name='user-ext', renderer='templates/table.pt',
permission='user-view') permission='user-view')
def view_list(self): def view_list(self):
form = super(UserExt, self).view_list() form = super(UserExt, self).view_list(allow_edit=False, allow_delete=False)
return form return form
@view_config( @view_config(
route_name='user-ext-view', renderer='templates/form_input.pt', route_name='user-ext-view', renderer='templates/form.pt',
permission='user-view') permission='user-view')
def view_view(self): def view_view(self):
return super(UserExt, self).view_view() return super(UserExt, self).view_view()
@view_config( @view_config(
route_name='user-ext-delete', renderer='templates/form_input.pt', route_name='user-ext-delete', renderer='templates/form.pt',
permission='user-edit') permission='user-edit')
def view_delete(self): def view_delete(self):
return super(UserExt, self).view_delete() return super(UserExt, self).view_delete()
......
...@@ -10,7 +10,7 @@ from chameleon.utils import Markup ...@@ -10,7 +10,7 @@ from chameleon.utils import Markup
from deform import compat from deform import compat
from deform import field from deform import field
from . import widget from . import widget
# from deform import widget
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -166,24 +166,24 @@ class DeTable(field.Field): ...@@ -166,24 +166,24 @@ class DeTable(field.Field):
for f in schema: for f in schema:
d = {'data': f.name} d = {'data': f.name}
data = [] data = []
if hasattr(f, 'width'): if hasattr(f, 'width'):
d["width"] = f.width d["width"] = f.width
data.append(f"width: '{f.width}'") data.append(f"width: '{f.width}'")
if hasattr(f, 'aligned'): if hasattr(f, 'aligned'):
d["className"] = f.aligned d["className"] = f.aligned
data.append(f"className: '{f.aligned}'") data.append(f"className: '{f.aligned}'")
if hasattr(f, 'searchable'): if hasattr(f, 'searchable'):
d["searchable"] = f.searchable d["searchable"] = f.searchable
data.append(f"searchable: {f.searchable}") data.append(f"searchable: {f.searchable}")
if hasattr(f, 'visible'): if hasattr(f, 'visible'):
d["visible"] = f.visible d["visible"] = f.visible
data.append(f"visible: {f.visible}") data.append(f"visible: {f.visible}")
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):
d["checkbox"] = True
else:
d["checkbox"]=False
if hasattr(f, 'orderable'): if hasattr(f, 'orderable'):
d["orderable"] = f.orderable d["orderable"] = f.orderable
...@@ -199,8 +199,7 @@ class DeTable(field.Field): ...@@ -199,8 +199,7 @@ class DeTable(field.Field):
"currency"] or "" "currency"] or ""
if thousand or type(f.typ) == colander.Float() or type( if thousand or type(f.typ) == colander.Float() or type(
f.typ) == colander.Integer(): f.typ) == colander.Integer():
d[ d["render"] = f"<script>$.fn.dataTable.render.number( '{separator}', " \
"render"] = f"<script>$.fn.dataTable.render.number( '{separator}', " \
f"'{decimal}', {point}, '{currency}' )</script>" f"'{decimal}', {point}, '{currency}' )</script>"
if 'className' not in d: if 'className' not in d:
d["className"] = "text-right" d["className"] = "text-right"
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
data data|field.data; data data|field.data;
allow_edit allow_edit|field.allow_edit; allow_edit allow_edit|field.allow_edit;
allow_delete allow_delete|field.allow_delete; allow_delete allow_delete|field.allow_delete;
edit_url 'edit.com';
" "
tal:attributes="style style; class css_class; attributes|field.widget.attributes|{};" tal:attributes="style style; class css_class; attributes|field.widget.attributes|{};"
i18n:domain="detable"> i18n:domain="detable">
...@@ -32,7 +31,6 @@ ...@@ -32,7 +31,6 @@
<thead> <thead>
<tr> <tr>
<th tal:repeat="child field">${child.title}</th> <th tal:repeat="child field">${child.title}</th>
<th tal:condition="allow_edit or allow_delete">Action</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
...@@ -43,7 +41,7 @@ ...@@ -43,7 +41,7 @@
</div> </div>
</header> </header>
<script type="text/javascript"> <script>
deform.addCallback deform.addCallback
('${tableid}', function (oid) { ('${tableid}', function (oid) {
let m${tableid}ID; let m${tableid}ID;
...@@ -57,11 +55,16 @@ ...@@ -57,11 +55,16 @@
'</div>', '</div>',
] ]
let columns = ${structure: columns}; let columns = ${structure: columns};
let action_column = {
"data": "id", function render_checkbox(value) {
"className": "text-center", if (value == true) {
"width": 50, return '<i class="fas fa-check-square" aria-hidden="true">';
"render": function (id) { }
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>&nbsp;'; let result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true"></i></a>&nbsp;';
if (${allow_edit}) { 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"></i></a>&nbsp;'
...@@ -72,8 +75,25 @@ ...@@ -72,8 +75,25 @@
return result; 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 = { let language = {
"search": "Cari: ", "search": "Cari: ",
"paginate": { "paginate": {
...@@ -96,6 +116,7 @@ ...@@ -96,6 +116,7 @@
autoWidth: false, autoWidth: false,
paginate: ${paginates}, paginate: ${paginates},
paginationType: "full_numbers", paginationType: "full_numbers",
order: [],
lengthMenu: [ lengthMenu: [
[10, 25, 50, 100], [10, 25, 50, 100],
[10, 25, 50, 100] [10, 25, 50, 100]
...@@ -104,9 +125,12 @@ ...@@ -104,9 +125,12 @@
"language": language, "language": language,
} }
if (${server_side}==false) if (${server_side}==false
{params.data = ${data};} )
else {
params.data = ${data};
}
else
{ {
params.ajax = o${tableid}Url; params.ajax = o${tableid}Url;
} }
...@@ -118,7 +142,7 @@ ...@@ -118,7 +142,7 @@
if ($(this).hasClass('selected')) { if ($(this).hasClass('selected')) {
$(this).removeClass('selected'); $(this).removeClass('selected');
} else { } else {
var aData = o${tableid}.row(this).data(); let aData = o${tableid}.row(this).data();
o${tableid}.$('tr.selected').removeClass('selected'); o${tableid}.$('tr.selected').removeClass('selected');
$(this).addClass('selected'); $(this).addClass('selected');
m${tableid}ID = aData.id; m${tableid}ID = aData.id;
......
...@@ -191,6 +191,8 @@ def add_jsonrpc_endpoint(config, name, *args, **kw): ...@@ -191,6 +191,8 @@ def add_jsonrpc_endpoint(config, name, *args, **kw):
def setup_request(endpoint, request): def setup_request(endpoint, request):
""" Parse a JSON-RPC request body.""" """ Parse a JSON-RPC request body."""
print(request.__dict__)
print(request.environ.get("ACCESS_CONTROL_ALLOW_ORIGIN"))
if request.method == 'GET': if request.method == 'GET':
parse_request_GET(request) parse_request_GET(request)
elif request.method == 'POST': elif request.method == 'POST':
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!