user_dep.py
3.94 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
import colander
from deform import widget
from pyramid.view import view_config
from . import BaseView
from ...models import User, DepartemenUser, Departemen, DBSession
from .departemen import departemen_widget, get_departemen_list
from .departemen import get_departemen_list
from .user import user_widget, user_select, user_list
from pyramid.i18n import TranslationStringFactory
@colander.deferred
def departemen_widget(node, kw):
values = kw.get ('departemen_list',[])
return widget.CheckboxChoiceWidget(values=values, Placeholder='Pilih Departemen')
class ListSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(),
title="Action"
)
user_name = colander.SchemaNode(
colander.String(),
field=User.user_name,
title="User"
)
departemen_name = colander.SchemaNode(
colander.String(),
field=Departemen.nama)
@colander.deferred
def departemen_checkbox_widget(node, kw):
values = kw.get('departemen_list', [])
return widget.CheckboxChoiceWidget(values=values)
class AddSchema(colander.Schema):
user_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=User.get_list()),
oid="user_id",
title="User",
)
departemen_id = colander.SchemaNode(
colander.Set(),
widget=departemen_checkbox_widget,
oid="departemen_id",
title="Departemen",
)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.list_schema = ListSchema
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.list_route = 'user-departemen'
self.table = DepartemenUser
def list_join(self, query, **kwargs):
return query.outerjoin(Departemen, Departemen.id == self.table.departemen_id) \
.outerjoin(User, User.id == self.table.user_id)
@view_config(route_name='user-departemen', renderer='templates/table.pt',
permission='user-view')
def view_list(self, **kwargs):
return super().view_list(**kwargs)
@view_config(route_name='user-departemen-act', renderer='json',
permission='user-view')
def view_act(self):
return super().view_act()
def get_bindings(self, row=None):
return {"departemen_list": get_departemen_list(),
"user_list": user_list()
}
@view_config(route_name='user-departemen-add', renderer='templates/form.pt',
permission='user-edit')
def view_add(self):
return super().view_add()
@view_config(route_name='user-departemen-view', renderer='templates/form.pt',
permission='user-view')
def view_view(self):
return super().view_view()
@view_config(route_name='user-departemen-delete', renderer='templates/form.pt',
permission='user-edit')
def view_delete(self):
return super().view_delete()
@view_config(route_name='user-departemen-edit', renderer='templates/form.pt',
permission='user-edit')
def view_edit(self):
return super().view_edit()
def save_request(self, values, row=None): # save(self, row, values):
for k, v in values.items():
if not v:
setattr(row, k, None)
values["level_id"] = 1
if "parent_id" in values and values["parent_id"]:
qry_parent = self.table.query_id(values["parent_id"])
parent = qry_parent.first()
if parent and parent.level_id:
values["level_id"] = parent.level_id + 1
if "parent_id" not in values:
values["parent_id"] = None
row = super().save_request(values, row)
return row