Commit c1c0479e by aa.gusti

user departemen

1 parent 55152ca0
...@@ -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):
......
...@@ -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
...@@ -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()
......
...@@ -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>
......
# 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)
...@@ -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),
......
...@@ -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>
...@@ -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
......
# 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()
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!