📄 mmatchpo.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.model;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.util.*;
/**
* Match PO Model.
* = Created when processing Shipment or Order
* - Updates Order (delivered, invoiced)
* - Creates PPV acct
*
* @author Jorg Janke
* @version $Id: MMatchPO.java,v 1.26 2005/12/27 06:17:56 jjanke Exp $
*/
public class MMatchPO extends X_M_MatchPO
{
/**
* Get PO Match with order/invoice
* @param ctx context
* @param C_OrderLine_ID order
* @param C_InvoiceLine_ID invoice
* @return array of matches
*/
public static MMatchPO[] get (Properties ctx,
int C_OrderLine_ID, int C_InvoiceLine_ID, String trxName)
{
if (C_OrderLine_ID == 0 || C_InvoiceLine_ID == 0)
return new MMatchPO[]{};
//
String sql = "SELECT * FROM M_MatchPO WHERE C_OrderLine_ID=? AND C_InvoiceLine_ID=?";
ArrayList<MMatchPO> list = new ArrayList<MMatchPO>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, trxName);
pstmt.setInt (1, C_OrderLine_ID);
pstmt.setInt (2, C_InvoiceLine_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MMatchPO (ctx, rs, trxName));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MMatchPO[] retValue = new MMatchPO[list.size()];
list.toArray (retValue);
return retValue;
} // get
/**
* Get PO Matches of receipt
* @param ctx context
* @param M_InOut_ID receipt
* @return array of matches
*/
public static MMatchPO[] getInOut (Properties ctx,
int M_InOut_ID, String trxName)
{
if (M_InOut_ID == 0)
return new MMatchPO[]{};
//
String sql = "SELECT * FROM M_MatchPO m"
+ " INNER JOIN M_InOutLine l ON (m.M_InOutLine_ID=l.M_InOutLine_ID) "
+ "WHERE l.M_InOut_ID=?";
ArrayList<MMatchPO> list = new ArrayList<MMatchPO>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, trxName);
pstmt.setInt (1, M_InOut_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MMatchPO (ctx, rs, trxName));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MMatchPO[] retValue = new MMatchPO[list.size()];
list.toArray (retValue);
return retValue;
} // getInOut
/**
* Get PO Matches of Invoice
* @param ctx context
* @param C_Invoice_ID invoice
* @return array of matches
*/
public static MMatchPO[] getInvoice (Properties ctx,
int C_Invoice_ID, String trxName)
{
if (C_Invoice_ID == 0)
return new MMatchPO[]{};
//
String sql = "SELECT * FROM M_MatchPO mi"
+ " INNER JOIN C_InvoiceLine il ON (mi.C_InvoiceLine_ID=il.C_InvoiceLine_ID) "
+ "WHERE il.C_Invoice_ID=?";
ArrayList<MMatchPO> list = new ArrayList<MMatchPO>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, trxName);
pstmt.setInt (1, C_Invoice_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MMatchPO (ctx, rs, trxName));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MMatchPO[] retValue = new MMatchPO[list.size()];
list.toArray (retValue);
return retValue;
} // getInvoice
/**
* Find/Create PO(Inv) Match
* @param iLine invoice line
* @param sLine receipt line
* @param dateTrx date
* @param qty qty
* @return Match Record
*/
public static MMatchPO create (MInvoiceLine iLine, MInOutLine sLine,
Timestamp dateTrx, BigDecimal qty)
{
String trxName = null;
Properties ctx = null;
int C_OrderLine_ID = 0;
if (iLine != null)
{
trxName = iLine.get_TrxName();
ctx = iLine.getCtx();
C_OrderLine_ID = iLine.getC_OrderLine_ID();
}
if (sLine != null)
{
trxName = sLine.get_TrxName();
ctx = sLine.getCtx();
C_OrderLine_ID = sLine.getC_OrderLine_ID();
}
MMatchPO retValue = null;
String sql = "SELECT * FROM M_MatchPO WHERE C_OrderLine_ID=?";
ArrayList list = new ArrayList();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, trxName);
pstmt.setInt (1, C_OrderLine_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MMatchPO mpo = new MMatchPO (ctx, rs, trxName);
if (qty.compareTo(mpo.getQty()) == 0)
{
if (iLine != null)
{
if (mpo.getC_InvoiceLine_ID() == 0
|| mpo.getC_InvoiceLine_ID() == iLine.getC_InvoiceLine_ID())
{
mpo.setC_InvoiceLine_ID(iLine);
if (iLine.getM_AttributeSetInstance_ID() != 0)
{
if (mpo.getM_AttributeSetInstance_ID() == 0)
mpo.setM_AttributeSetInstance_ID(iLine.getM_AttributeSetInstance_ID());
else if (mpo.getM_AttributeSetInstance_ID() != iLine.getM_AttributeSetInstance_ID())
continue;
}
}
else
continue;
}
if (sLine != null)
{
if (mpo.getM_InOutLine_ID() == 0
|| mpo.getM_InOutLine_ID() == sLine.getM_InOutLine_ID())
{
mpo.setM_InOutLine_ID(sLine.getM_InOutLine_ID());
if (sLine.getM_AttributeSetInstance_ID() != 0)
{
if (mpo.getM_AttributeSetInstance_ID() == 0)
mpo.setM_AttributeSetInstance_ID(sLine.getM_AttributeSetInstance_ID());
else if (mpo.getM_AttributeSetInstance_ID() != sLine.getM_AttributeSetInstance_ID())
continue;
}
}
else
continue;
}
retValue = mpo;
break;
}
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
// Create New
if (retValue == null)
{
if (sLine != null)
{
retValue = new MMatchPO (sLine, dateTrx, qty);
if (iLine != null)
retValue.setC_InvoiceLine_ID(iLine);
}
else if (iLine != null)
{
retValue = new MMatchPO (iLine, dateTrx, qty);
}
}
return retValue;
} // create
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MMatchPO.class);
/**************************************************************************
* Standard Constructor
* @param ctx context
* @param M_MatchPO_ID id
*/
public MMatchPO (Properties ctx, int M_MatchPO_ID, String trxName)
{
super (ctx, M_MatchPO_ID, trxName);
if (M_MatchPO_ID == 0)
{
// setC_OrderLine_ID (0);
// setDateTrx (new Timestamp(System.currentTimeMillis()));
// setM_InOutLine_ID (0);
// setM_Product_ID (0);
setM_AttributeSetInstance_ID(0);
// setQty (Env.ZERO);
setPosted (false);
setProcessed (false);
setProcessing (false);
}
} // MMatchPO
/**
* Load Construor
* @param ctx context
* @param rs result set
*/
public MMatchPO (Properties ctx, ResultSet rs, String trxName)
{
super(ctx, rs, trxName);
} // MMatchPO
/**
* Shipment Line Constructor
* @param sLine shipment line
* @param dateTrx optional date
* @param qty matched quantity
*/
public MMatchPO (MInOutLine sLine, Timestamp dateTrx, BigDecimal qty)
{
this (sLine.getCtx(), 0, sLine.get_TrxName());
setClientOrg(sLine);
setM_InOutLine_ID (sLine.getM_InOutLine_ID());
setC_OrderLine_ID (sLine.getC_OrderLine_ID());
if (dateTrx != null)
setDateTrx (dateTrx);
setM_Product_ID (sLine.getM_Product_ID());
setM_AttributeSetInstance_ID(sLine.getM_AttributeSetInstance_ID());
setQty (qty);
setProcessed(true); // auto
} // MMatchPO
/**
* Invoice Line Constructor
* @param iLine invoice line
* @param dateTrx optional date
* @param qty matched quantity
*/
public MMatchPO (MInvoiceLine iLine, Timestamp dateTrx, BigDecimal qty)
{
this (iLine.getCtx(), 0, iLine.get_TrxName());
setClientOrg(iLine);
setC_InvoiceLine_ID(iLine);
if (iLine.getC_OrderLine_ID() != 0)
setC_OrderLine_ID (iLine.getC_OrderLine_ID());
if (dateTrx != null)
setDateTrx (dateTrx);
setM_Product_ID (iLine.getM_Product_ID());
setM_AttributeSetInstance_ID(iLine.getM_AttributeSetInstance_ID());
setQty (qty);
setProcessed(true); // auto
} // MMatchPO
/** Invoice Changed */
private boolean m_isInvoiceLineChange = false;
/** InOut Changed */
private boolean m_isInOutLineChange = false;
/** Order Line */
private MOrderLine m_oLine = null;
/** Invoice Line */
private MInvoiceLine m_iLine = null;
/**
* Set C_InvoiceLine_ID
* @param line line
*/
public void setC_InvoiceLine_ID (MInvoiceLine line)
{
m_iLine = line;
if (line == null)
setC_InvoiceLine_ID(0);
else
setC_InvoiceLine_ID(line.getC_InvoiceLine_ID());
} // setC_InvoiceLine_ID
/**
* Set C_InvoiceLine_ID
* @param C_InvoiceLine_ID id
*/
public void setC_InvoiceLine_ID (int C_InvoiceLine_ID)
{
int old = getC_InvoiceLine_ID();
if (old != C_InvoiceLine_ID)
{
super.setC_InvoiceLine_ID (C_InvoiceLine_ID);
m_isInvoiceLineChange = true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -