Commit a78377b3 by aa.gusti

penampaabahan lain2

1 parent 6036cd6d
...@@ -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
......
...@@ -343,3 +343,138 @@ def tmp_reports(settings = None, tmp_path = None, module_dirname = None): ...@@ -343,3 +343,138 @@ 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)
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!