📄 vpayselect.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.apps.form;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.math.*;
import java.text.*;
import java.util.*;
import org.compiere.util.*;
import org.compiere.apps.*;
import org.compiere.grid.ed.*;
import org.compiere.minigrid.*;
import org.compiere.model.*;
import org.compiere.swing.*;
import org.compiere.plaf.*;
import org.compiere.process.*;
/**
* Create Manual Payments From (AP) Invoices or (AR) Credit Memos.
* Allows user to select Invoices for payment.
* When Processed, PaySelection is created
* and optionally posted/generated and printed
*
* @author Jorg Janke
* @version $Id: VPaySelect.java,v 1.21 2003/04/15 05:03:37 jjanke Exp $
*/
public class VPaySelect extends CPanel
implements FormPanel, ActionListener, TableModelListener, ASyncProcess
{
/** @todo withholding */
/**
* VPaySelect Constructor
*/
public VPaySelect()
{
} // VPaySelect
/**
* Initialize Panel
* @param WindowNo window
* @param frame frame
*/
public void init (int WindowNo, FormFrame frame)
{
Log.trace(Log.l1_User, "VPaySelect.init");
m_WindowNo = WindowNo;
m_frame = frame;
try
{
jbInit();
dynInit();
frame.getContentPane().add(commandPanel, BorderLayout.SOUTH);
frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
}
catch(Exception e)
{
Log.error("VPaySelect.init", e);
}
} // init
/** Window No */
private int m_WindowNo = 0;
/** FormFrame */
private FormFrame m_frame;
/** Format */
private DecimalFormat m_format = DisplayType.getNumberFormat(DisplayType.Amount);
/** Bank Balance */
private BigDecimal m_bankBalance = new BigDecimal(0.0);
/** SQL for Query */
private String m_sql;
/** Number of selected rows */
private int m_noSelected = 0;
/** Client ID */
private int m_AD_Client_ID = 0;
/**/
private boolean m_isLocked = false;
//
private CPanel mainPanel = new CPanel();
private BorderLayout mainLayout = new BorderLayout();
private CPanel parameterPanel = new CPanel();
private CLabel labelBankAccount = new CLabel();
private VComboBox fieldBankAccount = new VComboBox();
private GridBagLayout parameterLayout = new GridBagLayout();
private CLabel labelBankBalance = new CLabel();
private CLabel labelCurrency = new CLabel();
private CLabel labelBalance = new CLabel();
private VCheckBox onlyDue = new VCheckBox();
private CLabel labelBPartner = new CLabel();
private VComboBox fieldBPartner = new VComboBox();
private JLabel dataStatus = new JLabel();
private JScrollPane dataPane = new JScrollPane();
private MiniTable miniTable = new MiniTable();
private CPanel commandPanel = new CPanel();
private JButton bCancel = ConfirmPanel.createCancelButton(true);
private JButton bGenerate = ConfirmPanel.createProcessButton(true);
private FlowLayout commandLayout = new FlowLayout();
private JButton bRefresh = ConfirmPanel.createRefreshButton(true);
private CLabel labelPayDate = new CLabel();
private VDate fieldPayDate = new VDate();
private CLabel labelPaymentRule = new CLabel();
private VComboBox fieldPaymentRule = new VComboBox();
/**
* Static Init
* @throws Exception
*/
private void jbInit() throws Exception
{
CompiereColor.setBackground(this);
//
mainPanel.setLayout(mainLayout);
parameterPanel.setLayout(parameterLayout);
//
labelBankAccount.setText(Msg.translate(Env.getCtx(), "C_BankAccount_ID"));
fieldBankAccount.addActionListener(this);
labelBPartner.setText(Msg.translate(Env.getCtx(), "C_BPartner_ID"));
fieldBPartner.addActionListener(this);
bRefresh.addActionListener(this);
labelPayDate.setText(Msg.translate(Env.getCtx(), "PayDate"));
labelPaymentRule.setText(Msg.translate(Env.getCtx(), "PaymentRule"));
//
labelBankBalance.setText(Msg.translate(Env.getCtx(), "CurrentBalance"));
labelBalance.setText("0");
onlyDue.setText(Msg.getMsg(Env.getCtx(), "OnlyDue"));
dataStatus.setText(" ");
//
bGenerate.addActionListener(this);
bCancel.addActionListener(this);
//
mainPanel.add(parameterPanel, BorderLayout.NORTH);
parameterPanel.add(labelBankAccount, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(fieldBankAccount, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(labelBankBalance, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(labelCurrency, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 0, 5, 5), 0, 0));
parameterPanel.add(labelBalance, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(labelBPartner, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(fieldBPartner, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(bRefresh, new GridBagConstraints(4, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(labelPayDate, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(fieldPayDate, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(labelPaymentRule, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(fieldPaymentRule, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterPanel.add(onlyDue, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
mainPanel.add(dataStatus, BorderLayout.SOUTH);
mainPanel.add(dataPane, BorderLayout.CENTER);
dataPane.getViewport().add(miniTable, null);
//
commandPanel.setLayout(commandLayout);
commandLayout.setAlignment(FlowLayout.RIGHT);
commandLayout.setHgap(10);
commandPanel.add(bCancel, null);
commandPanel.add(bGenerate, null);
} // jbInit
/**
* Dynamic Init.
* - Load Bank Info
* - Load BPartner
* - Init Table
*/
private void dynInit()
{
Properties ctx = Env.getCtx();
// Bank Account Info
String sql = Access.addRWAccessSQL(ctx,
"SELECT ba.C_BankAccount_ID," // 1
+ "b.Name || ' ' || ba.AccountNo AS Name," // 2
+ "ba.C_Currency_ID, c.ISO_Code," // 3..4
+ "ba.CurrentBalance " // 5
+ "FROM C_Bank b, C_BankAccount ba, C_Currency c "
+ "WHERE b.C_Bank_ID=ba.C_Bank_ID"
+ " AND ba.C_Currency_ID=c.C_Currency_ID "
+ " AND EXISTS (SELECT * FROM C_BankAccountDoc d WHERE d.C_BankAccount_ID=ba.C_BankAccount_ID)",
"ba", true);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
boolean transfers = false;
BankInfo bi = new BankInfo (rs.getInt(1), rs.getInt(3),
rs.getString(2), rs.getString(4),
rs.getBigDecimal(5), transfers);
fieldBankAccount.addItem(bi);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error ("VPaySelect.dynInit - BA", e);
}
if (fieldBankAccount.getItemCount() == 0)
ADialog.error(m_WindowNo, this, "VPaySelectNoBank");
else
fieldBankAccount.setSelectedIndex(0);
// Optional BusinessPartner with unpaid AP Invoices
KeyNamePair pp = new KeyNamePair(0, "");
fieldBPartner.addItem(pp);
sql = Access.addROAccessSQL(ctx,
"SELECT bp.C_BPartner_ID, bp.Name FROM C_BPartner bp", "bp", true)
+ " AND EXISTS (SELECT * FROM C_Invoice i WHERE bp.C_BPartner_ID=i.C_BPartner_ID"
+ " AND i.IsSOTrx='N' AND i.IsPaid<>'Y')";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
pp = new KeyNamePair(rs.getInt(1), rs.getString(2));
fieldBPartner.addItem(pp);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error ("VPaySelect.dynInit - BP", e);
}
fieldBPartner.setSelectedIndex(0);
/** prepare MiniTable
*
SELECT i.C_Invoice_ID, i.DateInvoiced+p.NetDays AS DateDue,
bp.Name, i.DocumentNo, c.ISO_Code, i.GrandTotal,
C_PaymentTerm_Discount(i.GrandTotal, i.C_PaymentTerm_ID, i.DateInvoiced, SysDate) AS Discount,
SysDate-C_PaymentTerm_DueDays(i.C_PaymentTerm_ID,i.DateInvoiced) AS DiscountDate,
i.GrandTotal-C_PaymentTerm_Discount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate) AS DueAmount,
C_Currency_Convert(i.GrandTotal-C_PaymentTerm_Discount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate,null),
i.C_Currency_ID,100,SysDate) AS PayAmt
FROM C_Invoice i, C_BPartner bp, C_Currency c, C_PaymentTerm p
WHERE i.IsSOTrx='N'
AND i.C_BPartner_ID=bp.C_BPartner_ID
AND i.C_Currency_ID=c.C_Currency_ID
AND i.C_PaymentTerm_ID=p.C_PaymentTerm_ID
AND i.DocStatus IN ('CO','CL')
ORDER BY 2,3
*/
m_sql = miniTable.prepareTable(new ColumnInfo[] {
// 0..4
new ColumnInfo(" ", "i.C_Invoice_ID", IDColumn.class, false, false, null),
new ColumnInfo(Msg.translate(ctx, "DateDue"), "i.DateInvoiced+p.NetDays AS DateDue", Timestamp.class, true, true, null),
new ColumnInfo(Msg.translate(ctx, "C_BPartner_ID"), "bp.Name", KeyNamePair.class, true, false, "i.C_BPartner_ID"),
new ColumnInfo(Msg.translate(ctx, "DocumentNo"), "i.DocumentNo", String.class),
new ColumnInfo(Msg.translate(ctx, "C_Currency_ID"), "c.ISO_Code", KeyNamePair.class, true, false, "i.C_Currency_ID"),
// 5..9
new ColumnInfo(Msg.translate(ctx, "GrandTotal"), "i.GrandTotal", BigDecimal.class),
new ColumnInfo(Msg.translate(ctx, "DifferenceAmt"), "C_PaymentTerm_Discount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced, ?) AS DifferenceAm", BigDecimal.class),
new ColumnInfo(Msg.getMsg(ctx, "DiscountDate"), "SysDate-C_PaymentTerm_DueDays(i.C_PaymentTerm_ID,i.DateInvoiced) AS DiscountDate", Timestamp.class),
new ColumnInfo(Msg.getMsg(ctx, "AmountDue"), "i.GrandTotal-C_PaymentTerm_Discount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced, ?) AS DueAmount", BigDecimal.class),
new ColumnInfo(Msg.getMsg(ctx, "AmountPay"), "C_Currency_Convert(i.GrandTotal-C_PaymentTerm_Discount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced, ?),i.C_Currency_ID, ?,?,null, i.AD_Client_ID,i.AD_Org_ID) AS PayAmt", BigDecimal.class)
},
"C_Invoice i, C_BPartner bp, C_Currency c, C_PaymentTerm p",
"i.IsSOTrx='N' AND IsPaid='N' AND i.C_BPartner_ID=bp.C_BPartner_ID"
+ " AND NOT EXISTS (SELECT * FROM C_PaySelectionLine psl"
+ " WHERE i.C_Invoice_ID=psl.C_Invoice_ID AND psl.C_PaySelectionCheck_ID IS NOT NULL)"
+ " AND i.C_Currency_ID=c.C_Currency_ID"
+ " AND i.C_PaymentTerm_ID=p.C_PaymentTerm_ID"
+ " AND i.DocStatus IN ('CO','CL')"
+ " AND i.AD_Client_ID=?",
true);
//
miniTable.getModel().addTableModelListener(this);
//
fieldPayDate.setMandatory(true);
fieldPayDate.setValue(new Timestamp(System.currentTimeMillis()));
//
m_AD_Client_ID = Integer.parseInt(Env.getContext(Env.getCtx(), "#AD_Client_ID"));
} // dynInit
/**
* Load Bank Info - Load Info from Bank Account and valid Documents (PaymentRule)
*/
private void loadBankInfo()
{
BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem();
if (bi == null)
return;
labelCurrency.setText(bi.Currency);
labelBalance.setText(m_format.format(bi.Balance));
m_bankBalance = bi.Balance;
// PaymentRule
fieldPaymentRule.removeAllItems();
int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule");
Language language = Env.getLanguage(Env.getCtx());
MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID);
String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY"))
+ " AND " + info.KeyColumn
+ " IN (SELECT PaymentRule FROM C_BankAccountDoc WHERE C_BankAccount_ID=?) "
+ info.Query.substring(info.Query.indexOf(" ORDER BY"));
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, bi.C_BankAccount_ID);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -