IDEMPIERE-3996 Implement DisplayLogic for PrintFormatItem
This commit is contained in:
parent
df72426ab1
commit
2af8ec1a39
|
@ -23,6 +23,8 @@ import java.util.ArrayList;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
|
import org.compiere.util.Evaluator;
|
||||||
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Header Footer
|
* Header Footer
|
||||||
|
@ -49,6 +51,8 @@ public class HeaderFooter
|
||||||
/** Header/Footer content as Array */
|
/** Header/Footer content as Array */
|
||||||
private PrintElement[] m_pe = null;
|
private PrintElement[] m_pe = null;
|
||||||
|
|
||||||
|
private Page m_currentPage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add Print Element to Page
|
* Add Print Element to Page
|
||||||
* @param element print element
|
* @param element print element
|
||||||
|
@ -86,7 +90,17 @@ public class HeaderFooter
|
||||||
Point pageStart = new Point(bounds.getLocation());
|
Point pageStart = new Point(bounds.getLocation());
|
||||||
getElements();
|
getElements();
|
||||||
for (int i = 0; i < m_pe.length; i++)
|
for (int i = 0; i < m_pe.length; i++)
|
||||||
|
{
|
||||||
|
if (m_currentPage != null && !Util.isEmpty(m_pe[i].getPageLogic(), true) && m_pe[i].getPrintData() != null
|
||||||
|
&& m_pe[i].getRowIndex() >= 0)
|
||||||
|
{
|
||||||
|
PrintDataEvaluatee evaluatee = new PrintDataEvaluatee(m_currentPage, m_pe[i].getPrintData());
|
||||||
|
boolean display = Evaluator.evaluateLogic(evaluatee, m_pe[i].getPageLogic());
|
||||||
|
if (!display)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
m_pe[i].paint(g2D, 0, pageStart, m_ctx, isView);
|
m_pe[i].paint(g2D, 0, pageStart, m_ctx, isView);
|
||||||
|
}
|
||||||
} // paint
|
} // paint
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,4 +119,9 @@ public class HeaderFooter
|
||||||
return retValue;
|
return retValue;
|
||||||
} // getDrillDown
|
} // getDrillDown
|
||||||
|
|
||||||
|
public void setCurrentPage(Page page)
|
||||||
|
{
|
||||||
|
m_currentPage = page;
|
||||||
|
}
|
||||||
|
|
||||||
} // HeaderFooter
|
} // HeaderFooter
|
||||||
|
|
|
@ -50,7 +50,6 @@ import javax.print.DocFlavor;
|
||||||
import javax.print.attribute.DocAttributeSet;
|
import javax.print.attribute.DocAttributeSet;
|
||||||
|
|
||||||
import org.compiere.model.MClientInfo;
|
import org.compiere.model.MClientInfo;
|
||||||
import org.compiere.model.MColumn;
|
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.model.MSysConfig;
|
import org.compiere.model.MSysConfig;
|
||||||
import org.compiere.model.MTable;
|
import org.compiere.model.MTable;
|
||||||
|
@ -72,7 +71,6 @@ import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Evaluatee;
|
|
||||||
import org.compiere.util.Evaluator;
|
import org.compiere.util.Evaluator;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
@ -1101,7 +1099,7 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
|
|
||||||
// Type
|
// Type
|
||||||
PrintElement element = null;
|
PrintElement element = null;
|
||||||
if ( !isDisplayed(item) )
|
if ( !PrintDataEvaluatee.hasPageLogic(item.getDisplayLogic()) && !isDisplayed(m_data, item) )
|
||||||
{
|
{
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -1214,6 +1212,14 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
m_currPage.addElement (element);
|
m_currPage.addElement (element);
|
||||||
else
|
else
|
||||||
m_headerFooter.addElement (element);
|
m_headerFooter.addElement (element);
|
||||||
|
|
||||||
|
if (PrintDataEvaluatee.hasPageLogic(item.getDisplayLogic()))
|
||||||
|
{
|
||||||
|
element.setPrintData(m_data);
|
||||||
|
element.setRowIndex(row);
|
||||||
|
element.setPageLogic(item.getDisplayLogic());
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (m_lastHeight[m_area] > m_maxHeightSinceNewLine[m_area])
|
if (m_lastHeight[m_area] > m_maxHeightSinceNewLine[m_area])
|
||||||
m_maxHeightSinceNewLine[m_area] = m_lastHeight[m_area];
|
m_maxHeightSinceNewLine[m_area] = m_lastHeight[m_area];
|
||||||
|
@ -1623,6 +1629,8 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
Boolean [] colSuppressRepeats = new Boolean[columnCount];
|
Boolean [] colSuppressRepeats = new Boolean[columnCount];
|
||||||
String[] columnJustification = new String[columnCount];
|
String[] columnJustification = new String[columnCount];
|
||||||
HashMap<Integer,Integer> additionalLines = new HashMap<Integer,Integer>();
|
HashMap<Integer,Integer> additionalLines = new HashMap<Integer,Integer>();
|
||||||
|
ArrayList<String> pageLogics = new ArrayList<String>();
|
||||||
|
boolean hasPageLogic = false;
|
||||||
|
|
||||||
int col = 0;
|
int col = 0;
|
||||||
for (int c = 0; c < format.getItemCount(); c++)
|
for (int c = 0; c < format.getItemCount(); c++)
|
||||||
|
@ -1669,6 +1677,16 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
rowColColor.put(new Point(TableElement.ALL, col), color.getColor());
|
rowColColor.put(new Point(TableElement.ALL, col), color.getColor());
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
if (PrintDataEvaluatee.hasPageLogic(item.getDisplayLogic()))
|
||||||
|
{
|
||||||
|
pageLogics.add(item.getDisplayLogic());
|
||||||
|
hasPageLogic = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pageLogics.add(null);
|
||||||
|
}
|
||||||
|
//
|
||||||
col++;
|
col++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1679,7 +1697,7 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
KeyNamePair[] pk = new KeyNamePair[rows];
|
KeyNamePair[] pk = new KeyNamePair[rows];
|
||||||
String pkColumnName = null;
|
String pkColumnName = null;
|
||||||
ArrayList<Integer> functionRows = new ArrayList<Integer>();
|
ArrayList<Integer> functionRows = new ArrayList<Integer>();
|
||||||
ArrayList<Integer> pageBreak = new ArrayList<Integer>();
|
ArrayList<Integer> pageBreak = new ArrayList<Integer>();
|
||||||
|
|
||||||
// for all rows
|
// for all rows
|
||||||
for (int row = 0; row < rows; row++)
|
for (int row = 0; row < rows; row++)
|
||||||
|
@ -1724,7 +1742,7 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
Serializable dataElement = null;
|
Serializable dataElement = null;
|
||||||
if (item.isPrinted()) // Text Columns
|
if (item.isPrinted()) // Text Columns
|
||||||
{
|
{
|
||||||
if ( !isDisplayed(item) )
|
if ( !PrintDataEvaluatee.hasPageLogic(item.getDisplayLogic()) && !isDisplayed(printData, item) )
|
||||||
{
|
{
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -1802,6 +1820,13 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
|
|
||||||
if (format == m_format)
|
if (format == m_format)
|
||||||
this.colSuppressRepeats = colSuppressRepeats;
|
this.colSuppressRepeats = colSuppressRepeats;
|
||||||
|
|
||||||
|
if (hasPageLogic)
|
||||||
|
{
|
||||||
|
table.setPageLogics(pageLogics);
|
||||||
|
table.setTablePrintData(printData);
|
||||||
|
}
|
||||||
|
|
||||||
return table;
|
return table;
|
||||||
} // layoutTable
|
} // layoutTable
|
||||||
|
|
||||||
|
@ -1891,7 +1916,9 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
//
|
//
|
||||||
// log.fine("#" + m_id, "PageIndex=" + pageIndex + ", Copy=" + m_isCopy);
|
// log.fine("#" + m_id, "PageIndex=" + pageIndex + ", Copy=" + m_isCopy);
|
||||||
page.paint((Graphics2D)graphics, r, false, m_isCopy); // sets context
|
page.paint((Graphics2D)graphics, r, false, m_isCopy); // sets context
|
||||||
|
getHeaderFooter().setCurrentPage(page);
|
||||||
getHeaderFooter().paint((Graphics2D)graphics, r, false);
|
getHeaderFooter().paint((Graphics2D)graphics, r, false);
|
||||||
|
getHeaderFooter().setCurrentPage(null);
|
||||||
//
|
//
|
||||||
return Printable.PAGE_EXISTS;
|
return Printable.PAGE_EXISTS;
|
||||||
} // print
|
} // print
|
||||||
|
@ -2005,81 +2032,10 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
return childPrintFormatDetails;
|
return childPrintFormatDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDisplayed(MPrintFormatItem item) {
|
private boolean isDisplayed(PrintData data, MPrintFormatItem item) {
|
||||||
if ( Util.isEmpty(item.getDisplayLogic() ))
|
if ( Util.isEmpty(item.getDisplayLogic() ))
|
||||||
return true;
|
return true;
|
||||||
boolean display = Evaluator.evaluateLogic(new Evaluatee() {
|
boolean display = Evaluator.evaluateLogic(new PrintDataEvaluatee(getPage(getPageNo()), data), item.getDisplayLogic());
|
||||||
|
|
||||||
@Override
|
|
||||||
public String get_ValueAsString(String variableName) {
|
|
||||||
if (Page.CONTEXT_PAGE.equals(variableName)) {
|
|
||||||
return String.valueOf(getPageNo());
|
|
||||||
} else if (Page.CONTEXT_PAGECOUNT.equals(variableName)) {
|
|
||||||
return String.valueOf(getNumberOfPages());
|
|
||||||
}
|
|
||||||
|
|
||||||
//ref column
|
|
||||||
String foreignColumn = "";
|
|
||||||
int f = variableName.indexOf('.');
|
|
||||||
if (f > 0) {
|
|
||||||
foreignColumn = variableName.substring(f+1, variableName.length());
|
|
||||||
variableName = variableName.substring(0, f);
|
|
||||||
}
|
|
||||||
|
|
||||||
Object obj = m_data.getNode(variableName);
|
|
||||||
if ( obj == null || !(obj instanceof PrintDataElement))
|
|
||||||
return "";
|
|
||||||
PrintDataElement data = (PrintDataElement) obj;
|
|
||||||
if (data.isNull() )
|
|
||||||
return "";
|
|
||||||
String value = null;
|
|
||||||
if (data.getValue() instanceof Boolean)
|
|
||||||
value = ((Boolean)data.getValue()).booleanValue() ? "Y" : "N";
|
|
||||||
else
|
|
||||||
value = data.getValueAsString();
|
|
||||||
if (!Util.isEmpty(value) && !Util.isEmpty(foreignColumn) && variableName.endsWith("_ID")) {
|
|
||||||
String refValue = "";
|
|
||||||
int id = 0;
|
|
||||||
try {
|
|
||||||
id = Integer.parseInt(value);
|
|
||||||
} catch (Exception e){}
|
|
||||||
if (id > 0) {
|
|
||||||
String tableName = null;
|
|
||||||
if (!Util.isEmpty(m_data.getTableName()))
|
|
||||||
tableName = m_data.getTableName();
|
|
||||||
else
|
|
||||||
tableName = variableName.substring(0, variableName.length()-3);
|
|
||||||
MColumn column = MColumn.get(m_data.getCtx(), tableName, variableName);
|
|
||||||
if (column != null) {
|
|
||||||
String foreignTable = column.getReferenceTableName();
|
|
||||||
refValue = DB.getSQLValueString(null,
|
|
||||||
"SELECT " + foreignColumn + " FROM " + foreignTable + " WHERE "
|
|
||||||
+ foreignTable + "_ID = ?", id);
|
|
||||||
} else {
|
|
||||||
if (variableName.startsWith("#") || variableName.startsWith("$")) {
|
|
||||||
variableName = variableName.substring(1);
|
|
||||||
} else if (variableName.indexOf("|") > 0) {
|
|
||||||
variableName = variableName.substring(variableName.lastIndexOf("|")+1);
|
|
||||||
}
|
|
||||||
String foreignTable = null;
|
|
||||||
if (foreignColumn.indexOf(".") > 0) {
|
|
||||||
foreignTable = foreignColumn.substring(0, foreignColumn.indexOf("."));
|
|
||||||
} else {
|
|
||||||
foreignTable = variableName.substring(0, variableName.length()-3);
|
|
||||||
}
|
|
||||||
MTable t = MTable.get(Env.getCtx(), foreignTable);
|
|
||||||
if (t != null) {
|
|
||||||
refValue = DB.getSQLValueString(null,
|
|
||||||
"SELECT " + foreignColumn + " FROM " + foreignTable + " WHERE "
|
|
||||||
+ foreignTable + "_ID = ?", id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return refValue;
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}, item.getDisplayLogic());
|
|
||||||
|
|
||||||
return display;
|
return display;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
|
import org.compiere.util.Evaluator;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Layout Page
|
* Layout Page
|
||||||
|
@ -118,6 +120,11 @@ public class Page
|
||||||
m_pageCount = pageCount;
|
m_pageCount = pageCount;
|
||||||
} // setPageCount
|
} // setPageCount
|
||||||
|
|
||||||
|
public int getPageCount()
|
||||||
|
{
|
||||||
|
return m_pageCount;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add Print Element to Page
|
* Add Print Element to Page
|
||||||
* @param element print element
|
* @param element print element
|
||||||
|
@ -180,7 +187,17 @@ public class Page
|
||||||
for (int i = 0; i < m_elements.size(); i++)
|
for (int i = 0; i < m_elements.size(); i++)
|
||||||
{
|
{
|
||||||
PrintElement e = (PrintElement)m_elements.get(i);
|
PrintElement e = (PrintElement)m_elements.get(i);
|
||||||
|
if (e.getPrintData() != null && !Util.isEmpty(e.getPageLogic(), true) && e.getRowIndex() >= 0)
|
||||||
|
{
|
||||||
|
e.getPrintData().setRowIndex(e.getRowIndex());
|
||||||
|
PrintDataEvaluatee evaluatee = new PrintDataEvaluatee(this, e.getPrintData());
|
||||||
|
boolean display = Evaluator.evaluateLogic(evaluatee, e.getPageLogic());
|
||||||
|
if (!display)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
e.setCurrentPage(this);
|
||||||
e.paint(g2D, m_pageNo, pageStart, m_ctx, isView);
|
e.paint(g2D, m_pageNo, pageStart, m_ctx, isView);
|
||||||
|
e.setCurrentPage(null);
|
||||||
}
|
}
|
||||||
} // paint
|
} // paint
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Project: Trek Global ERP *
|
||||||
|
* Copyright (C) 2009-2018 Trek Global Corporation *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.compiere.print.layout;
|
||||||
|
|
||||||
|
import org.compiere.model.MColumn;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
|
import org.compiere.print.PrintData;
|
||||||
|
import org.compiere.print.PrintDataElement;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Evaluatee;
|
||||||
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PrintDataEvaluatee implements Evaluatee {
|
||||||
|
|
||||||
|
private PrintData m_data;
|
||||||
|
private Page m_page;
|
||||||
|
|
||||||
|
public PrintDataEvaluatee(Page page, PrintData data) {
|
||||||
|
m_data = data;
|
||||||
|
m_page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String get_ValueAsString(String variableName) {
|
||||||
|
if (Page.CONTEXT_PAGE.equals(variableName)) {
|
||||||
|
return String.valueOf(m_page.getPageNo());
|
||||||
|
} else if (Page.CONTEXT_PAGECOUNT.equals(variableName)) {
|
||||||
|
return String.valueOf(m_page.getPageCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
//ref column
|
||||||
|
String foreignColumn = "";
|
||||||
|
int f = variableName.indexOf('.');
|
||||||
|
if (f > 0) {
|
||||||
|
foreignColumn = variableName.substring(f+1, variableName.length());
|
||||||
|
variableName = variableName.substring(0, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object obj = m_data.getNode(variableName);
|
||||||
|
if ( obj == null || !(obj instanceof PrintDataElement))
|
||||||
|
return "";
|
||||||
|
PrintDataElement data = (PrintDataElement) obj;
|
||||||
|
if (data.isNull() )
|
||||||
|
return "";
|
||||||
|
String value = null;
|
||||||
|
if (data.getValue() instanceof Boolean)
|
||||||
|
value = ((Boolean)data.getValue()).booleanValue() ? "Y" : "N";
|
||||||
|
else
|
||||||
|
value = data.getValueAsString();
|
||||||
|
if (!Util.isEmpty(value) && !Util.isEmpty(foreignColumn) && variableName.endsWith("_ID")) {
|
||||||
|
String refValue = "";
|
||||||
|
int id = 0;
|
||||||
|
try {
|
||||||
|
id = Integer.parseInt(value);
|
||||||
|
} catch (Exception e){}
|
||||||
|
if (id > 0) {
|
||||||
|
String tableName = null;
|
||||||
|
if (!Util.isEmpty(m_data.getTableName()))
|
||||||
|
tableName = m_data.getTableName();
|
||||||
|
else
|
||||||
|
tableName = variableName.substring(0, variableName.length()-3);
|
||||||
|
MColumn column = MColumn.get(m_data.getCtx(), tableName, variableName);
|
||||||
|
if (column != null) {
|
||||||
|
String foreignTable = column.getReferenceTableName();
|
||||||
|
refValue = DB.getSQLValueString(null,
|
||||||
|
"SELECT " + foreignColumn + " FROM " + foreignTable + " WHERE "
|
||||||
|
+ foreignTable + "_ID = ?", id);
|
||||||
|
} else {
|
||||||
|
if (variableName.startsWith("#") || variableName.startsWith("$")) {
|
||||||
|
variableName = variableName.substring(1);
|
||||||
|
} else if (variableName.indexOf("|") > 0) {
|
||||||
|
variableName = variableName.substring(variableName.lastIndexOf("|")+1);
|
||||||
|
}
|
||||||
|
String foreignTable = null;
|
||||||
|
if (foreignColumn.indexOf(".") > 0) {
|
||||||
|
foreignTable = foreignColumn.substring(0, foreignColumn.indexOf("."));
|
||||||
|
} else {
|
||||||
|
foreignTable = variableName.substring(0, variableName.length()-3);
|
||||||
|
}
|
||||||
|
MTable t = MTable.get(Env.getCtx(), foreignTable);
|
||||||
|
if (t != null) {
|
||||||
|
refValue = DB.getSQLValueString(null,
|
||||||
|
"SELECT " + foreignColumn + " FROM " + foreignTable + " WHERE "
|
||||||
|
+ foreignTable + "_ID = ?", id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return refValue;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasPageLogic(String displayLogic) {
|
||||||
|
if (Util.isEmpty(displayLogic, true))
|
||||||
|
return false;
|
||||||
|
return displayLogic.contains("@*Page");
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,6 +30,7 @@ import java.util.logging.Level;
|
||||||
|
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.print.MPrintFormatItem;
|
import org.compiere.print.MPrintFormatItem;
|
||||||
|
import org.compiere.print.PrintData;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -72,6 +73,14 @@ public abstract class PrintElement implements ImageObserver, Serializable
|
||||||
|
|
||||||
/** Logger */
|
/** Logger */
|
||||||
protected CLogger log = CLogger.getCLogger(getClass());
|
protected CLogger log = CLogger.getCLogger(getClass());
|
||||||
|
|
||||||
|
private Page m_currentPage;
|
||||||
|
|
||||||
|
private PrintData m_printData;
|
||||||
|
|
||||||
|
private int m_rowIndex = -1;
|
||||||
|
|
||||||
|
private String m_pageLogic;
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -357,4 +366,43 @@ public abstract class PrintElement implements ImageObserver, Serializable
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
} // toString
|
} // toString
|
||||||
|
|
||||||
|
public void setCurrentPage(Page page)
|
||||||
|
{
|
||||||
|
m_currentPage = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Page getCurrentPage()
|
||||||
|
{
|
||||||
|
return m_currentPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrintData(PrintData printData)
|
||||||
|
{
|
||||||
|
m_printData = printData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PrintData getPrintData()
|
||||||
|
{
|
||||||
|
return m_printData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRowIndex(int row)
|
||||||
|
{
|
||||||
|
m_rowIndex = row;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRowIndex()
|
||||||
|
{
|
||||||
|
return m_rowIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageLogic(String displayLogic)
|
||||||
|
{
|
||||||
|
m_pageLogic = displayLogic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPageLogic()
|
||||||
|
{
|
||||||
|
return m_pageLogic;
|
||||||
|
}
|
||||||
} // PrintElement
|
} // PrintElement
|
||||||
|
|
|
@ -43,8 +43,10 @@ import java.util.regex.Pattern;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.print.MPrintFormatItem;
|
import org.compiere.print.MPrintFormatItem;
|
||||||
import org.compiere.print.MPrintTableFormat;
|
import org.compiere.print.MPrintTableFormat;
|
||||||
|
import org.compiere.print.PrintData;
|
||||||
import org.compiere.print.util.SerializableMatrix;
|
import org.compiere.print.util.SerializableMatrix;
|
||||||
import org.compiere.print.util.SerializableMatrixImpl;
|
import org.compiere.print.util.SerializableMatrixImpl;
|
||||||
|
import org.compiere.util.Evaluator;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.NamePair;
|
import org.compiere.util.NamePair;
|
||||||
import org.compiere.util.Util;
|
import org.compiere.util.Util;
|
||||||
|
@ -1449,6 +1451,22 @@ public class TableElement extends PrintElement
|
||||||
if (Arrays.equals(lastItems,printItems) )
|
if (Arrays.equals(lastItems,printItems) )
|
||||||
suppress = true;
|
suppress = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!suppress)
|
||||||
|
{
|
||||||
|
if (m_tablePrintData != null && m_pageLogics != null && col < m_pageLogics.size())
|
||||||
|
{
|
||||||
|
String pageLogic = m_pageLogics.get(col);
|
||||||
|
if (!Util.isEmpty(pageLogic, true))
|
||||||
|
{
|
||||||
|
m_tablePrintData.setRowIndex(row);
|
||||||
|
PrintDataEvaluatee evaluatee = new PrintDataEvaluatee(getCurrentPage(), m_tablePrintData);
|
||||||
|
boolean display = Evaluator.evaluateLogic(evaluatee, pageLogic);
|
||||||
|
if (!display)
|
||||||
|
suppress = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( !suppress )
|
if ( !suppress )
|
||||||
{
|
{
|
||||||
|
@ -1669,6 +1687,8 @@ public class TableElement extends PrintElement
|
||||||
|
|
||||||
/** Print Data */
|
/** Print Data */
|
||||||
private SerializableMatrix<ArrayList<Serializable>> m_printRows = new SerializableMatrixImpl<ArrayList<Serializable>>("PrintRows");
|
private SerializableMatrix<ArrayList<Serializable>> m_printRows = new SerializableMatrixImpl<ArrayList<Serializable>>("PrintRows");
|
||||||
|
private ArrayList<String> m_pageLogics;
|
||||||
|
private PrintData m_tablePrintData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert empty Row after current Row
|
* Insert empty Row after current Row
|
||||||
|
@ -1705,4 +1725,14 @@ public class TableElement extends PrintElement
|
||||||
return coordinate.toArray();
|
return coordinate.toArray();
|
||||||
} // getPrintItems
|
} // getPrintItems
|
||||||
|
|
||||||
|
|
||||||
|
public void setPageLogics(ArrayList<String> pageLogics)
|
||||||
|
{
|
||||||
|
m_pageLogics = pageLogics;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTablePrintData(PrintData printData)
|
||||||
|
{
|
||||||
|
m_tablePrintData = printData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue