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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        }//_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()
예제 #4
0
        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);
        }