Commit a30218b3 by aa.gusti

penambahan company

1 parent b4d257e4
...@@ -21,6 +21,9 @@ def upgrade(): ...@@ -21,6 +21,9 @@ def upgrade():
helpers = context.opts['helpers'] helpers = context.opts['helpers']
if not helpers.table_has_column('users', 'partner_id'): if not helpers.table_has_column('users', 'partner_id'):
op.add_column('users', sa.Column('partner_id', sa.Integer)) op.add_column('users', sa.Column('partner_id', sa.Integer))
if not helpers.table_has_column('partner', 'company_id'):
op.add_column('partner', sa.Column('company_id', sa.Integer))
def downgrade(): def downgrade():
......
...@@ -6,5 +6,36 @@ from .partner import * ...@@ -6,5 +6,36 @@ from .partner import *
from .departemen import * from .departemen import *
# from .meta import * # from .meta import *
from .pegawai import * from .pegawai import *
# from .targets import * # from .targets import *
# from .wilayah import * # from .wilayah import *
ALL_TABLES = {}
for sub_class in Base.__subclasses__():
if hasattr(sub_class, "__tablename__"):
tablename = sub_class.__tablename__
if tablename not in ALL_TABLES:
ALL_TABLES.update({tablename: sub_class})
def query_table(table_name, fields=None, domain=None):
cls = ALL_TABLES[table_name]
if fields:
query = DBSession.query().select_from(cls)
for field in fields:
query = query.add_columns(*[getattr(cls, c) for c in fields])
else:
query = DBSession.query(cls)
if domain:
filter_expressions = []
for d in domain:
field = getattr(cls, d[0])
operator = d[1]
value = d[2]
filter_expressions.append(field.op(operator)(value))
query = query.filter(
*[
e for i, e in enumerate(filter_expressions)
if e is not None]
)
return query
...@@ -73,8 +73,18 @@ class DefaultModel(CommonModel): ...@@ -73,8 +73,18 @@ class DefaultModel(CommonModel):
return db_session.query(func.count('id')).scalar() return db_session.query(func.count('id')).scalar()
@classmethod @classmethod
def query(cls, db_session=DBSession): def query(cls, db_session=DBSession, filters=None):
return db_session.query(cls) query = db_session.query(cls)
if filters:
filter_expressions = []
for d in filters:
field = getattr(cls, d[0])
operator = d[1]
value = d[2]
filter_expressions.append(field.op(operator)(value))
query = query.filter(
*[e for i, e in enumerate(filter_expressions) if e is not None])
return query
@classmethod @classmethod
def query_id(cls, row_id, db_session=DBSession): def query_id(cls, row_id, db_session=DBSession):
......
from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, ForeignKey from sqlalchemy import Column, String, SmallInteger, Integer, DateTime, ForeignKey
from ziggurat_foundations.tests import User from ziggurat_foundations.tests import User
from .base import NamaModel, DefaultModel, DBSession, KodeModel
from .meta import Base from .meta import Base
from .base import NamaModel, DefaultModel, DBSession, KodeModel
from .partner import Partner
class Route(Base, NamaModel): class Route(Base, NamaModel):
...@@ -37,3 +38,8 @@ class UserDeviceModel(Base, KodeModel): ...@@ -37,3 +38,8 @@ class UserDeviceModel(Base, KodeModel):
token = Column(String(256)) token = Column(String(256))
logged_in = Column(Integer) logged_in = Column(Integer)
las_login_date = Column(DateTime) las_login_date = Column(DateTime)
class ResCompany(Base, NamaModel):
__tablename__ = 'company'
partner_id = Column(Integer, ForeignKey(Partner.id))
\ No newline at end of file \ No newline at end of file
...@@ -8,7 +8,7 @@ from sqlalchemy import ( ...@@ -8,7 +8,7 @@ from sqlalchemy import (
from opensipkd.base.models.common import NamaModel from opensipkd.base.models.common import NamaModel
from .wilayah import ResProvinsi, ResDesa, ResKecamatan, ResDati2 from .wilayah import ResProvinsi, ResDesa, ResKecamatan, ResDati2
from ..models import (Base) from .meta import (Base)
class PartnerModel(NamaModel): class PartnerModel(NamaModel):
...@@ -20,6 +20,7 @@ class PartnerModel(NamaModel): ...@@ -20,6 +20,7 @@ class PartnerModel(NamaModel):
fax = Column(String(16)) fax = Column(String(16))
mobile = Column(String(16)) mobile = Column(String(16))
website = Column(String(64)) website = Column(String(64))
# pic = Column(String(16)) # pic = Column(String(16))
# pic_mobile = Column(String(16)) # pic_mobile = Column(String(16))
# pic_email = Column(String(16)) # pic_email = Column(String(16))
...@@ -63,6 +64,8 @@ class Partner(Base, PartnerModel): ...@@ -63,6 +64,8 @@ class Partner(Base, PartnerModel):
dati2_id = Column(Integer, ForeignKey(ResDati2.id)) dati2_id = Column(Integer, ForeignKey(ResDati2.id))
kecamatan_id = Column(Integer, ForeignKey(ResKecamatan.id)) kecamatan_id = Column(Integer, ForeignKey(ResKecamatan.id))
desa_id = Column(Integer, ForeignKey(ResDesa.id)) desa_id = Column(Integer, ForeignKey(ResDesa.id))
company_id = Column(Integer)
# npwp = Column(String(16)) # npwp = Column(String(16))
# npwpd = Column(String(16)) # npwpd = Column(String(16))
# #
......
from opensipkd.base.models import TABLE_ARGS
from sqlalchemy import ( from sqlalchemy import (
Column, Column,
ForeignKey, ForeignKey,
...@@ -5,9 +6,8 @@ from sqlalchemy import ( ...@@ -5,9 +6,8 @@ from sqlalchemy import (
SmallInteger, SmallInteger,
) )
from ..models import Base from .meta import Base
from ..models import (NamaModel, from .common import (NamaModel)
TABLE_ARGS)
kategori_provinsi = ( kategori_provinsi = (
("provinsi", "Provinsi"), ("provinsi", "Provinsi"),
......
...@@ -160,3 +160,10 @@ desa-view,/desa/{id}/view,Desa/Kelurahan View,1,0 ...@@ -160,3 +160,10 @@ desa-view,/desa/{id}/view,Desa/Kelurahan View,1,0
desa-delete,/desa/{id}/delete,Desa/Kelurahan Hapus,1,0 desa-delete,/desa/{id}/delete,Desa/Kelurahan Hapus,1,0
desa-act,/desa/{act}/act,Desa/Kelurahan Act,1,0 desa-act,/desa/{act}/act,Desa/Kelurahan Act,1,0
desa-rpt,/desa/{rpt}/rpt,Desa/Kelurahan Report,1,0 desa-rpt,/desa/{rpt}/rpt,Desa/Kelurahan Report,1,0
company,/company,Pemda,1,0
company-add,/company/add,Pemda Add,1,0
company-edit,/company/{id}/edit,Pemda Edit,1,0
company-view,/company/{id}/view,Pemda View,1,0
company-delete,/company/{id}/delete,Pemda Hapus,1,0
company-act,/company/{act}/act,Pemda Act,1,0
company-rpt,/company/{rpt}/rpt,Pemda Report,1,0
import json
import colander
from deform import (widget, Form, ValidationFailure, )
from opensipkd.base.models import ResProvinsi, ResDati2, ResDesa
from opensipkd.tools.buttons import btn_close, btn_cancel, btn_save
from pyramid.view import (view_config, )
from .kecamatan import kecamatan_widget
from .partner_base import PartnerSchema
from ..models import DBSession, ResCompany, ResKecamatan, Partner
from ..views import ColumnDT, DataTables, BaseView
# from opensipkd.base.views import partner
SESS_ADD_FAILED = 'Tambah pemda gagal'
SESS_EDIT_FAILED = 'Edit pemda gagal'
@colander.deferred
def company_widget(node, kw):
values = kw.get('company_list', [])
print(values)
values.insert(0, ("", "Select Pemda"))
return widget.Select2Widget(values=values,
placeholder="Pilih Organisasi")
class AddSchema(PartnerSchema):
def after_bind(self, node, kw):
self["email"].missing = colander.drop
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
partner_id = colander.SchemaNode(colander.Integer(),
widget=widget.HiddenWidget(),
missing=colander.drop,
oid="partner_id")
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.table = ResCompany
########
# List #
########
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(ResCompany).filter_by(id=uid)
row = q.first()
else:
row = None
q = ResCompany.query_kode(value['kode'])
found = q.first()
if row:
if found and found.id != row.id:
err_kode()
elif found:
err_kode()
found = ResCompany.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)
@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()
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',
renderer='templates/list.pt',
permission='company')
def view_list(self):
return super().view_list()
@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)
row_table = DataTables(request.GET, query, columns)
return row_table.output_result()
@view_config(route_name='company-add',
renderer='templates/form_input.pt', permission='company')
def view_add(self):
return super(ViewCompany, self).view_add()
########
# Edit #
########
@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)
@view_config(route_name='company-delete',
renderer='templates/form_input.pt', permission='company')
def view_delete(self):
return super(ViewCompany, self).view_delete()
def save_request(self, values, row=None):
if 'partner_id' in values:
part = Partner.query_id(values['partner_id']).first()
values["id"] = part.id
else:
part = None
if "id" in values:
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:
values["id"] = self.req.matchdict["id"]
row = self.save(values, self.req.user, row)
return row
...@@ -16,21 +16,15 @@ SESS_EDIT_FAILED = 'Edit dati2 gagal' ...@@ -16,21 +16,15 @@ SESS_EDIT_FAILED = 'Edit dati2 gagal'
@colander.deferred @colander.deferred
def dati2_widget(node, kw): def dati2_widget(node, kw):
default_url = "/kecamatan/select/act?dati2_id="
default_slave = "kecamatan_id"
values = kw.get('dati2_list', []) values = kw.get('dati2_list', [])
url = kw.get('dati2_url', []) url = node and hasattr(node, 'slave_url') and node.slave_url or ""
slave = kw.get('dati2_slave', []) slave = node and hasattr(node, 'slave') and node.slave or ""
if not url:
url = default_url
if not slave:
slave = default_slave
values.insert(0, ("", "Pilih Kab/Kota...")) values.insert(0, ("", "Pilih Kab/Kota..."))
return widget_os.Select2MsWidget(values=values, return widget_os.Select2MsWidget(values=values,
url=url, url=url,
slave=slave) slave=slave,
placeholder="Pilih Kota/Kabupaten"
)
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
...@@ -161,7 +155,6 @@ class ViewDati2(BaseView): ...@@ -161,7 +155,6 @@ class ViewDati2(BaseView):
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_input.pt', permission='dati2')
def view_add(self): def view_add(self):
......
...@@ -16,7 +16,8 @@ SESS_EDIT_FAILED = 'Edit desa gagal' ...@@ -16,7 +16,8 @@ SESS_EDIT_FAILED = 'Edit desa gagal'
@colander.deferred @colander.deferred
def desa_widget(node, kw): def desa_widget(node, kw):
values = kw.get('desa_list', []) values = kw.get('desa_list', [])
return widget.Select2Widget(values=values) return widget.Select2Widget(values=values,
placeholder="Pilih Desa/Kelurahan")
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
......
...@@ -16,15 +16,9 @@ SESS_EDIT_FAILED = 'Edit kecamatan gagal' ...@@ -16,15 +16,9 @@ SESS_EDIT_FAILED = 'Edit kecamatan gagal'
@colander.deferred @colander.deferred
def kecamatan_widget(node, kw): def kecamatan_widget(node, kw):
default_url = "/desa/select/act?kecamatan_id="
default_slave = "desa_id"
values = kw.get('kecamatan_list', []) values = kw.get('kecamatan_list', [])
url = kw.get('kecamatan_url', []) url = node and hasattr(node, 'slave_url') and node.slave_url or ""
slave = kw.get('kecamatan_slave', []) slave = node and hasattr(node, 'slave') and node.slave or ""
if not url:
url = default_url
if not slave:
slave = default_slave
values.insert(0, ("", "Pilih Kecamatan...")) values.insert(0, ("", "Pilih Kecamatan..."))
return widget_os.Select2MsWidget(values=values, return widget_os.Select2MsWidget(values=values,
......
...@@ -7,6 +7,8 @@ from deform import ( ...@@ -7,6 +7,8 @@ from deform import (
widget, widget,
ValidationFailure, ValidationFailure,
) )
from opensipkd.base.models.common import ResCompany
from opensipkd.base.models import User, ResProvinsi, ResDati2, ResKecamatan, ResDesa from opensipkd.base.models import User, ResProvinsi, ResDati2, ResKecamatan, ResDesa
from pyramid.httpexceptions import ( from pyramid.httpexceptions import (
HTTPFound, HTTPFound,
...@@ -19,103 +21,18 @@ from opensipkd.tools.buttons import btn_save, btn_cancel, btn_delete ...@@ -19,103 +21,18 @@ from opensipkd.tools.buttons import btn_save, btn_cancel, btn_delete
from .dati2 import dati2_widget from .dati2 import dati2_widget
from .desa import desa_widget from .desa import desa_widget
from .kecamatan import kecamatan_widget from .kecamatan import kecamatan_widget
from .partner_base import PartnerSchema
from .provinsi import provinsi_widget from .provinsi import provinsi_widget
from ..models import DBSession from ..models import DBSession
from ..models import Partner from ..models import Partner
# from ..models.partner import PartnerUserModel
from ..views import ColumnDT, DataTables, BaseView from ..views import ColumnDT, DataTables, BaseView
from .company import company_widget
SESS_ADD_FAILED = 'Tambah partner gagal' SESS_ADD_FAILED = 'Tambah partner gagal'
SESS_EDIT_FAILED = 'Edit partner gagal' SESS_EDIT_FAILED = 'Edit partner gagal'
class AddSchema(colander.Schema): class AddSchema(PartnerSchema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode",
title="Kode")
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
oid="nama")
alamat_1 = colander.SchemaNode(
colander.String(),
missing=colander.drop,
validator=colander.Length(max=128),
oid="alamat_1")
alamat_2 = colander.SchemaNode(
colander.String(),
missing=colander.drop,
validator=colander.Length(max=128),
oid="alamat_2")
# kelurahan = colander.SchemaNode(
# colander.String(),
# missing=colander.drop,
# validator=colander.Length(max=64),
# oid="kelurahan")
# kecamatan = colander.SchemaNode(
# colander.String(),
# missing=colander.drop,
# validator=colander.Length(max=64),
# oid="kecamatan")
# kota = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=64),
# missing=colander.drop,
# oid="kota")
# provinsi = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=64),
# missing=colander.drop,
# oid="provinsi")
provinsi_id = colander.SchemaNode(
colander.Integer(),
widget=provinsi_widget,
missing=colander.drop,
oid="provinsi_id",
url="",
slave="dati2_id",
)
dati2_id = colander.SchemaNode(
colander.Integer(),
widget=dati2_widget,
missing=colander.drop,
oid="dati2_id")
kecamatan_id = colander.SchemaNode(
colander.Integer(),
missing=colander.drop,
widget=kecamatan_widget,
oid="kecamatan_id")
desa_id = colander.SchemaNode(
colander.Integer(),
widget=desa_widget,
missing=colander.drop,
oid="desa_id")
email = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
oid="email")
phone = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
missing=colander.drop,
oid="phone")
fax = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
missing=colander.drop,
oid="fax")
mobile = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
missing=colander.drop,
oid="mobile")
website = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
missing=colander.drop,
oid="website")
is_vendor = colander.SchemaNode( is_vendor = colander.SchemaNode(
colander.Boolean(), colander.Boolean(),
oid="is_vendor", oid="is_vendor",
...@@ -124,9 +41,11 @@ class AddSchema(colander.Schema): ...@@ -124,9 +41,11 @@ class AddSchema(colander.Schema):
colander.Boolean(), colander.Boolean(),
oid="is_customer", oid="is_customer",
title="Customer") title="Customer")
status = colander.SchemaNode( company_id = colander.SchemaNode(
colander.Boolean(), colander.Integer(),
oid="status") widget=company_widget,
oid="company_id",
title="Company")
class EditSchema(AddSchema): class EditSchema(AddSchema):
...@@ -340,19 +259,20 @@ def form_validator(form, value): ...@@ -340,19 +259,20 @@ def form_validator(form, value):
def get_form(request, class_form, row=None, buttons=(btn_save, btn_cancel)): def get_form(request, class_form, row=None, buttons=(btn_save, btn_cancel)):
schema = class_form(validator=form_validator)
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 [] 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 [] 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 [] desa_list = row and row.kecamatan_id and ResDesa.get_list(row.kecamatan_id) or []
schema = schema.bind(provinsi_list=provinsi_list, schema = class_form(validator=form_validator)
dati2_list=dati2_list, schema = schema.bind(
kecamatan_list=kecamatan_list, request=request,
desa_list=desa_list provinsi_list=provinsi_list,
) dati2_list=dati2_list,
kecamatan_list=kecamatan_list,
desa_list=desa_list,
company_list=ResCompany.get_list()
)
schema.request = request schema.request = request
# if row:
# schema.deserialize(row)
return Form(schema, buttons=buttons) return Form(schema, buttons=buttons)
......
import colander
from opensipkd.base.views.dati2 import dati2_widget
from opensipkd.base.views.desa import desa_widget
from opensipkd.base.views.kecamatan import kecamatan_widget
from opensipkd.base.views.provinsi import provinsi_widget
class PartnerSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode",
title="Kode")
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
oid="nama")
alamat_1 = colander.SchemaNode(
colander.String(),
missing=colander.drop,
validator=colander.Length(max=128),
oid="alamat_1")
alamat_2 = colander.SchemaNode(
colander.String(),
missing=colander.drop,
validator=colander.Length(max=128),
oid="alamat_2")
# kelurahan = colander.SchemaNode(
# colander.String(),
# missing=colander.drop,
# validator=colander.Length(max=64),
# oid="kelurahan")
# kecamatan = colander.SchemaNode(
# colander.String(),
# missing=colander.drop,
# validator=colander.Length(max=64),
# oid="kecamatan")
# kota = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=64),
# missing=colander.drop,
# oid="kota")
# provinsi = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=64),
# missing=colander.drop,
# oid="provinsi")
provinsi_id = colander.SchemaNode(
colander.Integer(),
widget=provinsi_widget,
missing=colander.drop,
oid="provinsi_id",
slave="dati2_id",
slave_url="/dati2/select/act?provinsi_id=",
title="Provinsi",
)
dati2_id = colander.SchemaNode(
colander.Integer(),
widget=dati2_widget,
missing=colander.drop,
slave="kecamatan_id",
slave_url="/kecamatan/select/act?dati2_id=",
title="Kab/Kota",
oid="dati2_id")
kecamatan_id = colander.SchemaNode(
colander.Integer(),
missing=colander.drop,
widget=kecamatan_widget,
slave="desa_id",
slave_url="/desa/select/act?kecamatan_id=",
title="Kecamatan",
oid="kecamatan_id")
desa_id = colander.SchemaNode(
colander.Integer(),
widget=desa_widget,
missing=colander.drop,
title="Desa/Kelurahan",
oid="desa_id")
email = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
oid="email")
phone = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
missing=colander.drop,
oid="phone")
fax = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
missing=colander.drop,
oid="fax")
mobile = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=16),
missing=colander.drop,
oid="mobile")
website = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=128),
missing=colander.drop,
oid="website")
status = colander.SchemaNode(
colander.Boolean(),
oid="status")
...@@ -18,17 +18,10 @@ SESS_EDIT_FAILED = 'Edit provinsi gagal' ...@@ -18,17 +18,10 @@ SESS_EDIT_FAILED = 'Edit provinsi gagal'
@colander.deferred @colander.deferred
def provinsi_widget(node, kw): def provinsi_widget(node, kw):
default_url = "/dati2/select/act?provinsi_id="
default_slave = "dati2_id"
values = kw.get('provinsi_list', []) values = kw.get('provinsi_list', [])
url = kw.get('provinsi_url', []) url = node and hasattr(node, 'slave_url') and node.slave_url or ""
slave = kw.get('provinsi_slave', []) slave = node and hasattr(node, 'slave') and node.slave or ""
if not url:
url = default_url
if not slave:
slave = default_slave
values.insert(0, ("", "Pilih Propinsi...")) values.insert(0, ("", "Pilih Propinsi..."))
return widget_os.Select2MsWidget(values=values, return widget_os.Select2MsWidget(values=values,
url=url, url=url,
slave=slave, slave=slave,
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view', 'parameter-delete']; param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view', 'parameter-delete'];
dep_path ['departemen', 'departemen-add', 'departemen-edit', 'departemen-view', 'departemen-delete']; dep_path ['departemen', 'departemen-add', 'departemen-edit', 'departemen-view', 'departemen-delete'];
partner_path ['partner', 'partner-add', 'partner-edt', 'partner-view', 'partner-del']; partner_path ['partner', 'partner-add', 'partner-edt', 'partner-view', 'partner-del'];
company_path ['company', 'company-add', 'company-edt', 'company-view', 'company-del'];
part_dep_path ['partner-departemen', 'partner-departemen-add', 'partner-departemen-edit', 'partner-departemen-view', part_dep_path ['partner-departemen', 'partner-departemen-add', 'partner-departemen-edit', 'partner-departemen-view',
'partner-departemen-delete']; 'partner-departemen-delete'];
jabatan_path ['jabatan', 'jabatan-add', 'jabatan-edit', 'jabatan-view', 'jabatan-delete']; jabatan_path ['jabatan', 'jabatan-add', 'jabatan-edit', 'jabatan-view', 'jabatan-delete'];
...@@ -202,6 +203,9 @@ ...@@ -202,6 +203,9 @@
<li tal:condition="has_permission(request, 'parameter')" <li tal:condition="has_permission(request, 'parameter')"
tal:attributes="class request.matched_route.name in param_path and 'active'"> tal:attributes="class request.matched_route.name in param_path and 'active'">
<a href="${home}/parameter">Parameter</a></li> <a href="${home}/parameter">Parameter</a></li>
<li tal:condition="has_permission(request, 'company')"
tal:attributes="class request.matched_route.name in company_path and 'active'">
<a href="${home}/company">Pemerintah</a></li>
<li tal:condition="has_permission(request, 'eselon')" <li tal:condition="has_permission(request, 'eselon')"
tal:attributes="class request.matched_route.name in eselon_path and 'active'"> tal:attributes="class request.matched_route.name in eselon_path and 'active'">
<a href="${home}/eselon">Eselon</a></li> <a href="${home}/eselon">Eselon</a></li>
......
...@@ -71,6 +71,8 @@ ...@@ -71,6 +71,8 @@
function(oid) { function(oid) {
$('#' + oid).change(function () { $('#' + oid).change(function () {
$("#${slave}").val(""); $("#${slave}").val("");
$("#${slave}").empty();
$("#${slave}").append('<option value="" selected disabled>Pilih Data...</option>');
var value = $(this).val(); var value = $(this).val();
if (value) { if (value) {
$.ajax({ $.ajax({
...@@ -78,8 +80,6 @@ ...@@ -78,8 +80,6 @@
url: "${url}" + value, url: "${url}" + value,
success: function (res) { success: function (res) {
if (res) { if (res) {
$("#${slave}").empty();
$("#${slave}").append('<option value="">Pilih Data...</option>');
$.each(res, function (key, value) { $.each(res, function (key, value) {
$("#${slave}").append('<option value="' + key + '">' + value + '</option>'); $("#${slave}").append('<option value="' + key + '">' + value + '</option>');
}); });
...@@ -88,9 +88,8 @@ ...@@ -88,9 +88,8 @@
} }
} }
}); });
} else {
$("#${slave}").empty();
} }
$("#${slave}").change();
}); });
}); });
</script> </script>
......
import unittest
from pyramid import testing
class MyTest(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
def tearDown(self):
testing.tearDown()
def test_view_fn_query_table(self):
from pyramid.httpexceptions import HTTPForbidden
from opensipkd.base.models import query_table
res = query_table('routes', ['id'])
print(res.first())
# , [('id', '=', 1)]
# self.config.testing_securitypolicy(userid='hank',
# permissive=False)
# request = testing.DummyRequest()
# request.context = testing.DummyResource()
# self.assertRaises(HTTPForbidden, view_fn, request)
# def test_view_fn_allowed(self):
# from my.package import view_fn
# self.config.testing_securitypolicy(userid='hank',
# permissive=True)
# request = testing.DummyRequest()
# request.context = testing.DummyResource()
# response = view_fn(request)
# self.assertEqual(response, {'greeting':'hello'})
import unittest
from configparser import ConfigParser
import transaction
from pyramid import testing
from sqlalchemy import create_engine
from opensipkd.base.models import (
DBSession,
Base
)
from opensipkd.base import main
# def _initTestingDB():
# engine = create_engine('postgresql://aagusti:a@localhost/demo')
# Base.metadata.create_all(engine)
# DBSession.configure(bind=engine)
# # with transaction.manager:
# # model = Page('FrontPage', 'This is the front page')
# # DBSession.add(model)
# return DBSession
def settings():
config = ConfigParser()
config.read('/home/aagusti/apps/base/test.ini')
dictionary = {}
for section in config.sections():
dictionary[section] = {}
for option in config.options(section):
try:
dictionary[section][option] = config.get(section, option)
except:
pass
return dictionary
class PageModelTests(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
config = settings()
main(self.config, **config['app:main'])
def tearDown(self):
# self.session.remove()
testing.tearDown()
def test_view_fn_query_table(self):
from pyramid.httpexceptions import HTTPForbidden
from opensipkd.base.models import query_table
res = query_table('routes', ['id'])
row = res.first()
assert row.id == 1
def test_view_fn_query_table2(self):
from pyramid.httpexceptions import HTTPForbidden
from opensipkd.base.models import query_table
res = query_table('routes', ['id', 'nama'], [('id', '=', 2)])
row = res.first()
assert row.id == 2
if __name__ == "__main__":
print("START")
config = testing.setUp()
cfg = settings()
main(config, **cfg['app:main'])
from opensipkd.base.models import query_table
res = query_table('routes', ['id', 'nama', 'kode'],
[('|', ('nama', 'ilike', "a%"),
('kode', 'ilike', 'g%'))])
for row in res.all():
print(row.id, row.nama, row.kode)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!