📄 vpayment.java
字号:
}
catch (SQLException epc)
{
log.log(Level.SEVERE, SQL, epc);
}
// Set Selection
if (kp != null)
{
bCashBookCombo.setSelectedItem(kp);
if (m_C_CashBook_ID == 0)
m_C_CashBook_ID = kp.getKey(); // set to default to avoid 'cashbook changed' message
}
//
return true;
} // dynInit
/**
* Init OK to be able to make changes?
* @return true if init OK
*/
public boolean isInitOK()
{
return m_initOK;
} // isInitOK
/**
* Fill s_Currencies with EMU currencies
*/
private void loadCurrencies()
{
s_Currencies = new Hashtable<Integer,KeyNamePair>(12); // Currenly only 10+1
String SQL = "SELECT C_Currency_ID, ISO_Code FROM C_Currency "
+ "WHERE (IsEMUMember='Y' AND EMUEntryDate<SysDate) OR IsEuro='Y' "
+ "ORDER BY 2";
try
{
PreparedStatement pstmt = DB.prepareStatement(SQL, null);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
int id = rs.getInt(1);
String name = rs.getString(2);
s_Currencies.put(new Integer(id), new KeyNamePair(id, name));
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, SQL, e);
}
} // loadCurrencies
/**************************************************************************
* Action Listener
* @param e event
*/
public void actionPerformed(ActionEvent e)
{
// log.fine( "VPayment.actionPerformed - " + e.getActionCommand());
// Finish
if (e.getActionCommand().equals(ConfirmPanel.A_OK))
{
if (checkMandatory())
{
saveChanges (); // cannot recover
dispose ();
}
}
else if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL))
dispose();
// Payment Method Change
else if (e.getSource() == paymentCombo)
{
// get selection
ValueNamePair pp = (ValueNamePair)paymentCombo.getSelectedItem();
if (pp != null)
{
String s = pp.getValue().toLowerCase() + "Panel";
centerLayout.show(centerPanel, s); // switch to panel
}
}
// Check Currency change
else if (e.getSource() == sCurrencyCombo)
{
KeyNamePair pp = (KeyNamePair)sCurrencyCombo.getSelectedItem();
BigDecimal amt = MConversionRate.convert(Env.getCtx(),
m_Amount, m_C_Currency_ID, pp.getKey(), m_AD_Client_ID, m_AD_Org_ID);
sAmountField.setText(m_Format.format(amt));
}
// Cash Currency change
else if (e.getSource() == bCurrencyCombo)
{
KeyNamePair pp = (KeyNamePair)bCurrencyCombo.getSelectedItem();
BigDecimal amt = MConversionRate.convert(Env.getCtx(),
m_Amount, m_C_Currency_ID, pp.getKey(), m_AD_Client_ID, m_AD_Org_ID);
bAmountField.setText(m_Format.format(amt));
}
// Online
else if (e.getSource() == kOnline || e.getSource() == sOnline || e.getSource() == tOnline)
processOnline();
} // actionPerformed
/**************************************************************************
* Save Changes
* @return true, if eindow can exit
*/
private boolean saveChanges()
{
ValueNamePair vp = (ValueNamePair)paymentCombo.getSelectedItem();
String newPaymentRule = vp.getValue();
log.info("New Rule: " + newPaymentRule);
// only Payment Rule
if (m_onlyRule)
{
if (!newPaymentRule.equals(m_PaymentRule))
m_mTab.setValue("PaymentRule", newPaymentRule);
return true;
}
// New Values
Timestamp newDateAcct = m_DateAcct;
int newC_PaymentTerm_ID = m_C_PaymentTerm_ID;
int newC_CashLine_ID = m_C_CashLine_ID;
int newC_CashBook_ID = m_C_CashBook_ID;
String newCCType = m_CCType;
int newC_BankAccount_ID = 0;
// B (Cash) (Currency)
if (newPaymentRule.equals(X_C_Order.PAYMENTRULE_Cash))
{
KeyNamePair kp = (KeyNamePair)bCashBookCombo.getSelectedItem();
if (kp != null)
newC_CashBook_ID = kp.getKey();
newDateAcct = (Timestamp)bDateField.getValue();
}
// K (CreditCard) Type, Number, Exp, Approval
else if (newPaymentRule.equals(X_C_Order.PAYMENTRULE_CreditCard))
{
vp = (ValueNamePair)kTypeCombo.getSelectedItem();
if (vp != null)
newCCType = vp.getValue();
}
// T (Transfer) BPartner_Bank
else if (newPaymentRule.equals(MOrder.PAYMENTRULE_DirectDeposit)
|| newPaymentRule.equals(MOrder.PAYMENTRULE_DirectDebit) )
{
tAccountCombo.getSelectedItem();
}
// P (PaymentTerm) PaymentTerm
else if (newPaymentRule.equals(X_C_Order.PAYMENTRULE_OnCredit))
{
KeyNamePair kp = (KeyNamePair)pTermCombo.getSelectedItem();
if (kp != null)
newC_PaymentTerm_ID = kp.getKey();
}
// S (Check) (Currency) CheckNo, Routing
else if (newPaymentRule.equals(X_C_Order.PAYMENTRULE_Check))
{
// sCurrencyCombo.getSelectedItem();
KeyNamePair kp = (KeyNamePair)sBankAccountCombo.getSelectedItem();
if (kp != null)
newC_BankAccount_ID = kp.getKey();
}
else
return false;
// find Bank Account if not qualified yet
if ("KTSD".indexOf(newPaymentRule) != -1 && newC_BankAccount_ID == 0)
{
String tender = MPayment.TENDERTYPE_CreditCard;
if (newPaymentRule.equals(MOrder.PAYMENTRULE_DirectDeposit))
tender = MPayment.TENDERTYPE_DirectDeposit;
else if (newPaymentRule.equals(MOrder.PAYMENTRULE_DirectDebit))
tender = MPayment.TENDERTYPE_DirectDebit;
else if (newPaymentRule.equals(MOrder.PAYMENTRULE_Check))
tender = MPayment.TENDERTYPE_Check;
}
/***********************
* Changed PaymentRule
*/
if (!newPaymentRule.equals(m_PaymentRule))
{
log.fine("Changed PaymentRule: " + m_PaymentRule + " -> " + newPaymentRule);
// We had a CashBook Entry
if (m_PaymentRule.equals(X_C_Order.PAYMENTRULE_Cash))
{
log.fine("Old Cash - " + m_cashLine);
if (m_cashLine != null)
{
MCashLine cl = m_cashLine.createReversal();
if (cl.save())
log.config( "CashCancelled");
else
ADialog.error(m_WindowNo, this, "PaymentError", "CashNotCancelled");
}
newC_CashLine_ID = 0; // reset
}
// We had a change in Payment type (e.g. Check to CC)
else if ("KTSD".indexOf(m_PaymentRule) != -1 && "KTSD".indexOf(newPaymentRule) != -1 && m_mPaymentOriginal != null)
{
log.fine("Old Payment(1) - " + m_mPaymentOriginal);
m_mPaymentOriginal.setDocAction(DocAction.ACTION_Reverse_Correct);
boolean ok = m_mPaymentOriginal.processIt(DocAction.ACTION_Reverse_Correct);
m_mPaymentOriginal.save();
if (ok)
log.info( "Payment Canecelled - " + m_mPaymentOriginal);
else
ADialog.error(m_WindowNo, this, "PaymentError", "PaymentNotCancelled " + m_mPaymentOriginal.getDocumentNo());
m_mPayment.resetNew();
}
// We had a Payment and something else (e.g. Check to Cash)
else if ("KTSD".indexOf(m_PaymentRule) != -1 && "KTSD".indexOf(newPaymentRule) == -1)
{
log.fine("Old Payment(2) - " + m_mPaymentOriginal);
if (m_mPaymentOriginal != null)
{
m_mPaymentOriginal.setDocAction(DocAction.ACTION_Reverse_Correct);
boolean ok = m_mPaymentOriginal.processIt(DocAction.ACTION_Reverse_Correct);
m_mPaymentOriginal.save();
if (ok) // Cancel Payment
{
log.fine("PaymentCancelled " + m_mPayment.getDocumentNo ());
m_mTab.getTableModel().dataSave(true);
m_mPayment.resetNew();
m_mPayment.setAmount(m_C_Currency_ID, m_Amount);
}
else
ADialog.error(m_WindowNo, this, "PaymentError", "PaymentNotCancelled " + m_mPayment.getDocumentNo());
}
}
}
// Get Order and optionally Invoice
int C_Order_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "C_Order_ID");
int C_Invoice_ID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "C_Invoice_ID");
if (C_Invoice_ID == 0 && m_DocStatus.equals("CO"))
C_Invoice_ID = getInvoiceID (C_Order_ID);
// Amount sign negative, if ARC (Credit Memo) or API (AP Invoice)
boolean negateAmt = false;
MInvoice invoice = null;
if (C_Invoice_ID != 0)
{
invoice = new MInvoice (Env.getCtx(), C_Invoice_ID, null);
negateAmt = invoice.isCreditMemo();
}
MOrder order = null;
if (invoice == null && C_Order_ID != 0)
order = new MOrder (Env.getCtx(), C_Order_ID, null);
BigDecimal payAmount = m_Amount;
if (negateAmt)
payAmount = m_Amount.negate();
// Info
log.config("C_Order_ID=" + C_Order_ID + ", C_Invoice_ID=" + C_Invoice_ID + ", NegateAmt=" + negateAmt);
/***********************
* CashBook
*/
if (newPaymentRule.equals(X_C_Order.PAYMENTRULE_Cash))
{
log.fine("Cash");
String description = (String)m_mTab.getValue("DocumentNo");
if (C_Invoice_ID == 0 && order == null)
{
log.config("No Invoice!");
ADialog.error(m_WindowNo, this, "PaymentError", "CashNotCreated");
}
else
{
// Changed Amount
if (m_cashLine != null
&& payAmount.compareTo(m_cashLine.getAmount()) != 0)
{
log.config("Changed CashBook Amount");
m_cashLine.setAmount(payAmount);
if (m_cashLine.save())
log.config("CashAmt Changed");
}
// Different Date/CashBook
if (m_cashLine != null
&& (newC_CashBook_ID != m_C_CashBook_ID
|| !TimeUtil.isSameDay(m_cashLine.getStatementDate(), newDateAcct)))
{
log.config("Changed CashBook/Date: " + m_C_CashBook_ID + "->" + newC_CashBook_ID);
MCashLine reverse = m_cashLine.createReversal();
if (!reverse.save())
ADialog.error(m_WindowNo, this, "PaymentError", "CashNotCancelled");
m_cashLine = null;
}
// Create new
if (m_cashLine == null)
{
log.config("New CashBook");
int C_Currency_ID = 0;
if (invoice != null)
C_Currency_ID = invoice.getC_Currency_ID();
if (C_Currency_ID == 0 && order != null)
C_Currency_ID = order.getC_Currency_ID();
MCash cash = null;
if (newC_CashBook_ID != 0)
cash = MCash.get (Env.getCtx(), newC_CashBook_ID, newDateAcct, null);
else // Default
cash = MCash.get (Env.getCtx(), m_AD_Org_ID, newDateAcct, C_Currency_ID, null);
if (cash == null || cash.get_ID() == 0)
ADialog.error(m_WindowNo, this, "PaymentError", "CashNotCreated");
else
{
MCashLine cl = new MCashLine (cash);
if (invoice != null)
cl.setInvoice(invoice);
if (order != null)
{
cl.setOrder(order, null);
m_needSave = true;
}
if (cl.save())
log.config("CashCreated");
else
ADialog.error(m_WindowNo, this, "PaymentError", "CashNotCreated");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -