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 d0f6a355
authored
Mar 06, 2025
by
Hamsyah
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
pembaruan terbaru hmzh
1 parent
ad9a4007
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
29 deletions
opensipkd/base/views/posisi.py
opensipkd/base/views/user_dep.py
opensipkd/base/views/posisi.py
View file @
d0f6a35
This diff is collapsed.
Click to expand it.
opensipkd/base/views/user_dep.py
View file @
d0f6a35
import
colander
from
deform
import
widget
from
pyramid.view
import
view_config
from
.
import
BaseView
from
...models
import
User
,
DepartemenUser
,
Departemen
,
DBSession
from
.departemen
import
departemen_widget
,
get_departemen_list
from
.departemen
import
get_departemen_list
from
.user
import
user_widget
,
user_select
,
user_list
from
pyramid.i18n
import
TranslationStringFactory
_
=
TranslationStringFactory
(
'myapp'
)
@colander.deferred
def
departemen_widget
(
node
,
kw
):
values
=
kw
.
get
(
'departemen_list'
,
[])
return
widget
.
CheckboxChoiceWidget
(
values
=
values
,
P
laceholder
=
'Pilih Departemen'
)
values
=
kw
.
get
(
'departemen_list'
,
[])
return
widget
.
CheckboxChoiceWidget
(
values
=
values
,
p
laceholder
=
'Pilih Departemen'
)
class
ListSchema
(
colander
.
Schema
):
id
=
colander
.
SchemaNode
(
...
...
@@ -28,8 +26,9 @@ class ListSchema(colander.Schema):
)
departemen_name
=
colander
.
SchemaNode
(
colander
.
String
(),
field
=
Departemen
.
nama
)
field
=
Departemen
.
nama
,
title
=
"Departemen"
)
@colander.deferred
def
departemen_checkbox_widget
(
node
,
kw
):
...
...
@@ -44,23 +43,23 @@ class AddSchema(colander.Schema):
title
=
"User"
,
)
departemen_id
=
colander
.
SchemaNode
(
colander
.
Set
(),
colander
.
Set
(),
# Tetap menggunakan colander.Set()
widget
=
departemen_checkbox_widget
,
oid
=
"departemen_id"
,
title
=
"Departemen"
,
)
class
EditSchema
(
AddSchema
):
id
=
colander
.
SchemaNode
(
colander
.
String
(),
id
=
colander
.
SchemaNode
(
colander
.
String
(),
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
(
readonly
=
True
)
)
widget
=
widget
.
HiddenWidget
(
readonly
=
True
)
)
class
Views
(
BaseView
):
def
__init__
(
self
,
request
):
super
()
.
__init__
(
request
)
self
.
request
=
request
self
.
list_schema
=
ListSchema
self
.
add_schema
=
AddSchema
self
.
edit_schema
=
EditSchema
...
...
@@ -82,7 +81,8 @@ class Views(BaseView):
return
super
()
.
view_act
()
def
get_bindings
(
self
,
row
=
None
):
return
{
"departemen_list"
:
get_departemen_list
(),
return
{
"departemen_list"
:
get_departemen_list
(),
"user_list"
:
user_list
()
}
...
...
@@ -106,18 +106,58 @@ class Views(BaseView):
def
view_edit
(
self
):
return
super
()
.
view_edit
()
def
save_request
(
self
,
values
,
row
=
None
):
# save(self, row, values):
for
k
,
v
in
values
.
items
():
if
not
v
:
setattr
(
row
,
k
,
None
)
values
[
"level_id"
]
=
1
if
"parent_id"
in
values
and
values
[
"parent_id"
]:
qry_parent
=
self
.
table
.
query_id
(
values
[
"parent_id"
])
parent
=
qry_parent
.
first
()
if
parent
and
parent
.
level_id
:
values
[
"level_id"
]
=
parent
.
level_id
+
1
if
"parent_id"
not
in
values
:
values
[
"parent_id"
]
=
None
row
=
super
()
.
save_request
(
values
,
row
)
return
row
\ No newline at end of file
def
save_request
(
self
,
values
,
row
=
None
):
# Ambil user_id dari values
user_id
=
values
.
get
(
"user_id"
)
if
not
user_id
:
return
None
# Tidak ada user_id, kembalikan None atau tangani sesuai kebutuhan
# Jika ada departemen_id dalam values
if
"departemen_id"
in
values
:
# Ambil departemen yang sudah ada untuk user ini
existing_departemen
=
self
.
get_existing_departemen
(
user_id
)
# Konversi departemen_id dari set ke set of strings, filter None
selected_departemen
=
set
(
str
(
departemen_id
)
for
departemen_id
in
values
[
"departemen_id"
]
if
departemen_id
is
not
None
and
str
(
departemen_id
)
!=
"None"
)
# Departemen yang tidak dipilih lagi (akan dihapus)
unused_departemen
=
existing_departemen
-
selected_departemen
# Hapus departemen yang tidak dipilih lagi, pastikan hanya integer yang valid
if
unused_departemen
:
valid_unused
=
[
int
(
d
)
for
d
in
unused_departemen
if
d
.
isdigit
()]
if
valid_unused
:
DBSession
.
query
(
DepartemenUser
)
.
filter_by
(
user_id
=
user_id
)
\
.
filter
(
DepartemenUser
.
departemen_id
.
in_
(
valid_unused
))
\
.
delete
(
synchronize_session
=
False
)
# Departemen baru yang dipilih (akan ditambahkan)
new_departemen
=
selected_departemen
-
existing_departemen
# Tambahkan departemen baru, periksa duplikat sebelum insert
for
departemen_id
in
new_departemen
:
if
departemen_id
.
isdigit
():
# Pastikan hanya angka yang diproses
# Cek apakah kombinasi user_id dan departemen_id sudah ada
exists
=
DBSession
.
query
(
DepartemenUser
)
.
filter_by
(
user_id
=
user_id
,
departemen_id
=
int
(
departemen_id
)
)
.
first
()
if
not
exists
:
# Hanya tambahkan jika belum ada
new_row
=
DepartemenUser
(
user_id
=
user_id
,
departemen_id
=
int
(
departemen_id
)
# Konversi ke integer
)
DBSession
.
add
(
new_row
)
# Commit semua perubahan
DBSession
.
flush
()
return
row
# Kembalikan row jika ada, atau None jika tidak digunakan
def
get_existing_departemen
(
self
,
user_id
):
# Ambil semua departemen yang sudah ada untuk user tertentu
q
=
DBSession
.
query
(
DepartemenUser
)
.
filter_by
(
user_id
=
user_id
)
# Pastikan hanya mengembalikan string dari departemen_id yang valid
return
set
(
str
(
row
.
departemen_id
)
for
row
in
q
if
row
.
departemen_id
is
not
None
)
\ No newline at end of file
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