📄 invoicehistory.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 Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.apps.search;
import java.awt.*;
import java.awt.event.*;
import java.math.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.logging.*;
import org.compiere.apps.*;
import org.compiere.minigrid.*;
import org.compiere.swing.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Price History for BPartner/Product
*
* @author Jorg Janke
* @version $Id: InvoiceHistory.java,v 1.16 2005/12/27 06:18:37 jjanke Exp $
*/
public class InvoiceHistory extends CDialog
implements ActionListener, ChangeListener
{
/**
* Show History
* @param C_BPartner_ID partner
* @param M_Product_ID product
* @param M_Warehouse_ID warehouse
* @param M_AttributeSetInstance_ID ASI
*/
public InvoiceHistory (Dialog frame,
int C_BPartner_ID, int M_Product_ID, int M_Warehouse_ID, int M_AttributeSetInstance_ID)
{
super(frame, Msg.getMsg(Env.getCtx(), "PriceHistory"), true);
log.config("C_BPartner_ID=" + C_BPartner_ID
+ ", M_Product_ID=" + M_Product_ID
+ ", M_Warehouse_ID=" + M_Warehouse_ID
+ ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID);
m_C_BPartner_ID = C_BPartner_ID;
m_M_Product_ID = M_Product_ID;
m_M_Warehouse_ID = M_Warehouse_ID;
m_M_AttributeSetInstance_ID = M_AttributeSetInstance_ID;
try
{
jbInit();
dynInit();
}
catch(Exception ex)
{
log.log(Level.SEVERE, "", ex);
}
mainPanel.setPreferredSize(new Dimension(700,400));
AEnv.positionCenterWindow(frame, this);
} // InvoiceHistory
private int m_C_BPartner_ID;
private int m_M_Product_ID;
private int m_M_Warehouse_ID;
private int m_M_AttributeSetInstance_ID;
/** Logger */
private static CLogger log = CLogger.getCLogger(InvoiceHistory.class);
private CPanel mainPanel = new CPanel();
private BorderLayout mainLayout = new BorderLayout();
private CPanel northPanel = new CPanel();
private JLabel label = new JLabel();
private FlowLayout northLayout = new FlowLayout();
//
private ConfirmPanel confirmPanel = new ConfirmPanel();
private JTabbedPane centerTabbedPane = new JTabbedPane();
//
private JScrollPane pricePane = new JScrollPane();
private MiniTable m_tablePrice = new MiniTable();
private DefaultTableModel m_modelPrice = null;
private JScrollPane reservedPane = new JScrollPane();
private MiniTable m_tableReserved = new MiniTable();
private DefaultTableModel m_modelReserved = null;
private JScrollPane orderedPane = new JScrollPane();
private MiniTable m_tableOrdered = new MiniTable();
private DefaultTableModel m_modelOrdered = null;
private JScrollPane unconfirmedPane = new JScrollPane();
private MiniTable m_tableUnconfirmed = new MiniTable();
private DefaultTableModel m_modelUnconfirmed = null;
private JScrollPane atpPane = new JScrollPane();
private MiniTable m_tableAtp = new MiniTable();
private DefaultTableModel m_modelAtp = null;
/**
* Ststic Init
*/
void jbInit() throws Exception
{
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
mainPanel.setLayout(mainLayout);
label.setText("Label");
northPanel.setLayout(northLayout);
northLayout.setAlignment(FlowLayout.LEFT);
getContentPane().add(mainPanel);
mainPanel.add(northPanel, BorderLayout.NORTH);
northPanel.add(label, null);
mainPanel.add(confirmPanel, BorderLayout.SOUTH);
mainPanel.add(centerTabbedPane, BorderLayout.CENTER);
centerTabbedPane.addChangeListener(this);
centerTabbedPane.add(pricePane, Msg.getMsg(Env.getCtx(), "PriceHistory"));
centerTabbedPane.add(reservedPane, Msg.translate(Env.getCtx(), "QtyReserved"));
centerTabbedPane.add(orderedPane, Msg.translate(Env.getCtx(), "QtyOrdered"));
centerTabbedPane.add(unconfirmedPane, Msg.getMsg(Env.getCtx(), "QtyUnconfirmed"));
if (m_M_Product_ID != 0)
centerTabbedPane.add(atpPane, Msg.getMsg(Env.getCtx(), "ATP"));
//
pricePane.getViewport().add(m_tablePrice, null);
reservedPane.getViewport().add(m_tableReserved, null);
orderedPane.getViewport().add(m_tableOrdered, null);
unconfirmedPane.getViewport().add(m_tableUnconfirmed, null);
if (m_M_Product_ID != 0)
atpPane.getViewport().add(m_tableAtp, null);
//
confirmPanel.addActionListener(this);
} // jbInit
/**
* Dynamic Init for Price Tab
*/
private boolean dynInit()
{
// Header
Vector<String> columnNames = new Vector<String>();
columnNames.add(Msg.translate(Env.getCtx(), m_C_BPartner_ID == 0 ? "C_BPartner_ID" : "M_Product_ID"));
columnNames.add(Msg.translate(Env.getCtx(), "PriceActual"));
columnNames.add(Msg.translate(Env.getCtx(), "QtyInvoiced"));
columnNames.add(Msg.translate(Env.getCtx(), "Discount"));
columnNames.add(Msg.translate(Env.getCtx(), "DocumentNo"));
columnNames.add(Msg.translate(Env.getCtx(), "DateInvoiced"));
columnNames.add(Msg.translate(Env.getCtx(), "AD_Org_ID"));
// Fill Data
Vector<Vector<Object>> data = null;
if (m_C_BPartner_ID == 0)
data = queryBPartner(); // BPartner of Product
else
data = queryProduct(); // Product of BPartner
// Table
m_modelPrice = new DefaultTableModel(data, columnNames);
m_tablePrice.setModel(m_modelPrice);
//
m_tablePrice.setColumnClass(0, String.class, true); // Product/Partner
m_tablePrice.setColumnClass(1, Double.class, true); // Price
m_tablePrice.setColumnClass(2, Double.class, true); // Quantity
m_tablePrice.setColumnClass(3, BigDecimal.class, true); // Discount (%) to limit precision
m_tablePrice.setColumnClass(4, String.class, true); // DocNo
m_tablePrice.setColumnClass(5, Timestamp.class, true); // Date
m_tablePrice.setColumnClass(6, String.class, true); // Org
//
m_tablePrice.autoSize();
//
return data.size() != 0;
} // dynInit
/**
* Get Info for Product for given Business Parner
*/
private Vector<Vector<Object>> queryProduct ()
{
String sql = "SELECT p.Name,l.PriceActual,l.PriceList,l.QtyInvoiced,"
+ "i.DateInvoiced,dt.PrintName || ' ' || i.DocumentNo As DocumentNo,"
+ "o.Name "
+ "FROM C_Invoice i"
+ " INNER JOIN C_InvoiceLine l ON (i.C_Invoice_ID=l.C_Invoice_ID)"
+ " INNER JOIN C_DocType dt ON (i.C_DocType_ID=dt.C_DocType_ID)"
+ " INNER JOIN AD_Org o ON (i.AD_Org_ID=o.AD_Org_ID)"
+ " INNER JOIN M_Product p ON (l.M_Product_ID=p.M_Product_ID) "
+ "WHERE i.C_BPartner_ID=? "
+ "ORDER BY i.DateInvoiced DESC";
Vector<Vector<Object>> data = fillTable (sql, m_C_BPartner_ID);
sql = "SELECT Name from C_BPartner WHERE C_BPartner_ID=?";
fillLabel (sql, m_C_BPartner_ID);
return data;
} // queryProduct
/**
* Get Info for Business Partners for given Product
*/
private Vector<Vector<Object>> queryBPartner ()
{
String sql = "SELECT bp.Name,l.PriceActual,l.PriceList,l.QtyInvoiced," // 1,2,3,4
+ "i.DateInvoiced,dt.PrintName || ' ' || i.DocumentNo As DocumentNo," // 5,6
+ "o.Name "
+ "FROM C_Invoice i"
+ " INNER JOIN C_InvoiceLine l ON (i.C_Invoice_ID=l.C_Invoice_ID)"
+ " INNER JOIN C_DocType dt ON (i.C_DocType_ID=dt.C_DocType_ID)"
+ " INNER JOIN AD_Org o ON (i.AD_Org_ID=o.AD_Org_ID)"
+ " INNER JOIN C_BPartner bp ON (i.C_BPartner_ID=bp.C_BPartner_ID) "
+ "WHERE l.M_Product_ID=? "
+ "ORDER BY i.DateInvoiced DESC";
Vector<Vector<Object>> data = fillTable (sql, m_M_Product_ID);
sql = "SELECT Name from M_Product WHERE M_Product_ID=?";
fillLabel (sql, m_M_Product_ID);
return data;
} // qyeryBPartner
/**
* Fill Table
*/
private Vector<Vector<Object>> fillTable (String sql, int parameter)
{
log.fine(sql + "; Parameter=" + parameter);
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, parameter);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
Vector<Object> line = new Vector<Object>(6);
// 0-Name, 1-PriceActual, 2-QtyInvoiced, 3-Discount, 4-DocumentNo, 5-DateInvoiced
line.add(rs.getString(1)); // Name
line.add(rs.getBigDecimal(2)); // Price
line.add(new Double(rs.getDouble(4))); // Qty
BigDecimal discountBD = Env.ZERO;
try // discoint can be indefinate
{
double discountD = (rs.getDouble(3)-rs.getDouble(2)) / rs.getDouble(3) * 100;
discountBD = new BigDecimal(discountD);
}
catch (Exception e)
{
discountBD = Env.ZERO;
}
line.add(discountBD); // Discount
line.add(rs.getString(6)); // DocNo
line.add(rs.getTimestamp(5)); // Date
line.add(rs.getString(7)); // Org/Warehouse
data.add(line);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
log.fine("#" + data.size());
return data;
} // fillTable
/**
* Set Label
* to product or bp name
*/
private void fillLabel (String sql, int parameter)
{
log.fine(sql + "; Parameter=" + parameter);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, parameter);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
label.setText(rs.getString(1));
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
} // fillLabel
/**
* Action Listener
*/
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals(ConfirmPanel.A_OK))
dispose();
} // actionPerformed
/**
* Tab Changed
* @param e event
*/
public void stateChanged(ChangeEvent e)
{
if (centerTabbedPane.getSelectedIndex() == 1)
initReservedOrderedTab(true);
else if (centerTabbedPane.getSelectedIndex() == 2)
initReservedOrderedTab(false);
else if (centerTabbedPane.getSelectedIndex() == 3)
initUnconfirmedTab();
else if (centerTabbedPane.getSelectedIndex() == 4)
initAtpTab();
} // stateChanged
/**
* Query Reserved/Ordered
* @param reserved po/so
*/
private void initReservedOrderedTab (boolean reserved)
{
// Done already
if (reserved && m_modelReserved != null)
return;
if (!reserved && m_modelOrdered != null)
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -