Commit 2f08a104 authored by reynaldi adriantama's avatar reynaldi adriantama

user management

parent 3bf8fe59
......@@ -12,11 +12,5 @@ urlpatterns = [
path('CheckByAddress', views.SearchLocation.as_view(), name='CheckByAddress'),
path('CheckByRadius', views.SearchRadius.as_view(), name='CheckByRadius'),
path('CheckByPolygon', views.SearchPolygon.as_view(), name='CheckByPolygon'),
<<<<<<< HEAD
# path('usermanagement', views.User.as_view(), name='User'),
=======
path('editkelurahan', edit.editkelurahan, name='edit_kel'),
>>>>>>> b0c9d3a5aeeba4afcaecade4a93365407e62fc2b
]
\ No newline at end of file
......@@ -28,5 +28,9 @@ urlpatterns = [
# path('myauth/', include('myauth.urls')),
path('login/', views.CustomLoginView.as_view(), name='login'),
path('logout/', views.CustomLogoutView.as_view(), name='logout'),
path('usermanagement/', views.Usermanagement.as_view(), name='usermanagement')
path('usermanagement/', views.Usermanagement.as_view(), name='usermanagement'),
path('adduser/', views.addUser, name="adduser"),
path('getallGroups/', views.listGroup, name="getallGroups"),
path('switchStatus/', views.deactivateUser, name="switchStatus"),
path('loadUserbyId/', views.loadUserbyId, name="loadUserbyId")
]
from decimal import Context
from typing import get_origin
from django.db.models.expressions import F
from django.http import response
from django.views import View, generic
from django.shortcuts import render
from django.contrib import messages
from django.contrib.auth.views import LoginView, LogoutView
from django.db import connection as conn
from django.db import connection as conn, models
from django.core import serializers
from django.contrib.auth.models import User,Group
from django.contrib.auth.hashers import make_password
from rest_framework import status
from rest_framework.decorators import api_view, renderer_classes
from rest_framework.response import Response
# Create your views here.
......@@ -26,7 +36,7 @@ class Usermanagement(generic.TemplateView):
def get(self, request):
with conn.cursor() as userlist_:
userlist_.execute("SELECT * from auth_user")
userlist_.execute("SELECT * from auth_user ORDER BY username ASC")
allUser = userlist_.fetchall()
......@@ -38,7 +48,7 @@ class Usermanagement(generic.TemplateView):
"name": rows[5] +" "+ rows[6],
"email": rows[7],
"isactive": rows[9],
"last login": rows[2]
"last": rows[2]
}
user_res.append(datas)
......@@ -47,5 +57,193 @@ class Usermanagement(generic.TemplateView):
'title' : 'user management',
'data' : user_res
}
print(context)
return render(request, self.template_name, context)
@api_view(('POST',))
def addUser(request):
if request.method == 'POST':
usernames = request.POST.get('username')
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
group = request.POST.get('group')
email = request.POST.get('email')
password = request.POST.get('username')
iduser = request.POST.get('id')
arrGroup = group.split("~")
user = User()
# user.save()
try:
if iduser:
with conn.cursor() as cursor:
cursor.execute("UPDATE auth_user SET first_name = '"+first_name+"', last_name = '"+last_name+"', email = '"+email+"' WHERE id="+iduser)
with conn.cursor() as curGroup:
curGroup.execute("DELETE FROM auth_user_groups WHERE user_id="+iduser)
users = User.objects.get(username=usernames)
for i in arrGroup:
insertgroups = Group.objects.get(name=i)
insertgroups.user_set.add(users)
data = {
"code" : 0,
"data" : "User telah diperbaharui.",
"info" : "success"
}
else:
user = User.objects.get(username=usernames)
data = {
"code" : 4,
"data" : "username telah tersedia, silahkan coba lagi.",
"info" : "failed"
}
except User.DoesNotExist:
user.username = usernames
user.first_name = first_name
user.last_name = last_name
user.email = email
user.password = make_password(password)
user.save()
# add user to group
userinsert = User.objects.get(username=usernames)
for i in arrGroup:
insertgroups = Group.objects.get(name=i)
insertgroups.user_set.add(userinsert)
data = {
"code" : 0,
"info" : "success",
"data" : "user "+usernames+" berhasil ditambahkan"
}
# data = {'sukses':'sukses'}
return Response(data)
@api_view(('POST',))
def listGroup(request):
if request.method == "POST":
groupList = Group.objects.all()
group = []
for g in groupList:
group.append(g.name)
if len(group) > 0:
data = {
"info" : "success",
"code" : 0,
"data" : group
}
else:
data = {
"info" : "group tidak tersedia",
"code" : 4,
"data" : group
}
return Response(data)
@api_view(('POST',))
def deactivateUser(request):
user = User()
if request.method == "POST":
ids = request.POST.get('id')
status = request.POST.get('stat')
isActive = loadUserStatus(ids)
# print(type(status)+status)
# print(type(True))
print(status == 'True')
if status == 'True':
sql = "f"
else:
sql = "t"
with conn.cursor() as cursor:
affected_row = cursor.execute("UPDATE auth_user SET is_active = '"+sql+"' WHERE id = "+ids)
print ("UPDATE auth_user SET is_active = '"+sql+"' WHERE id = "+ids)
print (affected_row)
if affected_row:
data = {
"info" : "success",
"code" : 0,
"data" : "User berhasil dinonaktifkan"
}
else:
data = {
"info" : "success",
"code" : 0,
"data" : "User berhasil dinonaktifkan"
}
return Response(data)
def loadUserStatus(id):
with conn.cursor() as cursor:
cursor.execute("SELECT is_active from auth_user WHERE id="+id+"")
resData = cursor.fetchall()
for i in resData:
isActive = i[0]
return isActive
@api_view(('POST',))
def loadUserbyId(request):
if request.method == "POST":
id = request.POST.get('id')
print(id)
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM auth_user WHERE id ="+id)
result = cursor.fetchall()
group_res = loadGroupById(id)
user_res = []
for rows in result:
datas = {
"id" : rows[0],
"username" : rows[4],
"firstname": rows[5],
"lastname" : rows[6],
"email" : rows[7],
"isactive" : rows[9],
"last" : rows[2],
"group" : group_res
}
user_res.append(datas)
data = {
"info" : "success",
"code" : 0,
"data" : datas,
}
return Response(data)
def loadGroupById(iduser):
with conn.cursor() as cursor:
cursor.execute("select ag.name from auth_group ag, auth_user_groups aug WHERE aug.user_id = "+iduser+" AND ag.id = aug.group_id")
result = cursor.fetchall()
print(result)
resGroup = []
for i in result:
resGroup.append(i[0])
print(resGroup)
return resGroup
\ No newline at end of file
......@@ -28,7 +28,7 @@
<li><a href="#"><i class="icon-user-plus"></i> My profile</a></li>
<li><a href="#"><i class="icon-cog5"></i> Account settings</a></li>
<li class="divider"></li>
<li><a href="{% url 'logout' %}"><i class="icon-cog5"></i> Logout</a></li>
</ul>
</li>
</ul>
......
......@@ -240,7 +240,7 @@
{% include 'includes/navbar.html' %}
<div style="height: 605px;">
<div style="height: 93vh;">
{% block content %}
<div>
......
{% load static %}
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{title}}</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.css">
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.Default.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.css" />
<link rel="stylesheet" href="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.css" />
<link rel="stylesheet" href="https://unpkg.com/esri-leaflet-geocoder@2.3.3/dist/esri-leaflet-geocoder.css">
<script src="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.js" charset="utf-8"></script>
<!-- Global stylesheets -->
<link href="https://fonts.googleapis.com/css?family=Roboto:400,300,100,500,700,900" rel="stylesheet" type="text/css">
<link href="{% static 'css/icons/icomoon/styles.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/bootstrap.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/core.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/components.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/colors.css' %}" rel="stylesheet" type="text/css">
<script src="{% static 'js/Leaflet.Editables.js' %}"></script>
<!-- /global stylesheets -->
<style>
.page_loader {
position: fixed;
background: url('../../static/img/loadingz.gif') 50% 50% no-repeat rgb(249, 249, 249);
left: 0px;
top: 0px;
width: 100%;
.page-container {
padding: 0;
height: 100%;
z-index: 9999;
opacity: .5;
}
.modal-backdrop {
z-index: -999!important;
}
.sidebar {
padding: 0;
}
.form-group {
margin-bottom: 0px;
}
hr {
margin-top: 0px !important;
.panel-body {
padding: 0px 20px;
}
.leaflet-popup-content {
width: 500px;
.row {
margin-left: 0px;
margin-right: 0px;
}
.leaflet-control-attribution {
display: none;
th {
min-width: 150px;
}
.modal-colors{
background-color: #1a222f;
}
.lbl-top{
margin-top: 10px;
}
/* width */
::-webkit-scrollbar {
width: 5px;
width: 10px;
}
/* Track */
......@@ -46,268 +79,647 @@
/* Handle */
::-webkit-scrollbar-thumb {
background: #bfbfbf;
background: #888;
}
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
background: rgb(138, 138, 138);
background: #555;
}
</style>
</head>
{% include 'includes/css-o.html' %} {% include 'includes/css-m.html' %}
<body style="padding-right: 0px !important;">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<!-- Main navbar -->
<!-- Main navbar -->
<div class="navbar navbar-inverse">
<div class="navbar-header">
<a class="navbar-brand" href="{% url 'apps:dashboard' %}">
<!-- <h3>NationalAddress</h3> -->
<i class=" icon-location4"></i>
<b>&nbsp;&nbsp;OKU-GIS</b>
</a>
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.css">
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.Default.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.css" />
<link rel="stylesheet" href="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.css" />
<link rel="stylesheet" href="https://unpkg.com/esri-leaflet-geocoder@2.3.3/dist/esri-leaflet-geocoder.css">
<ul class="nav navbar-nav pull-right visible-xs-block">
<li><a data-toggle="collapse" data-target="#navbar-mobile"><i class="icon-tree5"></i></a></li>
</ul>
</div>
<div class="navbar-collapse collapse" id="navbar-mobile">
<script src="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.js" charset="utf-8"></script>
<p class="navbar-text"><span class="label bg-success-400">Online</span></p>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown dropdown-user">
<a class="dropdown-toggle" data-toggle="dropdown">
<img src="{% static 'img/placeholder.jpg' %}" alt="">
<span>{{user.username}}</span>
<i class="caret"></i>
</a>
<!-- CSS Files -->
<link href="{% static 'css/plugin.css'%}" rel="stylesheet" />
<!-- CSS Just for demo purpose, don't include it in your project -->
<!-- <link href="{% static 'demo/demo.css'%}" rel="stylesheet" /> -->
<!-- Global stylesheets -->
<link href="https://fonts.googleapis.com/css?family=Roboto:400,300,100,500,700,900" rel="stylesheet" type="text/css">
<link href="{% static 'css/icons/icomoon/styles.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/bootstrap.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/core.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/components.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/colors.css' %}" rel="stylesheet" type="text/css">
<script src="{% static 'js/Leaflet.Editables.js' %}"></script>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="#"><i class="icon-user-plus"></i> My profile</a></li>
<li><a href="#"><i class="icon-cog5"></i> Account settings</a></li>
<li class="divider"></li>
<li><a href="{% url 'logout' %}"><i class="icon-cog5"></i> Logout</a></li>
</ul>
</li>
</ul>
</div>
</div>
<!-- /main navbar -->
<style>
#button_hide_panel {
line-height: 30px;
width: 10px;
font-size: 10pt;
font-family: tahoma;
margin-top: 0px;
/* margin-right: 3px; */
position: absolute;
/* top: 0; */
left: 370px;
z-index: 998;
display: none;
}
#button_unhide_panel {
line-height: 30px;
width: 10px;
font-size: 10pt;
font-family: tahoma;
margin-top: 0px;
/* margin-right: 3px; */
position: absolute;
/* top: 0; */
left: -11px;
z-index: 998;
display: none;
}
</style>
</head>
<!-- Page container -->
<div class="page-container">
<body>
{% include 'includes/navbar.html' %}
<!-- Page content -->
<div class="page-content">
{% block content %}
<div class="page-container">
<!-- Main sidebar -->
<div class="sidebar sidebar-main" style="height: 95vh;
min-height: 607px;">
<div class="sidebar-content" style="height: 100%;">
<!-- Page content -->
<div class="page-content">
<!-- Main content -->
<div class="content-wrapper">
<div class="panel panel-flat">
<div class="panel-heading">
<h5 class="panel-title">Page length options</h5>
<div class="heading-elements">
<ul class="icons-list">
<li><a data-action="collapse"></a></li>
<li><a data-action="reload"></a></li>
<li><a data-action="close"></a></li>
</ul>
<!-- User menu -->
<div class="sidebar-user">
<div class="category-content">
<div class="media">
<a href="#" class="media-left"><img src="assets/images/placeholder.jpg" class="img-circle img-sm" alt=""></a>
<div class="media-body">
<span class="media-heading text-semibold">{{user.username}}</span>
<div class="text-size-mini text-muted">
<i class="icon-pin text-size-small"></i>
</div>
</div>
<div class="media-right media-middle">
<ul class="icons-list">
<li>
<a href="#"><i class="icon-cog3"></i></a>
</li>
</ul>
</div>
</div>
</div>
<hr>
<div class="panel-body">
<table class="table datatable-show-all">
<thead>
<tr>
<th>No.</th>
<th>Username</th>
<th>Name</th>
<th>Email</th>
<th>Status</th>
<th class="text-center">Actions</th>
</tr>
</thead>
<tbody>
{% for user in data %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{user.username}}</td>
<td>{{user.name}}</td>
<td>{{user.email}}</td>
<td>
{% if user.isactive == t %}
<span class="label label-success">
Active
</span>
{% else %}
<span class="label label-success">
Active
</span>
{% endif %}
</td>
<td class="text-center">
<ul class="icons-list">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-menu9"></i>
</a>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="#"><i class="icon-file-pdf"></i> Export to .pdf</a></li>
<li><a href="#"><i class="icon-file-excel"></i> Export to .csv</a></li>
<li><a href="#"><i class="icon-file-word"></i> Export to .doc</a></li>
</ul>
</li>
</ul>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- /user menu -->
<!-- Main navigation -->
<div class="sidebar-category sidebar-category-visible">
<div class="category-content no-padding">
<ul class="navigation navigation-main navigation-accordion">
<!-- Main -->
<li class="navigation-header"> <i class="icon-menu" title="Main pages"></i></li>
<li><a class="tablinks" onclick="openInfo(event, 'info-maps')" id="defaultOpen"><span>User Management</span></a></li>
<!-- <li><a class="tablinks" onclick="openInfo(event, 'info-penduduk')" id="defaultOpen"><span>Kependudukan</span></a></li>
<li><a class="tablinks" onclick="openInfo(event, 'info-pendidikan')" id="defaultOpen"><span>Pendidikan</span></a></li>
<li><a class="tablinks" onclick="openInfo(event, 'info-pekerjaan')" id="defaultOpen"><span>Pekerjaan</span></a></li>
<li><a class="tablinks" onclick="openInfo(event, 'info-poi')" id="defaultOpen"><span>POI</span></a></li> -->
</ul>
</li>
<!-- /page kits -->
</ul>
</div>
</div>
<!-- /main navigation -->
</div>
<div id="modal-adds" class="modal fade" data-keyboard="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title">Tambah user</h6>
</div>
<div class="modal-body">
<input id="idkps" value="" type="hidden" class="form-control" placeholder="Nama Perusahaan..">
<div class="form-group">
<label>Keterangan :</label>
<textarea id="keterangans" cols="30" rows="10" type="text" class="form-control" placeholder="Keterangan Mahasiswa..." ></textarea>
</div>
</div>
<!-- /main sidebar -->
<!-- Main content -->
<div class="content-wrapper" id="info-maps">
<div>
<!-- Page header -->
<div class="page-header page-header-default" style="margin-bottom: 0px;">
<div class="breadcrumb-line">
<ul class="breadcrumb">
<li>User Management</li>
</ul>
</div>
</div>
<!-- /page header -->
<!-- Content area -->
<div class="content" style="padding: 15px;">
<!-- Main charts -->
<!-- Sales stats -->
<div class="panel panel-flat">
<div class="panel-heading">
<h6 class="panel-title">Table User</h6>
<button id="modalAddButton" class="btn btn-primary btn-sm" value="SAVE" style="bottom: 15px; float: right; display:none;" data-toggle="modal" data-target="#modal_theme_info"></button>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal">Close</button>
<button id="btn-note" name="validate" value="105" type="button" class="btn btn-primary">Tambah Keterangan</button>
<hr style="margin-top: 0px;">
<div class="panel-body">
<table class="table table-responsive datatable-show-all" id="userList">
<thead>
<tr>
<th>No.</th>
<th>Username</th>
<th>Name</th>
<th>Email</th>
<th>Last login</th>
<th>Status</th>
<th class="text-center">Actions</th>
</tr>
</thead>
<tbody>
{% for user in data %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{user.username}}</td>
<td>{{user.name}}</td>
<td>{{user.email}}</td>
<td>{{user.last}}</td>
<td>
{% if user.isactive == True %}
<span class="label label-success">
Active
</span>
{% else %}
<span class="label label-danger">
Inactive
</span>
{% endif %}
</td>
<td class="text-center">
<ul class="icons-list">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-menu9"></i>
</a>
<ul class="dropdown-menu dropdown-menu-right">
<li><a onclick="switchuserstatus('{{user.id}}, {{user.isactive}}')" ><i class="icon-user-block"></i> Switch user status</a></li>
<li><a onclick="loaduserbyid('{{user.id}}')"><i class="icon-users"></i> Edit user</a></li>
</ul>
</li>
</ul>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- /form validation -->
</div>
</div>
<!-- /main charts -->
</div>
</div>
<!-- /main content -->
</div>
{% endblock content %}
<!-- /page content -->
</div>
<!-- /page container -->
<div id="modal_theme_info" class="modal fade">
<div class="modal-dialog md">
<div class="modal-content">
<div class="modal-header bg-info" style="background-color: #1a222f !important;">
<button type="button" class="close" data-dismiss="modal" onclick="destroyfade()">&times;</button>
<h6 class="modal-title modstit">Modal Tambah User</h6>
</div>
<div class="modal-body" style="max-height: 450px;overflow-y: auto;">
<input type="hidden" id="iduser">
<div class="form-group">
<label class="col-lg-3 control-label lbl-top" >Username</label>
<div class="col-lg-9">
<input id="inUsername" type="text" class="form-control" value=""required>
</div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label lbl-top" >First Name</label>
<div class="col-lg-9">
<input id="inNameF" type="text" class="form-control" value=""required>
</div>
</div>
<!-- <div id="map"></div> -->
<div class="form-group">
<label class="col-lg-3 control-label lbl-top" >Last Name</label>
<div class="col-lg-9">
<input id="inNameL" type="text" class="form-control" value=""required>
</div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label lbl-top" >Email</label>
<div class="col-lg-9">
<input id="inEmail" type="text" class="form-control" value=""required>
</div>
</div>
<div class="form-group" style="margin-top: 10px !important;">
<label class="col-lg-3 control-label lbl-top" >Groups</label>
<div class="col-lg-9" >
<select style="border-bottom: 1px solid rgb(83, 83, 83) !important;" id="select_group" multiple="multiple" data-placeholder="select group.." class="select-size-xs">
<option></option>
</select>
</div>
</div>
</div>
<hr>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal" onclick="destroyfade()">Close</button>
<button type="button" class="btn btn-info" id="saveuser">Save changes</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modal-kelurahan" tabindex="-1" role="dialog">
</div>
<!-- end modal location -->
{% include 'includes/modal.html' %}
<!-- Core JS files -->
<script type="text/javascript" src="{% static 'js/plugins/loaders/pace.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/core/libraries/jquery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/core/libraries/bootstrap.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/loaders/blockui.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/ui/nicescroll.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/ui/drilldown.js' %}"></script>
<!-- /core JS files -->
<script src="https://use.fontawesome.com/d232835e93.js"></script>
<div class="page_loader"></div>
<script src="https://unpkg.com/leaflet.markercluster@1.4.1/dist/leaflet.markercluster.js"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.js" charset="utf-8"></script>
<script src="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.js" charset="utf-8"></script> -->
<script src="https://unpkg.com/esri-leaflet@2.5.1/dist/esri-leaflet.js"></script>
<script src="https://unpkg.com/esri-leaflet-geocoder@2.3.3/dist/esri-leaflet-geocoder.js"></script>
<script src="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.js"></script>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw-src.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.6/handlebars.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/typeahead.js/0.11.1/typeahead.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.fullscreen/1.4.2/Control.FullScreen.min.js"></script>
<!-- Theme JS files -->
<script type="text/javascript" src="{% static 'js/plugins/visualization/d3/d3.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/visualization/d3/d3_tooltip.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/forms/styling/switchery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/forms/styling/uniform.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/forms/selects/bootstrap_multiselect.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/ui/moment/moment.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/pickers/daterangepicker.js' %}"></script>
<!-- <script type="text/javascript" src="{% static 'js/plugins/ui/ripple.min.js' %}"></script> -->
<!-- /theme JS files -->
{% include 'includes/scripts.html' %}
<script src="{% static 'js/leaflet-bing-layer.js' %}"></script>
<!-- <script src="https://unpkg.com/sweetalert/dists/sweetalert.min.js"></script> -->
<script type="text/javascript" src="{% static 'js/core/libraries/jquery_ui/interactions.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/plugins/forms/selects/select2.min.js' %}"></script>
<!-- <script type="text/javascript" src="{% static 'js/pages/datatables_advanced.js'%}"></script> -->
<script type="text/javascript" src="{% static 'js/pages/form_select2.js' %}"></script>
</body>
<script type="text/javascript" src="{% static 'js/plugins/forms/selects/select2.min.js' %}"></script>
<!-- /theme JS files -->
</html>
<script>
// file.onchange = evt => {
// const [fil] = file.files
// if (fil) {
// blah.src = URL.createObjectURL(fil)
// }
// }
<script type="text/javascript">
jQuery(document).ajaxSend(function(event, xhr, settings) {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function sameOrigin(url) {
// url could be relative or scheme relative or absolute
var host = document.location.host; // host + port
var protocol = document.location.protocol;
var sr_origin = '//' + host;
var origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
function safeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
});
function openInfo(evt, infName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("content-wrapper");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(infName).style.display = "block";
evt.currentTarget.className += " active";
}
function destroyfade(){
$(".modal-backdrop").css("display","none")
$(".modal-backdrop").removeClass('show');
$("body").css('padding-right','0px !important')
}
$('.datatable-show-all').DataTable({
autoWidth: false,
columnDefs: [{
orderable: false,
width: '100px',
targets: [ 5 ]
}],
dom: '<"float-left"B>frtip',
buttons: [
{
text: 'Tambah User',
action: function ( e, dt, node, config ) {
$("#modalAddButton").click()
$("#inUsername").attr("disabled", false);
$("#inUsername").val(null);
$("#inNameF").val(null);
$("#inNameL").val(null);
$("#inEmail").val(null);
$("#iduser").val(null);
$(".modstit").html("Tambah User")
loadGroups(null)
}
}
],
language: {
search: '<span>Filter:</span> _INPUT_',
searchPlaceholder: 'Type to filter...',
lengthMenu: '<span>Show:</span> _MENU_',
paginate: { 'first': 'First', 'last': 'Last', 'next': '&rarr;', 'previous': '&larr;' }
},
drawCallback: function () {
$(this).find('tbody tr').slice(-3).find('.dropdown, .btn-group').addClass('dropup');
},
preDrawCallback: function() {
$(this).find('tbody tr').slice(-3).find('.dropdown, .btn-group').removeClass('dropup');
}
// console.log(result_);
loaderPage(false);
});
function loaderPage(stat) {
if (stat == true) {
$('.page_loader').show();
} else {
$('.page_loader').hide();
$("#modalAddButton").click(function(){
$("body").css("padding-right","0px !important")
})
$("#saveuser").on("click", function(){
addUser()
})
function addUser(){
var isObject = {};
var ars = ''
var group = $("#select_group").val();
var iduser = $("#iduser").val();
if(iduser){
isObject.id = iduser;
}
for(i in group){
if(i < group.length-1){
ars += group[i]+"~";
}else{
ars += group[i];
}
};
}
isObject['username'] = $("#inUsername").val();
isObject['first_name'] = $("#inNameF").val();
isObject['last_name'] = $("#inNameL").val();
isObject['email'] = $("#inEmail").val();
isObject.group = ars
console.log(isObject);
// return false
$.ajax({
url: "{% url 'adduser' %}",
data: isObject,
dataType: 'json',
type: 'post',
success: function(data) {
let response = data;
if(response.code == 0){
$("#modal_theme_info").modal('toggle');
destroyfade();
$(function(){
$.extend( $.fn.dataTable.defaults, {
swal({
title : response.info,
text : response.data,
type : "success",
icon : "success",
confirmButtonColor: "#00BCD4"
}).then((isok) => {
location.reload();
})
}else{
swal({
title : response.info,
text : response.data,
type : "alert",
icon : "error",
confirmButtonColor: "#00BCD4"
})
}
}
});
}
$("#select_group").on("click", function(e){
e.preventDefault()
})
function loadGroups(isSelect){
var isObject = {}
console.log(isSelect)
isObject.func_name = "loadGroups";
$.ajax({
url: "{% url 'getallGroups' %}",
data: isObject,
dataType: 'json',
type: 'post',
success: function(data) {
});
$('.datatable-show-all').DataTable({
autoWidth: false,
columnDefs: [{
orderable: false,
width: '100px',
targets: [ 5 ]
}],
dom: '<"float-left"B>lfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
showmodal()
let response = data;
console.log(response)
if(response.code == 0){
var groups = response.data;
var html = ``;
for(i in groups){
if(isSelect){
if(isSelect.length>=1){
for(j in isSelect){
if(isSelect[j] == groups[i]){
html += `<option value="`+groups[i]+`" selected>`+groups[i]+`</option>`;
}else{
html += `<option value="`+groups[i]+`">`+groups[i]+`</option>`;
}
}
}else{
html += `<option value="`+groups[i]+`">`+groups[i]+`</option>`;
}
}else{
html += `<option value="`+groups[i]+`">`+groups[i]+`</option>`;
}
}
],
language: {
search: '<span>Filter:</span> _INPUT_',
searchPlaceholder: 'Type to filter...',
lengthMenu: '<span>Show:</span> _MENU_',
paginate: { 'first': 'First', 'last': 'Last', 'next': '&rarr;', 'previous': '&larr;' }
},
drawCallback: function () {
$(this).find('tbody tr').slice(-3).find('.dropdown, .btn-group').addClass('dropup');
},
preDrawCallback: function() {
$(this).find('tbody tr').slice(-3).find('.dropdown, .btn-group').removeClass('dropup');
$("#select_group").html(html);
}else{
$("#select_group").html("group tidak tersedia");
}
});
})
}
});
}
function showmodal(){
$("#modal-adds").modal("show")
function switchuserstatus(id, isactive){
var isObject = {}
var params = id.split(",");
isObject.id = params[0];
isObject.stat = params[1].replace(" ", "");
console.log(params)
if(isObject.stat == "True"){
var title = "Nonaktifkan";
var text = "User tidak akan bisa login jika dinonaktifkan!";
}else{
var title = "Aktifkan";
var text = "User dapat kembali login jika diaktifkan!";
}
swal({
title: title+" user?",
text: text,
type: "warning",
showCancelButton: true,
confirmButtonClass: "btn-danger",
confirmButtonText: "Ya!",
cancelButtonText: "Tidak!",
closeOnConfirm: false,
closeOnCancel: false
}).then((isConfirm) =>{
console.log(isConfirm)
if (isConfirm.value) {
$.ajax({
url: "{% url 'switchStatus' %}",
data: isObject,
dataType: 'json',
type: 'post',
success: function(data) {
let response = data;
</script>
if(isObject.stat == "True"){
var inf = "dinonaktifkan"
}else{
var inf = "diaktifkan"
}
if(response.code == 0){
swal({
title : "sukses",
text : "User berhasil "+inf,
type : "success",
icon : "success",
confirmButtonColor: "#00BCD4"
}).then((isok) => {
location.reload();
})
}else{
alert("no data in database")
}
}
});
} else {
swal("Dibatalkan", "User status tidak berubah", "error");
}
});
}
function loaduserbyid(id){
var isObject = {};
$(".modstit").html("Update User")
$("#inUsername").attr("disabled", true)
</body>
isObject.id = id;
$("#iduser").val(id)
</html>
$.ajax({
url: "{% url 'loadUserbyId' %}",
data: isObject,
dataType: 'json',
type: 'post',
success: function(data) {
let response = data;
if(response.code == 0){
var user = response.data;
console.log(user)
$("#inUsername").val(user.username);
$("#inNameF").val(user.firstname);
$("#inNameL").val(user.lastname);
$("#inEmail").val(user.email);
loadGroups(user.group)
$("#modalAddButton").click()
}else{
}
}
});
}
</script>
\ No newline at end of file
......@@ -124,7 +124,7 @@
<div class="page-content">
<!-- Main sidebar -->
<div class="sidebar sidebar-main" style="height: 607px;
<div class="sidebar sidebar-main" style="height: 95vh;
min-height: 607px;">
<div class="sidebar-content" style="height: 100%;">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment