departemen_change.py
3.47 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
from pyramid.view import (
view_config,
)
import colander
from deform import (
Form,
widget,
ValidationFailure,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from pyramid.view import (
view_config,
)
from ..models import Departemen
from ..views import BaseView
SESS_ADD_FAILED = 'Tambah departemen gagal'
SESS_EDIT_FAILED = 'Edit departemen gagal'
class AddSchema(colander.Schema):
cur_departemen_nm = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(readonly=True),
title="Departemen Kini",
missing=colander.drop)
departemen_id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
oid="departemen_id", )
departemen_nm = colander.SchemaNode(
colander.String(),
# missing = colander.drop,
oid="departemen_nm",
title="Pilih Departemen")
departemen_kd = colander.SchemaNode(
colander.String(),
# widget = widget.HiddenWidget(),
oid="departemen_kd",
title="Kode")
level_id = colander.SchemaNode(
colander.String(),
# widget = widget.HiddenWidget(),
oid="level_id",
title="Level")
callback = colander.SchemaNode(
colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(),
)
class ChangeDepartemen(BaseView):
########
# List #
########
@view_config(route_name='departemen-chg', renderer='templates/departemen/chg.pt')
def view_departemen_chg(self):
request = self.req
ses = request.session
params = request.params
url_dict = request.matchdict
form = get_form(request, AddSchema)
if request.POST:
if 'simpan' in request.POST:
controls = request.POST.items()
try:
controls = form.validate(controls)
except ValidationFailure as e:
return dict(form=form)
values = dict(controls)
save_request(request, values)
if 'callback' in values and values['callback']:
return HTTPFound(values['callback'])
return route_list(request)
referer = 'REFERER' in request.headers and request.headers['REFERER'] or ''
values = dict(cur_departemen_nm=ses["departemen_nm"],
callback=referer)
form.render(appstruct=values)
return dict(form=form)
#######
# Add #
#######
def form_validator(form, value):
def err_departemen():
raise colander.Invalid(form,
'Departemen Tidak Ditemukan')
q = Departemen.query_id(value['departemen_id'])
found = q.first()
if not found:
err_departemen()
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_request(request, values, row=None):
request.session['departemen_id'] = values['departemen_id']
row = Departemen.query_id(values['departemen_id']).first()
request.session['departemen_nm'] = row.nama
request.session['departemen_kd'] = row.kode
request.session.flash(
'Departemen %s %s sudah diubah.' % (request.session['departemen_kd'], request.session['departemen_nm']))
def route_list(request):
return HTTPFound(location=request.route_url('home'))