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
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
188 additions
and
276 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)
Form
.
set_zpt_renderer
(
search_path
)
main_title
=
'openSIPKD'
titles
=
{}
static_route
=
[
]
# http://stackoverflow.com/questions/9845669/pyramid-inverse-to-add-notfound-viewappend-slash-true
# class RemoveSlashNotFoundViewFactory(object):
...
...
opensipkd/base/routes.py
View file @
c1c0479
...
...
@@ -6,4 +6,11 @@ routes = [
(
"user-area-view"
,
"/user/area/{id}/view"
,
"Lihat User Area"
),
(
"user-area-act"
,
"/user/area/{act}/act"
,
"Action 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
opensipkd/base/views/base_views.py
View file @
c1c0479
...
...
@@ -558,16 +558,16 @@ class BaseView(object):
row
.
update_uid
=
user
and
user
.
id
or
None
row
.
from_dict
(
values
)
if
hasattr
(
row
,
"status"
):
status
=
"status"
in
values
and
values
[
"status"
]
or
0
log
.
debug
(
status
)
try
:
status
=
int
(
status
)
except
:
status
=
status
and
1
or
0
log
.
debug
(
status
)
row
.
status
=
status
#
if hasattr(row, "status"):
#
status = "status" in values and values["status"] or 0
#
log.debug(status)
#
try:
#
status = int(status)
#
except:
#
status = status and 1 or 0
#
#
log.debug(status)
#
row.status = status
self
.
db_session
.
add
(
row
)
self
.
db_session
.
flush
()
return
row
...
...
@@ -577,7 +577,7 @@ class BaseView(object):
if
k
not
in
values
:
if
v
:
values
[
k
]
=
v
log
.
debug
(
values
)
log
.
debug
(
f
"Base save_request: {values}"
)
return
self
.
save
(
values
,
self
.
req
.
user
,
row
)
def
id_not_found
(
self
,
**
kwargs
):
...
...
@@ -599,17 +599,23 @@ class BaseView(object):
return
None
def
before_edit
(
self
,
form
):
"""
Digunakan saat form edit ditampilkan
:param form:
:return: form
"""
return
form
def
view_edit
(
self
,
**
kwargs
):
request
=
self
.
req
row
=
self
.
query_id
()
.
first
()
is_object
=
kwargs
.
get
(
"is_object"
,
False
)
if
not
row
:
return
self
.
id_not_found
(
**
kwargs
)
if
not
self
.
bindings
:
self
.
bindings
=
self
.
get_bindings
(
row
)
form
=
self
.
get_form
(
self
.
edit_schema
,
**
kwargs
)
table
=
self
.
get_item_table
(
row
)
resources
=
form
.
get_widget_resources
()
...
...
opensipkd/base/views/templates/base3.1.pt
View file @
c1c0479
...
...
@@ -4,6 +4,7 @@
home request._host;
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_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'];
group_path ['group', 'group-add', 'group-edit', 'group-view', 'group-delete'];
param_path ['parameter', 'parameter-add', 'parameter-edit', 'parameter-view', 'parameter-delete'];
...
...
@@ -166,6 +167,10 @@
<a
href=
"${home}/user/area"
>
User Area
</a>
</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'])"
tal:attributes=
"class request.matched_route.name in user_ext_path and 'active'"
>
<a
href=
"${home}/user/ext"
>
External User
</a>
</li>
...
...
opensipkd/base/views/user_dep.py
View file @
c1c0479
# from datetime import datetime
#
# import colander
# from deform import (
# Form,
# widget,
# ValidationFailure,
# )
# from pyramid.httpexceptions import (
# HTTPFound,
# )
# from pyramid.view import (
# view_config,
# )
# from sqlalchemy.orm import aliased
#
# from opensipkd.models import DBSession
# from opensipkd.models import DepartemenUser, User, Departemen
# from ..views import ColumnDT, DataTables, BaseView
#
# SESS_ADD_FAILED = 'Tambah departemen gagal'
# SESS_EDIT_FAILED = 'Edit departemen gagal'
#
#
# class AddSchema(colander.Schema):
# departemen_id = colander.SchemaNode(
# colander.Integer(),
# widget=widget.HiddenWidget(),
# oid="departemen_id",
# title="Departemen")
#
# departemen_nm = colander.SchemaNode(
# colander.String(),
# oid="departemen_nm",
# title="Departemen")
#
# user_id = colander.SchemaNode(
# colander.Integer(),
# widget=widget.HiddenWidget(),
# oid="user_id",
# title="User")
#
# user_nm = colander.SchemaNode(
# colander.String(),
# oid="user_nm",
# title="User")
#
# sub_departemen = colander.SchemaNode(
# colander.Boolean(),
# widget=widget.CheckboxWidget(),
# oid="sub_departemen",
# title="Allow Sub")
#
#
# class EditSchema(AddSchema):
# id = colander.SchemaNode(
# colander.String(),
# missing=colander.drop,
# widget=widget.HiddenWidget(readonly=True))
#
#
# class ViewDepartemenUser(BaseView):
# ########
# # List #
# ########
# @view_config(route_name='departemen-user', renderer='templates/departemen_user/list.pt',
# permission='departemen')
# def view_list(self):
# return dict(a={})
#
# ##########
# # Action #
# ##########
# @view_config(route_name='departemen-user-act', renderer='json',
# permission='departemen')
# def view_act(self):
# request = self.req
# ses = request.session
# params = request.params
# url_dict = request.matchdict
# dep_alias = aliased(DepartemenUser)
# if url_dict['act'] == 'grid':
# columns = [
# ColumnDT(DepartemenUser.id, mData='id'),
# ColumnDT(User.user_name, mData='user_name'),
# 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)
import
colander
from
deform
import
widget
from
pyramid.view
import
view_config
from
.
import
BaseView
from
...models
import
User
,
DepartemenUser
,
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
)
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
.
Integer
(),
widget
=
widget
.
SelectWidget
(
values
=
Departemen
.
get_list
()),
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
()
@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
()
opensipkd/base/views/widget_os.py
View file @
c1c0479
...
...
@@ -555,6 +555,8 @@ class BootStrapDateInputWidget(Widget):
)
default_options
=
(
(
"format"
,
"yyyy-mm-dd"
),
(
"zIndexOffset"
,
"910"
),
)
# ("selectMonths", True),
# ("selectYears", True),
...
...
opensipkd/base/views/widgets/readonly/checkbox.pt
View file @
c1c0479
...
...
@@ -5,9 +5,9 @@
<p class="deform-readonly-true"
id="${oid}"
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"
id="${oid}"
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>
opensipkd/models/user_area.py
View file @
c1c0479
...
...
@@ -17,9 +17,10 @@ class UserArea(DefaultModel, Base):
@classmethod
def
allow_area
(
cls
,
user_id
,
desa_id
=
None
,
desa_kd
=
None
,
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
(
UserGroup
.
group_name
.
_in
(
*
group_names
))
.
first
()
Group
.
group_name
.
_in
(
*
group_names
))
.
first
()
if
user
and
user
.
id
:
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