public JObject dispenseSourceContainer(string DispenseType, string Quantity, string UnitId, string RequestItemId) { JObject ret = new JObject(); if (null != _SourceContainer) { CswEnumNbtContainerDispenseType DispenseTypeEnum = _getDispenseTypeFromAction(DispenseType); CswPrimaryKey UnitOfMeasurePk = new CswPrimaryKey(); UnitOfMeasurePk.FromString(UnitId); CswPrimaryKey RequestItemPk = new CswPrimaryKey(); RequestItemPk.FromString(RequestItemId); Double RealQuantity = CswConvert.ToDouble(Quantity); if (DispenseTypeEnum == CswEnumNbtContainerDispenseType.Add) { RealQuantity = -RealQuantity; // deducting negative quantity is adding quantity } _SourceContainer.DispenseOut(DispenseTypeEnum, RealQuantity, UnitOfMeasurePk, RequestItemPk); _SourceContainer.postChanges(false); string ViewId = _getViewForAllDispenseContainers(); ret["viewId"] = ViewId; } return(ret); }
public override void CommitOperation(ref OperationData OpData) { CswNbtObjClassContainer containerToDispense = _CswNbtResources.Nodes[OpData.Field1.NodeId]; if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, containerToDispense.NodeType) && _CswNbtResources.Permit.can(CswEnumNbtActionName.DispenseContainer)) { double quantityToDispense = CswConvert.ToDouble(OpData.Field2.Value); if (quantityToDispense > containerToDispense.Quantity.Quantity) { OpData.Field2.StatusMsg = "Cannot dispense " + quantityToDispense + containerToDispense.Quantity.CachedUnitName + " when containter only has " + containerToDispense.Quantity.Gestalt; OpData.Log.Add(DateTime.Now + " - ERROR: Attempted to dispense " + quantityToDispense + containerToDispense.Quantity.CachedUnitName + " when containter only has " + containerToDispense.Quantity.Gestalt); OpData.Field2.ServerValidated = false; } else { containerToDispense.DispenseOut(CswEnumNbtContainerDispenseType.Dispense, quantityToDispense, containerToDispense.Quantity.UnitId); containerToDispense.postChanges(false); OpData.Field1.SecondValue = " (current quantity: " + containerToDispense.Quantity.Quantity + containerToDispense.Quantity.CachedUnitName + ")"; OpData.Log.Add(DateTime.Now + " - Dispensed " + OpData.Field2.Value + " " + containerToDispense.Quantity.CachedUnitName + " out of container " + containerToDispense.Barcode.Barcode + ". " + containerToDispense.Quantity.Gestalt + " left in container"); base.CommitOperation(ref OpData); } } else { string statusMsg = "You do not have permission to dispense Container (" + OpData.Field2.Value + ")"; OpData.Field2.StatusMsg = statusMsg; OpData.Field2.ServerValidated = false; OpData.Log.Add(DateTime.Now + " - ERROR: " + statusMsg); } }
}//_transfer() private void _dispense(string operation, string barcode, JObject update, CswNbtObjClassBatchOp BatchNode) { try { string uom = update["uom"].ToString().ToLower(); CswPrimaryKey uomId = null; CswNbtMetaDataObjectClass UnitOfMeasureOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.UnitOfMeasureClass); foreach (CswNbtObjClassUnitOfMeasure currentUnitOfMeasureNode in UnitOfMeasureOC.getNodes(false, false, false, true)) { string unitName = currentUnitOfMeasureNode.NodeName.ToLower(); if (unitName == uom) { uomId = currentUnitOfMeasureNode.NodeId; } } if (null != uomId) { CswNbtObjClassContainer containerNode = _getNodeFromBarcode(barcode, CswEnumNbtObjectClass.ContainerClass, CswNbtObjClassContainer.PropertyName.Barcode); if (null != containerNode) { containerNode.DispenseOut(CswEnumNbtContainerDispenseType.Dispense, CswConvert.ToDouble(update["qty"]), uomId); containerNode.postChanges(false); } else { string msg = _generateErrorMessage(operation, barcode, new Dictionary <string, string> { { "Dispense Data", update.ToString() } }, "A container with barcode " + barcode + " does not exist."); _storeError(BatchNode, msg); } } else { string msg = _generateErrorMessage(operation, barcode, new Dictionary <string, string> { { "Dispense Data", update.ToString() } }, "The UOM of " + uom + " that was provided does not exist."); _storeError(BatchNode, msg); } } catch (Exception e) { string msg = "The dispense operation failed for the container barcode " + barcode + "with exception: " + e; _storeError(BatchNode, msg); } }//_dispense()
public void TierII_2Days_MaterialDispenseIntoChildContainer() { CswPrimaryKey LocationId = TestData.Nodes.createLocationNode().NodeId; CswNbtNode ChemicalNode = TestData.Nodes.createMaterialNode(State: "Solid"); CswNbtNode PoundsUnit = TestData.Nodes.createUnitOfMeasureNode("Weight", "lb", 4.53592, -1, CswEnumTristate.True); CswNbtObjClassContainer SourceContainer = TestData.Nodes.createContainerWithRecords("Container", 1, PoundsUnit, ChemicalNode, LocationId, DateTime.Today.AddDays(-1), CswEnumNbtContainerUseTypes.Closed); CswNbtNode ChildContainer = TestData.Nodes.createContainerNode("Container", 0, PoundsUnit, ChemicalNode, LocationId); SourceContainer.DispenseOut(CswEnumNbtContainerDispenseType.Dispense, 0.5, PoundsUnit.NodeId, DestinationContainer: ChildContainer); ChildContainer.postChanges(false); TierIIData.TierIIDataRequest Request = new TierIIData.TierIIDataRequest { LocationId = LocationId.ToString(), StartDate = DateTime.Today.AddDays(-1).ToString(), EndDate = DateTime.Today.ToString() }; TierIIData Data = TierIIAction.getTierIIData(Request); Assert.AreEqual(1, Data.Materials.Count); Assert.AreEqual(1, Data.Materials[0].MaxQty); Assert.AreEqual(1, Data.Materials[0].AverageQty); }