📄 mtab.java
字号:
* Get Variable Value (Evaluatee)
* @param variableName name
* @return value
*/
public String get_ValueAsString (String variableName)
{
return Env.getContext (m_vo.ctx, m_vo.WindowNo, variableName, true);
} // get_ValueAsString
/**
* Is Single Row
* @return true if single row
*/
public boolean isSingleRow()
{
return m_vo.IsSingleRow;
} // isSingleRow;
/**
* Set Single Row.
* Temporary store of current value
* @param isSingleRow toggle
*/
public void setSingleRow (boolean isSingleRow)
{
m_vo.IsSingleRow = isSingleRow;
} // setSingleRow
/**
* Has Tree
* @return true if tree exists
*/
public boolean isTreeTab()
{
return m_vo.HasTree;
} // isTreeTab
/**
* Get Tab ID
* @return Tab ID
*/
public int getAD_Tab_ID()
{
return m_vo.AD_Tab_ID;
} // getAD_Tab_ID
/**
* Get Table ID
* @return Table ID
*/
public int getAD_Table_ID()
{
return m_vo.AD_Table_ID;
} // getAD_Table_ID
/**
* Get Window ID
* @return Window ID
*/
public int getAD_Window_ID()
{
return m_vo.AD_Window_ID;
} // getAD_Window_ID
/**
* Get Included Tab ID
* @return Included_Tab_ID
*/
public int getIncluded_Tab_ID()
{
return m_vo.Included_Tab_ID;
} // getIncluded_Tab_ID
/**
* Get TableName
* @return Table Name
*/
public String getTableName()
{
return m_vo.TableName;
} // getTableName
/**
* Get Tab Where Clause
* @return where clause
*/
public String getWhereClause()
{
return m_vo.WhereClause;
} // getWhereClause
/**
* Is Sort Tab
* @return true if sort tab
*/
public boolean isSortTab()
{
return m_vo.IsSortTab;
} // isSortTab
/**
* Get Order column for sort tab
* @return AD_Column_ID
*/
public int getAD_ColumnSortOrder_ID()
{
return m_vo.AD_ColumnSortOrder_ID;
} // getAD_ColumnSortOrder_ID
/**
* Get Yes/No column for sort tab
* @return AD_Column_ID
*/
public int getAD_ColumnSortYesNo_ID()
{
return m_vo.AD_ColumnSortYesNo_ID;
} // getAD_ColumnSortYesNo_ID
/**************************************************************************
* Get extended Where Clause (parent link)
* @return parent link
*/
public String getWhereExtended()
{
return m_extendedWhere;
} // getWhereExtended
/**
* Get Order By Clause
* @param onlyCurrentRows only current rows
* @return Order By Clause
*/
private String getOrderByClause(boolean onlyCurrentRows)
{
// First Prio: Tab Order By
if (m_vo.OrderByClause.length() > 0)
return m_vo.OrderByClause;
// Second Prio: Fields (save it)
m_vo.OrderByClause = "";
for (int i = 0; i < 3; i++)
{
String order = m_OrderBys[i];
if (order != null && order.length() > 0)
{
if (m_vo.OrderByClause.length() > 0)
m_vo.OrderByClause += ",";
m_vo.OrderByClause += order;
}
}
if (m_vo.OrderByClause.length() > 0)
return m_vo.OrderByClause;
// Third Prio: onlyCurrentRows
m_vo.OrderByClause = "Created";
if (onlyCurrentRows && !isDetail()) // first tab only
m_vo.OrderByClause += " DESC";
return m_vo.OrderByClause;
} // getOrderByClause
/**************************************************************************
* Transaction support.
* Depending on Table returns transaction info
* @return info
*/
public String getTrxInfo()
{
// InvoiceBatch
if (m_vo.TableName.startsWith("C_InvoiceBatch"))
{
int Record_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, "C_InvoiceBatch_ID");
log.fine(m_vo.TableName + " - " + Record_ID);
MessageFormat mf = null;
try
{
mf = new MessageFormat(Msg.getMsg(Env.getAD_Language(m_vo.ctx), "InvoiceBatchSummary"));
}
catch (Exception e)
{
log.log(Level.SEVERE, "InvoiceBatchSummary=" + Msg.getMsg(Env.getAD_Language(m_vo.ctx), "InvoiceBatchSummary"), e);
}
if (mf == null)
return " ";
/**********************************************************************
* ** Message: ExpenseSummary **
* {0} Line(s) {1,number,#,##0.00} - Total: {2,number,#,##0.00}
*
* {0} - Number of lines
* {1} - Toral
* {2} - Currency
*/
Object[] arguments = new Object[3];
boolean filled = false;
//
String sql = "SELECT COUNT(*), NVL(SUM(LineNetAmt),0), NVL(SUM(LineTotalAmt),0) "
+ "FROM C_InvoiceBatchLine "
+ "WHERE C_InvoiceBatch_ID=? AND IsActive='Y'";
//
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, Record_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
// {0} - Number of lines
Integer lines = new Integer(rs.getInt(1));
arguments[0] = lines;
// {1} - Line net
Double net = new Double(rs.getDouble(2));
arguments[1] = net;
// {2} - Line net
Double total = new Double(rs.getDouble(3));
arguments[2] = total;
filled = true;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, m_vo.TableName + "\nSQL=" + sql, e);
}
if (filled)
return mf.format (arguments);
return " ";
} // InvoiceBatch
// Order || Invoice
else if (m_vo.TableName.startsWith("C_Order") || m_vo.TableName.startsWith("C_Invoice"))
{
int Record_ID;
boolean isOrder = m_vo.TableName.startsWith("C_Order");
//
StringBuffer sql = new StringBuffer("SELECT COUNT(*) AS Lines,c.ISO_Code,o.TotalLines,o.GrandTotal,"
+ "currencyBase(o.GrandTotal,o.C_Currency_ID,o.DateAcct, o.AD_Client_ID,o.AD_Org_ID) AS ConvAmt ");
if (isOrder)
{
Record_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, "C_Order_ID");
sql.append("FROM C_Order o"
+ " INNER JOIN C_Currency c ON (o.C_Currency_ID=c.C_Currency_ID)"
+ " INNER JOIN C_OrderLine l ON (o.C_Order_ID=l.C_Order_ID) "
+ "WHERE o.C_Order_ID=? ");
}
else
{
Record_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, "C_Invoice_ID");
sql.append("FROM C_Invoice o"
+ " INNER JOIN C_Currency c ON (o.C_Currency_ID=c.C_Currency_ID)"
+ " INNER JOIN C_InvoiceLine l ON (o.C_Invoice_ID=l.C_Invoice_ID) "
+ "WHERE o.C_Invoice_ID=? ");
}
sql.append("GROUP BY o.C_Currency_ID, c.ISO_Code, o.TotalLines, o.GrandTotal, o.DateAcct, o.AD_Client_ID, o.AD_Org_ID");
log.fine(m_vo.TableName + " - " + Record_ID);
MessageFormat mf = null;
try
{
mf = new MessageFormat(Msg.getMsg(Env.getAD_Language(m_vo.ctx), "OrderSummary"));
}
catch (Exception e)
{
log.log(Level.SEVERE, "OrderSummary=" + Msg.getMsg(Env.getAD_Language(m_vo.ctx), "OrderSummary"), e);
}
if (mf == null)
return " ";
/**********************************************************************
* ** Message: OrderSummary **
* {0} Line(s) - {1,number,#,##0.00} - Toral: {2,number,#,##0.00} {3} = {4,number,#,##0.00}
*
* {0} - Number of lines
* {1} - Line toral
* {2} - Grand total (including tax, etc.)
* {3} - Currency
* (4) - Grand total converted to local currency
*/
Object[] arguments = new Object[5];
boolean filled = false;
//
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, Record_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
// {0} - Number of lines
Integer lines = new Integer(rs.getInt(1));
arguments[0] = lines;
// {1} - Line toral
Double lineTotal = new Double(rs.getDouble(3));
arguments[1] = lineTotal;
// {2} - Grand total (including tax, etc.)
Double grandTotal = new Double(rs.getDouble(4));
arguments[2] = grandTotal;
// {3} - Currency
String currency = rs.getString(2);
arguments[3] = currency;
// (4) - Grand total converted to Euro
Double grandEuro = new Double(rs.getDouble(5));
arguments[4] = grandEuro;
filled = true;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, m_vo.TableName + "\nSQL=" + sql, e);
}
if (filled)
return mf.format (arguments);
return " ";
} // Order || Invoice
// Expense Report
else if (m_vo.TableName.startsWith("S_TimeExpense") && m_vo.TabNo == 0)
{
int Record_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, "S_TimeExpense_ID");
log.fine(m_vo.TableName + " - " + Record_ID);
MessageFormat mf = null;
try
{
mf = new MessageFormat(Msg.getMsg(Env.getAD_Language(m_vo.ctx), "ExpenseSummary"));
}
catch (Exception e)
{
log.log(Level.SEVERE, "ExpenseSummary=" + Msg.getMsg(Env.getAD_Language(m_vo.ctx), "ExpenseSummary"), e);
}
if (mf == null)
return " ";
/**********************************************************************
* ** Message: ExpenseSummary **
* {0} Line(s) - Total: {1,number,#,##0.00} {2}
*
* {0} - Number of lines
* {1} - Toral
* {2} - Currency
*/
Object[] arguments = new Object[3];
boolean filled = false;
//
String SQL = "SELECT COUNT(*) AS Lines, SUM(ConvertedAmt*Qty) "
+ "FROM S_TimeExpenseLine "
+ "WHERE S_TimeExpense_ID=?";
//
try
{
PreparedStatement pstmt = DB.prepareStatement(SQL, null);
pstmt.setInt(1, Record_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
// {0} - Number of lines
Integer lines = new Integer(rs.getInt(1));
arguments[0] = lines;
// {1} - Line toral
Double total = new Double(rs.getDouble(2));
arguments[1] = total;
// {3} - Currency
arguments[2] = " ";
filled = true;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, m_vo.TableName + "\nSQL=" + SQL, e);
}
if (filled)
return mf.format (arguments);
return " ";
} // S_TimeExpense
// Default - No Trx Info
return null;
} // getTrxInfo
/**
* Load Dependant Information
*/
private void loadDependentInfo()
{
/**
* Load Order Type from C_DocTypeTarget_ID
*/
if (m_vo.TableName.equals("C_Order"))
{
int C_DocTyp_ID = 0;
Integer target = (Integer)getValue("C_DocTypeTarget_ID");
if (target != null)
C_DocTyp_ID = target.intValue();
if (C_DocTyp_ID == 0)
return;
String sql = "SELECT DocSubTypeSO FROM C_DocType WHERE C_DocType_ID=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, C_DocTyp_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
Env.setContext(m_vo.ctx, m_vo.WindowNo, "OrderType", rs.getString(1));
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, "loadOrderType", e);
}
} // loadOrderInfo
} // loadDependentInfo
/**************************************************************************
* Load Attachments for this table
*/
public void loadAttachments()
{
log.fine("#" + m_vo.TabNo);
if (!canHaveAttachment())
return;
String SQL = "SELECT AD_Attachment_ID, Record_ID FROM AD_Attachment "
+ "WHERE AD_Table_ID=?";
try
{
if (m_Attachment == null)
m_Attachment = new HashMap<Integer,Integer>();
else
m_Attachment.clear();
PreparedStatement pstmt = DB.prepareStatement(SQL, null);
pstmt.setInt(1, m_vo.AD_Table_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
Integer key = new Integer(rs.getInt(2));
Integer value = new Integer(rs.getInt(1));
m_Attachment.put(key, value);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, "loadAttachments", e);
}
log.config("#" + m_Attachment.size());
} // loadAttachment
/**
* Can this tab have Attachments?.
* <p>
* It can have an attachment if it has a key column ending with _ID.
* The key column is empty, if there is no single identifying key.
* @return true if record can have attachment
*/
public boolean canHaveAttachment()
{
if (getKeyColumnName().endsWith("_ID"))
return true;
return false;
} // canHaveAttachment
/**
* Returns true, if current row has an Attachment
* @return true if record has attchment
*/
public boolean hasAttachment()
{
if (m_Attachment == null)
loadAttachments();
if (m_Attachment == null || m_Attachment.isEmpty())
return false;
//
Integer key = new Integer(m_mTable.getKeyID (m_currentRow));
return m_Attachment.containsKey(key);
} // hasAttachment
/**
* Get Attachment_ID.
* @return ID or 0, if not found
*/
public int getAD_AttachmentID()
{
if (m_Attachment == null)
loadAttachments();
if (m_Attachment.isEmpty())
return 0;
//
Integer key = new Integer(m_mTable.getKeyID (m_currentRow));
Integer value = (Integer)m_Attachment.get(key);
if (value == null)
return 0;
else
return value.intValue();
} // getAttachmentID
/**************************************************************************
* Load Locks for Table and User
*/
public void loadLocks()
{
int AD_User_ID = Env.getContextAsInt(Env.getCtx(), "#AD_User_ID");
log.fine("#" + m_vo.TabNo + " - AD_User_ID=" + AD_User_ID);
if (!canHaveAttachment())
return;
String sql = "SELECT Record_ID "
+ "FROM AD_Private_Access "
+ "WHERE AD_User_ID=? AND AD_Table_ID=? AND IsActive='Y' "
+ "ORDER BY Record_ID";
try
{
if (m_Lock == null)
m_Lock = new ArrayList<Integer>();
else
m_Lock.clear();
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_User_ID);
pstmt.setInt(2, m_vo.AD_Table_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
Integer key = new Integer(rs.getInt(1));
m_Lock.add(key);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
log.fine("#" + m_Lock.size());
} // loadLooks
/**
* Record Is Locked
*/
public boolean isLocked()
{
if (!MRole.getDefault(m_vo.ctx, false).isPersonalLock())
return false;
if (m_Lock == null)
loadLocks();
if (m_Lock == null || m_Lock.isEmpty())
return false;
//
Integer key = new Integer(m_mTable.getKeyID (m_currentRow));
return m_Lock.contains(key);
} // isLocked
/**
* Lock Record
* @param Record_ID id
* @param lock true if lock, otherwise unlock
*/
public void lock (Properties ctx, int Record_ID, boolean lock)
{
int AD_User_ID = Env.getContextAsInt(ctx, "#AD_User_ID");
log.fine("Lock=" + lock + ", AD_User_ID=" + AD_User_ID
+ ", AD_Table_ID=" + m_vo.AD_Table_ID + ", Record_ID=" + Record_ID);
MPrivateAccess access = MPrivateAccess.get (ctx, AD_User_ID, m_vo.AD_Table_ID, Record_ID);
if (access == null)
access = new MPrivateAccess (ctx, AD_User_ID, m_vo.AD_Table_ID, Record_ID);
access.setIsActive(lock);
access.save();
//
loadLocks();
} // lock
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -