Commit f2ba79c4 by iqbal

penambahan file jrxml dan penambahan tombol cetak pdf dan upload

1 parent 3918cc17
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.20.5.final using JasperReports Library version 6.20.5-3efcf2e67f959db3888d79f73dde2dbd7acb4f8e -->
<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="Group" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="6630eb66-846c-4826-9d1e-493d584e9622">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="groups_csv"/>
<parameter name="judul1" class="java.lang.String">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="POSTGRES"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<parameter name="judul" class="java.lang.String">
<defaultValueExpression><![CDATA["PEMERINTAH KABUPATEN KUNINGAN"]]></defaultValueExpression>
</parameter>
<queryString language="csv">
<![CDATA[]]>
<parameter name="logo" class="java.lang.String"/>
<queryString>
<![CDATA[select * FROM groups]]>
</queryString>
<field name="group_name" class="java.lang.String"/>
<field name="description" class="java.lang.String"/>
<field name="member_count" class="java.lang.Integer"/>
<field name="member_count" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="member_count"/>
<property name="com.jaspersoft.studio.field.label" value="member_count"/>
<property name="com.jaspersoft.studio.field.tree.path" value="groups"/>
</field>
<field name="id" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="id"/>
<property name="com.jaspersoft.studio.field.label" value="id"/>
<property name="com.jaspersoft.studio.field.tree.path" value="groups"/>
</field>
<field name="group_name" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="group_name"/>
<property name="com.jaspersoft.studio.field.label" value="group_name"/>
<property name="com.jaspersoft.studio.field.tree.path" value="groups"/>
</field>
<field name="description" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="description"/>
<property name="com.jaspersoft.studio.field.label" value="description"/>
<property name="com.jaspersoft.studio.field.tree.path" value="groups"/>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="123" splitType="Stretch">
<band height="127" splitType="Stretch">
<staticText>
<reportElement x="143" y="49" width="269" height="30" uuid="5b7637d7-75f9-4fcb-83f0-3199ee657145"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
......@@ -36,10 +55,6 @@
<pen lineWidth="4.0"/>
</graphicElement>
</line>
<image>
<reportElement x="40" y="14" width="71" height="71" uuid="d7dac611-e67c-45fd-b795-9d704ae37822"/>
<imageExpression><![CDATA["C:/Users/hamzah/Downloads/pngegg.png"]]></imageExpression>
</image>
<staticText>
<reportElement x="20" y="100" width="191" height="21" uuid="073f879a-0d32-48b7-924f-1c0068f82a49"/>
<textElement>
......@@ -47,12 +62,16 @@
</textElement>
<text><![CDATA[DAFTAR GROUP APLIKASI]]></text>
</staticText>
<image>
<reportElement x="59" y="22" width="50" height="50" uuid="616ae591-339c-4c6a-beb7-1c5db8306d80"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
<textField>
<reportElement x="111" y="30" width="340" height="30" uuid="821c62e9-865c-4586-9e53-ff72d03d4189"/>
<reportElement x="230" y="19" width="100" height="30" uuid="32f184cc-d09f-44cc-9637-84400c055f5e"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="16" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{judul1}]]></textFieldExpression>
<textFieldExpression><![CDATA[$P{judul}]]></textFieldExpression>
</textField>
</band>
</title>
......@@ -62,20 +81,7 @@
<columnHeader>
<band height="24" splitType="Stretch">
<staticText>
<reportElement mode="Opaque" x="10" y="2" width="91" height="21" backcolor="#F7E516" uuid="8b09b79a-77ce-4c05-87ed-0a9de42057b7"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Group]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="101" y="2" width="369" height="21" backcolor="#F7E516" uuid="b2839bdc-e0cc-47b2-8a5e-4890a6b3daca"/>
<reportElement mode="Opaque" x="250" y="2" width="311" height="21" backcolor="#F7E516" uuid="b2839bdc-e0cc-47b2-8a5e-4890a6b3daca"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
......@@ -88,7 +94,7 @@
<text><![CDATA[Deskripsi]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="470" y="2" width="91" height="21" backcolor="#F7E516" uuid="a2a310fd-6670-49bb-8a41-b2adb8eb1048"/>
<reportElement mode="Opaque" x="10" y="2" width="240" height="21" backcolor="#F7E516" uuid="8b09b79a-77ce-4c05-87ed-0a9de42057b7"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
......@@ -98,25 +104,14 @@
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Anggota]]></text>
<text><![CDATA[Group]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="21" splitType="Stretch">
<textField>
<reportElement x="470" y="0" width="91" height="21" uuid="3e05ad54-5bbb-4211-ad68-7bd5c9c652d9"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{member_count}]]></textFieldExpression>
</textField>
<band height="22" splitType="Stretch">
<textField>
<reportElement x="101" y="0" width="369" height="21" uuid="0f36284e-eadb-4603-b0f2-e2a68b7e508a"/>
<reportElement x="250" y="0" width="311" height="21" uuid="0f36284e-eadb-4603-b0f2-e2a68b7e508a"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
......@@ -127,7 +122,9 @@
<textFieldExpression><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="10" y="0" width="91" height="21" uuid="7a46ccdd-d3f8-49d9-837c-f40c80ec869c"/>
<reportElement x="10" y="0" width="240" height="21" uuid="2c929d1a-e1bb-41cc-9f70-6c94f55ea0ea">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="add93502-c54f-4ef3-912a-338d7f0ff64b"/>
</reportElement>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.20.5.final using JasperReports Library version 6.20.5-3efcf2e67f959db3888d79f73dde2dbd7acb4f8e -->
<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="eselon" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7d562f08-fd4d-4bc6-946f-7da5138a9fed">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="POSTGRES"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<parameter name="logo" class="java.lang.String"/>
<parameter name="judul" class="java.lang.String"/>
<queryString>
<![CDATA[select * FROM eselon]]>
</queryString>
<field name="pangkat" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="pangkat"/>
<property name="com.jaspersoft.studio.field.label" value="pangkat"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="ruang" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="ruang"/>
<property name="com.jaspersoft.studio.field.label" value="ruang"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="tunjangan" class="java.lang.Long">
<property name="com.jaspersoft.studio.field.name" value="tunjangan"/>
<property name="com.jaspersoft.studio.field.label" value="tunjangan"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="nama" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="nama"/>
<property name="com.jaspersoft.studio.field.label" value="nama"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="kode" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="kode"/>
<property name="com.jaspersoft.studio.field.label" value="kode"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="status" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="status"/>
<property name="com.jaspersoft.studio.field.label" value="status"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="created" class="java.sql.Timestamp">
<property name="com.jaspersoft.studio.field.name" value="created"/>
<property name="com.jaspersoft.studio.field.label" value="created"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="updated" class="java.sql.Timestamp">
<property name="com.jaspersoft.studio.field.name" value="updated"/>
<property name="com.jaspersoft.studio.field.label" value="updated"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="create_uid" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="create_uid"/>
<property name="com.jaspersoft.studio.field.label" value="create_uid"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="update_uid" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="update_uid"/>
<property name="com.jaspersoft.studio.field.label" value="update_uid"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<field name="id" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="id"/>
<property name="com.jaspersoft.studio.field.label" value="id"/>
<property name="com.jaspersoft.studio.field.tree.path" value="eselon"/>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="109" splitType="Stretch">
<staticText>
<reportElement x="143" y="30" width="269" height="30" uuid="8be6d74b-7953-470f-8fbb-799d55a1f230"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[BADAN PENDAPATAN DAERAH]]></text>
</staticText>
<staticText>
<reportElement x="180" y="50" width="182" height="30" uuid="e981046a-d381-4156-a8ec-909bd97ac0f0"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[ALAMAT DEPARTEMEN BARIS 1]]></text>
</staticText>
<line>
<reportElement x="0" y="78" width="551" height="2" uuid="6ba2724e-aa88-4cd5-9227-000e66186123"/>
<graphicElement>
<pen lineWidth="4.0"/>
</graphicElement>
</line>
<image>
<reportElement x="20" y="0" width="50" height="50" uuid="d981af2b-a7d1-4205-ad04-74dff24ddef8"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
<textField>
<reportElement x="220" y="-3" width="100" height="30" uuid="8466c7b8-7fe9-4585-b9bf-a5ddcc934fc1"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="16" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$P{judul}]]></textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<band height="24" splitType="Stretch">
<staticText>
<reportElement mode="Opaque" x="0" y="2" width="250" height="21" backcolor="#F7E516" uuid="b8f2cc7e-8948-461b-9d45-85c2350e6042"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Kode]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="250" y="2" width="301" height="21" backcolor="#F7E516" uuid="1c5f44d2-6c76-4b75-b04f-8939a7645aee"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Jabatan]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="21" splitType="Stretch">
<textField>
<reportElement x="250" y="0" width="301" height="21" uuid="bf503a0d-10b1-4302-ba92-b9dd086fe120"/>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{nama}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="250" height="21" uuid="d417b2f6-c531-4b91-8071-79f569ebb974">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="add93502-c54f-4ef3-912a-338d7f0ff64b"/>
</reportElement>
<box>
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{kode}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="55" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
import os
import colander
from deform import (widget, )
from pyramid.i18n import TranslationStringFactory
......@@ -7,6 +8,10 @@ from . import widget_os
from .provinsi import provinsi_widget
from opensipkd.models import DBSession, ResDati2, kategori_dati2, ResProvinsi
from ..views import BaseView
from . import BaseView, btn_upload
from pyramid.path import AssetResolver
from . import BaseView, button_import, get_params
from opensipkd.tools.report import csv_response, file_response
_ = TranslationStringFactory("opensipkd")
......@@ -69,7 +74,30 @@ class ViewDati2(BaseView):
self.edit_schema = EditSchema
self.table = ResDati2
self.list_schema = ListSchema
self.list_buttons = self.list_buttons + (btn_upload,)
self.list_buttons = self.list_buttons + self.list_report + (btn_upload,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'kabupaten.jrxml')
# Mendapatkan path gambar
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
def form_validator(self, form, value):
def err_kode():
......
import os
import colander
from deform import (widget, )
from opensipkd.models import DBSession, ResDesa, kategori_desa, ResKecamatan, ResProvinsi, ResDati2
......@@ -5,7 +6,10 @@ from . import BaseView, btn_upload
from opensipkd.tools.buttons import btn_close, btn_add
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (view_config, )
from . import BaseView, btn_upload
from pyramid.path import AssetResolver
from . import BaseView, button_import, get_params
from opensipkd.tools.report import csv_response, file_response
from .dati2 import dati2_widget
from .kecamatan import kecamatan_widget
from .provinsi import provinsi_widget
......@@ -89,7 +93,29 @@ class ViewDesa(BaseView):
self.edit_schema = EditSchema
self.table = ResDesa
self.list_schema = ListSchema
self.list_buttons = (btn_add, btn_close, btn_upload)
self.list_buttons = self.list_buttons + self.list_report + (btn_upload,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'desa.jrxml')
# Mendapatkan path gambar
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
def form_validator(self, form, value):
def err_kode():
......
import os
import colander
from deform import (
widget,
......@@ -12,7 +13,9 @@ from opensipkd.models import (
)
from ..views import BaseView
from . import BaseView, btn_upload
from pyramid.path import AssetResolver
from . import BaseView, button_import, get_params
from opensipkd.tools.report import csv_response, file_response
SESS_ADD_FAILED = 'Tambah eselon gagal'
SESS_EDIT_FAILED = 'Edit eselon gagal'
......@@ -67,7 +70,30 @@ class Views(BaseView):
self.edit_schema = EditSchema
self.table = Eselon
self.list_schema = ListSchema
self.list_buttons = self.list_buttons + (btn_upload,)
self.list_buttons = self.list_buttons + self.list_report + (btn_upload,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'eselon.jrxml')
# Mendapatkan path gambar
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
@view_config(route_name='eselon', renderer='templates/table.pt',
permission='eselon')
......
import os
import re
import colander
from deform import widget
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config
from . import BaseView, btn_upload
from pyramid.path import AssetResolver
from . import BaseView, button_import, get_params
from . import BaseView
from opensipkd.tools import get_random_string
from opensipkd.tools.report import csv_response, file_response
from opensipkd.models import (
DBSession,
Group,
......@@ -11,7 +17,7 @@ from opensipkd.models import (
GroupPermission,
)
_ = TranslationStringFactory('user')
_ = TranslationStringFactory ('user')
@colander.deferred
......@@ -58,11 +64,49 @@ class Views(BaseView):
self.table = Group
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.list_buttons = self.list_buttons + (btn_upload,)
self.list_buttons = self.list_buttons + self.list_report + (btn_upload,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'group.jrxml')
# Mendapatkan path gambar
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
def get_bindings(self, row=None):
return dict(group=row,
permissions_list=get_permissions_list())
def query_register():
return DBSession.query(Group.group_name, Group.description,).order_by(Group.group_name)
#def csv_response(self, **kwargs):
#query = self.table.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='group', renderer='templates/table.pt',
......
import os
import logging
import colander
from deform import (
......@@ -8,6 +9,10 @@ from opensipkd.models import DBSession, Partner, PartnerFiles
from opensipkd.models import (
ResProvinsi, ResDati2, ResKecamatan, ResDesa)
from opensipkd.models.common import ResCompany
from . import BaseView, btn_upload
from pyramid.path import AssetResolver
from . import BaseView, button_import, get_params
from opensipkd.tools.report import csv_response, file_response
from opensipkd.tools import Upload, img_exts
from pyramid.i18n import TranslationStringFactory
from pyramid.view import (
......@@ -106,7 +111,29 @@ class ViewPartner(BaseView):
self.table = Partner
self.list_schema = ListSchema
self.save_state = True
self.list_buttons = self.list_buttons + (btn_upload,)
self.list_buttons = self.list_buttons + self.list_report + (btn_upload,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'partner1.jrxml')
# Mendapatkan path gambar
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
# print("PDF RESPONSE======================================")
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
print(parameters)
filename = jasper_export(self.report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
########
# List #
......
import os
import colander
import logging
from deform import widget
from pyramid.view import view_config
from . import BaseView, btn_upload
from ...models import DBSession,ResDesa, User, UserArea
from pyramid.path import AssetResolver
from . import BaseView, button_import, get_params
from ...models import DBSession, ResDesa, User, UserArea
from .desa import desa_widget, get_desa_list
from pyramid.i18n import TranslationStringFactory
from opensipkd.tools.report import csv_response, file_response
_ = TranslationStringFactory('myapp')
log = logging.getLogger(__name__)
......@@ -30,7 +34,12 @@ class ListSchema(colander.Schema):
@colander.deferred
def desa_checkbox_widget(node, kw):
values = kw.get('desa_list', [])
return widget.CheckboxChoiceWidget(values=values)
return widget.CheckboxChoiceWidget(values=values) # Tetap menggunakan CheckboxChoiceWidget
def single_choice_validator(node, value):
"""Validator untuk memastikan hanya satu opsi yang dipilih."""
if len(value) > 1:
raise colander.Invalid(node, "Hanya boleh memilih satu Kelurahan/Desa.")
class AddSchema(colander.Schema):
user_id = colander.SchemaNode(
......@@ -40,18 +49,18 @@ class AddSchema(colander.Schema):
title="User",
)
desa_id = colander.SchemaNode(
colander.Set(),
colander.Set(), # Kembali ke colander.Set()
widget=desa_checkbox_widget,
validator=single_choice_validator, # Tambahkan validator
oid="desa_id",
title="Kelurahan/Desa", )
title="Kelurahan/Desa",
)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(readonly=True))
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
......@@ -60,11 +69,31 @@ class Views(BaseView):
self.edit_schema = EditSchema
self.list_route = 'user-area'
self.table = UserArea
self.list_buttons = self.list_buttons + (btn_upload,)
self.list_buttons = self.list_buttons + self.list_report + (btn_upload,)
path = os.path.dirname(__file__)
path = os.path.dirname(path)
self.report_file = os.path.join(path, 'reports', 'user_area.jrxml')
# Mendapatkan path gambar
def get_module_path(self, module_name):
a = AssetResolver(module_name)
resolver = a.resolve('')
return resolver.abspath()
def pdf_response(self, **kwargs):
from opensipkd.base.tools.report import jasper_export
logo = self.get_module_path('opensipkd.base')
logo = os.path.join(logo, 'static', 'img', 'logo.png')
parameters = {
"judul": get_params('company', "openSIPKD"),
"logo": logo
}
filename = jasper_export(self.report_file, parameters=parameters)
return file_response(self.req, filename=filename[0])
def list_join(self, query, **kwargs):
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)
@view_config(route_name='user-area', renderer='templates/table.pt',
permission='user-view')
......@@ -80,6 +109,7 @@ class Views(BaseView):
return {
"desa_list": get_desa_list()
}
@view_config(route_name='user-area-add', renderer='templates/form.pt',
permission='user-edit')
def view_add(self):
......@@ -99,7 +129,7 @@ class Views(BaseView):
renderer='templates/upload.pt', permission='user-upload')
def view_upload(self):
self.upload_keys = ["user_id"]
return super(Views,self).view_upload(exts=('.csv', ".tsv"))
return super(Views, self).view_upload(exts=('.csv', ".tsv"))
@view_config(route_name='user-area-edit', renderer='templates/form.pt',
permission='user-edit')
......@@ -107,55 +137,32 @@ class Views(BaseView):
return super().view_edit()
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 "desa_id" in values:
# Ambil departemen yang sudah ada untuk user ini
existing_desa = self.get_existing_desa(user_id)
# Konversi departemen_id dari set ke set of strings, filter None
selected_desa = set(
str(desa_id) for desa_id in values["desa_id"]
if desa_id is not None and str(desa_id) != "None"
)
# Departemen yang tidak dipilih lagi (akan dihapus)
unused_desa = existing_desa - selected_desa
# Hapus departemen yang tidak dipilih lagi, pastikan hanya integer yang valid
if unused_desa:
valid_unused = [int(d) for d in unused_desa if d.isdigit()]
if valid_unused:
DBSession.query(UserArea).filter_by(user_id=user_id) \
.filter(UserArea.desa_id.in_(valid_unused)) \
.delete(synchronize_session=False)
# Departemen baru yang dipilih (akan ditambahkan)
new_desa = selected_desa - existing_desa
log.debug(f"get_values new_desa: {new_desa}")
#sys.exit("Age less than 18")
# Tambahkan departemen baru, periksa duplikat sebelum insert
for desa_id in new_desa:
if desa_id.isdigit(): # Pastikan hanya angka yang diproses
# Cek apakah kombinasi user_id dan departemen_id sudah ada
exists = DBSession.query(UserArea).filter_by(
return None
desa_ids = values.get("desa_id")
if desa_ids:
desa_id = next(iter(desa_ids)) if desa_ids else None
if desa_id is not None:
existing_desa = self.get_existing_desa(user_id)
desa_id_str = str(desa_id)
if desa_id_str not in existing_desa:
DBSession.query(UserArea).filter_by(user_id=user_id).delete(synchronize_session=False)
new_row = UserArea(
user_id=user_id,
desa_id=int(desa_id)
).first()
if not exists: # Hanya tambahkan jika belum ada
new_row = UserArea(
user_id=user_id,
desa_id=int(desa_id) # Konversi ke integer
)
DBSession.add(new_row)
# Commit semua perubahan
desa_id=int(desa_id)
)
DBSession.add(new_row)
DBSession.flush()
return row # Kembalikan row jika ada, atau None jika tidak digunakan
return row
def get_existing_desa(self, user_id):
q = DBSession.query(UserArea).filter_by(user_id=user_id)
......@@ -166,5 +173,7 @@ class Views(BaseView):
def get_values(self, row, istime=False):
d = super(Views, self).get_values(row, istime)
d["desa_id"] = self.get_existing_desa(row.user_id)
return d
existing_desa = self.get_existing_desa(row.user_id)
d["desa_id"] = {next(iter(existing_desa))} if existing_desa else set()
return d
\ 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!