Commit a6c02093 by aa.gusti

penambahan user wilayah

1 parent e5c783ac
......@@ -2,6 +2,8 @@ import locale
import logging
import re
from .routes import routes
try:
from urllib import (urlencode, quote, quote_plus, )
except ImportError:
......@@ -527,6 +529,16 @@ def main(global_config, **settings):
config.add_renderer('json', json_renderer())
config.add_renderer('json_rpc', json_rpc())
set_routes(config)
# New Routes By Array
for route in routes:
if len(route) > 4 and str(route[4]) == '1':
config.add_jsonrpc_endpoint(
route[0], route[1], default_renderer="json_rpc")
else:
config.add_route(route[0], route[1])
titles[route[0]] = route[2]
config.registry['mailer'] = mailer_factory_from_settings(settings)
config.scan()
for m in modules:
......
routes = [
("user-area", "/user/area", "User Area"),
("user-area-add", "/user/area/add", "Tambah User Area"),
("user-area-edit", "/user/area/{id}/edit", "Edit User Area"),
("user-area-delete", "/user/area/{id}/delete", "Hapus User Area"),
("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"),
]
\ No newline at end of file
......@@ -3,6 +3,7 @@
tal:define="
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_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'];
......@@ -161,6 +162,10 @@
<a href="${home}/user">User</a>
</li>
<li tal:condition="has_permission(request, ['user-view', 'user-edit'])"
tal:attributes="class request.matched_route.name in user_area_path and 'active'">
<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_ext_path and 'active'">
<a href="${home}/user/ext">External User</a>
</li>
......@@ -208,6 +213,7 @@
<li tal:condition="has_permission(request, 'log')"
tal:attributes="class request.matched_route.name in ['log'] and 'active'">
<a href="${home}/log">Log</a></li>
</ul>
</li>
</ul>
......
import colander
from deform import widget
from pyramid.view import view_config
from . import BaseView
from ...models import ResDesa, User, UserArea
class ListSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(),
title="Action"
)
user_name = colander.SchemaNode(
colander.String(),
field=User.user_name,
title="User"
)
desa_kd = colander.SchemaNode(
colander.String(),
field=ResDesa.kode)
desa_name = colander.SchemaNode(
colander.String(),
field=ResDesa.nama)
class AddSchema(colander.Schema):
user_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=User.get_list()),
oid="user_id",
title="Kab/Kota",
)
desa_id = colander.SchemaNode(
colander.Integer(),
widget=widget.SelectWidget(values=ResDesa.get_list()),
oid="desa_id",
title="Kelurahan/Desa", )
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-area'
self.table = UserArea
def list_join(self, query, **kwargs):
return query.outerjoin(ResDesa, ResDesa.id == self.table.desa_id) \
.outerjoin(User, User.id == self.table.user_id)
@view_config(route_name='user-area', renderer='templates/form.pt',
permission='user-view')
def view_list(self):
return super().view_list()
@view_config(route_name='user-area-act', renderer='json',
permission='user-view')
def view_act(self):
return super().view_act()
@view_config(route_name='user-area-add', renderer='templates/form.pt',
permission='user-edit')
def view_add(self):
return super().view_add()
@view_config(route_name='user-area-view', renderer='templates/form.pt',
permission='user-view')
def view_view(self):
return super().view_view()
@view_config(route_name='user-area-delete', renderer='templates/form.pt',
permission='user-edit')
def view_delete(self):
return super().view_delete()
@view_config(route_name='user-area-edit', renderer='templates/form.pt',
permission='user-edit')
def view_edit(self):
return super().view_edit()
......@@ -7,3 +7,4 @@ from .departemen import *
from .pegawai import *
from .wilayah import *
from .targets import *
from .user_area import *
\ No newline at end of file
from sqlalchemy.orm import relationship, backref
from opensipkd.models import Base, User, ResDesa, DefaultModel
from sqlalchemy import ForeignKey, Integer, Column, String
class UserArea(DefaultModel, Base):
__tablename__ = "user_area"
__table_args__ = {'extend_existing': True}
user_id = Column(Integer, ForeignKey(User.id))
desa_id = Column(Integer, ForeignKey(ResDesa.id))
desa = relationship(ResDesa, backref=backref("user_area"))
def validator(self, values):
pass
......@@ -2,6 +2,7 @@ from datetime import datetime
import pytz
import sqlalchemy as sa
from opensipkd.tools import as_timezone
from pyramid.authorization import (Allow, Authenticated, ALL_PERMISSIONS)
from sqlalchemy import (
Column, Integer, DateTime, String)
......@@ -21,7 +22,6 @@ from ziggurat_foundations.models.user_permission import UserPermissionMixin
from ziggurat_foundations.models.user_resource_permission import \
UserResourcePermissionMixin
from opensipkd.tools import as_timezone
from .base import CommonModel, DBSession, DefaultModel
from .meta import Base
......@@ -30,7 +30,6 @@ class GroupPermission(GroupPermissionMixin, Base):
pass
class UserGroup(UserGroupMixin, Base, CommonModel):
@classmethod
def _get_by_user(cls, user):
......@@ -135,6 +134,14 @@ class User(UserMixin, BaseModel, DefaultModel, Base):
return cls.query_from(columns=[cls.email, cls.user_name, cls.registered_date,
cls.last_login_date])
@classmethod
def query_list(cls):
return DBSession.query(cls.id, cls.user_name).order_by(cls.user_name)
@classmethod
def get_list(cls):
qry = cls.query_list()
return qry.all()
# @classmethod
# def get_departemen_id(cls, user_id):
......@@ -179,12 +186,9 @@ class ExternalIdentity(ExternalIdentityMixin, CommonModel, Base):
return cls.query().filter_by(local_user_id=user.id)
@classmethod
@classmethod
def external(cls, user):
return cls.query_user(user).count()>0
return cls.query_user(user).count() > 0
# class GroupRoutePermission(Base, CommonModel):
......@@ -206,6 +210,7 @@ class Permission(Base, CommonModel):
class Group(GroupMixin, Base, DefaultModel):
member_count = Column(Integer, nullable=True, default=0)
@classmethod
def query_group_name(cls, group_name):
return DBSession.query(cls).filter_by(group_name=group_name)
......
from sqlalchemy.orm import relationship, backref
from opensipkd.models import TABLE_ARGS
from sqlalchemy import (
Column,
ForeignKey,
String,
SmallInteger,
)
from sqlalchemy.orm import relationship, backref
from .meta import Base
from opensipkd.models import TABLE_ARGS
from .common import (NamaModel)
from .meta import Base
kategori_provinsi = (
("provinsi", "Provinsi"),
......@@ -47,12 +46,14 @@ class ResDati2(Base, NamaModel):
qry = qry.filter(cls.provinsi_id == provinsi_id)
return qry.all()
class ResKecamatan(Base, NamaModel):
__tablename__ = 'res_kecamatan'
__table_args__ = (TABLE_ARGS,)
ibu_kota = Column(String(64))
dati2_id = Column(SmallInteger, ForeignKey(ResDati2.id))
dati2 = relationship(ResDati2, backref=backref("kecamatan"))
@classmethod
def get_list(cls, dati2_id=None):
qry = cls.query_list()
......@@ -73,8 +74,9 @@ class ResDesa(Base, NamaModel):
kategori = Column(String(32))
kecamatan_id = Column(SmallInteger, ForeignKey(ResKecamatan.id))
kecamatan = relationship(ResKecamatan, backref=backref("desa"))
@classmethod
def get_list(cls, kecamatan_id):
def get_list(cls, kecamatan_id=None):
qry = cls.query_list()
if kecamatan_id:
qry = qry.filter(cls.kecamatan_id == kecamatan_id)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!