Commit c1c0479e by aa.gusti

user departemen

1 parent 55152ca0
......@@ -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):
......
......@@ -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
......@@ -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()
......
......@@ -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>
......
# 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()
......@@ -555,6 +555,8 @@ class BootStrapDateInputWidget(Widget):
)
default_options = (
("format", "yyyy-mm-dd"),
("zIndexOffset", "910"),
)
# ("selectMonths", True),
# ("selectYears", True),
......
......@@ -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>
......@@ -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
......
# 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!