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 09473156
authored
Mar 24, 2025
by
iqbal
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
penambahan fungsi csv
1 parent
ef68c235
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
108 additions
and
31 deletions
opensipkd/base/views/dati2.py
opensipkd/base/views/desa.py
opensipkd/base/views/eselon.py
opensipkd/base/views/groups.py
opensipkd/base/views/partner.py
opensipkd/base/views/user_area.py
opensipkd/base/views/dati2.py
View file @
0947315
...
@@ -10,6 +10,7 @@ from opensipkd.models import DBSession, ResDati2, kategori_dati2, ResProvinsi
...
@@ -10,6 +10,7 @@ from opensipkd.models import DBSession, ResDati2, kategori_dati2, ResProvinsi
from
..views
import
BaseView
from
..views
import
BaseView
from
.
import
BaseView
,
btn_upload
from
.
import
BaseView
,
btn_upload
from
pyramid.path
import
AssetResolver
from
pyramid.path
import
AssetResolver
from
opensipkd.tools
import
get_random_string
from
.
import
BaseView
,
button_import
,
get_params
from
.
import
BaseView
,
button_import
,
get_params
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools.report
import
csv_response
,
file_response
...
@@ -98,6 +99,21 @@ class ViewDati2(BaseView):
...
@@ -98,6 +99,21 @@ class ViewDati2(BaseView):
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
@staticmethod
def
query_register
():
return
DBSession
.
query
(
ResDati2
.
provinsi_id
,
ResDati2
.
kode
,
ResDati2
.
kategori
,
ResDati2
.
nama
)
.
order_by
(
ResDati2
.
provinsi_id
)
def
csv_response
(
self
,
**
kwargs
):
query
=
self
.
query_register
()
row
=
query
.
first
()
header
=
row
.
_mapping
.
keys
()
rows
=
[
list
(
item
)
for
item
in
query
.
all
()]
filename
=
f
"{get_random_string(16)}.csv"
value
=
{
'header'
:
header
,
'rows'
:
rows
,
}
return
csv_response
(
self
.
req
,
value
,
filename
)
def
form_validator
(
self
,
form
,
value
):
def
form_validator
(
self
,
form
,
value
):
def
err_kode
():
def
err_kode
():
...
...
opensipkd/base/views/desa.py
View file @
0947315
...
@@ -11,6 +11,7 @@ from pyramid.path import AssetResolver
...
@@ -11,6 +11,7 @@ from pyramid.path import AssetResolver
from
.
import
BaseView
,
button_import
,
get_params
from
.
import
BaseView
,
button_import
,
get_params
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools.report
import
csv_response
,
file_response
from
.dati2
import
dati2_widget
from
.dati2
import
dati2_widget
from
opensipkd.tools
import
get_random_string
from
.kecamatan
import
kecamatan_widget
from
.kecamatan
import
kecamatan_widget
from
.provinsi
import
provinsi_widget
from
.provinsi
import
provinsi_widget
from
..views
import
BaseView
from
..views
import
BaseView
...
@@ -116,6 +117,23 @@ class ViewDesa(BaseView):
...
@@ -116,6 +117,23 @@ class ViewDesa(BaseView):
print
(
parameters
)
print
(
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
@staticmethod
def
query_register
():
return
DBSession
.
query
(
ResDesa
.
kecamatan_id
,
ResDesa
.
kode
,
ResDesa
.
kategori
,
ResDesa
.
nama
)
.
order_by
(
ResDesa
.
kecamatan_id
)
def
csv_response
(
self
,
**
kwargs
):
query
=
self
.
query_register
()
row
=
query
.
first
()
header
=
row
.
_mapping
.
keys
()
rows
=
[
list
(
item
)
for
item
in
query
.
all
()]
filename
=
f
"{get_random_string(16)}.csv"
value
=
{
'header'
:
header
,
'rows'
:
rows
,
}
return
csv_response
(
self
.
req
,
value
,
filename
)
def
form_validator
(
self
,
form
,
value
):
def
form_validator
(
self
,
form
,
value
):
def
err_kode
():
def
err_kode
():
...
...
opensipkd/base/views/eselon.py
View file @
0947315
...
@@ -16,6 +16,7 @@ from . import BaseView, btn_upload
...
@@ -16,6 +16,7 @@ from . import BaseView, btn_upload
from
pyramid.path
import
AssetResolver
from
pyramid.path
import
AssetResolver
from
.
import
BaseView
,
button_import
,
get_params
from
.
import
BaseView
,
button_import
,
get_params
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools
import
get_random_string
SESS_ADD_FAILED
=
'Tambah eselon gagal'
SESS_ADD_FAILED
=
'Tambah eselon gagal'
SESS_EDIT_FAILED
=
'Edit eselon gagal'
SESS_EDIT_FAILED
=
'Edit eselon gagal'
...
@@ -94,6 +95,22 @@ class Views(BaseView):
...
@@ -94,6 +95,22 @@ class Views(BaseView):
print
(
parameters
)
print
(
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
@staticmethod
def
query_register
():
return
DBSession
.
query
(
Eselon
.
kode
,
Eselon
.
nama
,
Eselon
.
status
)
.
order_by
(
Eselon
.
kode
)
def
csv_response
(
self
,
**
kwargs
):
query
=
self
.
query_register
()
row
=
query
.
first
()
header
=
row
.
_mapping
.
keys
()
rows
=
[
list
(
item
)
for
item
in
query
.
all
()]
filename
=
f
"{get_random_string(16)}.csv"
value
=
{
'header'
:
header
,
'rows'
:
rows
,
}
return
csv_response
(
self
.
req
,
value
,
filename
)
@view_config
(
route_name
=
'eselon'
,
renderer
=
'templates/table.pt'
,
@view_config
(
route_name
=
'eselon'
,
renderer
=
'templates/table.pt'
,
permission
=
'eselon'
)
permission
=
'eselon'
)
...
...
opensipkd/base/views/groups.py
View file @
0947315
...
@@ -92,21 +92,21 @@ class Views(BaseView):
...
@@ -92,21 +92,21 @@ class Views(BaseView):
def
get_bindings
(
self
,
row
=
None
):
def
get_bindings
(
self
,
row
=
None
):
return
dict
(
group
=
row
,
return
dict
(
group
=
row
,
permissions_list
=
get_permissions_list
())
permissions_list
=
get_permissions_list
())
@staticmethod
def
query_register
():
def
query_register
():
return
DBSession
.
query
(
Group
.
group_name
,
Group
.
description
,)
.
order_by
(
Group
.
group_name
)
return
DBSession
.
query
(
Group
.
group_name
,
Group
.
description
,
Group
.
permissions
)
.
order_by
(
Group
.
group_name
)
#
def csv_response(self, **kwargs):
def
csv_response
(
self
,
**
kwargs
):
#query = self.table
.query_register()
query
=
self
.
query_register
()
#
row = query.first()
row
=
query
.
first
()
#
header = row._mapping.keys()
header
=
row
.
_mapping
.
keys
()
#
rows = [list(item) for item in query.all()]
rows
=
[
list
(
item
)
for
item
in
query
.
all
()]
#
filename = f"{get_random_string(16)}.csv"
filename
=
f
"{get_random_string(16)}.csv"
#
value = {
value
=
{
#
'header': header,
'header'
:
header
,
#
'rows': rows,
'rows'
:
rows
,
#
}
}
#
return csv_response(self.req, value, filename)
return
csv_response
(
self
.
req
,
value
,
filename
)
@view_config
(
@view_config
(
route_name
=
'group'
,
renderer
=
'templates/table.pt'
,
route_name
=
'group'
,
renderer
=
'templates/table.pt'
,
...
...
opensipkd/base/views/partner.py
View file @
0947315
...
@@ -15,6 +15,7 @@ from . import BaseView, button_import, get_params
...
@@ -15,6 +15,7 @@ from . import BaseView, button_import, get_params
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools
import
Upload
,
img_exts
from
opensipkd.tools
import
Upload
,
img_exts
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.i18n
import
TranslationStringFactory
from
opensipkd.tools
import
get_random_string
from
pyramid.view
import
(
from
pyramid.view
import
(
view_config
,
view_config
,
)
)
...
@@ -134,6 +135,22 @@ class ViewPartner(BaseView):
...
@@ -134,6 +135,22 @@ class ViewPartner(BaseView):
print
(
parameters
)
print
(
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
@staticmethod
def
query_register
():
return
DBSession
.
query
(
Partner
.
is_vendor
,
Partner
.
is_customer
,
Partner
.
company_id
)
.
order_by
(
Partner
.
is_vendor
)
def
csv_response
(
self
,
**
kwargs
):
query
=
self
.
query_register
()
row
=
query
.
first
()
header
=
row
.
_mapping
.
keys
()
rows
=
[
list
(
item
)
for
item
in
query
.
all
()]
filename
=
f
"{get_random_string(16)}.csv"
value
=
{
'header'
:
header
,
'rows'
:
rows
,
}
return
csv_response
(
self
.
req
,
value
,
filename
)
########
########
# List #
# List #
...
...
opensipkd/base/views/user_area.py
View file @
0947315
...
@@ -8,8 +8,10 @@ from pyramid.path import AssetResolver
...
@@ -8,8 +8,10 @@ from pyramid.path import AssetResolver
from
.
import
BaseView
,
button_import
,
get_params
from
.
import
BaseView
,
button_import
,
get_params
from
...models
import
DBSession
,
ResDesa
,
User
,
UserArea
from
...models
import
DBSession
,
ResDesa
,
User
,
UserArea
from
.desa
import
desa_widget
,
get_desa_list
from
.desa
import
desa_widget
,
get_desa_list
from
sqlalchemy
import
func
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.i18n
import
TranslationStringFactory
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools.report
import
csv_response
,
file_response
from
opensipkd.tools
import
get_random_string
_
=
TranslationStringFactory
(
'myapp'
)
_
=
TranslationStringFactory
(
'myapp'
)
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
...
@@ -63,7 +65,7 @@ class EditSchema(AddSchema):
...
@@ -63,7 +65,7 @@ class EditSchema(AddSchema):
class
Views
(
BaseView
):
class
Views
(
BaseView
):
def
__init__
(
self
,
request
):
def
__init__
(
self
,
request
):
super
()
.
__init__
(
request
)
super
(
Views
,
self
)
.
__init__
(
request
)
self
.
list_schema
=
ListSchema
self
.
list_schema
=
ListSchema
self
.
add_schema
=
AddSchema
self
.
add_schema
=
AddSchema
self
.
edit_schema
=
EditSchema
self
.
edit_schema
=
EditSchema
...
@@ -90,7 +92,23 @@ class Views(BaseView):
...
@@ -90,7 +92,23 @@ class Views(BaseView):
}
}
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
filename
=
jasper_export
(
self
.
report_file
,
parameters
=
parameters
)
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
return
file_response
(
self
.
req
,
filename
=
filename
[
0
])
@staticmethod
def
query_register
():
return
DBSession
.
query
(
UserArea
.
user_id
,
UserArea
.
desa_id
)
.
order_by
(
UserArea
.
user_id
)
def
csv_response
(
self
,
**
kwargs
):
query
=
self
.
query_register
()
# Panggil sebagai metode instance
row
=
query
.
first
()
header
=
row
.
_mapping
.
keys
()
if
row
else
[
'user_id'
,
'desa_id'
]
# Tambahkan fallback jika query kosong
rows
=
[
list
(
item
)
for
item
in
query
.
all
()]
filename
=
f
"{get_random_string(16)}.csv"
value
=
{
'header'
:
header
,
'rows'
:
rows
,
}
return
csv_response
(
self
.
req
,
value
,
filename
)
def
list_join
(
self
,
query
,
**
kwargs
):
def
list_join
(
self
,
query
,
**
kwargs
):
return
query
.
outerjoin
(
ResDesa
,
ResDesa
.
id
==
self
.
table
.
desa_id
)
\
return
query
.
outerjoin
(
ResDesa
,
ResDesa
.
id
==
self
.
table
.
desa_id
)
\
.
outerjoin
(
User
,
User
.
id
==
self
.
table
.
user_id
)
.
outerjoin
(
User
,
User
.
id
==
self
.
table
.
user_id
)
...
@@ -98,12 +116,12 @@ class Views(BaseView):
...
@@ -98,12 +116,12 @@ class Views(BaseView):
@view_config
(
route_name
=
'user-area'
,
renderer
=
'templates/table.pt'
,
@view_config
(
route_name
=
'user-area'
,
renderer
=
'templates/table.pt'
,
permission
=
'user-view'
)
permission
=
'user-view'
)
def
view_list
(
self
,
**
kwargs
):
def
view_list
(
self
,
**
kwargs
):
return
super
()
.
view_list
(
**
kwargs
)
return
super
(
Views
,
self
)
.
view_list
(
**
kwargs
)
@view_config
(
route_name
=
'user-area-act'
,
renderer
=
'json'
,
@view_config
(
route_name
=
'user-area-act'
,
renderer
=
'json'
,
permission
=
'user-view'
)
permission
=
'user-view'
)
def
view_act
(
self
):
def
view_act
(
self
):
return
super
()
.
view_act
()
return
super
(
Views
,
self
)
.
view_act
()
def
get_bindings
(
self
,
row
=
None
):
def
get_bindings
(
self
,
row
=
None
):
return
{
return
{
...
@@ -113,17 +131,17 @@ class Views(BaseView):
...
@@ -113,17 +131,17 @@ class Views(BaseView):
@view_config
(
route_name
=
'user-area-add'
,
renderer
=
'templates/form.pt'
,
@view_config
(
route_name
=
'user-area-add'
,
renderer
=
'templates/form.pt'
,
permission
=
'user-edit'
)
permission
=
'user-edit'
)
def
view_add
(
self
):
def
view_add
(
self
):
return
super
()
.
view_add
()
return
super
(
Views
,
self
)
.
view_add
()
@view_config
(
route_name
=
'user-area-view'
,
renderer
=
'templates/form.pt'
,
@view_config
(
route_name
=
'user-area-view'
,
renderer
=
'templates/form.pt'
,
permission
=
'user-view'
)
permission
=
'user-view'
)
def
view_view
(
self
):
def
view_view
(
self
):
return
super
()
.
view_view
()
return
super
(
Views
,
self
)
.
view_view
()
@view_config
(
route_name
=
'user-area-delete'
,
renderer
=
'templates/form.pt'
,
@view_config
(
route_name
=
'user-area-delete'
,
renderer
=
'templates/form.pt'
,
permission
=
'user-edit'
)
permission
=
'user-edit'
)
def
view_delete
(
self
):
def
view_delete
(
self
):
return
super
()
.
view_delete
()
return
super
(
Views
,
self
)
.
view_delete
()
@view_config
(
route_name
=
'user-area-upload'
,
@view_config
(
route_name
=
'user-area-upload'
,
renderer
=
'templates/upload.pt'
,
permission
=
'user-upload'
)
renderer
=
'templates/upload.pt'
,
permission
=
'user-upload'
)
...
@@ -134,33 +152,25 @@ class Views(BaseView):
...
@@ -134,33 +152,25 @@ class Views(BaseView):
@view_config
(
route_name
=
'user-area-edit'
,
renderer
=
'templates/form.pt'
,
@view_config
(
route_name
=
'user-area-edit'
,
renderer
=
'templates/form.pt'
,
permission
=
'user-edit'
)
permission
=
'user-edit'
)
def
view_edit
(
self
):
def
view_edit
(
self
):
return
super
()
.
view_edit
()
return
super
(
Views
,
self
)
.
view_edit
()
def
save_request
(
self
,
values
,
row
=
None
):
def
save_request
(
self
,
values
,
row
=
None
):
user_id
=
values
.
get
(
"user_id"
)
user_id
=
values
.
get
(
"user_id"
)
if
not
user_id
:
if
not
user_id
:
return
None
return
None
desa_ids
=
values
.
get
(
"desa_id"
)
desa_ids
=
values
.
get
(
"desa_id"
)
if
desa_ids
:
if
desa_ids
:
desa_id
=
next
(
iter
(
desa_ids
))
if
desa_ids
else
None
desa_id
=
next
(
iter
(
desa_ids
))
if
desa_ids
else
None
if
desa_id
is
not
None
:
if
desa_id
is
not
None
:
existing_desa
=
self
.
get_existing_desa
(
user_id
)
existing_desa
=
self
.
get_existing_desa
(
user_id
)
desa_id_str
=
str
(
desa_id
)
desa_id_str
=
str
(
desa_id
)
if
desa_id_str
not
in
existing_desa
:
if
desa_id_str
not
in
existing_desa
:
DBSession
.
query
(
UserArea
)
.
filter_by
(
user_id
=
user_id
)
.
delete
(
synchronize_session
=
False
)
DBSession
.
query
(
UserArea
)
.
filter_by
(
user_id
=
user_id
)
.
delete
(
synchronize_session
=
False
)
new_row
=
UserArea
(
new_row
=
UserArea
(
user_id
=
user_id
,
user_id
=
user_id
,
desa_id
=
int
(
desa_id
)
desa_id
=
int
(
desa_id
)
)
)
DBSession
.
add
(
new_row
)
DBSession
.
add
(
new_row
)
DBSession
.
flush
()
DBSession
.
flush
()
return
row
return
row
...
@@ -173,7 +183,6 @@ class Views(BaseView):
...
@@ -173,7 +183,6 @@ class Views(BaseView):
def
get_values
(
self
,
row
,
istime
=
False
):
def
get_values
(
self
,
row
,
istime
=
False
):
d
=
super
(
Views
,
self
)
.
get_values
(
row
,
istime
)
d
=
super
(
Views
,
self
)
.
get_values
(
row
,
istime
)
existing_desa
=
self
.
get_existing_desa
(
row
.
user_id
)
existing_desa
=
self
.
get_existing_desa
(
row
.
user_id
)
d
[
"desa_id"
]
=
{
next
(
iter
(
existing_desa
))}
if
existing_desa
else
set
()
d
[
"desa_id"
]
=
{
next
(
iter
(
existing_desa
))}
if
existing_desa
else
set
()
return
d
return
d
\ No newline at end of file
\ 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