Commit dc70cf17 by aagusti

penggunaan simple development

1 parent 91124f84
from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, ForeignKey
from sqlalchemy.orm import relationship, backref
from ziggurat_foundations.tests import User
from .meta import Base
......@@ -42,4 +43,5 @@ class UserDeviceModel(Base, KodeModel):
class ResCompany(Base, NamaModel):
__tablename__ = 'company'
partner_id = Column(Integer, ForeignKey(Partner.id))
\ No newline at end of file
partner_id = Column(Integer, ForeignKey(Partner.id))
partner = relationship(Partner, backref=backref("company"))
from sqlalchemy.orm import relationship, backref
from opensipkd.base.models import TABLE_ARGS
from sqlalchemy import (
Column,
......@@ -36,6 +38,7 @@ class ResDati2(Base, NamaModel):
kategori = Column(String(32))
ibu_kota = Column(String(64))
provinsi_id = Column(SmallInteger, ForeignKey(ResProvinsi.id))
provinsi = relationship(ResProvinsi, backref=backref("dati2"))
@classmethod
def get_list(cls, provinsi_id):
......@@ -49,8 +52,9 @@ class ResKecamatan(Base, NamaModel):
__table_args__ = (TABLE_ARGS,)
ibu_kota = Column(String(64))
dati2_id = Column(SmallInteger, ForeignKey(ResDati2.id))
dati2 = relationship(ResDati2, backref=backref("kecamatan"))
@classmethod
def get_list(cls, dati2_id):
def get_list(cls, dati2_id=None):
qry = cls.query_list()
if dati2_id:
qry = qry.filter(cls.dati2_id == dati2_id)
......@@ -68,7 +72,7 @@ class ResDesa(Base, NamaModel):
__table_args__ = (TABLE_ARGS,)
kategori = Column(String(32))
kecamatan_id = Column(SmallInteger, ForeignKey(ResKecamatan.id))
kecamatan = relationship(ResKecamatan, backref=backref("desa"))
@classmethod
def get_list(cls, kecamatan_id):
qry = cls.query_list()
......
......@@ -149,7 +149,7 @@ class BaseView(object):
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel), **bindings):
buttons = self.buttons and self.buttons or buttons
bindings = self.bindings and self.bindings or self.get_bindings()
bindings = self.bindings and self.bindings or bindings
schema = class_form(validator=self.form_validator)
schema = schema.bind(request=self.req, **bindings)
schema.request = self.req
......@@ -168,6 +168,7 @@ class BaseView(object):
action_suffix="/grid/act",
buttons=self.list_buttons)
resources = table.get_widget_resources()
# resources=dict(css="", js="")
return dict(form=table.render(), scripts="", css=resources["css"], js=resources["js"])
arg = arg and arg or {}
......
import json
import colander
from deform import (widget, Form, ValidationFailure, )
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save
from deform import (widget, )
from pyramid.view import (view_config, )
from opensipkd.base.models import ResProvinsi, ResDati2, ResDesa
from .partner_base import PartnerSchema
from opensipkd.base.models import ResProvinsi, ResDati2, ResDesa, User
from .partner_base import PartnerSchema, NamaSchema
from ..models import DBSession, ResCompany, ResKecamatan, Partner
from ..views import ColumnDT, DataTables, BaseView
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah pemda gagal'
SESS_EDIT_FAILED = 'Edit pemda gagal'
......@@ -29,46 +26,46 @@ class AddSchema(PartnerSchema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
widget=widget.HiddenWidget(readonly=True),
visible=False,)
partner_id = colander.SchemaNode(colander.Integer(),
widget=widget.HiddenWidget(),
missing=colander.drop,
oid="partner_id")
class ListSchema(NamaSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop, visible=False)
class ViewCompany(BaseView):
def __init__(self, request):
super(ViewCompany, self).__init__(request)
self.form_scripts = ""
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"},
{'title': "Kode", 'data': "kode", 'width': '100pt'},
{'title': "Nama", 'data': "nama"}, ]
self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
'btn_close'
self.form_params = dict(scripts="")
# self.list_url = 'company'
self.list_route = 'company'
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.list_schema = ListSchema
self.table = ResCompany
########
# List #
########
def form_validator(self, form, value):
err = colander.Invalid(form, "")
def err_kode():
raise colander.Invalid(form, 'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
msg = f"Kode {value['kode']} sudah digunakan oleh {found.nama}"
err["kode"] = msg
raise err
def err_nama():
raise colander.Invalid(form,
'Uraian %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode))
err["nama"] = f"Uraian {value['nama']} sudah digunakan oleh kode {found.kode}"
raise err
def err_email():
err["email"] = f"Email {value['email']} sudah digunakan oleh kode {found.nama}"
raise err
def err_user():
err["email"] = f"Email {value['email']} sudah digunakan oleh kode {found.user_name}"
raise err
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
......@@ -77,7 +74,7 @@ class ViewCompany(BaseView):
else:
row = None
q = ResCompany.query_kode(value['kode'])
q = self.table.query_kode(value['kode'])
found = q.first()
if row:
if found and found.id != row.id:
......@@ -85,44 +82,45 @@ class ViewCompany(BaseView):
elif found:
err_kode()
found = ResCompany.query_nama(value['nama']).first()
found = self.table.query_nama(value['nama']).first()
if found:
if found and found.id != row.id:
err_nama()
elif found:
err_nama()
def get_form(self, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=self.form_validator)
provinsi_list = ResProvinsi.get_list()
dati2_list = row and row.provinsi_id and ResDati2.get_list(row.provinsi_id) or []
kecamatan_list = row and row.dati2_id and ResKecamatan.get_list(row.dati2_id) or []
desa_list = row and row.kecamatan_id and ResDesa.get_list(row.kecamatan_id) or []
schema = schema.bind(provinsi_list=provinsi_list,
dati2_list=dati2_list,
kecamatan_list=kecamatan_list,
desa_list=desa_list
)
schema.request = self.req
return Form(schema, buttons=buttons)
partner_id = value.get('partner_id')
@view_config(route_name='company-view',
renderer='templates/form_input.pt', permission='company')
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()
found = Partner.query_email(value.get('email')).first()
if found:
if found and found.id != partner_id:
err_email()
elif found:
err_email()
form = self.get_form(EditSchema, buttons=(btn_close,))
if request.POST:
return self.route_list()
found = User.get_by_identity(value.get('email'))
if found:
err_user()
def get_bindings(self, row=None):
provinsi_list = ResProvinsi.get_list()
partner = row and row.partner or None
dati2_list = partner and partner.provinsi_id and ResDati2.get_list(partner.provinsi_id) or []
kecamatan_list = partner and partner.dati2_id and ResKecamatan.get_list(partner.dati2_id) or []
desa_list = partner and partner.kecamatan_id and ResDesa.get_list(partner.kecamatan_id) or []
return dict(provinsi_list=provinsi_list,
dati2_list=dati2_list,
kecamatan_list=kecamatan_list,
desa_list=desa_list
)
form.set_appstruct(self.get_values(row))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
@view_config(route_name='company-view',
renderer='templates/form.pt', permission='company')
def view_view(self):
return super().view_view()
@view_config(route_name='company',
renderer='templates/list.pt',
renderer='templates/table.pt',
permission='company')
def view_list(self):
return super().view_list()
......@@ -130,52 +128,26 @@ class ViewCompany(BaseView):
@view_config(route_name='company-act', renderer='json',
permission='view')
def view_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(ResCompany.id, mData='id'),
ColumnDT(ResCompany.kode, mData='kode'),
ColumnDT(ResCompany.nama, mData='nama'), ]
query = DBSession.query().select_from(ResCompany)
if request.user.company_id:
query = query.filter_by(id=request.user.company_id)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
return super().view_act()
@view_config(route_name='company-add',
renderer='templates/form_input.pt', permission='company')
renderer='templates/form.pt', permission='company')
def view_add(self):
if self.req.user.company_id:
return self.route_list("Hak Akses Terbatas", "error")
return super(ViewCompany, self).view_add()
########
# Edit #
########
def get_values(self, row, istime=False):
d = super().get_values(row,istime)
partner = row.partner
if partner :
p = partner.to_dict()
del p["id"]
d.update(p)
return d
@view_config(route_name='company-edit',
renderer='templates/form_input.pt', permission='company')
def view_edt(self):
row = self.query_id().first()
if not row:
return self.id_not_found()
part = Partner.query_id(row.partner_id).first()
form = self.get_form(self.edit_schema, row=part)
if self.req.POST:
if 'save' in self.req.POST:
controls = self.req.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
form.set_appstruct(e.cstruct)
return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls), row)
return self.route_list()
values = part and part.to_dict() or {}
values.update(row.to_dict())
form.set_appstruct(values)
return dict(form=form.render(), scripts=self.form_scripts)
renderer='templates/form.pt', permission='company')
def view_edit(self):
return super(ViewCompany, self).view_edit()
@view_config(route_name='company-delete',
renderer='templates/form_input.pt', permission='company')
......@@ -192,6 +164,7 @@ class ViewCompany(BaseView):
del values["id"]
from .partner import save as partner_save
part = partner_save(values, self.req.user, part)
if part:
values["partner_id"] = part.id
if "id" in self.req.matchdict:
......@@ -200,9 +173,3 @@ class ViewCompany(BaseView):
row = self.save(values, self.req.user, row)
return row
def query_id(self):
q = DBSession.query(self.table).filter_by(
id=self.req.matchdict['id'])
if self.req.user.company_id:
q = q.filter_by(id=self.req.user.company_id)
return q
\ No newline at end of file
......@@ -5,7 +5,7 @@ from pyramid.view import (view_config, )
from . import widget_os
from .provinsi import provinsi_widget
from ..models import DBSession, ResDati2, kategori_dati2, ResProvinsi
from ..views import ColumnDT, DataTables, BaseView
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah dati2 gagal'
SESS_EDIT_FAILED = 'Edit dati2 gagal'
......@@ -46,7 +46,7 @@ class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama")
provinsi = colander.SchemaNode(colander.String())
provinsi = colander.SchemaNode(colander.String(), field=ResProvinsi.nama)
status = colander.SchemaNode(colander.Integer(), width="30pt")
......@@ -62,10 +62,6 @@ class ViewDati2(BaseView):
self.table = ResDati2
self.list_schema = ListSchema
########
# List #
########
def form_validator(self, form, value):
def err_kode():
raise colander.Invalid(form, 'Kode %s sudah digunakan oleh %s' % (
......@@ -101,8 +97,7 @@ class ViewDati2(BaseView):
err_nama()
def get_bindings(self, row=None):
return dict(request=self.req,
provinsi_list=ResProvinsi.get_list())
return dict(provinsi_list=ResProvinsi.get_list())
@view_config(route_name='dati2',
renderer='templates/table.pt',
......@@ -115,41 +110,33 @@ class ViewDati2(BaseView):
def view_view(self): # row = query_id(request).first()
return super(ViewDati2, self).view_view()
def list_join(self, query):
return query.join(ResProvinsi, ResProvinsi.id == ResDati2.provinsi_id)
@view_config(route_name='dati2-act', renderer='json',
permission='view')
def view_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(ResDati2.id, mData='id'),
ColumnDT(ResDati2.kode, mData='kode'),
ColumnDT(ResDati2.nama, mData='nama'),
ColumnDT(ResDati2.status, mData='status'),
ColumnDT(ResProvinsi.nama, mData='provinsi'), ]
query = DBSession.query().select_from(ResDati2) \
.join(ResProvinsi, ResProvinsi.id == ResDati2.provinsi_id)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
elif url_dict['act'] == 'select':
provinsi_id = request.params["provinsi_id"]
return super().view_act()
def next_act(self):
url_dict = self.req.matchdict
if url_dict['act'] == 'select':
provinsi_id = self.req.params["provinsi_id"]
data = ResDati2.get_list(provinsi_id)
result = {f"{k[0]}": k[1] for k in data}
return result
@view_config(route_name='dati2-add',
renderer='templates/form_input.pt', permission='dati2')
renderer='templates/form.pt', permission='dati2')
def view_add(self):
return super(ViewDati2, self).view_add()
########
# Edit #
########
@view_config(route_name='dati2-edit',
renderer='templates/form_input.pt', permission='dati2')
renderer='templates/form.pt', permission='dati2')
def view_edt(self):
return super(ViewDati2, self).view_edit()
@view_config(route_name='dati2-delete',
renderer='templates/form_input.pt', permission='dati2')
renderer='templates/form.pt', permission='dati2')
def view_delete(self):
return super(ViewDati2, self).view_delete()
......@@ -5,7 +5,6 @@ from datetime import datetime
import colander
from deform import (widget, )
from deform.widget import AutocompleteInputWidget
from opensipkd.tools import (get_ext, get_random_string, get_settings)
from pyramid.view import (view_config, )
from sqlalchemy import func
......@@ -119,22 +118,6 @@ class ViewDepartemen(BaseView):
self.list_route = 'departemen'
self.form_scripts = ""
# """
# 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"},
# {'title': "Kode", 'data': "kode", 'width': '100pt'},
# {'title': "Nama", 'data': "nama"}, ]
# self.list_buttons = 'btn_view, btn_add, btn_edit, btn_delete, ' \
# 'btn_close'
# self.form_params = dict(scripts="")
########
# List #
########
def form_validator(self, form, value):
def err_kode():
raise colander.Invalid(form, 'Kode %s sudah digunakan oleh %s' % (
......@@ -182,89 +165,18 @@ class ViewDepartemen(BaseView):
if child.children:
self.update_children(child.children)
def before_save(self, row, values):
def save_request(self, values, row=None): #save(self, row, values):
for k, v in values.items():
if not v:
setattr(row, k, None)
row = super().save_request(values, row)
return row
# def save(self, values, user, row=None)
# if not row:
# row = Departemen()
# row.created = datetime.now()
# row.create_uid = user.id
# if 'parent_id' in values and not values['parent_id']:
# del values['parent_id']
#
# row.from_dict(values)
# row.updated = datetime.now()
# row.update_uid = user.id
# row.status = 'status' in values and values['status'] and 1 or 0
# row.level_id = 1
# DBSession.add(row)
# DBSession.flush()
# if row.parent_id:
# row.level_id = (row.parent.level_id or 0) + 1
#
# DBSession.add(row)
# if row.children:
# for child in row.children:
# child.level_id = child.parent.level_id + 1
# DBSession.add(child)
# DBSession.flush()
#
# return row
#
# def save_request(self, values, row=None):
# request = self.req
# if 'id' in request.matchdict:
# values['id'] = request.matchdict['id']
# values["company_id"] = request.user.company_id
# row = self.save(values, request.user, row)
# request.session.flash(
# "Departemen {nama} sudah disimpan.".format(nama=row.nama))
# def route_list(self, ):
# return HTTPFound(location=self.req.route_url(self.list_route))
# 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,
# company_list=ResCompany.get_list())
# schema.request = self.req
# if row:
# schema.deserialize(row)
# return Form(schema, buttons=buttons)
#
# def session_failed(self, session_name):
# r = dict(form=self.req.session[session_name])
# del self.req.session[session_name]
# return r
# def query_id(self):
# return DBSession.query(Departemen).filter_by(
# id=self.req.matchdict['id'])
# def id_not_found(self):
# msg = 'Departemen ID %s Tidak Ditemukan.' % self.req.matchdict['id']
# self.req.session.flash(msg, 'error')
# return self.route_list()
@view_config(route_name='departemen-view',
renderer='templates/form_input.pt', permission='departemen')
def view_view(self): # row = query_id(request).first()
renderer='templates/form.pt', permission='departemen')
def view_view(self):
return super(ViewDepartemen, self).view_view()
# 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()
#
# form.set_appstruct(self.get_values(row))
# return dict(form=form.render(readonly=True), scripts=self.form_scripts)
@view_config(route_name='departemen',
renderer='templates/table.pt',
......@@ -272,9 +184,6 @@ class ViewDepartemen(BaseView):
def view_list(self):
return super().view_list()
##########
# Action #
##########
@view_config(route_name='departemen-act', renderer='json',
permission='view')
def view_act(self):
......@@ -390,63 +299,21 @@ class ViewDepartemen(BaseView):
r.append(d)
return r
@view_config(route_name='departemen-add', renderer='templates/form_input.pt',
@view_config(route_name='departemen-add', renderer='templates/form.pt',
permission='departemen')
def view_add(self):
return super(ViewDepartemen, self).view_add()
@view_config(route_name='departemen-edit',
renderer='templates/form_input.pt', permission='departemen')
renderer='templates/form.pt', permission='departemen')
def view_edit(self):
return super(ViewDepartemen, self).view_edit()
# request = self.req
# 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.set_appstruct(e.cstruct)
# return dict(form=form.render(), scripts=self.form_scripts)
#
# self.save_request(dict(controls), row)
# return self.route_list()
# form.set_appstruct(self.get_values(row))
# return dict(form=form.render(), scripts=self.form_scripts)
##########
# Delete #
##########
@view_config(route_name='departemen-delete',
renderer='templates/form_input.pt', permission='departemen')
renderer='templates/form.pt', permission='departemen')
def view_delete(self):
return super(ViewDepartemen, self).view_delete()
# request = self.req
# q = self.query_id()
# row = q.first()
# if not row:
# return self.id_not_found()
# if request.POST:
# if 'delete' in request.POST:
# msg = 'Departemen ID %d %s sudah dihapus.' % (row.id, row.nama)
# q.delete()
# DBSession.flush()
# request.session.flash(msg)
# return self.route_list()
# form = self.get_form(EditSchema,
# buttons=(btn_delete, btn_cancel))
# form.set_appstruct(self.get_values(row))
# return dict(form=form.render(readonly=True), scripts=self.form_scripts)
##########
# Upload #
##########
@view_config(route_name='departemen-upload',
renderer='templates/departemen/upload.pt',
permission='departemen')
......@@ -455,7 +322,6 @@ class ViewDepartemen(BaseView):
form = self.get_form(UploadSchema)
if request.POST:
if 'save' in request.POST:
# settings = get_settings()
input_file = request.POST['upload'].file
filename = request.POST['upload'].filename
ext = get_ext(filename)
......@@ -485,9 +351,9 @@ class ViewDepartemen(BaseView):
if code:
code = code[:-1]
save_upload(request, code, csv_row)
self.save_upload(code, csv_row)
save_upload(request, kode, csv_row)
self.save_upload(kode, csv_row)
DBSession.flush()
os.remove(temp_file_path)
......
import json
import colander
from deform import (widget, Form, )
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save, btn_add, btn_edit, btn_delete
from deform import (widget, )
from pyramid.view import (view_config, )
from .dati2 import dati2_widget
from .kecamatan import kecamatan_widget
from ..models import DBSession, ResDesa, kategori_desa, ResKecamatan
from ..views import ColumnDT, DataTables, BaseView
from ...detable import DeTable
from .provinsi import provinsi_widget
from ..models import DBSession, ResDesa, kategori_desa, ResKecamatan, ResProvinsi, ResDati2
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah desa gagal'
SESS_EDIT_FAILED = 'Edit desa gagal'
......@@ -22,6 +20,12 @@ def desa_widget(node, kw):
class AddSchema(colander.Schema):
provinsi_id = colander.SchemaNode(colander.String(),
widget=provinsi_widget,
validator=colander.Length(max=32), oid="kode")
dati2_id = colander.SchemaNode(colander.String(),
widget=dati2_widget,
validator=colander.Length(max=32), oid="kode")
kecamatan_id = colander.SchemaNode(colander.String(),
widget=kecamatan_widget,
validator=colander.Length(max=32), oid="kode")
......@@ -43,7 +47,7 @@ class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama")
kecamatan = colander.SchemaNode(colander.String())
kecamatan = colander.SchemaNode(colander.String(), field=ResKecamatan.nama)
status = colander.SchemaNode(colander.Integer(), width="30pt")
......@@ -94,24 +98,29 @@ class ViewDesa(BaseView):
err_nama()
def get_bindings(self, row=None):
return dict(request=self.req,
kecamatan_list=ResKecamatan.get_list())
provinsi_list = ResProvinsi.get_list()
kecamatan = row and row.kecamatan or None
kecamatan_list = kecamatan and ResKecamatan.get_list(kecamatan.dati2_id) or []
dati2 = kecamatan and kecamatan.dati2 or None
dati2_list = dati2 and ResDati2.get_list(dati2.provinsi_id) or []
return dict(
provinsi_list=provinsi_list,
dati2_list=dati2_list,
kecamatan_list=kecamatan_list,
)
def get_values(self, row, istime=False):
d = super().get_values(row, istime)
kecamatan = row and row.kecamatan or None
d["dati2_id"] = kecamatan and kecamatan.dati2_id or None
dati2 = kecamatan and kecamatan.dati2 or None
d["provinsi_id"] = dati2 and dati2.provinsi_id or None
return d
@view_config(route_name='desa-view',
renderer='templates/form.pt', permission='desa')
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()
form.set_appstruct(self.get_values(row))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
def view_view(self):
return super().view_view()
@view_config(route_name='desa',
renderer='templates/table.pt',
......@@ -119,22 +128,18 @@ class ViewDesa(BaseView):
def view_list(self):
return super(ViewDesa, self).view_list()
def list_join(self, query):
return query.outerjoin(ResKecamatan)
@view_config(route_name='desa-act', renderer='json',
permission='view')
def view_act(self):
return super().view_act()
def next_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(ResDesa.id, mData='id'),
ColumnDT(ResDesa.kode, mData='kode'),
ColumnDT(ResDesa.nama, mData='nama'),
ColumnDT(ResDesa.status, mData='status'),
ColumnDT(ResKecamatan.nama, mData='kecamatan'), ]
query = DBSession.query().select_from(ResDesa) \
.join(ResKecamatan, ResKecamatan.id == ResDesa.kecamatan_id)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
elif url_dict['act'] == 'select':
if url_dict['act'] == 'select':
kecamatan_id = request.params["kecamatan_id"]
data = ResDesa.get_list(kecamatan_id)
result = {f"{k[0]}": k[1] for k in data}
......
from datetime import datetime
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from pyramid.view import (
view_config,
)
from .partner_base import NamaSchema
from ..models import (
DBSession,
Eselon
)
from ..views import ColumnDT, DataTables, BaseView
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah eselon gagal'
SESS_EDIT_FAILED = 'Edit eselon gagal'
......@@ -41,35 +35,34 @@ class EditSchema(AddSchema):
missing=colander.drop,
widget=widget.HiddenWidget())
class ListSchema(NamaSchema):
id = colander.SchemaNode(colander.String(),visible=False)
class Views(BaseView):
@view_config(route_name='eselon', renderer='templates/eselon/list.pt',
def __init__(self, request):
super(Views, self).__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'eselon'
self.list_route = 'eselon'
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Eselon
self.list_schema = ListSchema
@view_config(route_name='eselon', renderer='templates/table.pt',
permission='eselon')
def view_list(self):
return dict(a={})
return super(Views, self).view_list()
##########
# Action #
##########
@view_config(route_name='eselon-act', renderer='json',
permission='read')
def view_act(self):
request = self.req
ses = request.session
params = request.params
url_dict = request.matchdict
return super(Views, self).view_act()
if url_dict['act'] == 'grid':
columns = [
ColumnDT(Eselon.id, mData='id'),
ColumnDT(Eselon.kode, mData='kode'),
ColumnDT(Eselon.nama, mData='nama'),
]
query = DBSession.query().select_from(Eselon)
rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result()
elif url_dict['act'] == 'hok':
def next_act(self):
params = self.params
url_dict = self.req.matchdict
if url_dict['act'] == 'hok':
term = 'term' in params and params['term'] or ''
qry = Eselon.query(). \
filter(Eselon.kode.ilike('%%%s%%' % term)). \
......@@ -101,203 +94,60 @@ class Views(BaseView):
r.append(d)
return r
@view_config(route_name='eselon-add', renderer='templates/eselon/add.pt',
@view_config(route_name='eselon-add', renderer='templates/form.pt',
permission='eselon')
def view_add(self):
request = self.req
form = get_form(request, AddSchema)
if request.POST:
if 'simpan' 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)
save_request(request, dict(controls))
return route_list(request)
elif SESS_ADD_FAILED in request.session:
return self.session_failed(SESS_ADD_FAILED)
return dict(form=form)
# return dict(form=form.render())
########
# Edit #
########
@view_config(route_name='eselon-edit', renderer='templates/eselon/edt.pt',
return super().view_add()
@view_config(route_name='eselon-edit', renderer='templates/form.pt',
permission='eselon')
def view_edt(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
uid = row.id
def view_edit(self):
return super().view_edit()
form = get_form(request, EditSchema)
if request.POST:
if 'simpan' 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)
save_request(request, dict(controls), row)
return route_list(request)
elif SESS_EDIT_FAILED in request.session:
return self.session_failed(SESS_EDIT_FAILED)
values = row.to_dict()
form.render(appstruct=values)
return dict(form=form)
@view_config(route_name='eselon-view', renderer='templates/form_input.pt',
@view_config(route_name='eselon-view', renderer='templates/form.pt',
permission='eselon')
def view_view(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
uid = row.id
return super().view_view()
form = Form(EditSchema(), buttons=('tutup',))
if request.POST:
return route_list(request)
values = row.to_dict()
form = form.render(appstruct=values, readonly=True)
return dict(form=form, scripts="")
##########
# Delete #
##########
@view_config(route_name='eselon-delete', renderer='templates/form_input.pt',
permission='eselon')
def view_del(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
form = Form(EditSchema(), buttons=('hapus', 'batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'eselon ID %d %s sudah dihapus.' % (row.id, row.nama)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
form.set_appstruct(row.to_dict())
return dict(row=row, form=form.render(readonly=True), scripts='')
#######
# Add #
#######
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
def err_nama():
raise colander.Invalid(form,
'Nama %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode))
# edit
def err_ruang():
raise colander.Invalid(form,
'Nama ruang %s tidak boleh lebih dari 1 karakter.' % (
value['ruang']))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Eselon).filter_by(id=uid)
eselon = q.first()
else:
eselon = None
q = Eselon.query_kode(value['kode'])
found = q.first()
if eselon:
if found and found.id != eselon.id:
def view_delete(self):
return super().view_delete()
def form_validator(self, form, value):
def err_kode():
raise colander.Invalid(form,
'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
def err_nama():
raise colander.Invalid(form,
'Nama %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode))
# edit
def err_ruang():
raise colander.Invalid(form,
'Nama ruang %s tidak boleh lebih dari 1 karakter.' % (
value['ruang']))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Eselon).filter_by(id=uid)
eselon = q.first()
else:
eselon = None
q = Eselon.query_kode(value['kode'])
found = q.first()
if eselon:
if found and found.id != eselon.id:
err_kode()
elif found:
err_kode()
elif found:
err_kode()
found = Eselon.query_nama(value['nama']).first()
if eselon:
if found and found.id != eselon.id:
found = Eselon.query_nama(value['nama']).first()
if eselon:
if found and found.id != eselon.id:
err_nama()
elif found:
err_nama()
elif found:
err_nama()
# edit
# ruang = len(value['ruang'])
# if ruang > 1:
# err_ruang()
def get_form(request, class_form, row=None):
schema = class_form(validator=form_validator)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan', 'batal'))
def save(values, user, row=None):
if not row:
row = Eselon()
values['created'] = datetime.now()
values['create_uid'] = user.id
else:
values['updated'] = datetime.now()
values['update_uid'] = user.id
# values['pangkat'] # TODO: pangkat
row.from_dict(values)
# edit
row.updated = datetime.now()
row.update_uid = user.id
row.status = 'status' in values and values['status'] and 1 or 0
row.level_id = 1
DBSession.add(row)
DBSession.flush()
return row
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('eselon sudah disimpan.')
def route_list(request):
return HTTPFound(location=request.route_url('eselon'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
########
# Edit #
########
def query_id(request):
return DBSession.query(Eselon).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'eselon ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
import colander
from datatables import (
ColumnDT,
DataTables,
)
from deform import widget
from pyramid.httpexceptions import HTTPFound
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config
......@@ -73,18 +68,13 @@ class Views(BaseView):
@view_config(
route_name='group-act', renderer='json', permission='user-view')
def view_act(self):
params = self.params
return super(Views, self).view_act()
def next_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(Group.id, mData="id"),
ColumnDT(Group.group_name, mData="group_name"),
ColumnDT(Group.description, mData="description"),
ColumnDT(Group.member_count, mData="member_count")]
q = DBSession.query().select_from(Group).order_by(Group.group_name)
row_table = DataTables(request.GET, q, columns)
return row_table.output_result()
elif url_dict['act'] == 'hon':
params = self.params
if url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
q = DBSession.query(Group.id, Group.description).filter(
Group.description.ilike('%{}%'.format(term))). \
......@@ -156,9 +146,6 @@ class Views(BaseView):
permission='user-edit')
def view_delete(self):
return super(Views, self).view_delete()
q.delete()
request.session.flash(ts)
return HTTPFound(location=request.route_url('group'))
def clean_name(s):
......
from datetime import datetime
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from pyramid.view import (
view_config,
)
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_delete
from deform import (widget, )
from pyramid.view import (view_config, )
from .partner_base import NamaSchema
from ..models import (
DBSession,
Jabatan,
Eselon
)
from ..views import ColumnDT, DataTables, BaseView, deferred_jenis
from ..views import BaseView, deferred_jenis
SESS_ADD_FAILED = 'Tambah jabatan gagal'
SESS_EDIT_FAILED = 'Edit jabatan gagal'
......@@ -76,36 +64,37 @@ class EditSchema(AddSchema):
widget=widget.HiddenWidget())
class ListSchema(NamaSchema):
id = colander.SchemaNode(colander.String(),
visible=False)
class ViewJabatan(BaseView):
@view_config(route_name='jabatan', renderer='templates/jabatan/list.pt',
def __init__(self, request):
super().__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'jabatan'
self.list_route = 'jabatan'
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Jabatan
self.list_schema = ListSchema
@view_config(route_name='jabatan', renderer='templates/table.pt',
permission='jabatan')
def view_list(self):
return dict()
return super().view_list()
@view_config(route_name='jabatan-act', renderer='json',
permission='read')
def view_act(self):
return super().view_act()
def next_act(self):
request = self.req
ses = request.session
params = request.params
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [
ColumnDT(Jabatan.id, mData='id'),
ColumnDT(Jabatan.kode, mData='kode'),
ColumnDT(Jabatan.nama, mData='nama'),
ColumnDT(Jabatan.nama_pendek, mData='nama_pendek'),
ColumnDT(Eselon.nama, mData='eselon'),
ColumnDT(Jabatan.jenis, mData='jenis'),
ColumnDT(Jabatan.status, mData='status'),
]
query = DBSession.query().select_from(Jabatan). \
outerjoin(Eselon)
rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result()
elif url_dict['act'] == 'hok':
if url_dict['act'] == 'hok':
term = 'term' in params and params['term'] or ''
qry = DBSession.query(Jabatan). \
filter(Jabatan.status == 1). \
......@@ -171,184 +160,56 @@ class ViewJabatan(BaseView):
return r
@view_config(route_name='jabatan-add',
renderer='templates/form_input.pt',
renderer='templates/form.pt',
permission='jabatan')
def view_add(self):
request = self.req
form = get_form(request, AddSchema)
if request.POST:
if 'save' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
form.set_appstruct(e.cstruct)
return dict(form=form.render(), scripts="")
save_request(request, dict(controls))
return route_list(request)
return dict(form=form.render(), scripts="")
# return dict(form=form.render())
return super().view_add()
@view_config(route_name='jabatan-edit',
renderer='templates/form_input.pt',
renderer='templates/form.pt',
permission='jabatan')
def view_edt(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
form = get_form(request, 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="")
save_request(request, dict(controls), row)
return route_list(request)
vals = row.to_dict()
values = {}
for val in vals:
if vals[val]:
values[val] = vals[val]
values['nama_pendek'] = row.nama_pendek or ''
values['nama_lain'] = row.nama_lain or ''
if not row.jenis:
values['jenis'] = 0
form.render(appstruct=values)
return dict(form=form.render(), scripts="")
def view_edit(self):
return super().view_edit()
@view_config(route_name='jabatan-view', renderer='templates/form_input.pt',
@view_config(route_name='jabatan-view', renderer='templates/form.pt',
permission='jabatan')
def view_view(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
form = get_form(request, EditSchema, buttons=(btn_cancel,))
if request.POST:
return route_list(request)
values = row.to_dict()
if not row.jenis:
values['jenis'] = 0
form.render(appstruct=values)
return dict(form=form.render(readonly=True), scripts="")
return super().view_view()
@view_config(route_name='jabatan-delete', renderer='templates/form_input.pt',
@view_config(route_name='jabatan-delete', renderer='templates/form.pt',
permission='jabatan')
def view_del(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
form = get_form(request, EditSchema, buttons=(btn_delete, btn_cancel,))
if request.POST:
if 'delete' in request.POST:
msg = 'Jabatan ID %d %s sudah dihapus.' % (row.id, row.nama)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
values = row.to_dict()
if not row.jenis:
values['jenis'] = 0
form.render(appstruct=values)
return dict(form=form.render(readonly=True), scripts="")
def form_validator(form, value):
def err_kode():
raise colander.Invalid(form,
'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
def err_nama():
raise colander.Invalid(form,
'Uraian %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Jabatan).filter_by(id=uid)
jabatan = q.first()
else:
jabatan = None
q = Jabatan.query_kode(value['kode']) # DBSession.query(Jabatan).filter_by(kode=value['kode'])
found = q.first()
if jabatan:
if found and found.id != jabatan.id:
def view_delete(self):
return super().view_delete()
def form_validator(self, form, value):
def err_kode():
raise colander.Invalid(form,
'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
def err_nama():
raise colander.Invalid(form,
'Uraian %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Jabatan).filter_by(id=uid)
jabatan = q.first()
else:
jabatan = None
q = Jabatan.query_kode(value['kode']) # DBSession.query(Jabatan).filter_by(kode=value['kode'])
found = q.first()
if jabatan:
if found and found.id != jabatan.id:
err_kode()
elif found:
err_kode()
elif found:
err_kode()
found = Jabatan.query_nama(value['nama']).first()
if jabatan:
if found and found.id != jabatan.id:
found = Jabatan.query_nama(value['nama']).first()
if jabatan:
if found and found.id != jabatan.id:
err_nama()
elif found:
err_nama()
elif found:
err_nama()
def get_form(request, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=form_validator)
schema = schema.bind(daftar_jenis=JENIS,
daftar_eselon=daftar_eselon(),
)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
def save(values, user, row=None):
if not row:
row = Jabatan()
values['created'] = datetime.now()
values['create_uid'] = user.id
else:
values['updated'] = datetime.now()
values['update_uid'] = user.id
values['status'] = 'status' in values and values['status'] and 1 or 0
row.from_dict(values)
DBSession.add(row)
DBSession.flush()
return row
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Jabatan sudah disimpan.')
def route_list(request):
return HTTPFound(location=request.route_url('jabatan'))
def query_id(request):
return DBSession.query(Jabatan).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Jabatan ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
......@@ -7,7 +7,7 @@ from pyramid.view import (view_config, )
from . import widget_os
from .dati2 import dati2_widget
from ..models import DBSession, ResKecamatan, ResDati2
from ..models import DBSession, ResKecamatan, ResDati2, ResProvinsi
from ..views import ColumnDT, DataTables, BaseView
from ...detable import DeTable
......@@ -46,7 +46,7 @@ class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), searchable=False, orderable=False, visible=False)
kode = colander.SchemaNode(colander.String(), width='100pt', title="Kode")
nama = colander.SchemaNode(colander.String(), title="Nama")
kabupaten = colander.SchemaNode(colander.String())
kabupaten = colander.SchemaNode(colander.String(), field=ResDati2.nama)
status = colander.SchemaNode(colander.Integer(), width="30pt")
......@@ -95,30 +95,10 @@ class Views(BaseView):
elif found:
err_nama()
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,
dati2_list=ResDati2.get_list())
schema.request = self.req
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
@view_config(route_name='kecamatan-view',
renderer='templates/form.pt', permission='kecamatan')
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()
form.set_appstruct(self.get_values(row))
return dict(form=form.render(readonly=True), scripts=self.form_scripts)
return super().view_view()
@view_config(route_name='kecamatan',
renderer='templates/table.pt',
......@@ -129,19 +109,15 @@ class Views(BaseView):
@view_config(route_name='kecamatan-act', renderer='json',
permission='view')
def view_act(self):
return super().view_act()
def list_join(self, query):
return query.join(ResDati2, ResDati2.id == ResKecamatan.dati2_id)
def next_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(ResKecamatan.id, mData='id'),
ColumnDT(ResKecamatan.kode, mData='kode'),
ColumnDT(ResKecamatan.nama, mData='nama'),
ColumnDT(ResKecamatan.status, mData='status'),
ColumnDT(ResDati2.nama, mData='kabupaten'), ]
query = DBSession.query().select_from(ResKecamatan) \
.join(ResDati2, ResDati2.id == ResKecamatan.dati2_id)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
elif url_dict['act'] == 'select':
if url_dict['act'] == 'select':
dati2_id = request.params["dati2_id"]
data = ResKecamatan.get_list(dati2_id)
result = {f"{k[0]}": k[1] for k in data}
......@@ -152,14 +128,28 @@ class Views(BaseView):
def view_add(self):
return super(Views, self).view_add()
def get_bindings(self, row=None):
provinsi_list = ResProvinsi.get_list()
kecamatan = row
dati2 = kecamatan and kecamatan.dati2 or None
dati2_list = dati2 and ResDati2.get_list(dati2.provinsi_id) or []
return dict(
provinsi_list=provinsi_list,
dati2_list=dati2_list,
)
def get_values(self, row, istime=False):
d = super().get_values(row, istime)
kecamatan = row
dati2 = kecamatan and kecamatan.dati2 or None
d["provinsi_id"] = dati2 and dati2.provinsi_id or None
return d
@view_config(route_name='kecamatan-edit',
renderer='templates/form.pt', permission='kecamatan')
def view_edt(self):
return super(Views, self).view_edit()
##########
# Delete
##########
@view_config(route_name='kecamatan-delete',
renderer='templates/form.pt', permission='kecamatan')
def view_delete(self):
......
......@@ -3,6 +3,7 @@ import json
import colander
from datatables import ColumnDT
from deform import Form, widget
from opensipkd.tools.buttons import btn_view, btn_delete
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
......@@ -23,7 +24,7 @@ class AddSchema(colander.Schema):
missing=colander.drop)
msg = colander.SchemaNode(
colander.String(),
widget=widget.TextAreaWidget(rows=10,),
widget=widget.TextAreaWidget(rows=10, ),
missing=colander.drop)
......@@ -34,88 +35,46 @@ class EditSchema(AddSchema):
)
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(),
visible=False)
created_at = colander.SchemaNode(
colander.DateTime())
logger = colander.SchemaNode(
colander.String())
level = colander.SchemaNode(
colander.String())
msg = colander.SchemaNode(
colander.String(),
widget=widget.TextAreaWidget(rows=10, ),
missing=colander.drop)
class Views(BaseView):
@view_config(route_name='log', renderer='templates/list.pt',
def __init__(self, request):
super().__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'log'
self.list_route = 'log'
self.list_buttons=(btn_view, btn_delete)
# self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Log
self.list_schema = ListSchema
@view_config(route_name='log', renderer='templates/table.pt',
permission='log')
def view_list(self):
url = "log"
cols = [
{'title': "ID", 'data': "id"},
{'title': "Date/Time", 'data': "created_at", 'width': "150"},
{'title': "Logger", 'data': "logger", 'width': "50"},
# {'title': "Trace", 'data': "trace", 'width': "50"},
{'title': "Level", 'data': "level", 'width': "50"},
{'title': "Message", 'data': "msg"},
]
return super().view_list()
col_defs = [{
"searchable": False,
"visible": False,
"targets": [0]
}]
buttons = "btn_view"
return dict(cols=cols, url=url, col_defs=json.dumps(col_defs),
buttons=buttons)
##########
# Action #
##########
@view_config(route_name='log-act', renderer='json_rpc',
permission='log')
def view_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [
ColumnDT(Log.id, mData='id'),
ColumnDT(Log.logger, mData='logger'),
ColumnDT(Log.level, mData='level'),
# ColumnDT(Log.trace, mData='trace'),
ColumnDT(Log.msg, mData='msg'),
ColumnDT(Log.created_at, mData='created_at', search_method='date'),
]
query = DBSession.query().select_from(Log)
rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result()
return super().view_act()
@view_config(route_name='log-view', renderer='templates/form_input.pt',
permission='log')
def view_view(self):
request = self.req
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found()
form = self.get_form(EditSchema, buttons=("Tutup",))
if request.POST:
return self.route_list()
values = row.to_dict()
form.set_appstruct(values)
return dict(form=form.render(readonly=True), scripts="")
def query_id(self):
request = self.req
return DBSession.query(Log).filter_by(id=request.matchdict['id'])
def id_not_found(self):
request = self.req
msg = 'BillerModel ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return self.route_list()
def route_list(self):
request = self.req
return HTTPFound(location=request.route_url('log'))
def get_form(self, class_form, row=None, buttons=('simpan', 'batal')):
request = self.req
schema = class_form(validator=self.form_validator)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
def form_validator(self, form, value):
pass
return super().view_view()
from datetime import datetime
import colander
from datatables import ColumnDT, DataTables
from deform import (
Form,
widget,
ValidationFailure,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from pyramid.view import (
view_config,
)
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save
from deform import (widget, )
from pyramid.view import (view_config, )
from . import BaseView
from ..models import (
DBSession,
Parameter)
# from okeuangan.views.base_view import BaseViews
SESS_ADD_FAILED = 'Tambah parameter gagal'
SESS_EDIT_FAILED = 'Edit parameter gagal'
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
......@@ -49,203 +31,58 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
# id = colander.SchemaNode(
# colander.Integer(),
# oid="id",)
########
# List #
########
@view_config(route_name='parameter', renderer='templates/parameter/list.pt',
permission='user-edit')
def view_list(request):
return dict(a={})
##########
# Action #
##########
@view_config(route_name='parameter-act', renderer='json',
permission='user-edit')
def parameter_act(request):
ses = request.session
req = request
params = req.params
url_dict = req.matchdict
if url_dict['act'] == 'grid':
columns = [ColumnDT(Parameter.id, mData="id"),
ColumnDT(Parameter.kode, mData="kode"),
ColumnDT(Parameter.nama, mData="nama"),
ColumnDT(Parameter.value, mData="value"),
ColumnDT(Parameter.status, mData="status")]
query = DBSession.query().select_from(Parameter)
row_table = DataTables(req.GET, query, columns)
return row_table.output_result()
elif url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
rows = DBSession.query(Parameter.id, Parameter.nama
).filter(
Parameter.nama.ilike('%{term}%'.format(term=term))). \
order_by(Parameter.nama).all()
r = []
for k in rows:
d = dict(id=k[0],
value=k[1])
r.append(d)
return r
#######
# Add #
#######
def form_validator(form, value):
pass
def get_form(request, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=form_validator)
schema = schema.bind() # perm_choice=PERM_CHOICE)
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
def save(values, user, row=None):
if not row:
row = Parameter()
row.created = datetime.now()
row.create_uid = user.id
row.from_dict(values)
row.updated = datetime.now()
row.update_uid = user.id
row.status = 'status' in values and values['status'] and 1 or 0
DBSession.add(row)
DBSession.flush()
return row
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Parameter sudah disimpan.')
def routes_list(request):
return HTTPFound(location=request.route_url('parameter'))
def session_failed(request, session_name):
r = dict(form=request.session[session_name])
del request.session[session_name]
return r
@view_config(route_name='parameter-add', renderer='templates/parameter/add.pt',
permission='user-edit')
def view_add(request):
req = request
ses = req.session
form = get_form(request, AddSchema)
if req.POST:
if 'simpan' in req.POST:
controls = list(req.POST.items())
try:
c = form.validate(controls)
except ValidationFailure as e:
form.set_appstruct(e.cstruct)
return dict(form=form)
save_request(request, dict(controls))
return routes_list(request)
elif SESS_ADD_FAILED in req.session:
return session_failed(request, SESS_ADD_FAILED)
return dict(form=form)
########
# Edit #
########
def query_id(request):
return DBSession.query(Parameter).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Parameter ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return routes_list(request)
@view_config(route_name='parameter-edit', renderer='templates/parameter/edit.pt',
permission='user-edit')
def view_edit(request):
row = Parameter.query_id(request.matchdict['id']).first()
if not row:
return id_not_found(request)
form = get_form(request, EditSchema)
if request.POST:
if 'save' in request.POST:
controls = list(request.POST.items())
try:
c = form.validate(controls)
except ValidationFailure as e:
form.set_appstruct(e.cstruct)
return dict(form=form.render())
save_request(request, dict(controls), row)
return routes_list(request)
elif SESS_EDIT_FAILED in request.session:
return session_failed(request, SESS_EDIT_FAILED)
values = row.to_dict()
form.set_appstruct(values)
return dict(form=form.render())
@view_config(route_name='parameter-view', renderer='templates/parameter/edit.pt',
permission='user-view')
def view_view(request):
qry = query_id(request)
row = qry.first()
if not row:
return id_not_found(request)
form = get_form(request, EditSchema, buttons=(btn_close,))
if request.POST:
return routes_list(request)
values = row.to_dict()
form.set_appstruct(values)
return dict(form=form.render(readonly=True))
##########
# Delete #
##########
@view_config(route_name='parameter-delete', renderer='templates/parameter/delete.pt',
permission='user-edit')
def view_delete(request):
q = Parameter.query_id(request.matchdict['id'])
row = q.first()
if not row:
return id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus', 'batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'Parameter ID %d %s sudah dihapus.' % (row.id, row.nama)
try:
q.delete()
DBSession.flush()
except:
msg = 'Parameter ID %d %s tidak dapat dihapus.' % (row.id, row.nama)
request.session.flash(msg)
return routes_list(request)
return dict(row=row,
form=form.render())
widget=widget.HiddenWidget(readonly=True),
visible=False)
class Views(BaseView):
def __init__(self, request):
super(Views, self).__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'parameter'
self.list_route = 'parameter'
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Parameter
self.list_schema = EditSchema
@view_config(route_name='parameter', renderer='templates/table.pt',
permission='user-edit')
def view_list(self):
return super().view_list()
@view_config(route_name='parameter-act', renderer='json',
permission='user-edit')
def view_act(self):
return super().view_act()
def next_act(self):
url_dict = self.req.matchdict
params = self.params
if url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
rows = DBSession.query(Parameter.id, Parameter.nama). \
filter(Parameter.nama.ilike('%{term}%'.format(term=term))). \
order_by(Parameter.nama).all()
r = [dict(id=k[0], value=k[1]) for k in rows]
return r
@view_config(route_name='parameter-add', renderer='templates/form.pt',
permission='user-edit')
def view_add(self):
return super().view_add()
@view_config(route_name='parameter-edit', renderer='templates/form.pt',
permission='user-edit')
def view_edit(self):
return super().view_edit()
@view_config(route_name='parameter-view', renderer='templates/form.pt',
permission='user-view')
def view_view(self):
return super().view_view()
@view_config(route_name='parameter-delete', renderer='templates/form.pt',
permission='user-edit')
def view_delete(self):
return super().view_delete()
......@@ -6,16 +6,19 @@ from opensipkd.base.views.kecamatan import kecamatan_widget
from opensipkd.base.views.provinsi import provinsi_widget
class PartnerSchema(colander.Schema):
class NamaSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode",
title="Kode")
title="Kode",
width="100pt")
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
oid="nama")
class PartnerSchema(NamaSchema):
alamat_1 = colander.SchemaNode(
colander.String(),
missing=colander.drop,
......
# from ..tools import row2dict, xls_reader
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from pyramid.view import (
view_config,
)
from deform import (widget, )
from pyramid.view import (view_config, )
from ..models import DBSession
from ..models import Permission
from ..views import ColumnDT, DataTables, BaseView
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah permission gagal'
SESS_EDIT_FAILED = 'Edit permission gagal'
......@@ -33,194 +22,46 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(),
)
id = colander.SchemaNode(
colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(),
visible=False
)
class ViewPermission(BaseView):
########
# List #
########
@view_config(route_name='permission', renderer='templates/permission/list.pt',
def __init__(self, request):
super().__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'permission'
self.list_route = 'permission'
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Permission
self.list_schema = EditSchema
@view_config(route_name='permission', renderer='templates/table.pt',
permission='user-edit')
def view_list(self):
return dict(a={})
return super().view_list()
##########
# Action #
##########
@view_config(route_name='permission-act', renderer='json',
permission='user-edit')
def view_act(self):
request = self.req
ses = request.session
params = request.params
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [
ColumnDT(Permission.id, mData='id'),
ColumnDT(Permission.perm_name, mData='perm_name'),
ColumnDT(Permission.description, mData='description'),
]
query = DBSession.query().select_from(Permission)
rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result()
return super().view_act()
#######
# ADD #
#######
@view_config(route_name='permission-add', renderer='templates/permission/add.pt',
@view_config(route_name='permission-add', renderer='templates/form.pt',
permission='user-edit')
def view_add(self):
request = self.req
form = get_form(request, AddSchema)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
c = form.validate(controls)
except ValidationFailure as e:
form.render(appstruct=e.cstruct)
return dict(form=form)
save_request(request, dict(c))
return route_list(request)
return dict(form=form)
return super().view_add()
##########
# Edit #
##########
@view_config(route_name='permission-edit', renderer='templates/permission/edt.pt',
@view_config(route_name='permission-edit', renderer='templates/form.pt',
permission='user-edit')
def view_edt(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
uid = row.id
form = get_form(request, EditSchema)
if request.POST:
if 'simpan' 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)
save_request(request, dict(controls), row)
return route_list(request)
return super().view_edit()
val = row.to_dict()
values = {}
for v in val:
if val[v]:
values[v] = val[v]
form.render(appstruct=values)
return dict(form=form)
##########
# Delete #
##########
@view_config(route_name='permission-delete', renderer='templates/permission/del.pt',
@view_config(route_name='permission-delete', renderer='templates/form.pt',
permission='user-edit')
def view_del(self):
request = self.req
q = query_id(request)
row = q.first()
if not row:
return id_not_found(request)
form = Form(colander.Schema(), buttons=('hapus', 'batal'))
if request.POST:
if 'hapus' in request.POST:
msg = 'permission ID %d sudah dihapus.' % (row.id)
q.delete()
DBSession.flush()
request.session.flash(msg)
return route_list(request)
return dict(row=row, form=form.render())
#######
# Add #
#######
def form_validator(form, value):
# def err_kode():
# raise colander.Invalid(form,
# 'Kode %s sudah digunakan oleh %s' % (
# value['kode'], found.nama))
# def err_login():
# raise colander.Invalid(form,
# 'Login %s sudah digunakan oleh kode %s' % (
# value['user_nm'], found.row.nama))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Permission).filter_by(id=uid)
row = q.first()
else:
row = None
# q = Permission.query_kode(value['kode']) #DBSession.query(Permission).filter_by(kode=value['kode'])
# found = q.first()
# if row:
# if found and found.id != row.id:
# err_kode()
# elif found:
# err_kode()
def get_form(request, class_form, row=None):
schema = class_form(validator=form_validator)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=('simpan', 'batal'))
def save(values, user, row=None):
if not row:
row = Permission()
values['perm_name'] = (values['perm_name'])
values['description'] = (values['description'])
row.from_dict(values)
DBSession.add(row)
DBSession.flush()
return row
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Permission sudah disimpan.')
return row
def route_list(request):
return HTTPFound(location=request.route_url('permission'))
########
# Edit #
########
def query_id(request):
return DBSession.query(Permission).filter_by(id=request.matchdict['id'])
def id_not_found(request):
msg = 'Permission ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return route_list(request)
def view_delete(self):
return super().view_delete()
import json
from datetime import datetime
import colander
from deform import (Form, widget, )
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_close, btn_add, btn_edit, btn_delete, btn_view
from pyramid.httpexceptions import (HTTPFound, )
from deform import (widget, )
from pyramid.view import (view_config, )
from sqlalchemy.orm import aliased
from . import widget_os
from ..models import DBSession, ResProvinsi, kategori_provinsi, flush
from ..views import ColumnDT, DataTables, BaseView
from ..models import DBSession, ResProvinsi, kategori_provinsi
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah provinsi gagal'
SESS_EDIT_FAILED = 'Edit provinsi gagal'
......@@ -42,7 +36,8 @@ class AddSchema(colander.Schema):
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
widget=widget.HiddenWidget(readonly=True),
visible=False)
class ListSchema(colander.Schema):
......@@ -116,16 +111,16 @@ class ViewProvinsi(BaseView):
return super(ViewProvinsi, self).view_act()
@view_config(route_name='provinsi-add',
renderer='templates/form_input.pt', permission='provinsi')
renderer='templates/form.pt', permission='provinsi')
def view_add(self):
return super(ViewProvinsi, self).view_add()
@view_config(route_name='provinsi-edit',
renderer='templates/form_input.pt', permission='provinsi')
renderer='templates/form.pt', permission='provinsi')
def view_edt(self):
return super(ViewProvinsi, self).view_edit()
@view_config(route_name='provinsi-delete',
renderer='templates/form_input.pt', permission='provinsi')
renderer='templates/form.pt', permission='provinsi')
def view_delete(self):
return super(ViewProvinsi, self).view_delete()
from pyramid.view import view_config
from pyramid.httpexceptions import (
HTTPFound,
HTTPNotFound,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
Button,
)
from ..models import (
DBSession,
Route,
)
from datatables import (
ColumnDT,
DataTables,
)
from datetime import datetime
import json
ReadOnlyWidget = widget.TextInputWidget(readonly=True)
from deform import (widget, )
from opensipkd.tools.buttons import btn_view, btn_edit, btn_delete
from pyramid.view import view_config
from . import BaseView
from ..models import (DBSession, Route, )
form_params = dict(scripts="")
list_params = dict(
cols=[{'title': "ID", 'data': "id"},
{'title': "Kode", 'data': "kode"},
{'title': "Nama", 'data': "nama"},
{'title': "Path", 'data': "path"},
{'title': "Type", 'data': "typ",
'class': "text-center", 'width': "50"},
],
col_defs=json.dumps([
{
"searchable": False,
"visible": False,
"targets": [0],
},
{
"searchable": True,
"orderable": True,
"targets": [1, 2, 3],
}
]),
buttons='btn_view, btn_add, btn_edit_no_id, btn_delete, btn_close',
url="/routes"
)
class EditSchema(colander.Schema):
id = colander.SchemaNode(
......@@ -56,149 +16,84 @@ class EditSchema(colander.Schema):
colander.String(), title='Nama')
def form_validator(form, values):
def err_nama():
raise colander.Invalid(
form,
'Nama %s sudah digunakan oleh ID %s' % (values['nama'], found.id)
)
def err_kode():
raise colander.Invalid(
form,
'Kode %s sudah digunakan oleh ID %s' % (values['kode'], found.id)
)
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Route).filter_by(id=uid)
row = q.first()
else:
row = None
# cek nama
q = Route.query(). \
filter_by(nama=values['nama'])
found = q.first()
if row:
if found and found.id != row.id:
class ListSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(), widget=widget.HiddenWidget(), visible=False)
kode = colander.SchemaNode(
colander.String())
nama = colander.SchemaNode(
colander.String(), title='Nama')
path = colander.SchemaNode(
colander.String(), title='Path')
type = colander.SchemaNode(
colander.String(), width="50pt")
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'routes'
self.list_route = 'routes'
self.list_buttons=(btn_view, btn_edit, btn_delete)
# self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Route
self.list_schema = ListSchema
@view_config(
route_name='routes', renderer='templates/table.pt',
permission='edit-title')
def view_list(self):
return super().view_list()
def form_validator(self, form, values):
def err_nama():
raise colander.Invalid(
form,
'Nama %s sudah digunakan oleh ID %s' % (values['nama'], found.id)
)
def err_kode():
raise colander.Invalid(
form,
'Kode %s sudah digunakan oleh ID %s' % (values['kode'], found.id)
)
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Route).filter_by(id=uid)
row = q.first()
else:
row = None
# cek nama
q = Route.query(). \
filter_by(nama=values['nama'])
found = q.first()
if row:
if found and found.id != row.id:
err_nama()
elif found:
err_nama()
elif found:
err_nama()
# cek kode
q = Route.query(). \
filter_by(kode=values['kode'])
found = q.first()
if row:
if found and found.id != row.id:
# cek kode
q = Route.query(). \
filter_by(kode=values['kode'])
found = q.first()
if row:
if found and found.id != row.id:
err_kode()
elif found:
err_kode()
elif found:
err_kode()
########
# List #
########
@view_config(
route_name='routes', renderer='templates/list.pt',
permission='edit-title')
def view_list(request):
return list_params
##########
# Action #
##########
@view_config(
route_name='routes-act', renderer='json', permission='edit-title')
def routes_act(request):
ses = request.session
req = request
params = req.params
url_dict = req.matchdict
if url_dict['act'] == 'grid':
columns = []
columns.append(ColumnDT(Route.id, mData="id"))
columns.append(ColumnDT(Route.kode, mData="kode"))
columns.append(ColumnDT(Route.nama, mData="nama"))
columns.append(ColumnDT(Route.path, mData="path"))
columns.append(ColumnDT(Route.type, mData="typ"))
query = DBSession.query().select_from(Route)
rowTable = DataTables(req.GET, query, columns)
return rowTable.output_result()
elif url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
rows = DBSession.query(Route.id, Route.nama
).filter(
Route.nama.ilike('%{term}%'.format(term=term))). \
order_by(Route.nama).all()
r = []
for k in rows:
d = dict(id=k[0], value=k[1])
r.append(d)
return r
def get_form(request, class_form, row=None):
schema = class_form() # validator=form_validator
schema.request = request
return Form(schema, buttons=('simpan', 'tutup'))
def save(values, user, row=None):
if not row:
row = Route()
row.created = datetime.now()
row.create_uid = user.id
row.from_dict(values)
row.updated = datetime.now()
row.update_uid = user.id
row.status = 'status' in values and values['status'] and 1 or 0
DBSession.add(row)
DBSession.flush()
return row
def save_request(request, values, row=None):
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
row = save(values, request.user, row)
request.session.flash('Routes sudah disimpan.')
def routes_list(request):
return HTTPFound(location=request.route_url('routes'))
########
# Edit #
########
def query_id(request):
return DBSession.query(Route).filter_by(id=request.matchdict['id'])
@view_config(
route_name='routes-edit', renderer='templates/form-simple.pt',
permission='edit-title')
def view_routes_edit(request):
row = Route.query_id(request.matchdict['id']).first()
if not row:
return HTTPNotFound()
form = get_form(request, EditSchema)
if request.POST:
if 'simpan' in request.POST:
controls = list(request.POST.items())
try:
c = form.validate(controls)
except ValidationFailure as e:
form.render(e.cstruct)
return dict(form=form)
save_request(request, dict(c), row)
return routes_list(request)
@view_config(
route_name='routes-act', renderer='json', permission='edit-title')
def routes_act(self):
return super().view_act()
values = row.to_dict()
return dict(form=form.render(appstruct=values))
form.set_appstruct(values)
return dict(form=form)
@view_config(
route_name='routes-edit', renderer='templates/form.pt',
permission='edit-title')
def view_edit(self):
return super().view_edit()
......@@ -180,40 +180,6 @@ class Views(BaseView):
permission='user-edit')
def view_edit(self):
return super(Views, self).view_edit()
# q = DBSession.query(User).filter_by(id=request.matchdict['id'])
# if request.user.company_id:
# q = q.filter_by(company_id=request.user.company_id)
# user = q.first()
# if not user:
# return HTTPNotFound()
# if user.id == request.user.id:
# form = get_form(request, AddSchema, user)
# else:
# if 'opensipkd.webr.models' in get_modules():
# form = get_form(request, EditSchema2, user)
# else:
# form = get_form(request, EditSchema, user)
# resp = dict(title=_('Edit user'))
# if not request.POST:
# d = user.to_dict()
# d['groups'] = user_group_set(user)
# resp['form'] = form.render(appstruct=d)
# return resp
# if 'save' not in request.POST:
# return HTTPFound(location=request.route_url('user'))
# items = request.POST.items()
# try:
# c = form.validate(items)
# except ValidationFailure:
# resp['form'] = form.render()
# return resp
# update(request, user, dict(c.items()))
# data = dict(username=user.user_name)
# ts = _('user-updated', default='${username} profile updated', mapping=data)
# request.session.flash(ts)
# return HTTPFound(location=request.route_url('user'))
@view_config(
route_name='user-view', renderer='templates/form.pt',
......
......@@ -181,8 +181,8 @@ class Select2MsWidget(Select2Widget):
See `select2 docs on tagging <https://select2.org/tagging>`_ for
more details.
"""
template = "select2_ms.pt"
template = "select2_ms.pt"
class QtyWidget(Widget):
template = "opensipkd.base:/views/templates/qty.pt"
......
......@@ -22,5 +22,4 @@
>${description}</p>
</tal:block>
</tal:if>
</tal:loop>
......@@ -11,6 +11,8 @@ from deform import field
from . import widget
log = logging.getLogger(__name__)
class DeTable(field.Field):
"""
Field representing an entire form.
......@@ -92,6 +94,7 @@ class DeTable(field.Field):
"""
css_class = "deform" # bw compat only; pass a widget to override
def __init__(
self,
schema,
......@@ -117,7 +120,7 @@ class DeTable(field.Field):
btn_delete_js = "{window.location = o%sUri+'/'+m%sID+'/delete%s';}" % (tableid, tableid, params)
btn_csv_js = "{window.location = o%sUri+'/csv/act%s';}" % (tableid, params)
btn_pdf_js = "{window.open(o%sUri+'/pdf/act%s');}" % (tableid, params)
action_suffix=f"{action_suffix}{params}"
action_suffix = f"{action_suffix}{params}"
field.Field.__init__(self, schema, **kw)
_buttons = []
for button in buttons:
......@@ -146,10 +149,9 @@ class DeTable(field.Field):
table_widget = getattr(schema, "widget", None)
if table_widget is None:
table_widget = widget.TableWidget()
self.widget = table_widget
columns = []
cols2=[]
cols2 = []
for f in schema:
d = {'data': f.name}
data = []
......@@ -160,7 +162,7 @@ class DeTable(field.Field):
if hasattr(f, 'aligned'):
d["className"] = f.aligned
data.append(f"className: {f.aligned}")
data.append(f"className: '{f.aligned}'")
if hasattr(f, 'searchable'):
d["searchable"] = f.searchable
data.append(f"searchable: {f.searchable}")
......@@ -173,30 +175,40 @@ class DeTable(field.Field):
d["orderable"] = f.orderable
data.append(f"orderable: {f.orderable}")
thousand = hasattr(f, 'thousand') and f.thousand or None
separator = thousand and "separator" in thousand and thousand["separator"] or ','
decimal = thousand and "decimal" in thousand and thousand["decimal"] or '.'
point = thousand and "point" in thousand and thousand["point"] or 2
currency = thousand and "currency" in thousand and thousand["currency"] or ""
if thousand or type(f.typ)==colander.Float() or type(f.typ)==colander.Integer():
d["render"]=f"<script>$.fn.dataTable.render.number( '{separator}', '{decimal}', {point}, '{currency}' )</script>"
if thousand or type(f.typ) == colander.Float() or type(f.typ) == colander.Integer():
d[
"render"] = f"<script>$.fn.dataTable.render.number( '{separator}', '{decimal}', {point}, '{currency}' )</script>"
if 'className' not in d:
d["className"] = "text-right"
# data.append(f'renderer: $.fn.dataTable.render.number( "{separator}", "{decimal}", {point}, "{currency}" )')
# if hasattr(f, "edit_link"):
# s = """function ( data, type, row, meta ) {
# return '<a href="'+data+'">Download</a>';
# }"""
# d["render"] = s
columns.append(d)
cols2.append(data)
# columns.append(dict(title="Action",
# data='id',
# width="40pt",
# orderable=False,
# align="text-center",
# searchable=False))
self.columns = json.dumps(columns)
self.columns = self.columns.replace('"<script>',"").replace('</script>"',"")
self.columns = self.columns.replace('"<script>', "").replace('</script>"', "").replace("\n", "")
# self.columns = columns
# self.columns = json.dumps(cols2)
self.url = action
self.url_suffix = action_suffix
self.sorts = sorts
self.paginates=paginates
self.filters=filters
self.paginates = paginates
self.filters = filters
class Button(object):
"""
......
......@@ -29,8 +29,8 @@
class="table table-bordered table-hover table-condensed dataTable no-footer">
<thead>
<tr>
<th tal:repeat="child field">${child.title}
</th>
<th tal:repeat="child field">${child.title}</th>
<!--? <th>Action</th>-->
</tr>
</thead>
<tbody>
......@@ -85,8 +85,7 @@
[10, 25, 50, 100],
[10, 25, 50, 100]
],
// columnDefs: [{ "visible": false, "searchable": false, "orderable": false, "targets": [0] }],
columns: ${columns},
columns: ${structure:columns},
"language": language,
});
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!