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);
        }
        private CswEnumNbtContainerDispenseType _getDispenseTypeFromAction(string DispenseTypeDescription)
        {
            CswEnumNbtContainerDispenseType DispenseType = DispenseTypeDescription;

            if (DispenseTypeDescription.Contains(CswEnumNbtContainerDispenseType.Add.ToString()))
            {
                DispenseType = CswEnumNbtContainerDispenseType.Add;
            }
            else if (DispenseTypeDescription.Contains(CswEnumNbtContainerDispenseType.Waste.ToString()))
            {
                DispenseType = CswEnumNbtContainerDispenseType.Waste;
            }
            else if (DispenseTypeDescription.Contains(CswEnumNbtContainerDispenseType.Dispense.ToString()))
            {
                DispenseType = CswEnumNbtContainerDispenseType.Dispense;
            }
            return(DispenseType);
        }
        /// <summary>
        /// Record a container dispense transaction
        /// </summary>
        /// <param name="DispenseType"></param>
        /// <param name="Quantity">Quantity adjustment (negative for dispenses, disposes, and wastes, positive for receiving and add)</param>
        /// <param name="UnitId"></param>
        /// <param name="RequestItemId"></param>
        /// <param name="SourceContainer"></param>
        /// <param name="DestinationContainer"></param>
        public void create(CswEnumNbtContainerDispenseType DispenseType, double Amount, CswPrimaryKey UnitId, CswPrimaryKey RequestItemId = null,
                           CswNbtObjClassContainer SrcContainer = null, CswNbtObjClassContainer DestinationContainer = null, bool IsImport = false)
        {
            CswNbtMetaDataObjectClass ContDispTransOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerDispenseTransactionClass);
            CswNbtMetaDataNodeType    ContDispTransNT = ContDispTransOC.FirstNodeType;

            if (ContDispTransNT != null)
            {
                _CswNbtResources.Nodes.makeNodeFromNodeTypeId(ContDispTransNT.NodeTypeId, delegate(CswNbtNode NewNode)
                {
                    if (null != _TempDispenseTransaction)
                    {
                        NewNode.copyPropertyValues(_TempDispenseTransaction.Node);
                    }
                    CswNbtObjClassContainerDispenseTransaction ContDispTransNode = NewNode;
                    if (SrcContainer != null)
                    {
                        ContDispTransNode.SourceContainer.RelatedNodeId             = SrcContainer.NodeId;
                        ContDispTransNode.RemainingSourceContainerQuantity.Quantity = SrcContainer.Quantity.Quantity;
                        if (DispenseType == CswEnumNbtContainerDispenseType.Dispose)
                        {
                            ContDispTransNode.RemainingSourceContainerQuantity.Quantity = 0;
                        }
                        ContDispTransNode.RemainingSourceContainerQuantity.UnitId = SrcContainer.Quantity.UnitId;
                    }
                    if (DestinationContainer != null)
                    {
                        ContDispTransNode.DestinationContainer.RelatedNodeId = DestinationContainer.NodeId;
                    }
                    ContDispTransNode.Dispenser.RelatedNodeId    = _CswNbtResources.CurrentNbtUser.UserId;
                    ContDispTransNode.QuantityDispensed.Quantity = Amount;
                    ContDispTransNode.QuantityDispensed.UnitId   = UnitId;
                    ContDispTransNode.Type.Value = DispenseType.ToString();
                    ContDispTransNode.DispensedDate.DateTimeValue = DateTime.Now;
                    if (null != RequestItemId && Int32.MinValue != RequestItemId.PrimaryKey)
                    {
                        ContDispTransNode.RequestItem.RelatedNodeId = RequestItemId;
                    }
                }, OverrideUniqueValidation: IsImport, OverrideMailReportEvents: IsImport);
            } // if( ContDispTransNT != null )
        }
示例#4
0
        } // DispenseOut()

        /// <summary>
        /// Dispense into this container.
        /// </summary>
        /// <param name="DispenseType"></param>
        /// <param name="QuantityToAdd">Positive quantity to add</param>
        /// <param name="UnitId"></param>
        /// <param name="RequestItemId"></param>
        /// <param name="SourceContainer"></param>
        public void DispenseIn(CswEnumNbtContainerDispenseType DispenseType, double QuantityToAdd, CswPrimaryKey UnitId,
                               CswPrimaryKey RequestItemId = null, CswNbtObjClassContainer SourceContainer = null, bool RecordTransaction = true)
        {
            double RealQuantityToAdd = _getDispenseAmountInProperUnits(QuantityToAdd, UnitId, _Container.Quantity.UnitId);
            double CurrentQuantity   = 0;

            if (CswTools.IsDouble(_Container.Quantity.Quantity))
            {
                CurrentQuantity = _Container.Quantity.Quantity;
            }
            _Container.Quantity.Quantity = CurrentQuantity + RealQuantityToAdd;
            if (RecordTransaction)
            {
                _ContainerDispenseTransactionBuilder.create(DispenseType, RealQuantityToAdd, _Container.Quantity.UnitId, RequestItemId, SourceContainer, _Container, IsImport: _IsImport);
            }
            CswEnumNbtContainerLocationTypeOptions ContainerLocationType =
                SourceContainer == null ? CswEnumNbtContainerLocationTypeOptions.Receipt
                                        : CswEnumNbtContainerLocationTypeOptions.Dispense;

            _Container.CreateContainerLocationNode(ContainerLocationType);
        } // DispenseIn()
示例#5
0
        /// <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()