Commit db87b664 by Prismana

pembaruan validator pada user, departemen dan provinsi

1 parent db49460f
......@@ -4,6 +4,8 @@ __pycache__/
*$py.class
.vs/
.vscode/
base.ini
# C extensions
*.so
......
File mode changed
......@@ -698,9 +698,9 @@ def main(global_config, **settings):
if 'localization' not in settings:
settings['localization'] = 'id_ID.UTF-8'
locale.setlocale(locale.LC_ALL, settings['localization'])
if 'timezone' not in settings:
settings['timezone'] = DefaultTimeZone
# locale.setlocale(locale.LC_ALL, settings['localization'])
# if 'timezone' not in settings:
# settings['timezone'] = DefaultTimeZone
# modules = get_modules(settings)
# from importlib import import_module
......
......@@ -39,44 +39,82 @@ def departemen_widget_form():
{"js": "opensipkd.base:static/js/form/departemen_form.js"}),
)
# Mencoba membuat validator sendiri
class Validator:
def __init__(self, user):
self.user = user
# Validator nama
class NameValidator(Validator):
def __call__(self, node, value):
name = value
if (len(name) > 128):
raise colander.Invalid(node, _('Maksimal 128 karakter'))
@colander.deferred
def name_validator(node, kw):
return NameValidator(kw['user'])
class AddSchema(colander.Schema):
parent_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(), oid="parent_id", missing=colander.drop,
)
widget=widget.HiddenWidget(),
oid="parent_id",
missing=colander.drop,)
parent_nm = colander.SchemaNode(
colander.String(), missing=colander.drop,
colander.String(),
missing=colander.drop,
widget=widget.AutocompleteInputWidget(
size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/departemen.js"}),
requirements=(("typeahead", None),
("deform", None),
{"js": "opensipkd.base:static/js/form/departemen.js"}),
# options={"allowClear": True}
),
oid="parent_nm", title="Induk")
parent_kd = colander.SchemaNode(colander.String(),
widget=widget.TextInputWidget(css_class="readonly"),
missing=colander.drop, oid="parent_kd", title="Kode Induk")
kode = colander.SchemaNode(colander.String(),
validator=colander.Length(max=32), oid="kode")
nama = colander.SchemaNode(colander.String(), oid="nama")
singkat = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="singkat")
kategori = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="kategori")
alamat = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="alamat")
company_id = colander.SchemaNode(colander.Integer(),
widget=company_widget,
missing=colander.drop,
oid="company_id")
oid="parent_nm",
title="Induk")
parent_kd = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(css_class="readonly"),
missing=colander.drop,
oid="parent_kd",
title="Kode Induk")
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
oid="nama",
validator=colander.Length(min=1, max=128, max_err="Maksimal 128 karakter", min_err='Minimal 1 karakter'))
singkat = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="singkat",
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'))
kategori = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="kategori",
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'))
alamat = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="alamat",
validator=colander.Length(max=255, max_err='Maksimal 255 karakter'))
company_id = colander.SchemaNode(
colander.Integer(),
widget=company_widget,
missing=colander.drop,
oid="company_id")
status = colander.SchemaNode(
colander.Integer(),
......@@ -407,4 +445,4 @@ class ViewDepartemen(BaseView):
# row.kode = kode
# row.nama = csv_row['nama']
# DBSession.add(row)
# return row
# return row
\ No newline at end of file
......@@ -6,6 +6,7 @@ from pyramid.view import (view_config, )
from . import widget_os
from opensipkd.models import DBSession, ResProvinsi, kategori_provinsi
from ..views import BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah provinsi gagal'
......@@ -19,34 +20,51 @@ def provinsi_widget(node, kw):
slave = node and hasattr(node, 'slave') and node.slave or ""
values.insert(0, ("", "Pilih Propinsi..."))
readonly = kw.get("readonly", False)
return widget_os.Select2MsWidget(values=values,
readonly=readonly,
url=url,
slave=slave,
placeholder="Pilih Provinsi")
return widget_os.Select2MsWidget(
values=values,
readonly=readonly,
url=url,
slave=slave,
placeholder="Pilih Provinsi")
class AddSchema(colander.Schema):
kode = colander.SchemaNode(colander.String(),
oid="kode",
validator=colander.Length(max=32), )
kategori = colander.SchemaNode(colander.String(),
widget=widget.SelectWidget(values=kategori_provinsi),
validator=colander.Length(max=32), oid="kode")
kode = colander.SchemaNode(
colander.String(),
oid="kode",
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'))
kategori = colander.SchemaNode(
colander.String(),
widget=widget.SelectWidget(values=kategori_provinsi),
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
oid="nama",
validator=colander.Length(max=128, max_err='Maksimal 128 karakter'))
nama = colander.SchemaNode(colander.String(), oid="nama")
ibu_kota = colander.SchemaNode(colander.String(), oid="nama", missing=colander.drop)
ibu_kota = colander.SchemaNode(
colander.String(),
oid="nama",
missing=colander.drop,
validator=colander.Length(max=64, max_err='Maksimal 64 karakter'))
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop,
widget=widget.HiddenWidget(readonly=True),
visible=False)
id = colander.SchemaNode(
colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True),
visible=False)
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(),
title=_("action", default="Action"))
id = colander.SchemaNode(
colander.Integer(),
title=_("action",
default="Action"))
kode = colander.SchemaNode(colander.String(), width=100)
nama = colander.SchemaNode(colander.String())
ibu_kota=colander.SchemaNode(colander.String())
......@@ -69,13 +87,14 @@ class ViewProvinsi(BaseView):
def form_validator(self, form, value):
def err_kode():
raise colander.Invalid(form, 'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
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))
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']
......
......@@ -273,6 +273,13 @@ class EmailValidator(colander.Email, Validator):
if found and (not self.user or self.user.email != found.email):
email_found()
# Cek karakter
def email_max():
raise colander.Invalid(node, _('Maksimal 100 karakter'))
if (len(email) > 100):
email_max()
REGEX_ONLY_CONTAIN = re.compile('([A-Za-z0-9-]*)')
REGEX_BEGIN_END_ALPHANUMERIC = re.compile('^[A-Za-z0-9]+(?:[-][A-Za-z0-9]+)*$')
......@@ -281,6 +288,15 @@ REGEX_BEGIN_END_ALPHANUMERIC = re.compile('^[A-Za-z0-9]+(?:[-][A-Za-z0-9]+)*$')
class UsernameValidator(Validator):
def __call__(self, node, value):
username = value
# Fungsi menampilkan error pada field form
def username_max():
raise colander.Invalid(node, _('Maksimal 128 karakter'))
# Jika karakter melebihi 128 karakter maka, panggil fungsi
if (len(username) > 128):
username_max()
if self.user and self.user.user_name == username:
return
match = REGEX_ONLY_CONTAIN.search(username)
......@@ -333,20 +349,34 @@ def save_user(values, user, row=None):
class AddSchema(colander.Schema):
email = colander.SchemaNode(
colander.String(), title=_('Email'),
colander.String(),
title=_('Email'),
validator=email_validator)
user_name = colander.SchemaNode(colander.String(), title=_('Username'),
validator=username_validator)
user_name = colander.SchemaNode(
colander.String(),
title=_('Username tetst'),
validator=username_validator)
groups = colander.SchemaNode(
colander.Set(), widget=group_widget, title=_('Group'))
colander.Set(),
widget=group_widget,
title=_('Group'))
is_api_key = colander.SchemaNode(
colander.String(), widget=api_key_widget, title=_('API Key'),
colander.String(),
widget=api_key_widget,
title=_('API Key'),
missing=colander.drop)
password = colander.SchemaNode(
colander.String(), widget=widget.CheckedPasswordWidget(),
colander.String(),
widget=widget.CheckedPasswordWidget(),
missing=colander.drop)
company_id = colander.SchemaNode(
colander.Integer(), widget=company_widget,
colander.Integer(),
widget=company_widget,
title="Company",
missing=colander.drop)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!