use of org.adempiere.exceptions.AdempiereException in project adempiere by adempiere.
the class DistributionRun method distributionOrders.
// insertDetails
/**************************************************************************
* Create Orders
* @return true if created
*/
private boolean distributionOrders() {
//The Quantity Available is distribute with respect to Distribution Order Demand
if (p_BasedInDamnd) {
int M_Warehouse_ID = 0;
if (p_M_Warehouse_ID <= 0) {
MOrgInfo oi_source = MOrgInfo.get(getCtx(), m_run.getAD_Org_ID(), get_TrxName());
MWarehouse m_source = MWarehouse.get(getCtx(), oi_source.getM_Warehouse_ID());
if (m_source == null)
throw new AdempiereException("Do not exist Defautl Warehouse Source");
M_Warehouse_ID = m_source.getM_Warehouse_ID();
} else
M_Warehouse_ID = p_M_Warehouse_ID;
// For all lines
for (int i = 0; i < m_details.length; i++) {
MDistributionRunDetail detail = m_details[i];
StringBuffer sql = new StringBuffer("SELECT * FROM DD_OrderLine ol INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) ");
//sql.append(" WHERE o.DocStatus IN ('DR','IN') AND o.C_BPartner_ID = ? AND M_Product_ID=? AND l.M_Warehouse_ID=? AND ol.DatePromised BETWEEN ? AND ? ");
sql.append(" WHERE o.DocStatus IN ('DR','IN') AND o.C_BPartner_ID = ? AND M_Product_ID=? AND l.M_Warehouse_ID=? AND ol.DatePromised <=?");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = DB.prepareStatement(sql.toString(), get_TrxName());
pstmt.setInt(1, detail.getC_BPartner_ID());
pstmt.setInt(2, detail.getM_Product_ID());
pstmt.setInt(3, M_Warehouse_ID);
pstmt.setTimestamp(4, p_DatePromised);
//pstmt.setTimestamp(5, p_DatePromised_To);
rs = pstmt.executeQuery();
while (rs.next()) {
// Create Order Line
MDDOrderLine line = new MDDOrderLine(getCtx(), rs, get_TrxName());
line.setM_Product_ID(detail.getM_Product_ID());
line.setConfirmedQty(line.getTargetQty().add(detail.getActualAllocation()));
if (p_M_Warehouse_ID > 0)
line.setDescription(Msg.translate(getCtx(), "PlannedQty"));
else
line.setDescription(m_run.getName());
line.saveEx();
break;
//addLog(0,null, detail.getActualAllocation(), order.getDocumentNo()
// + ": " + bp.getName() + " - " + product.getName());
}
} catch (Exception e) {
log.log(Level.SEVERE, "doIt - " + sql, e);
return false;
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
}
return true;
}
// Get Counter Org/BP
int runAD_Org_ID = m_run.getAD_Org_ID();
if (runAD_Org_ID == 0)
runAD_Org_ID = Env.getAD_Org_ID(getCtx());
MOrg runOrg = MOrg.get(getCtx(), runAD_Org_ID);
int runC_BPartner_ID = runOrg.getLinkedC_BPartner_ID(get_TrxName());
boolean counter = // no single Order
!m_run.isCreateSingleOrder() && // Org linked to BP
runC_BPartner_ID > 0 && // PO
!m_docType.isSOTrx();
MBPartner runBPartner = counter ? new MBPartner(getCtx(), runC_BPartner_ID, get_TrxName()) : null;
if (!counter || runBPartner == null || runBPartner.get_ID() != runC_BPartner_ID)
counter = false;
if (counter)
log.info("RunBP=" + runBPartner + " - " + m_docType);
log.info("Single=" + m_run.isCreateSingleOrder() + " - " + m_docType + ",SO=" + m_docType.isSOTrx());
log.fine("Counter=" + counter + ",C_BPartner_ID=" + runC_BPartner_ID + "," + runBPartner);
//
MBPartner bp = null;
MDDOrder singleOrder = null;
MProduct product = null;
MWarehouse m_source = null;
MLocator m_locator = null;
MWarehouse m_target = null;
MLocator m_locator_to = null;
MWarehouse[] ws = null;
MOrgInfo oi_source = MOrgInfo.get(getCtx(), m_run.getAD_Org_ID(), get_TrxName());
m_source = MWarehouse.get(getCtx(), oi_source.getM_Warehouse_ID());
if (m_source == null)
throw new AdempiereException("Do not exist Defautl Warehouse Source");
m_locator = MLocator.getDefault(m_source);
//get the warehouse in transit
ws = MWarehouse.getInTransitForOrg(getCtx(), m_source.getAD_Org_ID());
if (ws == null)
throw new AdempiereException("Warehouse Intransit do not found");
// Consolidated Single Order
if (m_run.isCreateSingleOrder()) {
bp = new MBPartner(getCtx(), m_run.getC_BPartner_ID(), get_TrxName());
if (bp.get_ID() == 0)
throw new IllegalArgumentException("Business Partner not found - C_BPartner_ID=" + m_run.getC_BPartner_ID());
//
if (!p_IsTest) {
singleOrder = new MDDOrder(getCtx(), 0, get_TrxName());
singleOrder.setC_DocType_ID(m_docType.getC_DocType_ID());
singleOrder.setIsSOTrx(m_docType.isSOTrx());
singleOrder.setBPartner(bp);
if (m_run.getC_BPartner_Location_ID() != 0)
singleOrder.setC_BPartner_Location_ID(m_run.getC_BPartner_Location_ID());
singleOrder.setDateOrdered(m_DateOrdered);
singleOrder.setDatePromised(p_DatePromised);
singleOrder.setM_Warehouse_ID(ws[0].getM_Warehouse_ID());
if (!singleOrder.save()) {
log.log(Level.SEVERE, "Order not saved");
return false;
}
m_counter++;
}
}
int lastC_BPartner_ID = 0;
int lastC_BPartner_Location_ID = 0;
MDDOrder order = null;
// For all lines
for (int i = 0; i < m_details.length; i++) {
MDistributionRunDetail detail = m_details[i];
// Create Order Header
if (m_run.isCreateSingleOrder())
order = singleOrder;
else // New Business Partner
if (lastC_BPartner_ID != detail.getC_BPartner_ID() || lastC_BPartner_Location_ID != detail.getC_BPartner_Location_ID()) {
// finish order
order = null;
}
lastC_BPartner_ID = detail.getC_BPartner_ID();
lastC_BPartner_Location_ID = detail.getC_BPartner_Location_ID();
bp = new MBPartner(getCtx(), detail.getC_BPartner_ID(), get_TrxName());
MOrgInfo oi_target = MOrgInfo.get(getCtx(), bp.getAD_OrgBP_ID_Int(), get_TrxName());
m_target = MWarehouse.get(getCtx(), oi_target.getM_Warehouse_ID());
if (m_target == null)
throw new AdempiereException("Do not exist Default Warehouse Target");
m_locator_to = MLocator.getDefault(m_target);
if (m_locator == null || m_locator_to == null) {
throw new AdempiereException("Do not exist default Locator for Warehouses");
}
if (p_ConsolidateDocument) {
String whereClause = "DocStatus IN ('DR','IN') AND AD_Org_ID=" + bp.getAD_OrgBP_ID_Int() + " AND " + MDDOrder.COLUMNNAME_C_BPartner_ID + "=? AND " + MDDOrder.COLUMNNAME_M_Warehouse_ID + "=? AND " + MDDOrder.COLUMNNAME_DatePromised + "<=? ";
order = new Query(getCtx(), MDDOrder.Table_Name, whereClause, get_TrxName()).setParameters(new Object[] { lastC_BPartner_ID, ws[0].getM_Warehouse_ID(), p_DatePromised }).setOrderBy(MDDOrder.COLUMNNAME_DatePromised + " DESC").first();
}
// New Order
if (order == null) {
if (!p_IsTest) {
order = new MDDOrder(getCtx(), 0, get_TrxName());
order.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
order.setC_DocType_ID(m_docType.getC_DocType_ID());
order.setIsSOTrx(m_docType.isSOTrx());
// Counter Doc
if (counter && bp.getAD_OrgBP_ID_Int() > 0) {
log.fine("Counter - From_BPOrg=" + bp.getAD_OrgBP_ID_Int() + "-" + bp + ", To_BP=" + runBPartner);
order.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
if (ws[0].getM_Warehouse_ID() > 0)
order.setM_Warehouse_ID(ws[0].getM_Warehouse_ID());
order.setBPartner(runBPartner);
} else // normal
{
log.fine("From_Org=" + runAD_Org_ID + ", To_BP=" + bp);
order.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
order.setBPartner(bp);
if (detail.getC_BPartner_Location_ID() != 0)
order.setC_BPartner_Location_ID(detail.getC_BPartner_Location_ID());
}
order.setM_Warehouse_ID(ws[0].getM_Warehouse_ID());
order.setDateOrdered(m_DateOrdered);
order.setDatePromised(p_DatePromised);
order.setIsInDispute(false);
order.setIsInTransit(false);
if (!order.save()) {
log.log(Level.SEVERE, "Order not saved");
return false;
}
}
}
// Line
if (product == null || product.getM_Product_ID() != detail.getM_Product_ID())
product = MProduct.get(getCtx(), detail.getM_Product_ID());
if (p_IsTest) {
addLog(0, null, detail.getActualAllocation(), bp.getName() + " - " + product.getName());
continue;
}
if (p_ConsolidateDocument) {
String sql = "SELECT DD_OrderLine_ID FROM DD_OrderLine ol INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) WHERE o.DocStatus IN ('DR','IN') AND o.C_BPartner_ID = ? AND M_Product_ID=? AND ol.M_Locator_ID=? AND ol.DatePromised <= ?";
int DD_OrderLine_ID = DB.getSQLValueEx(get_TrxName(), sql, new Object[] { detail.getC_BPartner_ID(), product.getM_Product_ID(), m_locator.getM_Locator_ID(), p_DatePromised });
if (DD_OrderLine_ID <= 0) {
MDDOrderLine line = new MDDOrderLine(order);
line.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
line.setM_Locator_ID(m_locator.getM_Locator_ID());
line.setM_LocatorTo_ID(m_locator_to.getM_Locator_ID());
line.setIsInvoiced(false);
line.setProduct(product);
BigDecimal QtyAllocation = detail.getActualAllocation();
if (QtyAllocation == null)
QtyAllocation = Env.ZERO;
line.setQty(QtyAllocation);
line.setQtyEntered(QtyAllocation);
//line.setTargetQty(detail.getActualAllocation());
line.setTargetQty(Env.ZERO);
String Description = "";
if (m_run.getName() != null)
Description = Description.concat(m_run.getName());
line.setDescription(Description + " " + Msg.translate(getCtx(), "Qty") + " = " + QtyAllocation + " ");
//line.setConfirmedQty(QtyAllocation);
line.saveEx();
} else {
MDDOrderLine line = new MDDOrderLine(getCtx(), DD_OrderLine_ID, get_TrxName());
BigDecimal QtyAllocation = detail.getActualAllocation();
if (QtyAllocation == null)
QtyAllocation = Env.ZERO;
String Description = line.getDescription();
if (Description == null)
Description = "";
if (m_run.getName() != null)
Description = Description.concat(m_run.getName());
line.setDescription(Description + " " + Msg.translate(getCtx(), "Qty") + " = " + QtyAllocation + " ");
line.setQty(line.getQtyEntered().add(QtyAllocation));
//line.setConfirmedQty(line.getConfirmedQty().add( QtyAllocation));
line.saveEx();
}
} else {
// Create Order Line
MDDOrderLine line = new MDDOrderLine(order);
if (counter && bp.getAD_OrgBP_ID_Int() > 0)
// don't overwrite counter doc
;
/*else // normal - optionally overwrite
{
line.setC_BPartner_ID(detail.getC_BPartner_ID());
if (detail.getC_BPartner_Location_ID() != 0)
line.setC_BPartner_Location_ID(detail.getC_BPartner_Location_ID());
}*/
//
line.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
line.setM_Locator_ID(m_locator.getM_Locator_ID());
line.setM_LocatorTo_ID(m_locator_to.getM_Locator_ID());
line.setIsInvoiced(false);
line.setProduct(product);
line.setQty(detail.getActualAllocation());
line.setQtyEntered(detail.getActualAllocation());
//line.setTargetQty(detail.getActualAllocation());
line.setTargetQty(Env.ZERO);
//line.setConfirmedQty(detail.getActualAllocation());
String Description = "";
if (m_run.getName() != null)
Description = Description.concat(m_run.getName());
line.setDescription(Description + " " + Msg.translate(getCtx(), "Qty") + " = " + detail.getActualAllocation() + " ");
line.saveEx();
}
addLog(0, null, detail.getActualAllocation(), order.getDocumentNo() + ": " + bp.getName() + " - " + product.getName());
}
// finish order
order = null;
return true;
}
use of org.adempiere.exceptions.AdempiereException in project adempiere by adempiere.
the class CalculateReplenishPlan method setConfirmProductQty.
/**
* Product wise Get confirmed Qty. If Product is BOM then Production else
* from PO.
*
* @param mrp
*/
private void setConfirmProductQty(MiniMRPProduct mrp) {
int productID = mrp.getM_Product_ID();
boolean isBOM = mrp.isBOM();
Map<Date, BigDecimal> mapConfirmQty = new TreeMap<Date, BigDecimal>();
String sql = (isBOM ? SQL_PRODUCTWISE_CONFIRM_PRODUCTION_QTY : SQL_PRODUCTWISE_CONFIRM_PO_RQ_QTY);
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = DB.prepareStatement(sql, trx);
pstmt.setInt(1, productID);
pstmt.setTimestamp(2, dateFrom);
pstmt.setTimestamp(3, dateTo);
if (isBOM)
pstmt.setInt(4, docType_PlannedOrder);
else {
pstmt.setInt(4, productID);
pstmt.setTimestamp(5, dateFrom);
pstmt.setTimestamp(6, dateTo);
pstmt.setInt(7, AD_Client_ID);
pstmt.setInt(8, docType_MRPRequisition);
}
rs = pstmt.executeQuery();
while (rs.next()) {
Date datePromised = rs.getDate("DatePromised");
BigDecimal qty = rs.getBigDecimal("Qty");
if (mapConfirmQty.containsKey(datePromised))
mapConfirmQty.put(datePromised, mapConfirmQty.get(datePromised).add(qty));
else
mapConfirmQty.put(datePromised, qty);
if (mrp.isBOM()) {
PreparedStatement pstatement = null;
ResultSet rset = null;
try {
pstatement = DB.prepareStatement(SQL_GET_PRODUCTIONLINE_INFO, trx);
pstatement.setInt(1, rs.getInt("M_Production_ID"));
rset = pstatement.executeQuery();
while (rset.next()) {
setQtyAsDemand(rset.getInt("M_Product_ID"), rset.getBigDecimal("QtyUsed"), rset.getTimestamp("DatePromised"));
}
} catch (SQLException e) {
throw new AdempiereException("Could not process, Retrieve Confirm production line info.", e);
} finally {
DB.close(rset, pstatement);
rset = null;
pstatement = null;
}
}
}
} catch (SQLException e) {
throw new AdempiereException("Could not process, Retrieve weekly confirm production qty of Product:" + mrp.getName(), e);
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
mrp.setMapConfirmProductQty(mapConfirmQty);
}
use of org.adempiere.exceptions.AdempiereException in project adempiere by adempiere.
the class CalculateReplenishPlan method doRunProductsSO.
/**
* @param miniMrpProducts
* @param productIds
* @param productSO
*/
@SuppressWarnings("resource")
private void doRunProductsSO(Map<Integer, MiniMRPProduct> miniMrpProducts, Set<Integer> productIds) {
String sql = getQueryForProductSO();
PreparedStatement pstmt = null;
ResultSet rs = null;
int paramCount = 1;
try {
pstmt = DB.prepareStatement(sql, trx);
pstmt.setTimestamp(paramCount++, dateFrom);
pstmt.setTimestamp(paramCount++, dateFrom);
pstmt.setTimestamp(paramCount++, dateTo);
pstmt.setInt(paramCount++, AD_Client_ID);
// Productids
pstmt.setArray(paramCount++, getSqlArray(productIds.toArray(), "numeric", DB.getConnectionRW(false)));
rs = pstmt.executeQuery();
while (rs.next()) {
int mProductID = rs.getInt("m_product_id");
int mOrderID = rs.getInt("c_order_id");
BigDecimal orderQty = rs.getBigDecimal("orderedqty");
int weekPromised = rs.getInt("weekordered");
BigDecimal qty = rs.getBigDecimal("orderedqty");
Date date = rs.getDate("datepromised");
if (miniMrpProducts.containsKey(mProductID)) {
MiniMRPProduct mrpProduct = miniMrpProducts.get(mProductID);
if (mrpProduct.isPhantom())
continue;
if (!mrpProduct.isPhantom)
setQtyAsDemand(mProductID, qty, date);
mrpProduct.explodeDemand(mOrderID, orderQty, weekPromised, miniMrpProducts);
} else {
log.log(Level.SEVERE, "Error in miniMrpProducts setup.");
getProcessInfo().setError(true);
getProcessInfo().addLog(new ProcessInfoLog(getProcessInfo().getAD_Process_ID(), new Timestamp(System.currentTimeMillis()), null, "Error in miniMrpProducts setup.>> "));
throw new AdempiereException("Error in miniMrpProducts setup.");
}
}
} catch (Exception e) {
log.log(Level.SEVERE, sql.toString(), e);
getProcessInfo().setError(true);
getProcessInfo().addLog(new ProcessInfoLog(getProcessInfo().getAD_Process_ID(), new Timestamp(System.currentTimeMillis()), null, "Failed to fetch products for mini MRP >> " + e.getMessage()));
throw new AdempiereException(e);
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
}
use of org.adempiere.exceptions.AdempiereException in project adempiere by adempiere.
the class CalculateReplenishPlan method runProcessCalculatePlannedQty.
private void runProcessCalculatePlannedQty(Map<Integer, MiniMRPProduct> miniMrpProducts) {
for (Date date : mapDemand.keySet()) {
Map<Integer, BigDecimal> mapOrderQty = mapDemand.get(date);
for (Integer productID : mapOrderQty.keySet()) {
MProduct product = new MProduct(getCtx(), productID, get_TrxName());
if (!product.isStocked())
return;
BigDecimal demandQty = mapOrderQty.get(productID);
if (demandQty.compareTo(Env.ZERO) != 0) {
MiniMRPProduct mrp = miniMrpProducts.get(productID);
if (mrp == null) {
MProduct p = MProduct.get(ctx, productID);
String error = "Please check Product=" + p.getValue() + " replenishment parameters may not be setup properly.";
log.severe(error);
throw new AdempiereException(error);
}
Integer nonPhantomProduct = (mrp.isPhantom() && mrp.isBOM() ? 0 : productID);
// (MRP,DateOfDemand,PID,DQty,Level,NonPhontomPID)
createPlannedQtyMap(miniMrpProducts, date, productID, demandQty, 0, nonPhantomProduct);
}
}
}
}
use of org.adempiere.exceptions.AdempiereException in project adempiere by adempiere.
the class CalculateReplenishPlan method processBOMLines.
/**
* Process of BOM Product lines
*
* @author Sachin Bhimani
* @param miniMrpProducts
* @param productIds
* @param M_Product_ID
*/
public void processBOMLines(Map<Integer, MiniMRPProduct> miniMrpProducts, Set<Integer> productIds, int M_Product_ID) {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
if (M_Product_ID > 0) {
MProduct product = new MProduct(getCtx(), M_Product_ID, get_TrxName());
if (!product.isStocked())
return;
//MPPProductBOM bom = MPPProductBOM.getDefault(finishedProduct, get_TrxName());
pstmt = DB.prepareStatement(SQL_GET_BOMLINE_FOR_PROCESS, trx);
pstmt.setInt(1, M_Product_ID);
pstmt.setInt(2, AD_Client_ID);
pstmt.setInt(3, M_WarehouseID);
rs = pstmt.executeQuery();
while (rs.next()) {
int mProductID = rs.getInt(1);
BigDecimal qtyBom = rs.getBigDecimal(2);
MiniMRPProduct parentProduct = miniMrpProducts.get(M_Product_ID);
parentProduct.addMatireals(mProductID, qtyBom);
MiniMRPProduct miniMrpProduct = null;
// If material is already exploded.
if (miniMrpProducts.containsKey(mProductID)) {
miniMrpProduct = miniMrpProducts.get(mProductID);
explodeRequiredMaterials(miniMrpProduct, parentProduct, qtyBom);
} else {
miniMrpProduct = addProductToProcess(mProductID, rs, miniMrpProducts, productIds);
if (miniMrpProduct.isBOM() && miniMrpProduct.isVerified()) {
processBOMLines(miniMrpProducts, productIds, mProductID);
explodeRequiredMaterials(miniMrpProduct, parentProduct, qtyBom);
}
}
}
}
} catch (Exception e) {
log.log(Level.SEVERE, SQL_GET_BOMLINE_FOR_PROCESS, e);
getProcessInfo().setError(true);
getProcessInfo().addLog(new ProcessInfoLog(getProcessInfo().getAD_Process_ID(), new Timestamp(System.currentTimeMillis()), null, "Failed to process BOMLine : >> " + e.getMessage()));
throw new AdempiereException(e);
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
}
Aggregations