/// <summary> /// Dispense out of this container. /// </summary> /// <param name="DispenseType"></param> /// <param name="QuantityToDeduct">Positive quantity to subtract</param> /// <param name="UnitId"></param> /// <param name="RequestItemId"></param> /// <param name="DestinationContainer"></param> public void DispenseOut(CswEnumNbtContainerDispenseType DispenseType, double QuantityToDeduct, CswPrimaryKey UnitId, CswPrimaryKey RequestItemId = null, CswNbtObjClassContainer DestinationContainer = null, bool RecordTransaction = true) { double RealQuantityToDeduct = _getDispenseAmountInProperUnits(QuantityToDeduct, UnitId, _Container.Quantity.UnitId); double CurrentQuantity = 0; if (CswTools.IsDouble(_Container.Quantity.Quantity)) { CurrentQuantity = _Container.Quantity.Quantity; } _Container.Quantity.Quantity = CurrentQuantity - RealQuantityToDeduct; if (DestinationContainer != null) { DestinationContainer.DispenseIn(DispenseType, QuantityToDeduct, UnitId, RequestItemId, _Container, false); // false, because we do not want another duplicate transaction record } if (RecordTransaction) { _ContainerDispenseTransactionBuilder.create(DispenseType, -RealQuantityToDeduct, _Container.Quantity.UnitId, RequestItemId, _Container, DestinationContainer); } _Container.CreateContainerLocationNode(CswEnumNbtContainerLocationTypeOptions.Dispense); } // DispenseOut()
public CswNbtReceivingDefinition receiveContainers(CswNbtReceivingDefinition ReceiptDef, ref int NodesProcessed, int MaxProcessed) { CswNbtMetaDataNodeType ContainerNt = _CswNbtResources.MetaData.getNodeType(ReceiptDef.ContainerNodeTypeId); foreach (CswNbtAmountsGridQuantity QuantityDef in ReceiptDef.Quantities) { CswNbtObjClassSize AsSize = _CswNbtResources.Nodes.GetNode(QuantityDef.SizeNodeId); string Barcode = string.Empty; Action <CswNbtNode> After = delegate(CswNbtNode NewNode) { CswNbtObjClassContainer thisContainer = NewNode; if (QuantityDef.getNumBarcodes() <= QuantityDef.NumContainers && false == string.IsNullOrEmpty(Barcode)) { thisContainer.Barcode.setBarcodeValueOverride(Barcode, false); } thisContainer.Size.RelatedNodeId = QuantityDef.SizeNodeId; thisContainer.Material.RelatedNodeId = ReceiptDef.MaterialNodeId; if (AsSize.QuantityEditable.Checked != CswEnumTristate.True) { QuantityDef.Quantity = AsSize.InitialQuantity.Quantity; QuantityDef.UnitNodeId = AsSize.InitialQuantity.UnitId; } if (null == thisContainer.Quantity.UnitId || Int32.MinValue == thisContainer.Quantity.UnitId.PrimaryKey) { thisContainer.Quantity.UnitId = QuantityDef.UnitNodeId; } thisContainer.DispenseIn(CswEnumNbtContainerDispenseType.Receive, QuantityDef.Quantity, QuantityDef.UnitNodeId, ReceiptDef.RequestItemtNodeId); thisContainer.Disposed.Checked = CswEnumTristate.False; thisContainer.ReceiptLot.RelatedNodeId = ReceiptDef.ReceiptLotNodeId; }; for (Int32 C = 0; C < QuantityDef.NumContainers; C += 1) { if (NodesProcessed < MaxProcessed) { //we promote the first container before the batch op starts, so there should always be at least one container id in the first set of quantities CswPrimaryKey ContainerId = null; if (C < QuantityDef.ContainerIds.Count) { ContainerId = CswConvert.ToPrimaryKey(QuantityDef.ContainerIds[C]); } CswCommaDelimitedString Barcodes = QuantityDef.getBarcodes(); Barcode = (QuantityDef.getNumBarcodes() > C ? Barcodes[C] : string.Empty); if (null == ContainerId) //only create a container if we haven't already { CswNbtNodeKey ContainerNodeKey; CswNbtObjClassContainer Container = _CswNbtSdTabsAndProps.addNode(ContainerNt, ReceiptDef.ContainerProps, out ContainerNodeKey, After); QuantityDef.ContainerIds.Add(Container.NodeId.ToString()); NodesProcessed++; } else { CswNbtNode InitialContainerNode = _CswNbtResources.Nodes.GetNode(ContainerId); if (null != InitialContainerNode && InitialContainerNode.IsTemp) { _CswNbtSdTabsAndProps.saveNodeProps(InitialContainerNode, ReceiptDef.ContainerProps); After(InitialContainerNode); InitialContainerNode.PromoteTempToReal(); NodesProcessed++; } } } } //for( Int32 C = 0; C < NoContainers; C += 1 ) } return(ReceiptDef); }