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")
......
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!