Podpora tisku. Implementace tisku dynamických sestav.
parent
34c4144f46
commit
25a4d2dfb7
@ -0,0 +1,44 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
public class DefinitionFiller {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ReportDefinition definition;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private void setData(Object data) {
|
||||||
|
if (data instanceof List) {
|
||||||
|
definition.setDataSet((List<Object>)data);
|
||||||
|
} else {
|
||||||
|
definition.setSingleObject(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fillDefinition(Report report, Object data) {
|
||||||
|
definition.clear();
|
||||||
|
definition.setReport(report);
|
||||||
|
setData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fillDefinition(Report report, Object data, Map<String, Object> params) {
|
||||||
|
fillDefinition(report, data);
|
||||||
|
definition.setParams(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fillDefinition(Report report, Object data, String[] columns) {
|
||||||
|
fillDefinition(report, data);
|
||||||
|
definition.setFieldsToPrint(Arrays.asList(columns));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fillDefinition(Report report, Object data, String[] columns, Map<String, Object> params) {
|
||||||
|
fillDefinition(report, data, params);
|
||||||
|
definition.setFieldsToPrint(Arrays.asList(columns));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.sf.jasperreports.engine.JRDataSource;
|
||||||
|
import net.sf.jasperreports.engine.JRException;
|
||||||
|
import net.sf.jasperreports.engine.JasperReport;
|
||||||
|
import net.sf.jasperreports.engine.JasperRunManager;
|
||||||
|
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
|
||||||
|
import net.sf.jasperreports.engine.util.JRProperties;
|
||||||
|
|
||||||
|
import org.apache.commons.beanutils.PropertyUtils;
|
||||||
|
|
||||||
|
import ar.com.fdvs.dj.core.DynamicJasperHelper;
|
||||||
|
import ar.com.fdvs.dj.core.layout.ClassicLayoutManager;
|
||||||
|
import ar.com.fdvs.dj.domain.DynamicReport;
|
||||||
|
import ar.com.fdvs.dj.domain.builders.ColumnBuilderException;
|
||||||
|
import ar.com.fdvs.dj.domain.builders.FastReportBuilder;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class DynamicGenerator implements Generator {
|
||||||
|
|
||||||
|
private ReportDefinition definition;
|
||||||
|
private static Map<Class<?>,Class<?>> primitiveMap = new HashMap<Class<?>,Class<?>>();
|
||||||
|
static {
|
||||||
|
primitiveMap.put(boolean.class, Boolean.class);
|
||||||
|
primitiveMap.put(byte.class, Byte.class);
|
||||||
|
primitiveMap.put(char.class, Character.class);
|
||||||
|
primitiveMap.put(short.class, Short.class);
|
||||||
|
primitiveMap.put(int.class, Integer.class);
|
||||||
|
primitiveMap.put(long.class, Long.class);
|
||||||
|
primitiveMap.put(float.class, Float.class);
|
||||||
|
primitiveMap.put(double.class, Double.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DynamicGenerator(ReportDefinition definition) {
|
||||||
|
this.definition = definition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] generate() {
|
||||||
|
FastReportBuilder rb = new FastReportBuilder();
|
||||||
|
DynamicReport dr;
|
||||||
|
|
||||||
|
for (String col : definition.getFieldsToPrint()) {
|
||||||
|
Class<?> clazz = colClass(col);
|
||||||
|
if (clazz != null) {
|
||||||
|
try {
|
||||||
|
rb.addColumn(col, col, clazz, 30, false);
|
||||||
|
} catch (ColumnBuilderException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rb.setTitle(definition.getReportTitle());
|
||||||
|
rb.setUseFullPageWidth(true);
|
||||||
|
dr = rb.build();
|
||||||
|
|
||||||
|
JRProperties.setProperty("net.sf.jasperreports.default.pdf.encoding", "Cp1250");
|
||||||
|
JRDataSource ds = new JRBeanCollectionDataSource(definition.getDataSet());
|
||||||
|
try {
|
||||||
|
JasperReport report = DynamicJasperHelper.generateJasperReport(dr, new ClassicLayoutManager(), definition.getParams());
|
||||||
|
return JasperRunManager.runReportToPdf(report, definition.getParams(), ds);
|
||||||
|
} catch (JRException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Class<?> colClass(String col) {
|
||||||
|
List<Object> data = definition.getDataSet();
|
||||||
|
if (data != null && data.size() > 0) {
|
||||||
|
try {
|
||||||
|
Class<?> clazz = PropertyUtils.getPropertyType(data.get(0), col);
|
||||||
|
if (clazz.isPrimitive()) {
|
||||||
|
clazz = primitiveMap.get(clazz);
|
||||||
|
}
|
||||||
|
return clazz;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
return null;
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
return null;
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
public interface Generator {
|
||||||
|
|
||||||
|
byte[] generate();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
public class GeneratorFactory {
|
||||||
|
|
||||||
|
public Generator createGenerator(ReportDefinition definition) {
|
||||||
|
switch (definition.getReport().getType()) {
|
||||||
|
case DYNAMIC:
|
||||||
|
return new DynamicGenerator(definition);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
|
||||||
|
public class Report {
|
||||||
|
|
||||||
|
private ReportType type;
|
||||||
|
private String name;
|
||||||
|
private String jasperFile;
|
||||||
|
|
||||||
|
public Report() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Report(String name, String jasperFile) {
|
||||||
|
this.type = ReportType.DEFINED;
|
||||||
|
this.name = name;
|
||||||
|
this.jasperFile = jasperFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReportType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(ReportType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJasperFile() {
|
||||||
|
return jasperFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJasperFile(String jasperFile) {
|
||||||
|
this.jasperFile = jasperFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class ReportController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReportDefinition reportDefinition;
|
||||||
|
@Autowired
|
||||||
|
private GeneratorFactory factory;
|
||||||
|
|
||||||
|
@RequestMapping("report.pdf")
|
||||||
|
public void pdfReport(HttpServletResponse response) {
|
||||||
|
Generator gen = factory.createGenerator(reportDefinition);
|
||||||
|
byte[] data = gen.generate();
|
||||||
|
String contentType = "application/pdf";
|
||||||
|
|
||||||
|
ServletOutputStream os = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
os = response.getOutputStream();
|
||||||
|
} catch (IOException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (reportDefinition.getReport() == null || reportDefinition.getDataSet() == null) {
|
||||||
|
// writeError(os, "Definition is null");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
response.setContentType(contentType);
|
||||||
|
response.setContentLength(data.length);
|
||||||
|
|
||||||
|
try {
|
||||||
|
os.write(data, 0, data.length);
|
||||||
|
os.flush();
|
||||||
|
os.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
// } catch (ReportException e) {
|
||||||
|
// writeError(os, e);
|
||||||
|
} finally {
|
||||||
|
if (os != null) {
|
||||||
|
try {
|
||||||
|
os.flush();
|
||||||
|
os.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ReportDefinition implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 995511957163031085L;
|
||||||
|
private Report report;
|
||||||
|
private List<Object> dataSet;
|
||||||
|
private Map<String, Object> params;
|
||||||
|
private List<String> fieldsToPrint;
|
||||||
|
private String reportTitle;
|
||||||
|
|
||||||
|
public ReportDefinition() {
|
||||||
|
params = new HashMap<String, Object>();
|
||||||
|
fieldsToPrint = new ArrayList<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Object> getDataSet() {
|
||||||
|
return dataSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataSet(List<Object> dataSet) {
|
||||||
|
this.dataSet = dataSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSingleObject(Object o) {
|
||||||
|
if (this.dataSet != null) {
|
||||||
|
dataSet.clear();
|
||||||
|
} else {
|
||||||
|
dataSet = new ArrayList<Object>();
|
||||||
|
}
|
||||||
|
|
||||||
|
dataSet.add(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getParams() {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParams(Map<String, Object> params) {
|
||||||
|
this.params.clear();
|
||||||
|
this.params.putAll(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParam(String key, Object value) {
|
||||||
|
this.params.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getParam(String key) {
|
||||||
|
return this.params.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getFieldsToPrint() {
|
||||||
|
return fieldsToPrint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFieldsToPrint(List<String> fieldsToPrint) {
|
||||||
|
this.fieldsToPrint = fieldsToPrint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Report getReport() {
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReport(Report report) {
|
||||||
|
this.report = report;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<?> gatDataClass() {
|
||||||
|
if (dataSet != null && dataSet.size() > 0) {
|
||||||
|
return dataSet.get(0).getClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clear() {
|
||||||
|
report = null;
|
||||||
|
fieldsToPrint.clear();
|
||||||
|
dataSet = null;
|
||||||
|
reportTitle = "";
|
||||||
|
params.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReportTitle() {
|
||||||
|
return reportTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReportTitle(String reportTitle) {
|
||||||
|
this.reportTitle = reportTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
public class ReportMapping {
|
||||||
|
|
||||||
|
private Report report;
|
||||||
|
private String module;
|
||||||
|
|
||||||
|
public ReportMapping(String module, Report report) {
|
||||||
|
this.module = module;
|
||||||
|
this.report = report;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Report getReport() {
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReport(Report report) {
|
||||||
|
this.report = report;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getModule() {
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setModule(String module) {
|
||||||
|
this.module = module;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package info.bukova.isspst.reporting;
|
||||||
|
|
||||||
|
public enum ReportType {
|
||||||
|
|
||||||
|
DYNAMIC,
|
||||||
|
DEFINED
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package info.bukova.isspst.ui;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Check<T> {
|
||||||
|
|
||||||
|
private T member;
|
||||||
|
private List<T> list;
|
||||||
|
private boolean checked;
|
||||||
|
|
||||||
|
public Check(List<T> list, T member) {
|
||||||
|
this.member = member;
|
||||||
|
this.list = list;
|
||||||
|
if (list.contains(member)) {
|
||||||
|
checked = true;
|
||||||
|
} else {
|
||||||
|
checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isChecked() {
|
||||||
|
return checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChecked(boolean checked) {
|
||||||
|
if (checked && !list.contains(member)) {
|
||||||
|
list.add(member);
|
||||||
|
} else {
|
||||||
|
list.remove(member);
|
||||||
|
}
|
||||||
|
this.checked = checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getMember() {
|
||||||
|
return member;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package info.bukova.isspst.ui;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ListChecks<T> {
|
||||||
|
|
||||||
|
private List<Check<T>> checks;
|
||||||
|
|
||||||
|
public ListChecks(List<T> destList, List<T> sourceList) {
|
||||||
|
checks = new ArrayList<Check<T>>();
|
||||||
|
for (T member : sourceList) {
|
||||||
|
checks.add(new Check<T>(destList, member));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Check<T>> getChecks() {
|
||||||
|
return checks;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
package info.bukova.isspst.ui;
|
||||||
|
|
||||||
|
import java.beans.BeanInfo;
|
||||||
|
import java.beans.IntrospectionException;
|
||||||
|
import java.beans.Introspector;
|
||||||
|
import java.beans.PropertyDescriptor;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import info.bukova.isspst.reporting.Report;
|
||||||
|
import info.bukova.isspst.reporting.ReportDefinition;
|
||||||
|
import info.bukova.isspst.reporting.ReportType;
|
||||||
|
|
||||||
|
import org.zkoss.bind.annotation.BindingParam;
|
||||||
|
import org.zkoss.bind.annotation.Command;
|
||||||
|
import org.zkoss.bind.annotation.ExecutionArgParam;
|
||||||
|
import org.zkoss.bind.annotation.Init;
|
||||||
|
import org.zkoss.bind.annotation.NotifyChange;
|
||||||
|
import org.zkoss.zk.ui.Executions;
|
||||||
|
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
||||||
|
import org.zkoss.zul.Window;
|
||||||
|
|
||||||
|
public class ReportDialogVM {
|
||||||
|
|
||||||
|
private List<Report> reports;
|
||||||
|
private Report selected;
|
||||||
|
private List<Object> data;
|
||||||
|
@WireVariable
|
||||||
|
private ReportDefinition reportDefinition;
|
||||||
|
|
||||||
|
@Init
|
||||||
|
public void init(@ExecutionArgParam("reports") List<Report> reports,
|
||||||
|
@ExecutionArgParam("data") List<Object> data) {
|
||||||
|
this.reports = reports;
|
||||||
|
this.data = data;
|
||||||
|
|
||||||
|
if (data != null && data.size() > 0 && data.get(0).getClass() != reportDefinition.gatDataClass()) {
|
||||||
|
reportDefinition.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Report> getReports() {
|
||||||
|
return this.reports;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReportDefinition getReportDefinition() {
|
||||||
|
return reportDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListChecks<String> getColumns() {
|
||||||
|
if (selected == null || selected.getType() != ReportType.DYNAMIC) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (data == null || data.size() == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
BeanInfo beanInfo;
|
||||||
|
try {
|
||||||
|
beanInfo = Introspector.getBeanInfo(data.get(0).getClass());
|
||||||
|
} catch (IntrospectionException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
|
||||||
|
List<String> properties = new ArrayList<String>();
|
||||||
|
for (PropertyDescriptor pd : pds) {
|
||||||
|
properties.add(pd.getName());
|
||||||
|
}
|
||||||
|
ListChecks<String> columns = new ListChecks<String>(reportDefinition.getFieldsToPrint(), properties);
|
||||||
|
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Report getSelected() {
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotifyChange("columns")
|
||||||
|
public void setSelected(Report selected) {
|
||||||
|
this.selected = selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
public void print(@BindingParam("window") Window window) {
|
||||||
|
reportDefinition.setDataSet(data);
|
||||||
|
reportDefinition.setReport(selected);
|
||||||
|
|
||||||
|
if (window != null) {
|
||||||
|
window.detach();
|
||||||
|
}
|
||||||
|
|
||||||
|
Window reportWin = (Window) Executions.createComponents("/app/report.zul", null, null);
|
||||||
|
reportWin.doModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package info.bukova.isspst.ui;
|
||||||
|
|
||||||
|
import org.zkoss.bind.annotation.Init;
|
||||||
|
|
||||||
|
public class ReportVM {
|
||||||
|
|
||||||
|
@Init
|
||||||
|
public void init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
<?page title="${labels.ReportReport}" contentType="text/html;charset=UTF-8"?>
|
||||||
|
<zk>
|
||||||
|
<window title="${labels.ReportReport}" border="normal" closable="true" apply="org.zkoss.bind.BindComposer"
|
||||||
|
viewModel="@id('vm') @init('info.bukova.isspst.ui.ReportVM')">
|
||||||
|
<toolbar>
|
||||||
|
<toolbarbutton image="/img/send.png" tooltiptext="${labels.ReportSend}"/>
|
||||||
|
</toolbar>
|
||||||
|
<iframe width="800px" height="680px" src="/api/report.pdf"/>
|
||||||
|
</window>
|
||||||
|
</zk>
|
@ -0,0 +1,32 @@
|
|||||||
|
<?page title="${labels.ReportReports}" contentType="text/html;charset=UTF-8"?>
|
||||||
|
<zk>
|
||||||
|
<window id="reportDialog" title="${labels.ReportReports}" border="normal" apply="org.zkoss.bind.BindComposer"
|
||||||
|
viewModel="@id('vm') @init('info.bukova.isspst.ui.ReportDialogVM')"
|
||||||
|
closable="true" width="550px">
|
||||||
|
|
||||||
|
<hbox>
|
||||||
|
<listbox model="@load(vm.reports)" width="250px" height="350px" selectedItem="@bind(vm.selected)">
|
||||||
|
<template name="model">
|
||||||
|
<listitem>
|
||||||
|
<listcell><label value="@load(each.name)"/></listcell>
|
||||||
|
</listitem>
|
||||||
|
</template>
|
||||||
|
</listbox>
|
||||||
|
<groupbox mold="3d" closable="false" width="270px">
|
||||||
|
<caption label="${labels.ReportOptions}"></caption>
|
||||||
|
<hbox>
|
||||||
|
<label value="${labels.ReportTitle}"/> <textbox value="@bind(vm.reportDefinition.reportTitle)"/>
|
||||||
|
</hbox>
|
||||||
|
<vbox children="@load(vm.columns.checks)">
|
||||||
|
<template name="children">
|
||||||
|
<checkbox label="@load(each.member)" checked="@bind(each.checked)"/>
|
||||||
|
</template>
|
||||||
|
</vbox>
|
||||||
|
</groupbox>
|
||||||
|
</hbox>
|
||||||
|
<hbox>
|
||||||
|
<button label="${labels.ReportPrint}" onClick="@command('print', window=reportDialog)"/> <button label="${labels.ButtonStorno}" onClick="reportDialog.detach()"/>
|
||||||
|
</hbox>
|
||||||
|
|
||||||
|
</window>
|
||||||
|
</zk>
|
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
Loading…
Reference in New Issue