Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-tools
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 647e23e4
authored
Feb 25, 2025
by
Tatang S
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'master' of
https://git.opensipkd.com/aa.gusti/opensipkd-tools
2 parents
170da2d0
91dd97fd
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
147 additions
and
6 deletions
opensipkd/tools/__init__.py
opensipkd/tools/report.py
opensipkd/tools/__init__.py
View file @
647e23e
...
@@ -9,11 +9,13 @@ import logging
...
@@ -9,11 +9,13 @@ import logging
import
mimetypes
import
mimetypes
import
os
import
os
import
re
import
re
from
deform
import
widget
from
json
import
JSONEncoder
from
json
import
JSONEncoder
from
random
import
choice
from
random
import
choice
from
string
import
(
ascii_uppercase
,
ascii_lowercase
,
digits
,
)
from
string
import
(
ascii_uppercase
,
ascii_lowercase
,
digits
,
)
import
colander
import
colander
from
pyramid.csrf
import
new_csrf_token
import
pytz
import
pytz
from
pyramid.httpexceptions
import
HTTPNotFound
from
pyramid.httpexceptions
import
HTTPNotFound
from
pyramid.threadlocal
import
get_current_registry
from
pyramid.threadlocal
import
get_current_registry
...
@@ -1005,7 +1007,6 @@ def terbilang_(n):
...
@@ -1005,7 +1007,6 @@ def terbilang_(n):
hasil
=
terbilang_
(
n
%
10
)
+
[
'belas'
]
hasil
=
terbilang_
(
n
%
10
)
+
[
'belas'
]
else
:
else
:
hasil
=
[
satuan
[
n
]]
hasil
=
[
satuan
[
n
]]
print
(
'hasil'
)
return
hasil
return
hasil
...
...
opensipkd/tools/report.py
View file @
647e23e
...
@@ -246,7 +246,8 @@ def csv_response(request, value, filename=None):
...
@@ -246,7 +246,8 @@ def csv_response(request, value, filename=None):
else
:
else
:
fout
=
io
.
StringIO
()
fout
=
io
.
StringIO
()
fcsv
=
csv
.
writer
(
fout
,
delimiter
=
','
,
quotechar
=
'"'
,
quoting
=
csv
.
QUOTE_MINIMAL
)
fcsv
=
csv
.
writer
(
fout
,
delimiter
=
','
,
quotechar
=
'"'
,
quoting
=
csv
.
QUOTE_MINIMAL
)
fcsv
.
writerow
(
value
.
get
(
'header'
,
[]))
fcsv
.
writerow
(
value
.
get
(
'header'
,
[]))
fcsv
.
writerows
(
value
.
get
(
'rows'
,
[]))
fcsv
.
writerows
(
value
.
get
(
'rows'
,
[]))
response
.
write
(
fout
.
getvalue
())
response
.
write
(
fout
.
getvalue
())
...
@@ -254,7 +255,8 @@ def csv_response(request, value, filename=None):
...
@@ -254,7 +255,8 @@ def csv_response(request, value, filename=None):
def
terbilang
(
bil
):
def
terbilang
(
bil
):
angka
=
[
""
,
"Satu"
,
"Dua"
,
"Tiga"
,
"Empat"
,
"Lima"
,
"Enam"
,
"Tujuh"
,
"Delapan"
,
"Sembilan"
,
"Sepuluh"
,
"Sebelas"
]
angka
=
[
""
,
"Satu"
,
"Dua"
,
"Tiga"
,
"Empat"
,
"Lima"
,
"Enam"
,
"Tujuh"
,
"Delapan"
,
"Sembilan"
,
"Sepuluh"
,
"Sebelas"
]
hasil
=
" "
hasil
=
" "
n
=
int
(
bil
)
n
=
int
(
bil
)
if
0
<=
n
<=
11
:
if
0
<=
n
<=
11
:
...
@@ -274,7 +276,8 @@ def terbilang(bil):
...
@@ -274,7 +276,8 @@ def terbilang(bil):
elif
n
<
1000000000
:
elif
n
<
1000000000
:
hasil
=
terbilang
(
n
/
1000000
)
+
" Juta"
+
terbilang
(
n
%
1000000
)
hasil
=
terbilang
(
n
/
1000000
)
+
" Juta"
+
terbilang
(
n
%
1000000
)
else
:
else
:
hasil
=
terbilang
(
n
/
1000000000
)
+
" Miliar"
+
terbilang
(
n
%
1000000000
)
hasil
=
terbilang
(
n
/
1000000000
)
+
" Miliar"
+
\
terbilang
(
n
%
1000000000
)
return
hasil
return
hasil
...
@@ -301,7 +304,8 @@ def pdf_compress(original_filename, compressed_filename=None):
...
@@ -301,7 +304,8 @@ def pdf_compress(original_filename, compressed_filename=None):
filenames
=
ori_filename
.
split
(
'.'
)
filenames
=
ori_filename
.
split
(
'.'
)
ext
=
filenames
[
-
1
]
ext
=
filenames
[
-
1
]
filename
=
""
.
join
(
filenames
[:
-
1
])
filename
=
""
.
join
(
filenames
[:
-
1
])
compressed_filename
=
os
.
path
.
join
(
ori_dir
,
f
"{filename}_compressed.{ext}"
)
compressed_filename
=
os
.
path
.
join
(
ori_dir
,
f
"{filename}_compressed.{ext}"
)
reader
=
PdfReader
(
original_filename
)
reader
=
PdfReader
(
original_filename
)
writer
=
PdfWriter
()
writer
=
PdfWriter
()
...
@@ -322,7 +326,9 @@ def pdf_compress(original_filename, compressed_filename=None):
...
@@ -322,7 +326,9 @@ def pdf_compress(original_filename, compressed_filename=None):
# tmp_reports(settings=get_settings(), module_dirname="pbb/pendataan")
# tmp_reports(settings=get_settings(), module_dirname="pbb/pendataan")
# tmp_reports(settings=get_settings(), tmp_path="/home/user/tmp", module_dirname="pbb/pendataan")
# tmp_reports(settings=get_settings(), tmp_path="/home/user/tmp", module_dirname="pbb/pendataan")
# return "string of path"
# return "string of path"
def
tmp_reports
(
settings
=
None
,
tmp_path
=
None
,
module_dirname
=
None
):
def
tmp_reports
(
settings
=
None
,
tmp_path
=
None
,
module_dirname
=
None
):
default_tmp
=
'/tmp'
default_tmp
=
'/tmp'
if
settings
is
None
:
if
settings
is
None
:
...
@@ -346,3 +352,137 @@ def tmp_reports(settings = None, tmp_path = None, module_dirname = None):
...
@@ -346,3 +352,137 @@ def tmp_reports(settings = None, tmp_path = None, module_dirname = None):
class
Item
(
object
):
class
Item
(
object
):
pass
pass
# Jasper Processor
# class BaseView(object):
# def __init__(self, request):
# super().__init__(request)
# self.user_id = self.req.user.id
# self.user_admin = self.req.has_permission('pjdl-admin') \
# or self.req.has_permission('admin') or False
# self.report_folder = "master"
# self._file = None
# self.report_path = MODULE_CLASS.report_path
# @property
# def report_file(self):
# return os.path.join(self.report_path, self.report_folder, self._file)
# @report_file.setter
# def report_file(self, value):
# self._file = value
# def get_report_filter(self, values, pars, opts=True):
# # pars = p.split(":")
# if opts:
# if pars[1] not in values:
# par = len(pars) > 3 and pars[3] or pars[1]
# raise HTTPNotFound(f"Parameter {par} belum diisi")
# # if pars[1].find("customer")>-1:
# # raise Exception("X")
# if pars[1] in values:
# vals = values[pars[1]]
# if pars[2] == "str":
# self.params[pars[1]] = str(vals)
# if not opts:
# self.kondisi = f"{self.kondisi} AND {pars[0]}='{vals}'"
# vals = f"'{vals}'"
# self.qry = self.qry.filter(
# func.CAST(PjdlReportItems.params[pars[1]], String) == f'"{vals}"')
# elif pars[2] == "int":
# self.params[pars[1]] = int(vals)
# if not opts:
# self.kondisi = f"{self.kondisi} AND {pars[0]}={vals}"
# vals = f"{vals}"
# self.qry = self.qry.filter(
# func.CAST(PjdlReportItems.params[pars[1]], String) == f'{vals}')
# elif pars[2] in ["dMy", "ymd", "dmy"]:
# vals = date_from_str(vals)
# fc = getattr(opensipkd.tools, pars[2])
# vals = f"{fc(vals)}"
# self.params[pars[1]] = vals
# self.qry = self.qry.filter(
# func.CAST(PjdlReportItems.params[pars[1]], String) == f'"{vals}"')
# if not opts:
# self.kondisi = f"{self.kondisi} AND {pars[0]}='{vals}'"
# else:
# raise Exception(f"Belum ada fungsi {pars[2]}")
# # if pars[1]!="tgl_cetak":
# def jasper_response(self, **kwargs):
# from opensipkd.base.tools.report import jasper_export
# output_formats = kwargs.get("output_formats", ["pdf"])
# force = kwargs.get("force", False)
# # Menghindari temporary file dalam module aplikasi
# out_path = get_params("pjdl_report_files", '/tmp/pjdl/reports')
# out_path = os.path.join(out_path, "out")
# if not os.path.exists(out_path):
# os.makedirs(out_path)
# # Ambil-nama-report dari tabel report
# rpt_kode = os.path.basename(self.report_file)
# row = PjdlReports.query_kode(rpt_kode).first()
# if not row:
# return HTTPNotFound(f"File report {rpt_kode} belum terdaftar")
# # Check data pada report yang sudah dibuat
# self.qry = PjdlReportItems.query().filter(PjdlReportItems.report_id == row.id)
# self.params = {}
# self.kondisi = ""
# if row and row.params:
# par = row.params.replace('\r', '').replace('\n', '')
# par = par.split(",")
# if par:
# values = kwargs.get("values", {})
# for p in par:
# if p.startswith('['):
# # optional parameter
# p = p.strip('[').strip(']')
# pars = p.split(":")
# _logging.debug(f"pars: {pars}")
# self.get_report_filter(values, pars, False)
# else:
# pars = p.split(":")
# _logging.debug(f"pars: {pars}")
# if pars[1] not in values:
# par = len(pars) > 3 and pars[3] or pars[1]
# return HTTPNotFound(f"Parameter {par} Belum Diisi")
# self.get_report_filter(values, pars)
# _logging.debug(f"kondisinya: {self.kondisi}")
# self.params["kondisi"] = self.kondisi
# self.qry = self.qry.filter(
# func.CAST(
# PjdlReportItems.params["output_formats"], String) == f'"{output_formats}"')
# items = self.qry.first()
# if items and not force:
# file_name = os.path.join(out_path, items.file_name)
# if not os.path.exists(os.path.join(out_path, file_name)):
# force = True
# else:
# force = True
# if force:
# self.params.update(MODULE_CLASS.report_params)
# _logging.debug(f"parameter: {self.params}")
# file_name = jasper_export(
# self.report_file, out_path, parameters=self.params,
# output_formats=output_formats)[0]
# if not items:
# items = PjdlReportItems()
# items.report_id = row.id
# self.params["output_formats"] = output_formats
# items.params = self.params
# _logging.debug(f"parameter: {self.params}")
# items.file_name = os.path.basename(file_name)
# flush(items)
# return file_response(self.req, filename=file_name)
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