📄 minout.java
字号:
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("MInOut[")
.append (get_ID()).append("-").append(getDocumentNo())
.append(",DocStatus=").append(getDocStatus())
.append ("]");
return sb.toString ();
} // toString
/**
* Get Document Info
* @return document info (untranslated)
*/
public String getDocumentInfo()
{
MDocType dt = MDocType.get(getCtx(), getC_DocType_ID());
return dt.getName() + " " + getDocumentNo();
} // getDocumentInfo
/**
* Create PDF
* @return File or null
*/
public File createPDF ()
{
try
{
File temp = File.createTempFile(get_TableName()+get_ID()+"_", ".pdf");
return createPDF (temp);
}
catch (Exception e)
{
log.severe("Could not create PDF - " + e.getMessage());
}
return null;
} // getPDF
/**
* Create PDF file
* @param file output file
* @return file if success
*/
public File createPDF (File file)
{
ReportEngine re = ReportEngine.get (getCtx(), ReportEngine.SHIPMENT, getC_Invoice_ID());
if (re == null)
return null;
return re.getPDF(file);
} // createPDF
/**
* Get Lines of Shipment
* @return lines
*/
public MInOutLine[] getLines (boolean requery)
{
if (m_lines != null && !requery)
return m_lines;
ArrayList<MInOutLine> list = new ArrayList<MInOutLine>();
String sql = "SELECT * FROM M_InOutLine WHERE M_InOut_ID=? ORDER BY Line";
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getM_InOut_ID());
rs = pstmt.executeQuery();
while (rs.next())
list.add(new MInOutLine(getCtx(), rs, get_TrxName()));
rs.close();
rs = null;
pstmt.close();
pstmt = null;
}
catch (SQLException ex)
{
log.log(Level.SEVERE, sql, ex);
list = null;
// throw new DBException(ex);
}
finally
{
try
{
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
}
catch (SQLException e)
{
}
}
pstmt = null;
rs = null;
//
if (list == null)
return null;
//
m_lines = new MInOutLine[list.size()];
list.toArray(m_lines);
return m_lines;
} // getMInOutLines
/**
* Get Lines of Shipment
* @return lines
*/
public MInOutLine[] getLines()
{
return getLines(false);
} // getLines
/**
* Get Confirmations
* @param requery requery
* @return array of Confirmations
*/
public MInOutConfirm[] getConfirmations(boolean requery)
{
if (m_confirms != null && !requery)
return m_confirms;
ArrayList<MInOutConfirm> list = new ArrayList<MInOutConfirm> ();
String sql = "SELECT * FROM M_InOutConfirm WHERE M_InOut_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getM_InOut_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add(new MInOutConfirm(getCtx(), rs, get_TrxName()));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
m_confirms = new MInOutConfirm[list.size ()];
list.toArray (m_confirms);
return m_confirms;
} // getConfirmations
/**
* Copy Lines From other Shipment
* @param otherShipment shipment
* @param counter set counter info
* @param setOrder set order link
* @return number of lines copied
*/
public int copyLinesFrom (MInOut otherShipment, boolean counter, boolean setOrder)
{
if (isProcessed() || isPosted() || otherShipment == null)
return 0;
MInOutLine[] fromLines = otherShipment.getLines(false);
int count = 0;
for (int i = 0; i < fromLines.length; i++)
{
MInOutLine line = new MInOutLine (this);
MInOutLine fromLine = fromLines[i];
line.set_TrxName(get_TrxName());
if (counter) // header
PO.copyValues(fromLine, line, getAD_Client_ID(), getAD_Org_ID());
else
PO.copyValues(fromLine, line, fromLine.getAD_Client_ID(), fromLine.getAD_Org_ID());
line.setM_InOut_ID(getM_InOut_ID());
line.set_ValueNoCheck ("M_InOutLine_ID", I_ZERO); // new
// Reset
if (!setOrder)
line.setC_OrderLine_ID(0);
if (!counter)
line.setM_AttributeSetInstance_ID(0);
// line.setS_ResourceAssignment_ID(0);
line.setRef_InOutLine_ID(0);
line.setIsInvoiced(false);
//
line.setConfirmedQty(Env.ZERO);
line.setPickedQty(Env.ZERO);
line.setScrappedQty(Env.ZERO);
line.setTargetQty(Env.ZERO);
// Set Locator based on header Warehouse
if (getM_Warehouse_ID() != otherShipment.getM_Warehouse_ID())
{
line.setM_Locator_ID(0);
line.setM_Locator_ID(Env.ZERO);
}
//
if (counter)
{
line.setRef_InOutLine_ID(fromLine.getM_InOutLine_ID());
if (fromLine.getC_OrderLine_ID() != 0)
{
MOrderLine peer = new MOrderLine (getCtx(), fromLine.getC_OrderLine_ID(), get_TrxName());
if (peer.getRef_OrderLine_ID() != 0)
line.setC_OrderLine_ID(peer.getRef_OrderLine_ID());
}
}
//
line.setProcessed(false);
if (line.save(get_TrxName()))
count++;
// Cross Link
if (counter)
{
fromLine.setRef_InOutLine_ID(line.getM_InOutLine_ID());
fromLine.save(get_TrxName());
}
}
if (fromLines.length != count)
log.log(Level.SEVERE, "Line difference - From=" + fromLines.length + " <> Saved=" + count);
return count;
} // copyLinesFrom
/** Reversal Flag */
private boolean m_reversal = false;
/**
* Set Reversal
* @param reversal reversal
*/
private void setReversal(boolean reversal)
{
m_reversal = reversal;
} // setReversal
/**
* Is Reversal
* @return reversal
*/
private boolean isReversal()
{
return m_reversal;
} // isReversal
/**
* Set Processed.
* Propergate to Lines/Taxes
* @param processed processed
*/
public void setProcessed (boolean processed)
{
super.setProcessed (processed);
if (get_ID() == 0)
return;
String sql = "UPDATE M_InOutLine SET Processed='"
+ (processed ? "Y" : "N")
+ "' WHERE M_InOut_ID=" + getM_InOut_ID();
int noLine = DB.executeUpdate(sql, get_TrxName());
m_lines = null;
log.fine(processed + " - Lines=" + noLine);
} // setProcessed
/**
* Get BPartner
* @return partner
*/
public MBPartner getBPartner()
{
if (m_partner == null)
m_partner = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName());
return m_partner;
} // getPartner
/**
* Set Document Type
* @param DocBaseType doc type MDocType.DOCBASETYPE_
*/
public void setC_DocType_ID (String DocBaseType)
{
String sql = "SELECT C_DocType_ID FROM C_DocType "
+ "WHERE AD_Client_ID=? AND DocBaseType=?"
+ " AND IsSOTrx='" + (isSOTrx() ? "Y" : "N") + "' "
+ "ORDER BY IsDefault DESC";
int C_DocType_ID = DB.getSQLValue(null, sql, getAD_Client_ID(), DocBaseType);
if (C_DocType_ID <= 0)
log.log(Level.SEVERE, "Not found for AC_Client_ID="
+ getAD_Client_ID() + " - " + DocBaseType);
else
{
log.fine("DocBaseType=" + DocBaseType + " - C_DocType_ID=" + C_DocType_ID);
setC_DocType_ID (C_DocType_ID);
boolean isSOTrx = MDocType.DOCBASETYPE_MaterialDelivery.equals(DocBaseType);
setIsSOTrx (isSOTrx);
}
} // setC_DocType_ID
/**
* Set Default C_DocType_ID.
* Based on SO flag
*/
public void setC_DocType_ID()
{
if (isSOTrx())
setC_DocType_ID(MDocType.DOCBASETYPE_MaterialDelivery);
else
setC_DocType_ID(MDocType.DOCBASETYPE_MaterialReceipt);
} // setC_DocType_ID
/**
* Set Business Partner Defaults & Details
* @param bp business partner
*/
public void setBPartner (MBPartner bp)
{
if (bp == null)
return;
setC_BPartner_ID(bp.getC_BPartner_ID());
// Set Locations
MBPartnerLocation[] locs = bp.getLocations(false);
if (locs != null)
{
for (int i = 0; i < locs.length; i++)
{
if (locs[i].isShipTo())
setC_BPartner_Location_ID(locs[i].getC_BPartner_Location_ID());
}
// set to first if not set
if (getC_BPartner_Location_ID() == 0 && locs.length > 0)
setC_BPartner_Location_ID(locs[0].getC_BPartner_Location_ID());
}
if (getC_BPartner_Location_ID() == 0)
log.log(Level.SEVERE, "Has no To Address: " + bp);
// Set Contact
MUser[] contacts = bp.getContacts(false);
if (contacts != null && contacts.length > 0) // get first User
setAD_User_ID(contacts[0].getAD_User_ID());
} // setBPartner
/**
* Create the missing next Confirmation
*/
public void createConfirmation()
{
MDocType dt = MDocType.get(getCtx(), getC_DocType_ID());
boolean pick = dt.isPickQAConfirm();
boolean ship = dt.isShipConfirm();
// Nothing to do
if (!pick && !ship)
{
log.fine("No need");
return;
}
// Create Both .. after each other
if (pick && ship)
{
boolean havePick = false;
boolean haveShip = false;
MInOutConfirm[] confirmations = getConfirmations(false);
for (int i = 0; i < confirmations.length; i++)
{
MInOutConfirm confirm = confirmations[i];
if (MInOutConfirm.CONFIRMTYPE_PickQAConfirm.equals(confirm.getConfirmType()))
{
if (!confirm.isProcessed()) // wait intil done
{
log.fine("Unprocessed: " + confirm);
return;
}
havePick = true;
}
else if (MInOutConfirm.CONFIRMTYPE_ShipReceiptConfirm.equals(confirm.getConfirmType()))
haveShip = true;
}
// Create Pick
if (!havePick)
{
MInOutConfirm.create (this, MInOutConfirm.CONFIRMTYPE_PickQAConfirm, false);
return;
}
// Create Ship
if (!haveShip)
{
MInOutConfirm.create (this, MInOutConfirm.CONFIRMTYPE_ShipReceiptConfirm, false);
return;
}
return;
}
// Create just one
if (pick)
MInOutConfirm.create (this, MInOutConfirm.CONFIRMTYPE_PickQAConfirm, true);
else if (ship)
MInOutConfirm.create (this, MInOutConfirm.CONFIRMTYPE_ShipReceiptConfirm, true);
} // createConfirmation
/**
* Set Warehouse and check/set Organization
* @param M_Warehouse_ID id
*/
public void setM_Warehouse_ID (int M_Warehouse_ID)
{
if (M_Warehouse_ID == 0)
{
log.severe("Ignored - Cannot set AD_Warehouse_ID to 0");
return;
}
super.setM_Warehouse_ID (M_Warehouse_ID);
//
MWarehouse wh = MWarehouse.get(getCtx(), getM_Warehouse_ID());
if (wh.getAD_Org_ID() != getAD_Org_ID())
{
log.warning("M_Warehouse_ID=" + M_Warehouse_ID
+ ", Overwritten AD_Org_ID=" + getAD_Org_ID() + "->" + wh.getAD_Org_ID());
setAD_Org_ID(wh.getAD_Org_ID());
}
} // setM_Warehouse_ID
/**
* Before Save
* @param newRecord new
* @return true or false
*/
protected boolean beforeSave (boolean newRecord)
{
// Warehouse Org
if (newRecord)
{
MWarehouse wh = MWarehouse.get(getCtx(), getM_Warehouse_ID());
if (wh.getAD_Org_ID() != getAD_Org_ID())
{
log.saveError("WarehouseOrgConflict", "");
return false;
}
}
// Shipment - Needs Order
if (isSOTrx() && getC_Order_ID() == 0)
{
log.saveError("FillMandatory", Msg.translate(getCtx(), "C_Order_ID"));
return false;
}
return true;
} // beforeSave
/**
* After Save
* @param newRecord new
* @param success success
* @return success
*/
protected boolean afterSave (boolean newRecord, boolean success)
{
if (success) {
//
String sql = "UPDATE M_InOut"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -