📄 vallocation.java
字号:
//
data.add(line);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql.toString(), e);
}
// Remove previous listeners
paymentTable.getModel().removeTableModelListener(this);
// Header Info
Vector<String> columnNames = new Vector<String>();
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
*
SELECT i.DateInvoiced,i.DocumentNo,i.C_Invoice_ID,c.ISO_Code,
i.GrandTotal*i.MultiplierAP "GrandTotal",
currencyConvert(i.GrandTotal*i.MultiplierAP,i.C_Currency_ID,i.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID) "GrandTotal $",
invoiceOpen(C_Invoice_ID,C_InvoicePaySchedule_ID) "Open",
currencyConvert(invoiceOpen(C_Invoice_ID,C_InvoicePaySchedule_ID),i.C_Currency_ID,i.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)*i.MultiplierAP "Open $",
invoiceDiscount(i.C_Invoice_ID,SysDate,C_InvoicePaySchedule_ID) "Discount",
currencyConvert(invoiceDiscount(i.C_Invoice_ID,SysDate,C_InvoicePaySchedule_ID),i.C_Currency_ID,i.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)*i.Multiplier*i.MultiplierAP "Discount $",
i.MultiplierAP, i.Multiplier
FROM C_Invoice_v i 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=1000001
*/
data = new Vector<Vector<Object>>();
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
+ "currencyConvert(i.GrandTotal*i.MultiplierAP,i.C_Currency_ID,?,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID), " // 6 #1 Converted
+ "currencyConvert(invoiceOpen(C_Invoice_ID,C_InvoicePaySchedule_ID),i.C_Currency_ID,?,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)*i.MultiplierAP, " // 7 #2 Converted Open
+ "currencyConvert(invoiceDiscount" // 8 AllowedDiscount
+ "(i.C_Invoice_ID,?,C_InvoicePaySchedule_ID),i.C_Currency_ID,?,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)*i.Multiplier*i.MultiplierAP," // #3, #4
+ "i.MultiplierAP "
+ "FROM C_Invoice_v i" // corrected for CM/Split
+ " 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.fine("InvSQL=" + sql.toString());
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null);
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<Object> line = new Vector<Object>();
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);
if (open == null) // no conversion rate
open = Env.ZERO;
line.add(open); // 4/6-ConvOpen
BigDecimal discount = rs.getBigDecimal(8);
if (discount == null) // no concersion rate
discount = Env.ZERO;
line.add(discount); // 5/7-ConvAllowedDisc
line.add(Env.ZERO); // 6/8-WriteOff
line.add(Env.ZERO); // 7/9-Applied
// line.add(rs.getBigDecimal(9)); // 8/10-Multiplier
// Add when open <> 0 (i.e. not if no conversion rate)
if (Env.ZERO.compareTo(open) != 0)
data.add(line);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql.toString(), e);
}
// Remove previous listeners
invoiceTable.getModel().removeTableModelListener(this);
// Header Info
columnNames = new Vector<String>();
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.config("");
if (e.getSource().equals(multiCurrency))
loadBPartner();
// Allocate
else 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() == TableModelEvent.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.config("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 (autoWriteOff.isSelected())
{
TableModel invoice = invoiceTable.getModel();
// if applied entered, adjust writeOff
if (col == i_applied)
{
BigDecimal openAmount = (BigDecimal)invoice.getValueAt(row, i_open); // Open Amount
BigDecimal amount = openAmount.subtract((BigDecimal)invoice.getValueAt(row, i_discount));
amount = amount.subtract((BigDecimal)invoice.getValueAt(row, i_applied));
invoice.setValueAt(amount, row, i_writeOff);
// Warning if > 30%
if (amount.doubleValue()/openAmount.doubleValue() > .30)
ADialog.warn(m_WindowNo, this, "AllocationWriteOffWarn");
}
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);
}
}
m_calculating = false;
calculate();
} // tableChanged
/**
* Calculate Allocation info
*/
private void calculate ()
{
log.config("");
//
DecimalFormat format = DisplayType.getNumberFormat(DisplayType.Amount);
Timestamp allocDate = null;
// Payment
TableModel payment = paymentTable.getModel();
BigDecimal totalPay = new BigDecimal(0.0);
int rows = payment.getRowCount();
m_noPayments = 0;
for (int i = 0; i < rows; i++)
{
if (((Boolean)payment.getValueAt(i, 0)).booleanValue())
{
Timestamp ts = (Timestamp)payment.getValueAt(i, 1);
allocDate = TimeUtil.max(allocDate, ts);
BigDecimal bd = (BigDecimal)payment.getValueAt(i, i_payment);
totalPay = totalPay.add(bd); // Applied Pay
m_noPayments++;
log.fine("Payment_" + i + " = " + bd + " - Total=" + totalPay);
}
}
paymentInfo.setText(String.valueOf(m_noPayments) + " - "
+ Msg.getMsg(Env.getCtx(), "Sum") + " " + format.format(totalPay) + " ");
// Invoices
TableModel invoice = invoiceTable.getModel();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -