[ 1988593 ] Let show Totals in a MiniTable for Numeric Value
http://sourceforge.net/tracker/index.php?func=detail&aid=1988593&group_id=176962&atid=879335
This commit is contained in:
parent
e3dd22ccc6
commit
b13354d076
|
@ -423,6 +423,7 @@ public abstract class Info extends CDialog
|
||||||
p_table.setRowSelectionAllowed(true);
|
p_table.setRowSelectionAllowed(true);
|
||||||
p_table.addMouseListener(this);
|
p_table.addMouseListener(this);
|
||||||
p_table.setMultiSelection(p_multiSelection);
|
p_table.setMultiSelection(p_multiSelection);
|
||||||
|
p_table.setShowTotals(true);
|
||||||
|
|
||||||
// set editors (two steps)
|
// set editors (two steps)
|
||||||
for (int i = 0; i < layout.length; i++)
|
for (int i = 0; i < layout.length; i++)
|
||||||
|
@ -1088,6 +1089,8 @@ public abstract class Info extends CDialog
|
||||||
//
|
//
|
||||||
int no = p_table.getRowCount();
|
int no = p_table.getRowCount();
|
||||||
log.fine("#" + no + " - " + (System.currentTimeMillis()-start) + "ms");
|
log.fine("#" + no + " - " + (System.currentTimeMillis()-start) + "ms");
|
||||||
|
if(p_table.getShowTotals())
|
||||||
|
p_table.addTotals(p_layout);
|
||||||
p_table.autoSize();
|
p_table.autoSize();
|
||||||
//
|
//
|
||||||
setCursor(Cursor.getDefaultCursor());
|
setCursor(Cursor.getDefaultCursor());
|
||||||
|
|
|
@ -228,6 +228,7 @@ public final class InfoProduct extends Info implements ActionListener
|
||||||
warehouseTbl.setMultiSelection(false);
|
warehouseTbl.setMultiSelection(false);
|
||||||
warehouseTbl.addMouseListener(this);
|
warehouseTbl.addMouseListener(this);
|
||||||
warehouseTbl.getSelectionModel().addListSelectionListener(this);
|
warehouseTbl.getSelectionModel().addListSelectionListener(this);
|
||||||
|
warehouseTbl.setShowTotals(true);
|
||||||
warehouseTbl.autoSize();
|
warehouseTbl.autoSize();
|
||||||
|
|
||||||
ColumnInfo[] s_layoutSubstitute = new ColumnInfo[]{
|
ColumnInfo[] s_layoutSubstitute = new ColumnInfo[]{
|
||||||
|
|
|
@ -23,6 +23,8 @@ import java.util.*;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.table.*;
|
import javax.swing.table.*;
|
||||||
|
|
||||||
|
import org.compiere.apps.search.Info_Column;
|
||||||
import org.compiere.grid.ed.*;
|
import org.compiere.grid.ed.*;
|
||||||
import org.compiere.model.*;
|
import org.compiere.model.*;
|
||||||
import org.compiere.swing.*;
|
import org.compiere.swing.*;
|
||||||
|
@ -79,7 +81,9 @@ public class MiniTable extends CTable
|
||||||
/** Lauout set in prepareTable and used in loadTable */
|
/** Lauout set in prepareTable and used in loadTable */
|
||||||
private ColumnInfo[] m_layout = null;
|
private ColumnInfo[] m_layout = null;
|
||||||
/** Logger */
|
/** Logger */
|
||||||
private static CLogger log = CLogger.getCLogger(MiniTable.class);
|
private static CLogger log = CLogger.getCLogger(MiniTable.class);
|
||||||
|
/** Is Total Show */
|
||||||
|
private boolean showTotals = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Size Columns.
|
* Size Columns.
|
||||||
|
@ -468,15 +472,21 @@ public class MiniTable extends CTable
|
||||||
setValueAt(data, row, col);
|
setValueAt(data, row, col);
|
||||||
// log.fine( "r=" + row + ", c=" + col + " " + m_layout[col].getColHeader(),
|
// log.fine( "r=" + row + ", c=" + col + " " + m_layout[col].getColHeader(),
|
||||||
// "data=" + data.toString() + " " + data.getClass().getName() + " * " + m_table.getCellRenderer(row, col));
|
// "data=" + data.toString() + " " + data.getClass().getName() + " * " + m_table.getCellRenderer(row, col));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
log.log(Level.SEVERE, "", e);
|
log.log(Level.SEVERE, "", e);
|
||||||
}
|
}
|
||||||
|
if(getShowTotals())
|
||||||
|
addTotals(m_layout);
|
||||||
autoSize();
|
autoSize();
|
||||||
log.config("Row(rs)=" + getRowCount());
|
log.config("Row(rs)=" + getRowCount());
|
||||||
|
|
||||||
|
|
||||||
} // loadTable
|
} // loadTable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -512,7 +522,9 @@ public class MiniTable extends CTable
|
||||||
// store
|
// store
|
||||||
setValueAt(data, row, col);
|
setValueAt(data, row, col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(getShowTotals())
|
||||||
|
addTotals(m_layout);
|
||||||
autoSize();
|
autoSize();
|
||||||
log.config("Row(array)=" + getRowCount());
|
log.config("Row(array)=" + getRowCount());
|
||||||
} // loadTable
|
} // loadTable
|
||||||
|
@ -634,6 +646,181 @@ public class MiniTable extends CTable
|
||||||
if (cmp < 0)
|
if (cmp < 0)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
} // getColorCode
|
} // getColorCode
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set if Totals is Show
|
||||||
|
* @param boolean Show
|
||||||
|
*/
|
||||||
|
public void setShowTotals(boolean show)
|
||||||
|
{
|
||||||
|
showTotals= show;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* get if Totals is Show
|
||||||
|
* @param boolean Show
|
||||||
|
*/
|
||||||
|
public boolean getShowTotals()
|
||||||
|
{
|
||||||
|
return showTotals;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adding a new row with the totals
|
||||||
|
*/
|
||||||
|
public void addTotals(ColumnInfo[] layout)
|
||||||
|
{
|
||||||
|
if (getRowCount() == 0 || layout.length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Object[] total = new Object[layout.length];
|
||||||
|
|
||||||
|
for (int row = 0 ; row < getRowCount(); row ++)
|
||||||
|
{
|
||||||
|
|
||||||
|
int colOffset = 1; // columns start with 1
|
||||||
|
for (int col = 0; col < layout.length; col++)
|
||||||
|
{
|
||||||
|
Object data = getModel().getValueAt(row, col);
|
||||||
|
Class c = layout[col].getColClass();
|
||||||
|
int colIndex = col + colOffset;
|
||||||
|
if (c == BigDecimal.class)
|
||||||
|
{
|
||||||
|
BigDecimal subtotal = Env.ZERO;
|
||||||
|
if(total[col]!= null)
|
||||||
|
subtotal = (BigDecimal)(total[col]);
|
||||||
|
|
||||||
|
BigDecimal amt = (BigDecimal) data;
|
||||||
|
if(subtotal == null)
|
||||||
|
subtotal = Env.ZERO;
|
||||||
|
if(amt == null )
|
||||||
|
amt = Env.ZERO;
|
||||||
|
total[col] = subtotal.add(amt);
|
||||||
|
}
|
||||||
|
else if (c == Double.class)
|
||||||
|
{
|
||||||
|
Double subtotal = new Double(0);
|
||||||
|
if(total[col] != null)
|
||||||
|
subtotal = (Double)(total[col]);
|
||||||
|
|
||||||
|
Double amt = (Double) data;
|
||||||
|
if(subtotal == null)
|
||||||
|
subtotal = new Double(0);
|
||||||
|
if(amt == null )
|
||||||
|
subtotal = new Double(0);
|
||||||
|
total[col] = subtotal + amt;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//adding total row
|
||||||
|
|
||||||
|
int row = getRowCount() + 1;
|
||||||
|
setRowCount(row);
|
||||||
|
int colOffset = 1; // columns start with 1
|
||||||
|
for (int col = 0; col < layout.length; col++)
|
||||||
|
{
|
||||||
|
Class c = layout[col].getColClass();
|
||||||
|
int colIndex = col + colOffset;
|
||||||
|
if (c == BigDecimal.class)
|
||||||
|
{
|
||||||
|
setValueAt(total[col] , row - 1, col);
|
||||||
|
}
|
||||||
|
else if (c == Double.class)
|
||||||
|
{
|
||||||
|
setValueAt(total[col] , row -1 , col);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(col == 0 )
|
||||||
|
{
|
||||||
|
setValueAt(" Σ " , row -1 , col);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setValueAt(null , row - 1, col );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adding a new row with the totals
|
||||||
|
*/
|
||||||
|
public void addTotals(Info_Column[] layout)
|
||||||
|
{
|
||||||
|
if (getRowCount() == 0 || layout.length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Object[] total = new Object[layout.length];
|
||||||
|
|
||||||
|
for (int row = 0 ; row < getRowCount(); row ++)
|
||||||
|
{
|
||||||
|
|
||||||
|
int colOffset = 1; // columns start with 1
|
||||||
|
for (int col = 0; col < layout.length; col++)
|
||||||
|
{
|
||||||
|
Object data = getModel().getValueAt(row, col);
|
||||||
|
Class c = layout[col].getColClass();
|
||||||
|
int colIndex = col + colOffset;
|
||||||
|
if (c == BigDecimal.class)
|
||||||
|
{
|
||||||
|
BigDecimal subtotal = Env.ZERO;
|
||||||
|
if(total[col]!= null)
|
||||||
|
subtotal = (BigDecimal)(total[col]);
|
||||||
|
|
||||||
|
BigDecimal amt = (BigDecimal) data;
|
||||||
|
if(subtotal == null)
|
||||||
|
subtotal = Env.ZERO;
|
||||||
|
if(amt == null )
|
||||||
|
amt = Env.ZERO;
|
||||||
|
total[col] = subtotal.add(amt);
|
||||||
|
}
|
||||||
|
else if (c == Double.class)
|
||||||
|
{
|
||||||
|
Double subtotal = new Double(0);
|
||||||
|
if(total[col] != null)
|
||||||
|
subtotal = (Double)(total[col]);
|
||||||
|
|
||||||
|
Double amt = (Double) data;
|
||||||
|
if(subtotal == null)
|
||||||
|
subtotal = new Double(0);
|
||||||
|
if(amt == null )
|
||||||
|
subtotal = new Double(0);
|
||||||
|
total[col] = subtotal + amt;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//adding total row
|
||||||
|
|
||||||
|
int row = getRowCount() + 1;
|
||||||
|
setRowCount(row);
|
||||||
|
int colOffset = 1; // columns start with 1
|
||||||
|
for (int col = 0; col < layout.length; col++)
|
||||||
|
{
|
||||||
|
Class c = layout[col].getColClass();
|
||||||
|
int colIndex = col + colOffset;
|
||||||
|
if (c == BigDecimal.class)
|
||||||
|
{
|
||||||
|
setValueAt(total[col] , row - 1, col);
|
||||||
|
}
|
||||||
|
else if (c == Double.class)
|
||||||
|
{
|
||||||
|
setValueAt(total[col] , row -1 , col);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(col == 1 )
|
||||||
|
{
|
||||||
|
setValueAt(" Σ " , row -1 , col);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setValueAt(null , row - 1, col );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
} // MiniTable
|
} // MiniTable
|
||||||
|
|
Loading…
Reference in New Issue