view_form.py
4.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import colander
from deform import widget
from pyramid.view import view_config
from opensipkd.coba.models import Coba
from . import BaseView
from opensipkd.base.views import widget_os
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(min=3, max=10),
)
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(min=3, max=64),
)
class EditSchema(AddSchema):
id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget()
)
class ListSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(),
title="Action"
)
kode = colander.SchemaNode(
colander.String(),
title="Kode",
)
nama = colander.SchemaNode(
colander.String(),
title="Nama",
field="nama"
)
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.list_schema = ListSchema
self.list_route = "coba-form"
self.table = Coba
self.list_buttons = self.list_buttons + self.list_report
def form_validator(self, form, value):
exc = colander.Invalid(form, '')
def err_kode():
exc['kode'] = 'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama)
raise exc
def err_nama():
exc['nama'] = 'Nama %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode)
raise exc
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q =Coba.query_id(uid)
current = q.first()
else:
current = None
found =Coba.query_kode(value['kode']).first()
if current:
if found and found.id != current.id:
err_kode()
elif found:
err_kode()
found =Coba.query_nama(value['nama']).first()
if current:
if found and found.id != current.id:
err_nama()
elif found:
err_nama()
@view_config(route_name='coba-form', renderer='templates/list.pt',
permission='view')
def view_list(self):
return super(Views, self).view_list()
@view_config(route_name='coba-form-act', renderer='json',
permission='view')
def view_act(self):
return super().view_act()
@view_config(route_name='coba-form-add', renderer='templates/form.pt',
permission='bphtb-admin')
def view_add(self):
return super().view_add()
@view_config(route_name='coba-form-edit', renderer='templates/form.pt',
permission='view')
def view_edit(self):
return super().view_edit()
@view_config(route_name='coba-form-delete', renderer='templates/form.pt',
permission='view')
def view_delete(self):
return super().view_delete()
@view_config(route_name='coba-form-view', renderer='templates/form.pt',
permission='view')
def view_view(self):
return super().view_view()
def _coba_list():
qry =Coba.query().order_by(Coba.nama)
return qry
def coba_list(kecamatan_id=None):
qry = _coba_list(kecamatan_id)
return [(r.id, r.nm_coba) for r in qry]
def coba_select(kecamatan_id=None):
result = coba_list(kecamatan_id)
result.insert(0, ('', 'Semua Coba'))
return result
@colander.deferred
def coba_widget(node, kw):
values = kw.get('coba_list', [])
url = node and hasattr(node, 'slave_url') and node.slave_url or ""
slave = node and hasattr(node, 'slave') and node.slave or ""
return widget_os.Select2MsWidget(values=values,
url=url,
slave=slave,
placeholder="Pilih Coba",
style="width:200px;")
class CobaFilterSchema():
coba_id = colander.SchemaNode(
colander.Integer(),
widget=coba_widget,
title="Coba",
oid="coba_id",
missing=colander.drop,
)