Commit dc70cf17 by aagusti

penggunaan simple development

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