/// <summary> /// Create Material Allocations for new Instances /// </summary> /// <param name="updateQtyBooked"></param> public void CreateMA(bool updateQtyBooked) { VAdvantage.Model.MInventoryLine INVLine = new VAdvantage.Model.MInventoryLine(GetCtx(), GetM_InventoryLine_ID(), Get_TrxName()); int delMA = MInventoryLineMA.DeleteInventoryLineMA(GetM_InventoryLine_ID(), Get_TrxName()); log.Info("DeletedMA=" + delMA); MStorage[] storages = MStorage.GetAll(GetCtx(), GetM_Product_ID(), GetM_Locator_ID(), Get_TrxName()); bool allZeroASI = true; for (int i = 0; i < storages.Length; i++) { if (storages[i].GetM_AttributeSetInstance_ID() != 0) { allZeroASI = false; break; } } if (allZeroASI) { return; } MInventoryLineMA ma = null; Decimal sum = Env.ZERO; for (int i = 0; i < storages.Length; i++) { MStorage storage = storages[i]; // nnayak - ignore negative layers if (Env.Signum(storage.GetQtyOnHand()) <= 0) { continue; } if (ma != null && ma.GetM_AttributeSetInstance_ID() == storage.GetM_AttributeSetInstance_ID()) { ma.SetMovementQty(Decimal.Add(ma.GetMovementQty(), storage.GetQtyOnHand())); } else { ma = new MInventoryLineMA(INVLine, storage.GetM_AttributeSetInstance_ID(), storage.GetQtyOnHand()); } if (!ma.Save()) { ; } sum = Decimal.Add(sum, storage.GetQtyOnHand()); } if (updateQtyBooked && sum.CompareTo(GetQtyBook()) != 0) { log.Warning("QtyBook=" + GetQtyBook() + " corrected to Sum of MA=" + sum); SetQtyBook(sum); } }