📄 minoutconfirm.java
字号:
/**
* Complete Document
* @return new status (Complete, In Progress, Invalid, Waiting ..)
*/
public String completeIt()
{
// Re-Check
if (!m_justPrepared)
{
String status = prepareIt();
if (!DocAction.STATUS_InProgress.equals(status))
return status;
}
// Implicit Approval
if (!isApproved())
approveIt();
log.info(toString());
//
MInOut inout = new MInOut (getCtx(), getM_InOut_ID(), get_TrxName());
MInOutLineConfirm[] lines = getLines(false);
// Check if we need to split Shipment
if (isInDispute())
{
MDocType dt = MDocType.get(getCtx(), inout.getC_DocType_ID());
if (dt.isSplitWhenDifference())
{
if (dt.getC_DocTypeDifference_ID() == 0)
{
m_processMsg = "No Split Document Type defined for: " + dt.getName();
return DocAction.STATUS_Invalid;
}
splitInOut (inout, dt.getC_DocTypeDifference_ID(), lines);
m_lines = null;
}
}
// All lines
for (int i = 0; i < lines.length; i++)
{
MInOutLineConfirm confirmLine = lines[i];
confirmLine.set_TrxName(get_TrxName());
if (!confirmLine.processLine (inout.isSOTrx(), getConfirmType()))
{
m_processMsg = "ShipLine not saved - " + confirmLine;
return DocAction.STATUS_Invalid;
}
if (confirmLine.isFullyConfirmed())
{
confirmLine.setProcessed(true);
confirmLine.save(get_TrxName());
}
else
{
if (createDifferenceDoc (inout, confirmLine))
{
confirmLine.setProcessed(true);
confirmLine.save(get_TrxName());
}
else
{
log.log(Level.SEVERE, "Scrapped=" + confirmLine.getScrappedQty()
+ " - Difference=" + confirmLine.getDifferenceQty());
return DocAction.STATUS_Invalid;
}
}
} // for all lines
if (m_creditMemo != null)
m_processMsg += " @C_Invoice_ID@=" + m_creditMemo.getDocumentNo();
if (m_inventory != null)
m_processMsg += " @M_Inventory_ID@=" + m_inventory.getDocumentNo();
// Try to complete Shipment
// if (inout.processIt(DocAction.ACTION_Complete))
// m_processMsg = "@M_InOut_ID@ " + inout.getDocumentNo() + ": @Completed@";
// User Validation
String valid = ModelValidationEngine.get().fireDocValidate(this, ModelValidator.TIMING_AFTER_COMPLETE);
if (valid != null)
{
m_processMsg = valid;
return DocAction.STATUS_Invalid;
}
setProcessed(true);
setDocAction(DOCACTION_Close);
return DocAction.STATUS_Completed;
} // completeIt
/**
* Split Shipment into confirmed and dispute
* @param original original shipment
* @param C_DocType_ID target DocType
* @param confirmLines confirm lines
*/
private void splitInOut (MInOut original, int C_DocType_ID, MInOutLineConfirm[] confirmLines)
{
MInOut split = new MInOut (original, C_DocType_ID, original.getMovementDate());
split.addDescription("Splitted from " + original.getDocumentNo());
split.setIsInDispute(true);
if (!split.save(get_TrxName()))
throw new IllegalStateException("Cannot save Split");
original.addDescription("Split: " + split.getDocumentNo());
if (!original.save(get_TrxName()))
throw new IllegalStateException("Cannot update original Shipment");
// Go through confirmations
for (int i = 0; i < confirmLines.length; i++)
{
MInOutLineConfirm confirmLine = confirmLines[i];
BigDecimal differenceQty = confirmLine.getDifferenceQty();
if (differenceQty.compareTo(Env.ZERO) == 0)
continue;
//
MInOutLine oldLine = confirmLine.getLine();
log.fine("Qty=" + differenceQty + ", Old=" + oldLine);
//
MInOutLine splitLine = new MInOutLine (split);
splitLine.setC_OrderLine_ID(oldLine.getC_OrderLine_ID());
splitLine.setC_UOM_ID(oldLine.getC_UOM_ID());
splitLine.setDescription(oldLine.getDescription());
splitLine.setIsDescription(oldLine.isDescription());
splitLine.setLine(oldLine.getLine());
splitLine.setM_AttributeSetInstance_ID(oldLine.getM_AttributeSetInstance_ID());
splitLine.setM_Locator_ID(oldLine.getM_Locator_ID());
splitLine.setM_Product_ID(oldLine.getM_Product_ID());
splitLine.setM_Warehouse_ID(oldLine.getM_Warehouse_ID());
splitLine.setRef_InOutLine_ID(oldLine.getRef_InOutLine_ID());
splitLine.addDescription("Split: from " + oldLine.getMovementQty());
// Qtys
splitLine.setQty(differenceQty); // Entered/Movement
if (!splitLine.save(get_TrxName()))
throw new IllegalStateException("Cannot save Split Line");
// Old
oldLine.addDescription("Splitted: from " + oldLine.getMovementQty());
oldLine.setQty(oldLine.getMovementQty().subtract(differenceQty));
if (!oldLine.save(get_TrxName()))
throw new IllegalStateException("Cannot save Splited Line");
// Update Confirmation Line
confirmLine.setTargetQty(confirmLine.getTargetQty().subtract(differenceQty));
confirmLine.setDifferenceQty(Env.ZERO);
if (!confirmLine.save(get_TrxName()))
throw new IllegalStateException("Cannot save Split Confirmation");
} // for all confirmations
m_processMsg = "Split @M_InOut_ID@=" + split.getDocumentNo()
+ " - @M_InOutConfirm_ID@=";
// Create Dispute Confirmation
split.processIt(DocAction.ACTION_Prepare);
// split.createConfirmation();
split.save(get_TrxName());
MInOutConfirm[] splitConfirms = split.getConfirmations(true);
if (splitConfirms.length > 0)
{
int index = 0;
if (splitConfirms[index].isProcessed())
{
if (splitConfirms.length > 1)
index++; // try just next
if (splitConfirms[index].isProcessed())
{
m_processMsg += splitConfirms[index].getDocumentNo() + " processed??";
return;
}
}
splitConfirms[index].setIsInDispute(true);
splitConfirms[index].save(get_TrxName());
m_processMsg += splitConfirms[index].getDocumentNo();
// Set Lines to unconfirmed
MInOutLineConfirm[] splitConfirmLines = splitConfirms[index].getLines(false);
for (int i = 0; i < splitConfirmLines.length; i++)
{
MInOutLineConfirm splitConfirmLine = splitConfirmLines[i];
splitConfirmLine.setScrappedQty(Env.ZERO);
splitConfirmLine.setConfirmedQty(Env.ZERO);
splitConfirmLine.save(get_TrxName());
}
}
else
m_processMsg += "??";
} // splitInOut
/**
* Create Difference Document
* @param confirm confirm line
* @return true if created
*/
private boolean createDifferenceDoc (MInOut inout, MInOutLineConfirm confirm)
{
if (m_processMsg == null)
m_processMsg = "";
else if (m_processMsg.length() > 0)
m_processMsg += "; ";
// Credit Memo if linked Document
if (confirm.getDifferenceQty().signum() != 0
&& !inout.isSOTrx() && inout.getRef_InOut_ID() != 0)
{
log.info("Difference=" + confirm.getDifferenceQty());
if (m_creditMemo == null)
{
m_creditMemo = new MInvoice (inout, null);
m_creditMemo.setDescription(Msg.translate(getCtx(), "M_InOutConfirm_ID") + " " + getDocumentNo());
m_creditMemo.setC_DocTypeTarget_ID(MDocType.DOCBASETYPE_APCreditMemo);
if (!m_creditMemo.save(get_TrxName()))
{
m_processMsg += "Credit Memo not created";
return false;
}
setC_Invoice_ID(m_creditMemo.getC_Invoice_ID());
}
MInvoiceLine line = new MInvoiceLine (m_creditMemo);
line.setShipLine(confirm.getLine());
line.setQty(confirm.getDifferenceQty()); // Entered/Invoiced
if (!line.save(get_TrxName()))
{
m_processMsg += "Credit Memo Line not created";
return false;
}
confirm.setC_InvoiceLine_ID(line.getC_InvoiceLine_ID());
}
// Create Inventory Difference
if (confirm.getScrappedQty().signum() != 0)
{
log.info("Scrapped=" + confirm.getScrappedQty());
if (m_inventory == null)
{
MWarehouse wh = MWarehouse.get(getCtx(), inout.getM_Warehouse_ID());
m_inventory = new MInventory (wh);
m_inventory.setDescription(Msg.translate(getCtx(), "M_InOutConfirm_ID") + " " + getDocumentNo());
if (!m_inventory.save(get_TrxName()))
{
m_processMsg += "Inventory not created";
return false;
}
setM_Inventory_ID(m_inventory.getM_Inventory_ID());
}
MInOutLine ioLine = confirm.getLine();
MInventoryLine line = new MInventoryLine (m_inventory,
ioLine.getM_Locator_ID(), ioLine.getM_Product_ID(), ioLine.getM_AttributeSetInstance_ID(),
confirm.getScrappedQty(), Env.ZERO);
if (!line.save(get_TrxName()))
{
m_processMsg += "Inventory Line not created";
return false;
}
confirm.setM_InventoryLine_ID(line.getM_InventoryLine_ID());
}
//
if (!confirm.save(get_TrxName()))
{
m_processMsg += "Confirmation Line not saved";
return false;
}
return true;
} // createDifferenceDoc
/**
* Void Document.
* @return false
*/
public boolean voidIt()
{
log.info(toString());
return false;
} // voidIt
/**
* Close Document.
* @return true if success
*/
public boolean closeIt()
{
log.info(toString());
setDocAction(DOCACTION_None);
return true;
} // closeIt
/**
* Reverse Correction
* @return false
*/
public boolean reverseCorrectIt()
{
log.info(toString());
return false;
} // reverseCorrectionIt
/**
* Reverse Accrual - none
* @return false
*/
public boolean reverseAccrualIt()
{
log.info(toString());
return false;
} // reverseAccrualIt
/**
* Re-activate
* @return false
*/
public boolean reActivateIt()
{
log.info(toString());
return false;
} // reActivateIt
/*************************************************************************
* Get Summary
* @return Summary of Document
*/
public String getSummary()
{
StringBuffer sb = new StringBuffer();
sb.append(getDocumentNo());
// : Total Lines = 123.00 (#1)
sb.append(": ")
.append(Msg.translate(getCtx(),"ApprovalAmt")).append("=").append(getApprovalAmt())
.append(" (#").append(getLines(false).length).append(")");
// - Description
if (getDescription() != null && getDescription().length() > 0)
sb.append(" - ").append(getDescription());
return sb.toString();
} // getSummary
/**
* Get Process Message
* @return clear text error message
*/
public String getProcessMsg()
{
return m_processMsg;
} // getProcessMsg
/**
* Get Document Owner (Responsible)
* @return AD_User_ID
*/
public int getDoc_User_ID()
{
return getUpdatedBy();
} // getDoc_User_ID
/**
* Get Document Currency
* @return C_Currency_ID
*/
public int getC_Currency_ID()
{
// MPriceList pl = MPriceList.get(getCtx(), getM_PriceList_ID());
// return pl.getC_Currency_ID();
return 0;
} // getC_Currency_ID
} // MInOutConfirm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -