// Added by Bharat to get Attribute Set from Product on 28 Feb 2018 public JsonResult GetAttributeSet(string fields) { ProductManagementModel model = new ProductManagementModel(); int M_Product_ID = Util.GetValueOfInt(fields); MProduct prd = new MProduct(Session["ctx"] as Ctx, M_Product_ID, null); return(Json(JsonConvert.SerializeObject(prd.GetM_AttributeSet_ID()), JsonRequestBehavior.AllowGet)); }
/// <summary> /// Create Line /// </summary> /// <param name="order">order</param> /// <param name="orderLine">line</param> /// <param name="qty">Quantity</param> /// <param name="storages">storage info</param> /// <param name="force">force delivery</param> private void CreateLine(MOrder order, MOrderLine orderLine, Decimal qty, MStorage[] storages, bool force) { // Complete last Shipment - can have multiple shipments if (_lastC_BPartner_Location_ID != orderLine.GetC_BPartner_Location_ID()) { CompleteShipment(); } _lastC_BPartner_Location_ID = orderLine.GetC_BPartner_Location_ID(); // Create New Shipment if (_shipment == null) { _shipment = new MInOut(order, 0, _movementDate); _shipment.SetM_Warehouse_ID(orderLine.GetM_Warehouse_ID()); // sets Org too if (order.GetC_BPartner_ID() != orderLine.GetC_BPartner_ID()) { _shipment.SetC_BPartner_ID(orderLine.GetC_BPartner_ID()); } if (order.GetC_BPartner_Location_ID() != orderLine.GetC_BPartner_Location_ID()) { _shipment.SetC_BPartner_Location_ID(orderLine.GetC_BPartner_Location_ID()); } if (!_shipment.Save()) { throw new Exception("Could not create Shipment"); } } // Non Inventory Lines if (storages == null) { MInOutLine line = new MInOutLine(_shipment); line.SetOrderLine(orderLine, 0, Env.ZERO); line.SetQty(qty); // Correct UOM if (orderLine.GetQtyEntered().CompareTo(orderLine.GetQtyOrdered()) != 0) { line.SetQtyEntered(Decimal.Round(Decimal.Divide(Decimal.Multiply(qty, orderLine.GetQtyEntered()), orderLine.GetQtyOrdered()), 12, MidpointRounding.AwayFromZero)); } line.SetLine(_line + orderLine.GetLine()); //Amit 27-jan-2014 if (Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='DTD001_'")) > 0) { line.SetDTD001_IsAttributeNo(true); } if (!line.Save()) { throw new Exception("Could not create Shipment Line"); } log.Fine(line.ToString()); return; } // Product MProduct product = orderLine.GetProduct(); bool linePerASI = false; if (product.GetM_AttributeSet_ID() != 0) { MAttributeSet mas = MAttributeSet.Get(GetCtx(), product.GetM_AttributeSet_ID()); linePerASI = mas.IsInstanceAttribute(); } // Inventory Lines List <MInOutLine> list = new List <MInOutLine>(); Decimal toDeliver = qty; for (int i = 0; i < storages.Length; i++) { MStorage storage = storages[i]; Decimal deliver = toDeliver; // Not enough On Hand if (deliver.CompareTo(storage.GetQtyOnHand()) > 0 && Env.Signum(storage.GetQtyOnHand()) >= 0) // positive storage { if (!force || // Adjust to OnHand Qty (i + 1 != storages.Length)) // if force don't adjust last location { deliver = storage.GetQtyOnHand(); } } if (Env.Signum(deliver) == 0) // zero deliver { continue; } int M_Locator_ID = storage.GetM_Locator_ID(); // MInOutLine line = null; if (!linePerASI) // find line with Locator { for (int n = 0; n < list.Count; n++) { MInOutLine test = (MInOutLine)list[n]; if (test.GetM_Locator_ID() == M_Locator_ID) { line = test; break; } } } if (line == null) // new line { line = new MInOutLine(_shipment); line.SetOrderLine(orderLine, M_Locator_ID, order.IsSOTrx() ? deliver : Env.ZERO); line.SetQty(deliver); list.Add(line); } else { // existing line line.SetQty(Decimal.Add(line.GetMovementQty(), deliver)); } if (orderLine.GetQtyEntered().CompareTo(orderLine.GetQtyOrdered()) != 0) { line.SetQtyEntered(Decimal.Round(Decimal.Divide(Decimal.Multiply(line.GetMovementQty(), orderLine.GetQtyEntered()), orderLine.GetQtyOrdered()), 12, MidpointRounding.AwayFromZero)); } line.SetLine(_line + orderLine.GetLine()); if (linePerASI) { line.SetM_AttributeSetInstance_ID(storage.GetM_AttributeSetInstance_ID()); } //Amit 27-jan-2014 if (Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='DTD001_'")) > 0) { line.SetDTD001_IsAttributeNo(true); } if (!line.Save()) { throw new Exception("Could not create Shipment Line"); } log.Fine("ToDeliver=" + qty + "/" + deliver + " - " + line); toDeliver = Decimal.Subtract(toDeliver, deliver); // Temp adjustment storage.SetQtyOnHand(Decimal.Subtract(storage.GetQtyOnHand(), deliver)); // if (Env.Signum(toDeliver) == 0) { break; } } if (Env.Signum(toDeliver) != 0) { throw new Exception("Not All Delivered - Remainder=" + toDeliver); } }
/// <summary> /// Generate Shipments /// </summary> /// <param name="idr">Order Query</param> /// <returns>info</returns> private String Generate(IDataReader idr) { DataTable dt = new DataTable(); MClient client = MClient.Get(GetCtx()); try { dt.Load(idr); idr.Close(); //ResultSet dr = pstmt.executeQuery(); foreach (DataRow dr in dt.Rows)// while (dr.next ()) // Order { MOrder order = new MOrder(GetCtx(), dr, Get_TrxName()); // New Header different Shipper, Shipment Location if (!_consolidateDocument || (_shipment != null && (_shipment.GetC_BPartner_Location_ID() != order.GetC_BPartner_Location_ID() || _shipment.GetM_Shipper_ID() != order.GetM_Shipper_ID()))) { CompleteShipment(); } log.Fine("check: " + order + " - DeliveryRule=" + order.GetDeliveryRule()); // DateTime?minGuaranteeDate = _movementDate; bool completeOrder = MOrder.DELIVERYRULE_CompleteOrder.Equals(order.GetDeliveryRule()); // OrderLine WHERE String where = " AND M_Warehouse_ID=" + _M_Warehouse_ID; if (_datePromised != null) { where += " AND (TRUNC(DatePromised,'DD')<=" + DB.TO_DATE((DateTime?)_datePromised, true) + " OR DatePromised IS NULL)"; //where += " AND (TRUNC(DatePromised,'DD')<='" + String.Format("{0:dd-MMM-yy}", _datePromised) // + "' OR DatePromised IS NULL)"; } // Exclude Auto Delivery if not Force if (!MOrder.DELIVERYRULE_Force.Equals(order.GetDeliveryRule())) { where += " AND (C_OrderLine.M_Product_ID IS NULL" + " OR EXISTS (SELECT * FROM M_Product p " + "WHERE C_OrderLine.M_Product_ID=p.M_Product_ID" + " AND IsExcludeAutoDelivery='N'))"; } // Exclude Unconfirmed if (!_isUnconfirmedInOut) { where += " AND NOT EXISTS (SELECT * FROM M_InOutLine iol" + " INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID) " + "WHERE iol.C_OrderLine_ID=C_OrderLine.C_OrderLine_ID AND io.DocStatus IN ('IP','WC'))"; } // Deadlock Prevention - Order by M_Product_ID MOrderLine[] lines = order.GetLines(where, "ORDER BY C_BPartner_Location_ID, M_Product_ID"); for (int i = 0; i < lines.Length; i++) { MOrderLine line = lines[i]; if (line.GetM_Warehouse_ID() != _M_Warehouse_ID) { continue; } log.Fine("check: " + line); Decimal onHand = Env.ZERO; Decimal toDeliver = Decimal.Subtract(line.GetQtyOrdered(), line.GetQtyDelivered()); MProduct product = line.GetProduct(); // Nothing to Deliver if (product != null && Env.Signum(toDeliver) == 0) { continue; } // Check / adjust for confirmations Decimal unconfirmedShippedQty = Env.ZERO; if (_isUnconfirmedInOut && product != null && Env.Signum(toDeliver) != 0) { String where2 = "EXISTS (SELECT * FROM M_InOut io WHERE io.M_InOut_ID=M_InOutLine.M_InOut_ID AND io.DocStatus IN ('IP','WC'))"; MInOutLine[] iols = MInOutLine.GetOfOrderLine(GetCtx(), line.GetC_OrderLine_ID(), where2, null); for (int j = 0; j < iols.Length; j++) { unconfirmedShippedQty = Decimal.Add(unconfirmedShippedQty, iols[j].GetMovementQty()); } String logInfo = "Unconfirmed Qty=" + unconfirmedShippedQty + " - ToDeliver=" + toDeliver + "->"; toDeliver = Decimal.Subtract(toDeliver, unconfirmedShippedQty); logInfo += toDeliver; if (Env.Signum(toDeliver) < 0) { toDeliver = Env.ZERO; logInfo += " (set to 0)"; } // Adjust On Hand onHand = Decimal.Subtract(onHand, unconfirmedShippedQty); log.Fine(logInfo); } // Comments & lines w/o product & services if ((product == null || !product.IsStocked()) && (Env.Signum(line.GetQtyOrdered()) == 0 || // comments Env.Signum(toDeliver) != 0)) // lines w/o product { if (!MOrder.DELIVERYRULE_CompleteOrder.Equals(order.GetDeliveryRule())) // printed later { CreateLine(order, line, toDeliver, null, false); } continue; } // Stored Product MProductCategory pc = MProductCategory.Get(order.GetCtx(), product.GetM_Product_Category_ID()); String MMPolicy = pc.GetMMPolicy(); if (MMPolicy == null || MMPolicy.Length == 0) { MMPolicy = client.GetMMPolicy(); } // MStorage[] storages = GetStorages(line.GetM_Warehouse_ID(), line.GetM_Product_ID(), line.GetM_AttributeSetInstance_ID(), product.GetM_AttributeSet_ID(), line.GetM_AttributeSetInstance_ID() == 0, (DateTime?)minGuaranteeDate, MClient.MMPOLICY_FiFo.Equals(MMPolicy)); for (int j = 0; j < storages.Length; j++) { MStorage storage = storages[j]; onHand = Decimal.Add(onHand, storage.GetQtyOnHand()); } bool fullLine = onHand.CompareTo(toDeliver) >= 0 || Env.Signum(toDeliver) < 0; // Complete Order if (completeOrder && !fullLine) { log.Fine("Failed CompleteOrder - OnHand=" + onHand + " (Unconfirmed=" + unconfirmedShippedQty + "), ToDeliver=" + toDeliver + " - " + line); completeOrder = false; break; } // Complete Line else if (fullLine && MOrder.DELIVERYRULE_CompleteLine.Equals(order.GetDeliveryRule())) { log.Fine("CompleteLine - OnHand=" + onHand + " (Unconfirmed=" + unconfirmedShippedQty + ", ToDeliver=" + toDeliver + " - " + line); // CreateLine(order, line, toDeliver, storages, false); } // Availability else if (MOrder.DELIVERYRULE_Availability.Equals(order.GetDeliveryRule()) && (Env.Signum(onHand) > 0 || Env.Signum(toDeliver) < 0)) { Decimal deliver = toDeliver; if (deliver.CompareTo(onHand) > 0) { deliver = onHand; } log.Fine("Available - OnHand=" + onHand + " (Unconfirmed=" + unconfirmedShippedQty + "), ToDeliver=" + toDeliver + ", Delivering=" + deliver + " - " + line); // CreateLine(order, line, deliver, storages, false); } // Force else if (MOrder.DELIVERYRULE_Force.Equals(order.GetDeliveryRule())) { Decimal deliver = toDeliver; log.Fine("Force - OnHand=" + onHand + " (Unconfirmed=" + unconfirmedShippedQty + "), ToDeliver=" + toDeliver + ", Delivering=" + deliver + " - " + line); // CreateLine(order, line, deliver, storages, true); } // Manual else if (MOrder.DELIVERYRULE_Manual.Equals(order.GetDeliveryRule())) { log.Fine("Manual - OnHand=" + onHand + " (Unconfirmed=" + unconfirmedShippedQty + ") - " + line); } else { log.Fine("Failed: " + order.GetDeliveryRule() + " - OnHand=" + onHand + " (Unconfirmed=" + unconfirmedShippedQty + "), ToDeliver=" + toDeliver + " - " + line); } } // for all order lines // Complete Order successful if (completeOrder && MOrder.DELIVERYRULE_CompleteOrder.Equals(order.GetDeliveryRule())) { for (int i = 0; i < lines.Length; i++) { MOrderLine line = lines[i]; if (line.GetM_Warehouse_ID() != _M_Warehouse_ID) { continue; } MProduct product = line.GetProduct(); Decimal toDeliver = Decimal.Subtract(line.GetQtyOrdered(), line.GetQtyDelivered()); // MStorage[] storages = null; if (product != null && product.IsStocked()) { MProductCategory pc = MProductCategory.Get(order.GetCtx(), product.GetM_Product_Category_ID()); String MMPolicy = pc.GetMMPolicy(); if (MMPolicy == null || MMPolicy.Length == 0) { MMPolicy = client.GetMMPolicy(); } // storages = GetStorages(line.GetM_Warehouse_ID(), line.GetM_Product_ID(), line.GetM_AttributeSetInstance_ID(), product.GetM_AttributeSet_ID(), line.GetM_AttributeSetInstance_ID() == 0, (DateTime?)minGuaranteeDate, MClient.MMPOLICY_FiFo.Equals(MMPolicy)); } // CreateLine(order, line, toDeliver, storages, false); } } _line += 1000; } // while order } catch (Exception e) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, _sql, e); } finally { if (idr != null) { idr.Close(); } dt = null; } CompleteShipment(); return("@Created@ = " + _created); }