Commit b32f1a44 by aagusti

penambahan jasper report dan select_from

1 parent 5a70556c
No preview for this file type
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.20.0.final using JasperReports Library version 6.20.0-2bc7ab61c56f459e8176eb05c7705e145cd400ad -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="users" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="cc1a9dab-bb8a-4181-94ac-73c3dc91137c">
<property name="ireport.zoom" value="1.3310000000000004"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="New Data Adapter"/>
<queryString>
<![CDATA[SELECT * FROM users]]>
</queryString>
<field name="userid" class="java.lang.String"/>
<field name="nama" class="java.lang.String"/>
<field name="created" class="java.sql.Timestamp"/>
<field name="disabled" class="java.lang.Integer"/>
<field name="passwd" class="java.lang.String"/>
<field name="id" class="java.lang.Integer"/>
<field name="kd_kantor" class="java.lang.String"/>
<field name="kd_kanwil" class="java.lang.String"/>
<field name="kd_tp" class="java.lang.String"/>
<field name="kd_kanwil_bank" class="java.lang.String"/>
<field name="kd_kppbb_bank" class="java.lang.String"/>
<field name="kd_bank_tunggal" class="java.lang.String"/>
<field name="kd_bank_persepsi" class="java.lang.String"/>
<field name="nip" class="java.lang.String"/>
<field name="jabatan" class="java.lang.String"/>
<field name="handphone" class="java.lang.String"/>
<field name="token" class="java.lang.String"/>
<field name="security_code" class="java.lang.String"/>
<field name="last_login_date" class="java.sql.Timestamp"/>
<field name="user_name" class="java.lang.String"/>
<field name="user_password" class="java.lang.String"/>
<field name="email" class="java.lang.String"/>
<field name="status" class="java.lang.Integer"/>
<field name="registered_date" class="java.sql.Timestamp"/>
<field name="security_code_date" class="java.sql.Timestamp"/>
<field name="api_key" class="java.lang.String"/>
<field name="partner_id" class="java.lang.Integer"/>
<field name="company_id" class="java.lang.Integer"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="21" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="20" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="100" height="20" uuid="45c2cace-4a3f-495c-9002-be2f2ac8eca4"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[User Name]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="255" height="20" uuid="3a03e8b0-96f7-4754-b00e-ceae1a0e5aa9"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[Email]]></text>
</staticText>
<staticText>
<reportElement x="355" y="0" width="100" height="20" uuid="f19e05c8-f1bf-4d94-927d-07111ed068df"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[Status]]></text>
</staticText>
<staticText>
<reportElement x="455" y="0" width="100" height="20" uuid="8a8040c2-e6ba-4473-835f-c9cfe3568fb9"/>
<textElement>
<font isBold="true" isUnderline="true"/>
</textElement>
<text><![CDATA[Last Login]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="22" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="aec5f07a-b9fb-4ce1-9e7e-957f6315acb0"/>
<textFieldExpression><![CDATA[$F{user_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="255" height="20" uuid="04eef3a7-87ca-4a27-9392-1368a6ba2fd1"/>
<textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="455" y="0" width="100" height="20" uuid="24a12a8f-a1e1-4ae3-adb7-bbcf450560ee"/>
<textFieldExpression><![CDATA[$F{registered_date}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="355" y="2" width="100" height="20" uuid="47051f05-f634-4c32-97cc-ce9af7b8f382"/>
<textFieldExpression><![CDATA[$F{status}.equals(1)?"PINTAR":"BODO"]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
......@@ -2,3 +2,83 @@ from opensipkd.tools.report import *
from opensipkd.base import log
log.warning("Opensipkd.base.tools.pbb depreciated use opensipkd.tools.pbb")
# -*- coding: utf-8 -*-
import os
from platform import python_version
from opensipkd.base import get_settings, get_params
from opensipkd.base.tools import get_random_string
from pyreportjasper import PyReportJasper
db_driver_port = {
"postgresql": ["postgres", "5432", "org.postgresql.Driver", "jdbc:postgresql://localhost:5432/pjdl_ciamis"],
"oracle": ["oracle", "1512", "oracle.jdbc.driver.OracleDriver"],
}
def jasper_compile(input_file):
# REPORTS_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'reports')
# input_file = os.path.join(input_file)
# file_ext = os.path.splitext(input_file)
# output_file = os.path.join(REPORTS_DIR, 'csv')
pyreportjasper = PyReportJasper()
pyreportjasper.compile(write_jasper=True)
def jasper_export(input_file, output_file=None, schema=None,
output_formats=["pdf"], dburl="sqlalchemy.url",
parameters={}, db_schema=None):
db = get_params(dburl).split("@")
db_driver, db_user, db_password = db[0].split(':')
db_servers, db_name = db[1].split('/')
# db_user, db_password = db_users.split(":")
if db_servers.find(':') > 1:
db_host, db_port = db_servers.split(":")
else:
db_host = db_servers
db_port = db_driver_port[db_driver][1]
# db_host = db_server
jdbc_dir = get_params("jdbc_dir", "")
# if not jdbc_dir:
# java_home = os.getenv("JAVA_HOME")
# jdbc_dir = os.path.join(java_home, 'lib', db_driver_port[db_driver][2])
jdbc_driver = db_driver_port[db_driver][2]
db_driver = db_driver_port[db_driver][0]
log.info(jdbc_dir)
if not output_file:
tmp_report = get_params("tmp_report", "/tmp")
output_file = os.path.join(tmp_report, get_random_string(32))
conn = {
'driver': db_driver,
'username': db_user.strip('/'),
'password': db_password,
'host': db_host,
'database': db_name,
'schema': db_schema,
'port': db_port,
'jdbc_dir': jdbc_dir,
'jdbc_driver': jdbc_driver,
}
pyreportjasper = PyReportJasper()
# log.info(input_file)
# log.info(output_file)
# log.info(conn)
# log.info(output_formats)
pyreportjasper.config(
input_file,
output_file,
db_connection=conn,
output_formats=output_formats,
parameters={'python_version': python_version()},
locale='en_US'
)
pyreportjasper.compile(write_jasper=True)
pyreportjasper.process_report()
output_files = [".".join([output_file, f]) for f in output_formats]
log.info(output_files)
return output_files
......@@ -8,7 +8,7 @@ from dateutil.relativedelta import relativedelta
from opensipkd.base.views.upload import tmpstore
from opensipkd.tools.captcha import get_captcha
from opensipkd.tools.report import csv_response
from opensipkd.tools.report import csv_response, pdf_response
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from .common import DataTables
......@@ -160,6 +160,8 @@ class BaseView(object):
self.autocomplete = 'on'
self.action_suffix = "/grid/act"
self.upload_keys = ["kode"]
self.pdf_rpt = ""
self.query_register=""
def delete_msg(self, row):
return f'Data ID {row.id} sudah dihapus.'
......@@ -348,7 +350,15 @@ class BaseView(object):
def next_act(self):
url_dict = self.req.matchdict
if url_dict['act'] == 'csv':
raise HTTPNotFound
def pdf_response(self):
from opensipkd.base.tools.report import jasper_export
filename = jasper_export(self.pdf_rpt)
return pdf_response(self.req, filename=filename[0])
def csv_response(self):
query = self.table.query_register()
row = query.first()
header = row.keys()
......@@ -359,10 +369,6 @@ class BaseView(object):
'rows': rows,
}
return csv_response(self.req, value, filename)
elif url_dict['act'] == 'pdf':
pass
raise HTTPNotFound
def list_join(self, query):
return query
......@@ -411,6 +417,13 @@ class BaseView(object):
# link = "/".join([self.home, nik_url, v])
# d[k] =f'<a href="{link}" target="_blank">View</a>'
return result
elif url_dict['act'] == 'csv':
return self.csv_response()
elif url_dict['act'] == 'pdf':
return self.pdf_response()
else:
return self.next_act()
......
......@@ -47,6 +47,10 @@ class Views(BaseView):
self.edit_schema = EditSchema
self.add_schema = AddSchema
self.list_buttons = self.list_buttons + self.list_report
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.pdf_rpt = os.path.join(path, 'reports', 'users.jrxml')
def get_bindings(self, row=None):
status_list = (
......@@ -76,38 +80,38 @@ class Views(BaseView):
@view_config(
route_name='user-act', renderer='json', permission='user-view')
def view_act(self):
url_dict = self.req.matchdict
if url_dict['act'] == 'csv':
query = query_register()
row = query.first()
header = row.keys()
rows = [list(item) for item in query.all()]
filename = 'user.csv'
value = {
'header': header,
'rows': rows,
}
return csv_response(self.req, value, filename)
elif url_dict['act'] == 'pdf':
query = query_register()
import opensipkd.base
base_path = os.path.dirname(opensipkd.base.__file__)
path = os.path.join(base_path, 'reports')
rml_row = open_rml_row(path + '/user.row.rml')
rows = [rml_row.format(user_name=r.user_name, email=r.email,
registered_date=r.registered_date) for r in
query.all()]
pdf, filename = open_rml_pdf(path + '/user.rml', rows=rows,
company=self.req.company,
departement=self.req.departement,
address=self.req.address,
base_path=base_path)
filename = os.path.basename(filename)
resp = pdf_response(self.req, pdf, filename)
if resp.content_length < 10:
resp.content_length = len(resp.body)
return resp
# url_dict = self.req.matchdict
# if url_dict['act'] == 'csv':
# query = query_register()
# row = query.first()
# header = row.keys()
# rows = [list(item) for item in query.all()]
# filename = 'user.csv'
# value = {
# 'header': header,
# 'rows': rows,
# }
# return csv_response(self.req, value, filename)
#
# elif url_dict['act'] == 'pdf':
# query = query_register()
# import opensipkd.base
# base_path = os.path.dirname(opensipkd.base.__file__)
# path = os.path.join(base_path, 'reports')
# rml_row = open_rml_row(path + '/user.row.rml')
# rows = [rml_row.format(user_name=r.user_name, email=r.email,
# registered_date=r.registered_date) for r in
# query.all()]
# pdf, filename = open_rml_pdf(path + '/user.rml', rows=rows,
# company=self.req.company,
# departement=self.req.departement,
# address=self.req.address,
# base_path=base_path)
# filename = os.path.basename(filename)
# resp = pdf_response(self.req, pdf, filename)
# if resp.content_length < 10:
# resp.content_length = len(resp.body)
# return resp
return super(Views, self).view_act()
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!