Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit c1c0479e
authored
Oct 21, 2024
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
user departemen
1 parent
55152ca0
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
189 additions
and
277 deletions
opensipkd/base/__init__.py
opensipkd/base/routes.py
opensipkd/base/views/base_views.py
opensipkd/base/views/templates/base3.1.pt
opensipkd/base/views/user_dep.py
opensipkd/base/views/widget_os.py
opensipkd/base/views/widgets/readonly/checkbox.pt
opensipkd/models/user_area.py
opensipkd/models/user_dep.py
opensipkd/base/__init__.py
View file @
c1c0479
...
@@ -58,7 +58,9 @@ renderer = ZPTRendererFactory(search_path)
...
@@ -58,7 +58,9 @@ renderer = ZPTRendererFactory(search_path)
Form
.
set_zpt_renderer
(
search_path
)
Form
.
set_zpt_renderer
(
search_path
)
main_title
=
'openSIPKD'
main_title
=
'openSIPKD'
titles
=
{}
titles
=
{}
static_route
=
[
]
# http://stackoverflow.com/questions/9845669/pyramid-inverse-to-add-notfound-viewappend-slash-true
# http://stackoverflow.com/questions/9845669/pyramid-inverse-to-add-notfound-viewappend-slash-true
# class RemoveSlashNotFoundViewFactory(object):
# class RemoveSlashNotFoundViewFactory(object):
...
...
opensipkd/base/routes.py
View file @
c1c0479
...
@@ -5,5 +5,12 @@ routes = [
...
@@ -5,5 +5,12 @@ routes = [
(
"user-area-delete"
,
"/user/area/{id}/delete"
,
"Hapus User Area"
),
(
"user-area-delete"
,
"/user/area/{id}/delete"
,
"Hapus User Area"
),
(
"user-area-view"
,
"/user/area/{id}/view"
,
"Lihat User Area"
),
(
"user-area-view"
,
"/user/area/{id}/view"
,
"Lihat User Area"
),
(
"user-area-act"
,
"/user/area/{act}/act"
,
"Action User Area"
),
(
"user-area-act"
,
"/user/area/{act}/act"
,
"Action User Area"
),
(
"user-area-upload"
,
"/user/area/upload"
,
"Upload User Area"
),
(
"user-area-upload"
,
"/user/area/upload"
,
"Upload User Area"
),
(
"user-departemen"
,
"/user/departemen"
,
"User Departemen"
),
(
"user-departemen-add"
,
"/user/departemen/add"
,
"Tambah User Departemen"
),
(
"user-departemen-edit"
,
"/user/departemen/{id}/edit"
,
"Edit User Departemen"
),
(
"user-departemen-delete"
,
"/user/departemen/{id}/delete"
,
"Hapus User Departemen"
),
(
"user-departemen-view"
,
"/user/departemen/{id}/view"
,
"Lihat User Departemen"
),
(
"user-departemen-act"
,
"/user/departemen/{act}/act"
,
"Action User Departemen"
),
(
"user-departemen-upload"
,
"/user/departemen/upload"
,
"Upload User Departemen"
),
]
]
\ No newline at end of file
\ No newline at end of file
opensipkd/base/views/base_views.py
View file @
c1c0479
...
@@ -558,16 +558,16 @@ class BaseView(object):
...
@@ -558,16 +558,16 @@ class BaseView(object):
row
.
update_uid
=
user
and
user
.
id
or
None
row
.
update_uid
=
user
and
user
.
id
or
None
row
.
from_dict
(
values
)
row
.
from_dict
(
values
)
if
hasattr
(
row
,
"status"
):
#
if hasattr(row, "status"):
status
=
"status"
in
values
and
values
[
"status"
]
or
0
#
status = "status" in values and values["status"] or 0
log
.
debug
(
status
)
#
log.debug(status)
try
:
#
try:
status
=
int
(
status
)
#
status = int(status)
except
:
#
except:
status
=
status
and
1
or
0
#
status = status and 1 or 0
#
log
.
debug
(
status
)
#
log.debug(status)
row
.
status
=
status
#
row.status = status
self
.
db_session
.
add
(
row
)
self
.
db_session
.
add
(
row
)
self
.
db_session
.
flush
()
self
.
db_session
.
flush
()
return
row
return
row
...
@@ -577,7 +577,7 @@ class BaseView(object):
...
@@ -577,7 +577,7 @@ class BaseView(object):
if
k
not
in
values
:
if
k
not
in
values
:
if
v
:
if
v
:
values
[
k
]
=
v
values
[
k
]
=
v
log
.
debug
(
values
)
log
.
debug
(
f
"Base save_request: {values}"
)
return
self
.
save
(
values
,
self
.
req
.
user
,
row
)
return
self
.
save
(
values
,
self
.
req
.
user
,
row
)
def
id_not_found
(
self
,
**
kwargs
):
def
id_not_found
(
self
,
**
kwargs
):
...
@@ -599,17 +599,23 @@ class BaseView(object):
...
@@ -599,17 +599,23 @@ class BaseView(object):
return
None
return
None
def
before_edit
(
self
,
form
):
def
before_edit
(
self
,
form
):
"""
Digunakan saat form edit ditampilkan
:param form:
:return: form
"""
return
form
return
form
def
view_edit
(
self
,
**
kwargs
):
def
view_edit
(
self
,
**
kwargs
):
request
=
self
.
req
request
=
self
.
req
row
=
self
.
query_id
()
.
first
()
row
=
self
.
query_id
()
.
first
()
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
if
not
row
:
if
not
row
:
return
self
.
id_not_found
(
**
kwargs
)
return
self
.
id_not_found
(
**
kwargs
)
if
not
self
.
bindings
:
if
not
self
.
bindings
:
self
.
bindings
=
self
.
get_bindings
(
row
)
self
.
bindings
=
self
.
get_bindings
(
row
)
form
=
self
.
get_form
(
self
.
edit_schema
,
**
kwargs
)
form
=
self
.
get_form
(
self
.
edit_schema
,
**
kwargs
)
table
=
self
.
get_item_table
(
row
)
table
=
self
.
get_item_table
(
row
)
resources
=
form
.
get_widget_resources
()
resources
=
form
.
get_widget_resources
()
...
...
opensipkd/base/views/templates/base3.1.pt
View file @
c1c0479
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
home request._host;
home request._host;
user_path ['user', 'user-add', 'user-edit', 'user-view', 'user-delete'];
user_path ['user', 'user-add', 'user-edit', 'user-view', 'user-delete'];
user_area_path ['user-area', 'user-area-add', 'user-area-edit', 'user-area-view', 'user-area-delete'];
user_area_path ['user-area', 'user-area-add', 'user-area-edit', 'user-area-view', 'user-area-delete'];
user_dep_path ['user-departemen', 'user-departemen-add', 'user-departemen-edit', 'user-departemen-view', 'user-departemen-delete'];
user_ext_path ['user-ext', 'user-ext-view', 'user-ext-delete'];
user_ext_path ['user-ext', 'user-ext-view', 'user-ext-delete'];
group_path ['group', 'group-add', 'group-edit', 'group-view', 'group-delete'];
group_path ['group', 'group-add', 'group-edit', 'group-view', 'group-delete'];
param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view', 'parameter-delete'];
param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view', 'parameter-delete'];
...
@@ -165,6 +166,10 @@
...
@@ -165,6 +166,10 @@
tal:attributes=
"class request.matched_route.name in user_area_path and 'active'"
>
tal:attributes=
"class request.matched_route.name in user_area_path and 'active'"
>
<a
href=
"${home}/user/area"
>
User Area
</a>
<a
href=
"${home}/user/area"
>
User Area
</a>
</li>
</li>
<li
tal:condition=
"has_permission(request, ['user-view', 'user-edit'])"
tal:attributes=
"class request.matched_route.name in user_dep_path and 'active'"
>
<a
href=
"${home}/user/departemen"
>
User Departemen
</a>
</li>
<li
tal:condition=
"has_permission(request, ['user-view', 'user-edit'])"
<li
tal:condition=
"has_permission(request, ['user-view', 'user-edit'])"
tal:attributes=
"class request.matched_route.name in user_ext_path and 'active'"
>
tal:attributes=
"class request.matched_route.name in user_ext_path and 'active'"
>
<a
href=
"${home}/user/ext"
>
External User
</a>
<a
href=
"${home}/user/ext"
>
External User
</a>
...
...
opensipkd/base/views/user_dep.py
View file @
c1c0479
# from datetime import datetime
import
colander
#
from
deform
import
widget
# import colander
from
pyramid.view
import
view_config
# from deform import (
# Form,
from
.
import
BaseView
# widget,
from
...models
import
User
,
DepartemenUser
,
Departemen
# ValidationFailure,
# )
# from pyramid.httpexceptions import (
class
ListSchema
(
colander
.
Schema
):
# HTTPFound,
id
=
colander
.
SchemaNode
(
# )
colander
.
Integer
(),
# from pyramid.view import (
title
=
"Action"
# view_config,
)
# )
user_name
=
colander
.
SchemaNode
(
# from sqlalchemy.orm import aliased
colander
.
String
(),
#
field
=
User
.
user_name
,
# from opensipkd.models import DBSession
title
=
"User"
# from opensipkd.models import DepartemenUser, User, Departemen
)
# from ..views import ColumnDT, DataTables, BaseView
departemen_name
=
colander
.
SchemaNode
(
#
colander
.
String
(),
# SESS_ADD_FAILED = 'Tambah departemen gagal'
field
=
Departemen
.
nama
)
# SESS_EDIT_FAILED = 'Edit departemen gagal'
#
#
class
AddSchema
(
colander
.
Schema
):
# class AddSchema(colander.Schema):
user_id
=
colander
.
SchemaNode
(
# departemen_id = colander.SchemaNode(
colander
.
Integer
(),
# colander.Integer(),
widget
=
widget
.
SelectWidget
(
values
=
User
.
get_list
()),
# widget=widget.HiddenWidget(),
oid
=
"user_id"
,
# oid="departemen_id",
title
=
"User"
,
# title="Departemen")
)
#
departemen_id
=
colander
.
SchemaNode
(
# departemen_nm = colander.SchemaNode(
colander
.
Integer
(),
# colander.String(),
widget
=
widget
.
SelectWidget
(
values
=
Departemen
.
get_list
()),
# oid="departemen_nm",
oid
=
"departemen_id"
,
# title="Departemen")
title
=
"Departemen"
,
)
#
# user_id = colander.SchemaNode(
# colander.Integer(),
class
EditSchema
(
AddSchema
):
# widget=widget.HiddenWidget(),
id
=
colander
.
SchemaNode
(
colander
.
String
(),
# oid="user_id",
missing
=
colander
.
drop
,
# title="User")
widget
=
widget
.
HiddenWidget
(
readonly
=
True
))
#
# user_nm = colander.SchemaNode(
# colander.String(),
class
Views
(
BaseView
):
# oid="user_nm",
def
__init__
(
self
,
request
):
# title="User")
super
()
.
__init__
(
request
)
#
self
.
list_schema
=
ListSchema
# sub_departemen = colander.SchemaNode(
self
.
add_schema
=
AddSchema
# colander.Boolean(),
self
.
edit_schema
=
EditSchema
# widget=widget.CheckboxWidget(),
self
.
list_route
=
'user-departemen'
# oid="sub_departemen",
self
.
table
=
DepartemenUser
# title="Allow Sub")
#
def
list_join
(
self
,
query
,
**
kwargs
):
#
return
query
.
outerjoin
(
Departemen
,
Departemen
.
id
==
self
.
table
.
departemen_id
)
\
# class EditSchema(AddSchema):
.
outerjoin
(
User
,
User
.
id
==
self
.
table
.
user_id
)
# id = colander.SchemaNode(
# colander.String(),
@view_config
(
route_name
=
'user-departemen'
,
renderer
=
'templates/table.pt'
,
# missing=colander.drop,
permission
=
'user-view'
)
# widget=widget.HiddenWidget(readonly=True))
def
view_list
(
self
,
**
kwargs
):
#
return
super
()
.
view_list
(
**
kwargs
)
#
# class ViewDepartemenUser(BaseView):
@view_config
(
route_name
=
'user-departemen-act'
,
renderer
=
'json'
,
# ########
permission
=
'user-view'
)
# # List #
def
view_act
(
self
):
# ########
return
super
()
.
view_act
()
# @view_config(route_name='departemen-user', renderer='templates/departemen_user/list.pt',
# permission='departemen')
@view_config
(
route_name
=
'user-departemen-add'
,
renderer
=
'templates/form.pt'
,
# def view_list(self):
permission
=
'user-edit'
)
# return dict(a={})
def
view_add
(
self
):
#
return
super
()
.
view_add
()
# ##########
# # Action #
@view_config
(
route_name
=
'user-departemen-view'
,
renderer
=
'templates/form.pt'
,
# ##########
permission
=
'user-view'
)
# @view_config(route_name='departemen-user-act', renderer='json',
def
view_view
(
self
):
# permission='departemen')
return
super
()
.
view_view
()
# def view_act(self):
# request = self.req
@view_config
(
route_name
=
'user-departemen-delete'
,
renderer
=
'templates/form.pt'
,
# ses = request.session
permission
=
'user-edit'
)
# params = request.params
def
view_delete
(
self
):
# url_dict = request.matchdict
return
super
()
.
view_delete
()
# dep_alias = aliased(DepartemenUser)
# if url_dict['act'] == 'grid':
@view_config
(
route_name
=
'user-departemen-edit'
,
renderer
=
'templates/form.pt'
,
# columns = [
permission
=
'user-edit'
)
# ColumnDT(DepartemenUser.id, mData='id'),
def
view_edit
(
self
):
# ColumnDT(User.user_name, mData='user_name'),
return
super
()
.
view_edit
()
# ColumnDT(Departemen.nama, mData='dept_name'),
# ColumnDT(DepartemenUser.sub_departemen, mData='allow_sub'),
# ]
# query = DBSession.query().select_from(DepartemenUser) \
# .join(User, User.id == DepartemenUser.user_id) \
# .join(Departemen, DepartemenUser.departemen_id == Departemen.id)
#
# rowTable = DataTables(request.GET, query, columns)
# return rowTable.output_result()
#
# @view_config(route_name='departemen-user-add', renderer='templates/departemen_user/add.pt',
# permission='departemen')
# def view_departemen_add(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=e.render())
# save_request(request, dict(controls))
# return route_list(request)
# return dict(form=form.render())
#
# ########
# # Edit #
# ########
# @view_config(route_name='departemen-user-edt', renderer='templates/departemen_user/add.pt',
# permission='departemen')
# def view_departemen_edt(self):
# request = self.req
# ses = request.session
# params = request.params
# url_dict = request.matchdict
# row = query_id(request).first()
# if not row:
# return id_not_found(request)
#
# form = get_form(request, EditSchema)
# if request.POST:
# if 'simpan' in request.POST:
# controls = request.POST.items()
# try:
# controls = form.validate(controls)
# except ValidationFailure as e:
# return dict(form=e.render())
#
# save_request(request, dict(controls), row)
# return route_list(request)
#
# values = row.to_dict()
# values['departemen_nm'] = row.departemen.nama + ';' + row.departemen.kode
# values['user_nm'] = row.user.user_name + '(' + row.user.email + ')'
# form = form.render(appstruct=values)
# return dict(form=form)
#
# ##########
# # Delete #
# ##########
# @view_config(route_name='departemen-user-del',
# renderer='templates/departemen_user/del.pt',
# permission='departemen')
# def view_delete(self):
# request = self.req
# q = query_id(request)
# row = q.first()
#
# if not row:
# return id_not_found(request)
# form = Form(colander.Schema(), buttons=('hapus', 'batal'))
# if request.POST:
# if 'hapus' in request.POST:
# msg = 'Departemen User ID %d departemen %s sudah dihapus.' % (row.id, row.departemen.nama)
# q.delete()
# DBSession.flush()
# request.session.flash(msg)
# return route_list(request)
# return dict(row=row, form=form.render())
#
#
# #######
# # Add #
# #######
# def form_validator(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(DepartemenUser).filter_by(id=uid)
# # urusan = q.first()
# # else:
# # urusan = None
# #
# # q = DepartemenUser.query_kode(value['kode']) # DBSession.query().filter_by(kode=value['kode'])
# # found = q.first()
# # if urusan:
# # if found and found.id != urusan.id:
# # err_kode()
# # elif found:
# # err_kode()
# #
# # found = DepartemenUser.query_nama(value['nama']).first()
# # if urusan:
# # if found and found.id != urusan.id:
# # err_nama()
# # elif found:
# # err_nama()
#
#
# 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 update_children(children):
# for child in children:
# child.level_id = child.parent.level_id + 1
# DBSession.add(child)
# DBSession.flush()
# if child.children:
# update_children(child.children)
#
#
# def save(values, user, row=None):
# if not row:
# row = DepartemenUser()
# row.created = datetime.now()
# row.create_uid = user.id
# else:
# row.updated = datetime.now()
# row.update_uid = user.id
#
# row.from_dict(values)
# row.sub_departemen = 'sub_departemen' in values and values['sub_departemen'] and 1 or 0
# DBSession.add(row)
# DBSession.flush()
# return row
#
#
# def save_request(request, values, row=None):
# if 'id' in request.matchdict:
# values['id'] = request.matchdict['id']
# row = save(values, request.user, row)
# request.session.flash("Departemen User {nama} sudah disimpan.".format(nama=row.departemen.nama))
#
#
# def route_list(request):
# return HTTPFound(location=request.route_url('departemen-user'))
#
#
# def query_id(request):
# return DBSession.query(DepartemenUser).filter_by(id=request.matchdict['id'])
#
#
# def id_not_found(request):
# msg = 'DepartemenUser ID %s Tidak Ditemukan.' % request.matchdict['id']
# request.session.flash(msg, 'error')
# return route_list(request)
opensipkd/base/views/widget_os.py
View file @
c1c0479
...
@@ -555,6 +555,8 @@ class BootStrapDateInputWidget(Widget):
...
@@ -555,6 +555,8 @@ class BootStrapDateInputWidget(Widget):
)
)
default_options
=
(
default_options
=
(
(
"format"
,
"yyyy-mm-dd"
),
(
"format"
,
"yyyy-mm-dd"
),
(
"zIndexOffset"
,
"910"
),
)
)
# ("selectMonths", True),
# ("selectMonths", True),
# ("selectYears", True),
# ("selectYears", True),
...
...
opensipkd/base/views/widgets/readonly/checkbox.pt
View file @
c1c0479
...
@@ -5,9 +5,9 @@
...
@@ -5,9 +5,9 @@
<p class="deform-readonly-true"
<p class="deform-readonly-true"
id="${oid}"
id="${oid}"
tal:condition="cstruct == true_val"
tal:condition="cstruct == true_val"
i18n:translate=""><i class="fas fa-check-square" aria-hidden="true"></i></p>
i18n:translate=""><i class="fas fa-check-square" aria-hidden="true"
style="color:green;"
></i></p>
<p class="deform-readonly-false"
<p class="deform-readonly-false"
id="${oid}"
id="${oid}"
tal:condition="cstruct != true_val"
tal:condition="cstruct != true_val"
i18n:translate=""><i class="fas fa-window-close" aria-hidden="true"></i></p>
i18n:translate=""><i class="fas fa-window-close" aria-hidden="true"
style="color:red;"
></i></p>
</div>
</div>
opensipkd/models/user_area.py
View file @
c1c0479
...
@@ -17,9 +17,10 @@ class UserArea(DefaultModel, Base):
...
@@ -17,9 +17,10 @@ class UserArea(DefaultModel, Base):
@classmethod
@classmethod
def
allow_area
(
cls
,
user_id
,
desa_id
=
None
,
desa_kd
=
None
,
def
allow_area
(
cls
,
user_id
,
desa_id
=
None
,
desa_kd
=
None
,
group_names
=
(
"Superuser"
,
"pbbm-admin"
),
):
group_names
=
(
"Superuser"
,
"pbbm-admin"
),
):
user
=
UserGroup
.
query
()
.
filter_by
(
user_id
=
=
user_id
)
.
outerjoin
(
user
=
UserGroup
.
query
()
.
filter_by
(
user_id
=
user_id
)
.
outerjoin
(
Group
,
Group
.
id
==
UserGroup
.
group_id
)
.
filter
(
Group
,
Group
.
id
==
UserGroup
.
group_id
)
.
filter
(
UserGroup
.
group_name
.
_in
(
*
group_names
))
.
first
()
Group
.
group_name
.
_in
(
*
group_names
))
.
first
()
if
user
and
user
.
id
:
if
user
and
user
.
id
:
return
True
return
True
...
...
opensipkd/models/user_dep.py
0 → 100644
View file @
c1c0479
# from opensipkd.models import Base, User, Departemen, DefaultModel, UserGroup, Group
# from sqlalchemy import ForeignKey, Integer, Column
# from sqlalchemy.orm import relationship, backref
#
#
# class UserDepartemen(DefaultModel, Base):
# __tablename__ = "user_dep"
# __table_args__ = {'extend_existing': True}
# user_id = Column(Integer, ForeignKey(User.id))
# departemen_id = Column(Integer, ForeignKey(Departemen.id))
# allow_sub = Column(Boolean)
# departemen = relationship(Departemen, backref=backref("user_dep"))
# user = relationship(User, backref=backref("user_area"))
#
# def validator(self, values):
# pass
#
# @classmethod
# def _allowed(cls, kode):
# departemen=[]
# rows = cls.query().filter(cls.kode.ilike(f"{row.kode}%"))
# for row in rows.all():
# departemen.append(row.id)
# if row.allow_sub:
# departemen.extend(self._allowed(row.kode))
# return departemen
#
# @classmethod
# def allowed(cls, user_id):
# rows = cls.query().filter(cls.user_id==user_id)
# departemen = []
# for row in rows.all():
# departemen.append(departemen_id)
# if row.allow_sub:
# departemen.extend(cls._allowed(row.kode))
#
# return departemen
#
# @classmethod
# def allow_area(cls, user_id, departemen_id=None,
# group_names=("Superuser", "pbbm-admin"), ):
#
# if user and user.id:
# return True
#
# if not desa_id and not desa_kd:
# raise Exception("parameter desa_id atau desa_kd wajib dikirim")
#
# if desa_id:
# rs = cls.query().filter(cls.user_id == user_id, cls.desa_id == desa_id)
# if rs and rs.id:
# return True
# if desa_kd:
# rs = cls.query().filter(cls.user_id == user_id) \
# .outerjoin(ResDesa, ResDesa.id == cls.desa_id).filter(
# ResDesa.kode == desa_kd).first()
# if rs and rs.id:
# return True
#
# return False
#
# @classmethod
# def get_by_user_id(cls, user_id):
# return cls.query().filter_by(user_id=user_id).all()
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment