📄 vallocation.java
字号:
pstmt.setInt(2, m_C_Currency_ID);
pstmt.setInt(3, m_C_BPartner_ID);
if (!multiCurrency.isSelected())
pstmt.setInt(4, m_C_Currency_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
Vector line = new Vector();
line.add(new Boolean(false)); // 0-Selection
line.add(rs.getTimestamp(1)); // 1-TrxDate
KeyNamePair pp = new KeyNamePair(rs.getInt(3), rs.getString(2));
line.add(pp); // 2-DocumentNo
if (multiCurrency.isSelected())
{
line.add(rs.getString(4)); // 3-Currency
line.add(rs.getBigDecimal(5)); // 4-PayAmt
}
line.add(rs.getBigDecimal(6)); // 3/5-ConvAmt
line.add(rs.getBigDecimal(7)); // 4/6-ConvOpen
line.add(Env.ZERO); // 5/7-Payment
line.add(rs.getBigDecimal(8)); // 6/8-Multiplier
data.add(line);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error ("VAllocation.loadBPartner(payment)", e);
}
// Remove previous listeners
paymentTable.getModel().removeTableModelListener(this);
// Header Info
Vector columnNames = new Vector();
columnNames.add(Msg.getMsg(Env.getCtx(), "Select"));
columnNames.add(Msg.translate(Env.getCtx(), "Date"));
columnNames.add(Msg.translate(Env.getCtx(), "DocumentNo"));
if (multiCurrency.isSelected())
{
columnNames.add(Msg.getMsg(Env.getCtx(), "TrxCurrency"));
columnNames.add(Msg.translate(Env.getCtx(), "Amount"));
}
columnNames.add(Msg.getMsg(Env.getCtx(), "ConvertedAmount"));
columnNames.add(Msg.getMsg(Env.getCtx(), "OpenAmt"));
columnNames.add(Msg.getMsg(Env.getCtx(), "AppliedAmt"));
columnNames.add(" "); // Multiplier
// Set Model
DefaultTableModel modelP = new DefaultTableModel(data, columnNames);
modelP.addTableModelListener(this);
paymentTable.setModel(modelP);
//
int i = 0;
paymentTable.setColumnClass(i++, Boolean.class, false); // 0-Selection
paymentTable.setColumnClass(i++, Timestamp.class, true); // 1-TrxDate
paymentTable.setColumnClass(i++, String.class, true); // 2-Value
if (multiCurrency.isSelected())
{
paymentTable.setColumnClass(i++, String.class, true); // 3-Currency
paymentTable.setColumnClass(i++, BigDecimal.class, true); // 4-PayAmt
}
paymentTable.setColumnClass(i++, BigDecimal.class, true); // 5-ConvAmt
paymentTable.setColumnClass(i++, BigDecimal.class, true); // 6-ConvOpen
paymentTable.setColumnClass(i++, BigDecimal.class, false); // 7-Allocated
paymentTable.setColumnClass(i++, BigDecimal.class, true); // 8-Multiplier
//
i_payment = multiCurrency.isSelected() ? 7 : 5;
// Table UI
paymentTable.autoSize();
/********************************
* Load unpaid Invoices
* 1-TrxDate, 2-Value, (3-Currency, 4-InvAmt,)
* 5-ConvAmt, 6-ConvOpen, 7-ConvDisc, 8-WriteOff, 9-Applied
*/
data = new Vector();
sql = new StringBuffer("SELECT i.DateInvoiced,i.DocumentNo,i.C_Invoice_ID," // 1..3
+ "c.ISO_Code,i.GrandTotal*i.MultiplierAP, " // 4..5 Orig Currency
+ "C_Currency_Convert(i.GrandTotal*i.MultiplierAP,i.C_Currency_ID,?,null,null,i.AD_Client_ID,i.AD_Org_ID), " // 6 #1 Converted
+ "C_Currency_Convert(C_Invoice_Open(C_Invoice_ID),i.C_Currency_ID,?,null,null,i.AD_Client_ID,i.AD_Org_ID)*i.MultiplierAP, " // 7 #2 Converted Open
+ "C_Currency_Convert(C_Invoice_Discount" // 8 AllowedDiscount
+ "(i.C_Invoice_ID,?),i.C_Currency_ID,?,null,null,i.AD_Client_ID,i.AD_Org_ID)*i.MultiplierAP," // #3, #4
+ "i.MultiplierAP "
+ "FROM C_Invoice_v i" // corrected for CM
+ " INNER JOIN C_Currency c ON (i.C_Currency_ID=c.C_Currency_ID) "
+ "WHERE i.IsPaid='N' AND i.Processed='Y'"
+ " AND i.C_BPartner_ID=?"); // #5
if (!multiCurrency.isSelected())
sql.append(" AND i.C_Currency_ID=?"); // #6
sql.append(" ORDER BY i.DateInvoiced, i.DocumentNo");
Log.trace(Log.l5_DData, "InvSQL=" + sql.toString());
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
pstmt.setInt(1, m_C_Currency_ID);
pstmt.setInt(2, m_C_Currency_ID);
pstmt.setTimestamp(3, (Timestamp)dateField.getValue());
pstmt.setInt(4, m_C_Currency_ID);
pstmt.setInt(5, m_C_BPartner_ID);
if (!multiCurrency.isSelected())
pstmt.setInt(6, m_C_Currency_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
Vector line = new Vector();
line.add(new Boolean(false)); // 0-Selection
line.add(rs.getTimestamp(1)); // 1-TrxDate
KeyNamePair pp = new KeyNamePair(rs.getInt(3), rs.getString(2));
line.add(pp); // 2-Value
if (multiCurrency.isSelected())
{
line.add(rs.getString(4)); // 3-Currency
line.add(rs.getBigDecimal(5)); // 4-Orig Amount
}
line.add(rs.getBigDecimal(6)); // 3/5-ConvAmt
BigDecimal open = rs.getBigDecimal(7);
line.add(open); // 4/6-ConvOpen
line.add(rs.getBigDecimal(8)); // 5/7-ConvAllowedDisc
line.add(new BigDecimal(0.0)); // 6/8-WriteOff
line.add(new BigDecimal(0.0)); // 7/9-Applied
line.add(rs.getBigDecimal(9)); // 8/10-Multiplier
if (open.compareTo(Env.ZERO) != 0) // add when open <> 0
data.add(line);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error ("VAllocation.loadBPartner(invoice)", e);
}
// Remove previous listeners
invoiceTable.getModel().removeTableModelListener(this);
// Header Info
columnNames = new Vector();
columnNames.add(Msg.getMsg(Env.getCtx(), "Select"));
columnNames.add(Msg.translate(Env.getCtx(), "Date"));
columnNames.add(Msg.translate(Env.getCtx(), "DocumentNo"));
if (multiCurrency.isSelected())
{
columnNames.add(Msg.getMsg(Env.getCtx(), "TrxCurrency"));
columnNames.add(Msg.translate(Env.getCtx(), "Amount"));
}
columnNames.add(Msg.getMsg(Env.getCtx(), "ConvertedAmount"));
columnNames.add(Msg.getMsg(Env.getCtx(), "OpenAmt"));
columnNames.add(Msg.getMsg(Env.getCtx(), "Discount"));
columnNames.add(Msg.getMsg(Env.getCtx(), "WriteOff"));
columnNames.add(Msg.getMsg(Env.getCtx(), "AppliedAmt"));
columnNames.add(" "); // Multiplier
// Set Model
DefaultTableModel modelI = new DefaultTableModel(data, columnNames);
modelI.addTableModelListener(this);
invoiceTable.setModel(modelI);
//
i = 0;
invoiceTable.setColumnClass(i++, Boolean.class, false); // 0-Selection
invoiceTable.setColumnClass(i++, Timestamp.class, true); // 1-TrxDate
invoiceTable.setColumnClass(i++, String.class, true); // 2-Value
if (multiCurrency.isSelected())
{
invoiceTable.setColumnClass(i++, String.class, true); // 3-Currency
invoiceTable.setColumnClass(i++, BigDecimal.class, true); // 4-Amt
}
invoiceTable.setColumnClass(i++, BigDecimal.class, true); // 5-ConvAmt
invoiceTable.setColumnClass(i++, BigDecimal.class, true); // 6-ConvAmt Open
invoiceTable.setColumnClass(i++, BigDecimal.class, false); // 7-Conv Discount
invoiceTable.setColumnClass(i++, BigDecimal.class, false); // 8-Conv WriteOff
invoiceTable.setColumnClass(i++, BigDecimal.class, false); // 9-Conv Applied
invoiceTable.setColumnClass(i++, BigDecimal.class, true); // 10-Multiplier
// Table UI
invoiceTable.autoSize();
i_open = multiCurrency.isSelected() ? 6 : 4;
i_discount = multiCurrency.isSelected() ? 7 : 5;
i_writeOff = multiCurrency.isSelected() ? 8 : 6;
i_applied = multiCurrency.isSelected() ? 9 : 7;
i_multiplier = multiCurrency.isSelected() ? 10 : 8;
// Calculate Totals
calculate();
} // loadBPartner
/*************************************************************************/
/**
* Action Listener.
* - MultiCurrency
* - Allocate
* @param e event
*/
public void actionPerformed(ActionEvent e)
{
Log.trace(Log.l3_Util, "VAllocation.actionPerformed");
if (e.getSource().equals(multiCurrency))
loadBPartner();
if (e.getSource().equals(allocateButton))
{
allocateButton.setEnabled(false);
saveData();
loadBPartner();
allocateButton.setEnabled(true);
}
} // actionPerformed
/**
* Table Model Listener.
* - Recalculate Totals
* @param e event
*/
public void tableChanged(TableModelEvent e)
{
boolean isUpdate = (e.getType() == e.UPDATE);
// Not a table update
if (!isUpdate)
{
calculate();
return;
}
/**
* Setting defaults
*/
if (m_calculating) // Avoid recursive calls
return;
m_calculating = true;
int row = e.getFirstRow();
int col = e.getColumn();
boolean isInvoice = (e.getSource().equals(invoiceTable.getModel()));
Log.trace(Log.l3_Util, "VAllocation.tableChanged Row=" + row + ", Col=" + col + ", InvoiceTable=" + isInvoice);
// Payments
if (!isInvoice)
{
TableModel payment = paymentTable.getModel();
if (col == 0)
{
// selected - set payment amount
if (((Boolean)payment.getValueAt(row, col)).booleanValue())
{
BigDecimal amount = (BigDecimal)payment.getValueAt(row, i_open); // Open Amount
payment.setValueAt(amount, row, i_payment);
}
else // de-selected
payment.setValueAt(Env.ZERO, row, i_payment);
}
}
// Invoice Selection
else if (col == 0)
{
TableModel invoice = invoiceTable.getModel();
// selected - set applied amount
if (((Boolean)invoice.getValueAt(row, col)).booleanValue())
{
BigDecimal amount = (BigDecimal)invoice.getValueAt(row, i_open); // Open Amount
amount = amount.subtract((BigDecimal)invoice.getValueAt(row, i_discount));
invoice.setValueAt(Env.ZERO, row, i_writeOff); // to be sure
invoice.setValueAt(amount, row, i_applied);
}
else // de-selected
{
invoice.setValueAt(Env.ZERO, row, i_writeOff);
invoice.setValueAt(Env.ZERO, row, i_applied);
}
invoiceTable.repaint(); // update r/o
}
// Invoice - Try to balance entry
else if (autoCalc.isSelected())
{
TableModel invoice = invoiceTable.getModel();
// if applied entered, adjust writeOff
if (col == i_applied)
{
BigDecimal amount = (BigDecimal)invoice.getValueAt(row, i_open); // Open Amount
amount = amount.subtract((BigDecimal)invoice.getValueAt(row, i_discount));
amount = amount.subtract((BigDecimal)invoice.getValueAt(row, i_applied));
invoice.setValueAt(amount, row, i_writeOff);
}
else // adjust applied
{
BigDecimal amount = (BigDecimal)invoice.getValueAt(row, i_open); // Open Amount
amount = amount.subtract((BigDecimal)invoice.getValueAt(row, i_discount));
amount = amount.subtract((BigDecimal)invoice.getValueAt(row, i_writeOff));
invoice.setValueAt(amount, row, i_applied);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -