/// <summary> /// Eliminate Reserved/Ordered /// </summary> /// <param name="target">target Storage</param> private void EliminateReservation(MStorage target) { // Negative Ordered / Reserved Qty if (Env.Signum(target.GetQtyReserved()) != 0 || Env.Signum(target.GetQtyOrdered()) != 0) { int M_Locator_ID = target.GetM_Locator_ID(); MStorage storage0 = MStorage.Get(GetCtx(), M_Locator_ID, target.GetM_Product_ID(), 0, Get_Trx()); if (storage0 == null) { MLocator defaultLoc = MLocator.GetDefault(GetCtx(), M_Locator_ID); if (M_Locator_ID != defaultLoc.GetM_Locator_ID()) { M_Locator_ID = defaultLoc.GetM_Locator_ID(); storage0 = MStorage.Get(GetCtx(), M_Locator_ID, target.GetM_Product_ID(), 0, Get_Trx()); } } if (storage0 != null) { Decimal reserved = Env.ZERO; Decimal ordered = Env.ZERO; if (Env.Signum(Decimal.Add(target.GetQtyReserved(), storage0.GetQtyReserved())) >= 0) { reserved = target.GetQtyReserved(); // negative } if (Env.Signum(Decimal.Add(target.GetQtyOrdered(), storage0.GetQtyOrdered())) >= 0) { ordered = target.GetQtyOrdered(); // negative } // Eliminate Reservation if (Env.Signum(reserved) != 0 || Env.Signum(ordered) != 0) { if (MStorage.Add(GetCtx(), target.GetM_Warehouse_ID(), target.GetM_Locator_ID(), target.GetM_Product_ID(), target.GetM_AttributeSetInstance_ID(), target.GetM_AttributeSetInstance_ID(), Env.ZERO, Decimal.Negate(reserved), Decimal.Negate(ordered), Get_Trx())) { if (MStorage.Add(GetCtx(), storage0.GetM_Warehouse_ID(), storage0.GetM_Locator_ID(), storage0.GetM_Product_ID(), storage0.GetM_AttributeSetInstance_ID(), storage0.GetM_AttributeSetInstance_ID(), Env.ZERO, reserved, ordered, Get_Trx())) { log.Info("Reserved=" + reserved + ",Ordered=" + ordered); } else { log.Warning("Failed Storage0 Update"); } } else { log.Warning("Failed Target Update"); } } } } }
/** * Creates a Work Order Transaction header for a given Work Order assumes locator is same locator as on Work Order * @param ctx * @param VAMFG_M_WorkOrder_ID Work Order * @param TxnType valid values are CI (Component Issue), CR (Component Return), RU (Resource Usage) * @param trx * @return MVAMFGMWrkOdrTransaction on success, null otherwise */ public ViennaAdvantage.Model.MVAMFGMWrkOdrTransaction CreateWOTxn(Ctx ctx, int VAMFG_M_WorkOrder_ID, String TxnType, Trx trx) { ViennaAdvantage.Model.MVAMFGMWorkOrder wo = new ViennaAdvantage.Model.MVAMFGMWorkOrder(ctx, VAMFG_M_WorkOrder_ID, trx); if (wo == null || !wo.GetDocStatus().Equals(ViennaAdvantage.Model.MVAMFGMWorkOrder.DOCSTATUS_InProgress)) { log.Severe("Work Order number not valid for transactions."); return(null); } log.Info("Getting Default Locator of Work Order Warehouse."); MLocator loc = MWarehouse.Get(ctx, wo.GetM_Warehouse_ID()).GetDefaultLocator(); return(createWOTxn(ctx, VAMFG_M_WorkOrder_ID, TxnType, 0, loc.GetM_Locator_ID(), Decimal.Zero, trx)); }