public void TestContainerCreation() { CswNbtReceivingDefinition ReceiptDef = FinishWizard(); //This method is testing by the "TestInitialContainerCreate" test CswNbtBatchOpReceiving ReceivingBatchOp = new CswNbtBatchOpReceiving(TestData.CswNbtResources); ReceivingBatchOp.OverrideMaxProcessed(10); CswNbtObjClassBatchOp Op = ReceivingBatchOp.makeBatchOp(ReceiptDef); double PercentDone = 0; int NumInterations = 0; //Just in case while (PercentDone != 100.0) //there should never be more than 2 iteration if we're doing 10 containers at a time and we have 16 containers to do { ReceivingBatchOp.runBatchOp(Op); PercentDone = ReceivingBatchOp.getPercentDone(Op); NumInterations++; //If we get to three, we exit and report a failure if (3 == NumInterations) { break; //Prevent infinate loops } } ReceiptDef = ReceivingBatchOp.GetBatchData(Op); Assert.AreEqual(2, NumInterations, "runBatchOp() ran more than two times when it shouldn have only run twice"); int NumContainerIds = 0; foreach (CswNbtAmountsGridQuantity Quant in ReceiptDef.Quantities) { NumContainerIds += Quant.ContainerIds.Count; } int NumContainers = 0; foreach (CswNbtAmountsGridQuantity Quant in ReceiptDef.Quantities) { NumContainers += Quant.NumContainers; } Assert.AreEqual(NumContainers, NumContainerIds, "The batch op created " + NumContainerIds + " containers when it expected " + NumContainers); }
} // makeContainer() public JObject receiveMaterial(CswNbtReceivingDefinition ReceiptDefinition) { JObject Ret = new JObject(); CswNbtObjClassContainer InitialContainerNode = _CswNbtResources.Nodes[ReceiptDefinition.ContainerNodeId]; if (null != InitialContainerNode && ReceiptDefinition.Quantities.Count > 0) { //Generate the barcodes upfront and treat them as custom barcodes so all Containers in this Receipt Def have similar numbers CswNbtMetaDataNodeTypeProp BarcodeProp = (CswNbtMetaDataNodeTypeProp)InitialContainerNode.NodeType.getBarcodeProperty(); for (int i = 0; i < ReceiptDefinition.Quantities.Count; i++) { CswNbtAmountsGridQuantity quantity = ReceiptDefinition.Quantities[i]; while (quantity.getNumBarcodes() < quantity.NumContainers) { if (quantity.getNumBarcodes() == 0 && i == 0 && false == String.IsNullOrEmpty(InitialContainerNode.Barcode.Barcode)) //special case: the Initial Container node already has a barcode, so insert that one if a user didn't specify a custom barcode { quantity.AddBarcode(InitialContainerNode.Barcode.Barcode); } else { if (null != BarcodeProp.Sequence) { quantity.AddBarcode(BarcodeProp.Sequence.getNext()); } } } } CswNbtNode ReceiptLot = _makeReceiptLot(ReceiptDefinition.MaterialNodeId, ReceiptDefinition, InitialContainerNode.ExpirationDate.DateTimeValue); if (null == ReceiptDefinition.ReceiptLotNodeId) { ReceiptDefinition.ReceiptLotNodeId = ReceiptLot.NodeId; } ReceiptDefinition.Quantities[0].ContainerIds.Add(InitialContainerNode.NodeId.ToString()); int processed = 0; receiveContainers(ReceiptDefinition, ref processed, 1); //process only the first container (the initial one) commitSDSDocNode(ReceiptDefinition.MaterialNodeId, ReceiptDefinition.SDSNodeId, ReceiptDefinition.SDSProps); int TotalContainersToMake = ReceiptDefinition.CountNumberContainersToMake(); int Threshhold = CswConvert.ToInt32(_CswNbtResources.ConfigVbls.getConfigVariableValue("batchthreshold")); bool UseBatchOp = TotalContainersToMake >= Threshhold; Collection <CswPrimaryKey> ContainerIds = null; if (UseBatchOp) { //Containers will be created in a batch op CswNbtBatchOpReceiving ReceivingBatchOp = new CswNbtBatchOpReceiving(_CswNbtResources); ReceivingBatchOp.makeBatchOp(ReceiptDefinition); } else { //Create the containers now int nodesProcessed = 0; CswNbtReceivingDefinition ReceivedContainers = receiveContainers(ReceiptDefinition, ref nodesProcessed, TotalContainersToMake + 1); ContainerIds = new Collection <CswPrimaryKey>(); foreach (CswNbtAmountsGridQuantity Quantity in ReceivedContainers.Quantities) { foreach (string ContainerId in Quantity.ContainerIds) { ContainerIds.Add(CswConvert.ToPrimaryKey(ContainerId)); } } } CswNbtNode MaterialNode = _CswNbtResources.Nodes.GetNode(ReceiptDefinition.MaterialNodeId); Ret = getLandingPageData(_CswNbtResources, MaterialNode, UseBatchOp, ContainerIds); } return(Ret); }